import { useState } from 'react'; import { useUsers, useCreateUser, useUpdateAccess, useResetPassword } from '../../hooks/useAdmin'; import { SkeletonTable } from '../ui/Skeleton'; import { Dropdown } from '../ui/Dropdown'; import type { AdminUser } from '../../lib/types'; export function UserTable() { const { data: users, isLoading, isError, error } = useUsers(); const createUser = useCreateUser(); const updateAccess = useUpdateAccess(); const resetPassword = useResetPassword(); const [newUsername, setNewUsername] = useState(''); const [newPassword, setNewPassword] = useState(''); const [newRole, setNewRole] = useState('user'); const [newAccess, setNewAccess] = useState(true); const [resetTarget, setResetTarget] = useState(null); const [resetPw, setResetPw] = useState(''); function handleCreate(e: React.FormEvent) { e.preventDefault(); if (!newUsername.trim() || !newPassword.trim()) return; createUser.mutate( { username: newUsername.trim(), password: newPassword, role: newRole, has_access: newAccess }, { onSuccess: () => { setNewUsername(''); setNewPassword(''); setNewRole('user'); setNewAccess(true); } }, ); } function handleToggleAccess(user: AdminUser) { updateAccess.mutate({ userId: user.id, hasAccess: !user.has_access }); } function handleResetPassword(userId: number) { if (!resetPw.trim()) return; resetPassword.mutate( { userId, password: resetPw }, { onSuccess: () => { setResetTarget(null); setResetPw(''); } }, ); } return (
{/* Create user form */}
setNewUsername(e.target.value)} placeholder="username" className="input-glass px-3 py-2 text-sm" />
setNewPassword(e.target.value)} placeholder="password" className="input-glass px-3 py-2 text-sm" />
{isLoading && } {isError &&

{(error as Error)?.message || 'Failed to load users'}

} {users && users.length > 0 && (
{users.map((user) => ( ))}
Username Role Access Actions
{user.username} {user.role}
{resetTarget === user.id ? ( setResetPw(e.target.value)} placeholder="new password" className="w-32 input-glass px-2 py-1 text-xs" /> ) : ( )}
)} {users && users.length === 0 &&

No users found.

}
); }