'use client'; import { useCallback, useMemo, useState } from 'react'; import { Plus, Users } from 'lucide-react'; import { PageHeader } from '@/components/page-header'; import { Button } from '@/components/ui/button'; import { PERMISSIONS } from '@/constants/permissions'; import { PermissionGuard } from '@/guards'; import type { AdministrationUser } from '@/types'; import { useUserColumns } from './components/UserColumns'; import { UserFilters } from './components/UserFilters'; import { UserSheet } from './components/UserSheet'; import { UserStats } from './components/UserStats'; import { UserTable } from './components/UserTable'; import { useUserFilters } from './hooks/useUserFilters'; import { useUserForm } from './hooks/useUserForm'; import { useUserStatusMutation } from './hooks/useUserMutations'; import { useUsersQuery } from './hooks/useUserQueries'; export default function UsersPage() { const [isSheetOpen, setIsSheetOpen] = useState(false); const { skip, setSkip, limit, setLimit, sorting, setSorting, searchTerm, debouncedSearchTerm, setSearchTerm, statusFilter, setStatusFilter, } = useUserFilters(); const usersQuery = useUsersQuery({ skip, limit, searchTerm: debouncedSearchTerm, statusFilter, sorting, }); const userForm = useUserForm({ onSaved: () => setIsSheetOpen(false), }); const { openCreate: prepareCreateUser, openEdit: prepareEditUser, register, handleSubmit, userId, roleId, setRoleId, errors, isSubmitted, canSubmit, isSaving, } = userForm; const statusMutation = useUserStatusMutation(); const { mutate: updateUserStatus, pendingUserId } = statusMutation; const openCreate = useCallback(() => { prepareCreateUser(); setIsSheetOpen(true); }, [prepareCreateUser]); const openEdit = useCallback( (user: AdministrationUser) => { prepareEditUser(user); setIsSheetOpen(true); }, [prepareEditUser], ); const toggleStatus = useCallback( (user: AdministrationUser) => { updateUserStatus(user); }, [updateUserStatus], ); const columns = useUserColumns(); const total = usersQuery.data?.total ?? 0; const users = usersQuery.data?.items ?? []; const toolbar = useMemo( () => ( ), [searchTerm, setSearchTerm, setStatusFilter, statusFilter], ); return ( <>
} />
); }