import { useState } from 'react'; const EMPTY = { name: '', callsign: '', device_id: '', group_id: '' }; export default function MembersPanel({ members, groups, sosIds = new Set(), selected, onSelect, onSave, onDelete }) { const [editing, setEditing] = useState(null); // null | {} (new) | member const [form, setForm] = useState(EMPTY); const [error, setError] = useState(''); const start = (m) => { setEditing(m || {}); setForm({ name: m?.name || '', callsign: m?.callsign || '', device_id: m?.device_id || '', group_id: m?.group_id ?? '', }); }; const submit = async (e) => { e.preventDefault(); setError(''); try { await onSave(editing?.id ?? null, { ...form, group_id: form.group_id === '' ? null : Number(form.group_id), }); setEditing(null); setForm(EMPTY); } catch (err) { setError(err.message); } }; const remove = async (m) => { if (!confirm(`Remove ${m.name}?`)) return; setError(''); try { await onDelete(m.id); } catch (err) { setError(err.message); } }; return (

Members ({members.length})

{error &&

{error}

} {editing && (
setForm({ ...form, name: e.target.value })} />
setForm({ ...form, callsign: e.target.value })} /> setForm({ ...form, device_id: e.target.value })} disabled={!!editing.id} />
{editing.id && }
)} {members.map((m) => (
onSelect(m.id)}> {m.name} · {m.group_name || '—'}{m.callsign ? ` · ${m.callsign}` : ''} {m.battery != null ? `${m.battery}%` : ''}
))}
); }