"use client"; import { useState } from "react"; import { Plus, Building2 } from "lucide-react"; import { Button } from "@/components/ui/button"; import { SkillCategory, Team as TeamType } from "@/lib/types"; import { TeamStats } from "@/lib/admin-types"; import { TreeViewPage } from "../management/tree-view-page"; import { useTreeView } from "@/hooks/use-tree-view"; import { useFormDialog } from "@/hooks/use-form-dialog"; import { useTeamsManagement } from "@/hooks/use-teams-management"; import { TeamFormDialog } from "./team-form-dialog"; import { TeamsList } from "./teams-list"; import { TeamMembersModal } from "../management/team-members-modal"; interface TeamsManagementPageProps { teams: TeamType[]; teamStats: TeamStats[]; } export function TeamsManagementPage({ teams, teamStats, }: TeamsManagementPageProps) { const [searchTerm, setSearchTerm] = useState(""); const [isMembersModalOpen, setIsMembersModalOpen] = useState(false); const [selectedTeam, setSelectedTeam] = useState(null); const { isCreateDialogOpen, isEditDialogOpen, openCreateDialog, closeCreateDialog, openEditDialog, closeEditDialog, } = useFormDialog(); const { teams: localTeams, teamStats: localTeamStats, editingTeam, teamFormData, isSubmitting, directions, setTeamFormData, resetForm, getTeamStats, getDirectionStats, handleCreateTeam, handleEditTeam, handleUpdateTeam, handleDeleteTeam, handleDeleteDirection, } = useTeamsManagement(teams, teamStats); // Utilisation du hook factorisé pour la vue arborescente const { filteredDataByCategory: filteredTeamsByDirection, expandedCategories: expandedDirections, toggleCategory: toggleDirection, expandAll, collapseAll, } = useTreeView({ data: localTeams, searchFields: ["name"], groupBy: (team) => team.direction, searchTerm, onSearchChange: setSearchTerm, }); const handleCreateSubmit = async () => { const success = await handleCreateTeam(); if (success) { closeCreateDialog(); } }; const handleEditSubmit = async () => { const success = await handleUpdateTeam(); if (success) { closeEditDialog(); } }; const handleOpenCreateDialog = () => { resetForm(); openCreateDialog(); }; const handleOpenEditDialog = (team: TeamType) => { handleEditTeam(team); openEditDialog(); }; const handleViewMembers = (team: TeamType) => { setSelectedTeam(team); setIsMembersModalOpen(true); }; // Fonction pour mettre à jour les stats d'une équipe après suppression d'un membre const updateTeamStatsAfterMemberRemoval = (teamId: string) => { // Cette logique sera gérée par le hook useTeamsManagement }; const headerActions = ( ); const emptyState = (

{searchTerm ? "Aucune équipe trouvée" : "Aucune équipe"}

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

); return ( <> 0} emptyState={emptyState} headerActions={headerActions} > {/* Dialog de création */} {/* Dialog d'édition */} {/* Modal des membres d'équipe */} {selectedTeam && ( { setIsMembersModalOpen(false); setSelectedTeam(null); }} onMemberRemoved={() => { if (selectedTeam) { updateTeamStatsAfterMemberRemoval(selectedTeam.id); } }} /> )} ); }