import { A, useNavigate, useParams } from '@solidjs/router'; import { createMemo, createResource, createSignal, Show } from 'solid-js'; const API = '/api/gateway'; type Role = { id: string; name: string; }; type User = { id: string; name?: string; full_name?: string; email: string; roleId?: string; role_id?: string; role?: Role; status?: 'ACTIVE' | 'INACTIVE' | 'PENDING'; createdAt?: string; created_at?: string; }; async function fetchRoles(): Promise { try { const res = await fetch(`${API}/api/admin/roles?audience=INTERNAL`); if (!res.ok) return []; const data = await res.json(); const rows = Array.isArray(data) ? data : (data.roles || []); return rows.map((r: any) => ({ id: r.id, name: r.name })); } catch { return []; } } async function fetchUser(id: string): Promise { try { const adminRes = await fetch(`${API}/api/admin/users/${id}`); if (adminRes.ok) return adminRes.json(); const fallback = await fetch(`${API}/api/users/${id}`); if (!fallback.ok) return null; return fallback.json(); } catch { return null; } } export default function EditUserPage() { const navigate = useNavigate(); const params = useParams(); const [user] = createResource(() => params.id, fetchUser); const [roles] = createResource(fetchRoles); const [name, setName] = createSignal(''); const [email, setEmail] = createSignal(''); const [roleId, setRoleId] = createSignal(''); const [status, setStatus] = createSignal<'ACTIVE' | 'INACTIVE' | 'PENDING'>('ACTIVE'); const [submitting, setSubmitting] = createSignal(false); const [error, setError] = createSignal(''); createMemo(() => { const u = user(); if (!u) return null; setName(u.name || u.full_name || ''); setEmail(u.email || ''); setRoleId(u.roleId || u.role_id || u.role?.id || ''); setStatus((u.status || 'ACTIVE').toUpperCase() as 'ACTIVE' | 'INACTIVE' | 'PENDING'); return null; }); const save = async () => { if (!name().trim() || !email().trim() || !roleId()) { setError('Please fill in name, email, and role.'); return; } try { setSubmitting(true); setError(''); const body = { name: name().trim(), email: email().trim(), roleId: roleId(), status: status().toLowerCase(), }; let res = await fetch(`${API}/api/admin/users/${params.id}`, { method: 'PATCH', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(body), }); if (!res.ok) { res = await fetch(`${API}/api/users/${params.id}`, { method: 'PATCH', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(body), }); } if (!res.ok) { const payload = await res.json().catch(() => ({})); throw new Error(payload.message || 'Failed to update user'); } navigate('/admin/users'); } catch (err: any) { setError(err.message || 'Failed to update user'); } finally { setSubmitting(false); } }; return (

Edit User

Update user profile, role assignment, and account status.

{error()}

Loading user...

User not found.

setName(e.currentTarget.value)} />
setEmail(e.currentTarget.value)} />
); }