'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 (
<>
}
/>
>
);
}