"use client"; import { useState } from "react"; import { Users, Building2 } from "lucide-react"; import { Button } from "@/components/ui/button"; import { Team } from "@/lib/types"; import { TreeViewPage } from "../management/tree-view-page"; import { useTreeView } from "@/hooks/use-tree-view"; import { useFormDialog } from "@/hooks/use-form-dialog"; import { useUsersManagement } from "@/hooks/use-users-management"; import { UserFormDialog } from "./user-form-dialog"; import { UsersList } from "./users-list"; interface UsersManagementPageProps { teams: Team[]; initialUsers: any[]; } export function UsersManagementPage({ teams, initialUsers, }: UsersManagementPageProps) { const [searchTerm, setSearchTerm] = useState(""); const { isCreateDialogOpen, openCreateDialog, closeCreateDialog } = useFormDialog(); const { users, isLoading, error, userFormData, isSubmitting, setUserFormData, resetForm, handleCreateUser, handleDeleteUser, } = useUsersManagement(teams, initialUsers); // Utilisation du hook factorisé pour la vue arborescente const { filteredDataByCategory: filteredUsersByTeam, expandedCategories: expandedTeams, toggleCategory: toggleTeam, expandAll, collapseAll, } = useTreeView({ data: users, searchFields: ["firstName", "lastName"], groupBy: (user) => user.teamName || "Sans équipe", searchTerm, onSearchChange: setSearchTerm, }); const handleCreateSubmit = async () => { const success = await handleCreateUser(); if (success) { closeCreateDialog(); } }; const handleOpenCreateDialog = () => { resetForm(); openCreateDialog(); }; const headerActions = ( ); const emptyState = (

{searchTerm ? "Aucun utilisateur trouvé" : "Aucun utilisateur"}

{searchTerm ? "Essayez de modifier vos critères de recherche" : "Commencez par créer votre premier utilisateur"}

); if (isLoading) { return (

Gestion des utilisateurs

{[1, 2, 3].map((i) => (
))}
); } if (error) { return (

Gestion des utilisateurs

{error}

); } return ( <> 0} emptyState={emptyState} headerActions={headerActions} > {/* Dialog de création */} ); }