import { useState } from 'react' import { useQuery, useQueryClient } from '@tanstack/react-query' import { useConfirm } from '../../components/shared/ConfirmDialog' import { useToast } from '../../components/shared/Toast/ToastProvider' import { usePermission } from '../../hooks/usePermission' import { fetchUsers, deleteUser } from './usersApi' import { useUsersRealtime } from './useUsersRealtime' import { UserFormModal } from './UserFormModal' import { AssignRoleModal } from './AssignRoleModal' import type { User } from '../../types/user' export function UsersListPageMobile() { const { can } = usePermission() const confirm = useConfirm() const toast = useToast() const queryClient = useQueryClient() useUsersRealtime() const [page, setPage] = useState(1) const [formUser, setFormUser] = useState(undefined) const [roleUser, setRoleUser] = useState(null) const { data, isLoading } = useQuery({ queryKey: ['users', { page, sort: 'created_at', direction: 'desc' as const }], queryFn: () => fetchUsers({ page, sort: 'created_at', direction: 'desc' }), }) async function handleDelete(user: User) { const ok = await confirm({ title: 'Delete user', message: `Delete ${user.name}? This cannot be undone.`, confirmLabel: 'Delete', danger: true, }) if (!ok) return await deleteUser(user.id) queryClient.invalidateQueries({ queryKey: ['users'] }) toast.success(`${user.name} was deleted.`) } return (

Users

{can('users.create') && ( )}
{isLoading ? (

Loading…

) : (
{(data?.data ?? []).map((u) => (

{u.name}

{u.email}

{u.roles.join(', ')}

{u.can_edit && ( )} {can('roles.assign') && ( )} {u.can_delete && ( )}
))}
)} {data && data.meta.last_page > 1 && (
Page {page} of {data.meta.last_page}
)} {formUser !== undefined && ( setFormUser(undefined)} user={formUser ?? undefined} /> )} {roleUser && setRoleUser(null)} user={roleUser} />}
) }