"use client"; import { useState } from "react"; import Image from "next/image"; import { useSession } from "next-auth/react"; import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; import { ColumnDef } from "@tanstack/react-table"; import axios from "axios"; import { DropdownMenu } from "radix-ui"; import FloatingLabelInput from "#/components/floatingLabelInput"; import { Modal } from "#/components/modal"; import Table from "#/components/table/table"; import Form from "#/components/form/form"; import { icons } from "#/assets/icons"; import { adminSchema } from "#/schema"; import { Admin } from "#/types"; export default function Admins() { const { data: session, status } = useSession(); const [openModal, setOpenModal] = useState(false); const [openDeleteModal, setOpenDeleteModal] = useState(false); const [openEditModal, setOpenEditModal] = useState(false); const [selectedAdminId, setSelectedAdminId] = useState(null); const queryClient = useQueryClient(); const { data: users, refetch, isLoading, } = useQuery({ enabled: status === "authenticated", queryKey: ["users"], queryFn: async () => { try { const response = await axios.get( "https://private-docs-api.intside.co/users", { headers: { Authorization: `Bearer ${session?.user.access_token}` }, } ); return response.data.data as Admin[]; } catch (error) { console.error(error); return []; } }, }); const createMutation = useMutation({ mutationFn: async (data: { last_name: string; first_name: string; email: string; }) => { try { const response = await axios.post( "https://private-docs-api.intside.co/users/", { ...data, user_type: "admin" }, { headers: { Authorization: `Bearer ${session?.user.access_token}` } } ); if (response.status === 200 || response.status === 201) { console.log("ajout réussie !"); setOpenModal(false); } } catch (error) { console.error("Erreur lors de la création", error); } }, onSuccess: () => { queryClient.invalidateQueries({ queryKey: ["users"] }); refetch(); }, }); const updateMutation = useMutation({ mutationFn: async (data: { id: string; last_name: string; first_name: string; email: string; }) => { try { const response = await axios.put( `https://private-docs-api.intside.co/users/${data.id}/`, data, { headers: { Authorization: `Bearer ${session?.user.access_token}` } } ); if (response.status === 200 || response.status === 201) { console.log("modification réussie !"); setOpenEditModal(false); } } catch (error) { console.error("Erreur lors de la mise à jour", error); } }, onSuccess: () => { queryClient.invalidateQueries({ queryKey: ["users"] }); refetch(); }, }); const deleteMutation = useMutation({ mutationFn: async (id: string) => { try { const response = await axios.delete( `https://private-docs-api.intside.co/users/${id}/`, { headers: { Authorization: `Bearer ${session?.user.access_token}` }, } ); if (response.status === 200 || response.status === 201) { console.log("Suppresion réussie !"); setOpenDeleteModal(false); } } catch (error) { console.error("Erreur lors de la suppression", error); } }, onSuccess: () => { queryClient.invalidateQueries({ queryKey: ["users"] }); refetch(); }, }); const bulkDeleteMutation = useMutation({ mutationFn: async (ids: string[]) => { try { const deletePromises = ids.map((id) => axios.delete(`https://private-docs-api.intside.co/users/${id}/`, { headers: { Authorization: `Bearer ${session?.user.access_token}` }, }) ); await Promise.all(deletePromises); } catch (error) { console.error("Erreur lors de la suppression groupée", error); } }, onSuccess: () => { queryClient.invalidateQueries({ queryKey: ["users"] }); refetch(); }, }); const columns: ColumnDef[] = [ { header: "Administrateurs", cell: ({ row }) => { const fullName = `${row.original.first_name} ${row.original.last_name}`; const initials = `${row.original.first_name[0]}${row.original.last_name[0]}`; return (
{initials}

{fullName}

); }, }, { accessorKey: "email", header: "Adresse e-mail", }, { id: "actions", cell: ({ row }) => { const admin = row.original; return (
{/* Modal d'édition */} { if (!isOpen) { setSelectedAdminId(null); setOpenEditModal(false); } }} trigger={
{ setSelectedAdminId(admin.id); setOpenEditModal(true); }} > Éditer
} title="Modifier un admin" content={
{updateMutation.isPending ? "En cours..." : "Modifier"} } /> } /> {/* Modal de suppression */} { if (!isOpen) { setSelectedAdminId(null); setOpenDeleteModal(false); } }} trigger={
{ setSelectedAdminId(admin.id); setOpenDeleteModal(true); }} > Supprimer
} title="Supprimer un admin" content={

Voulez-vous vraiment supprimer cet admin ?

} />
); }, }, ]; return ( { const selectedIds = table .getRowModel() .rows.filter((row) => row.getIsSelected()) .map((row) => row.original.id); return (
table.toggleAllPageRowsSelected(e.target.checked) } />

Sélectionner une action

bulkDeleteMutation.mutate(selectedIds)} className="p-2 text-[14px] cursor-pointer hover:bg-blue-100 hover:text-blue-500 rounded-md" > Supprimer
{/* Modal d'ajout */} { if (!isOpen) { setOpenModal(false); } }} trigger={
setOpenModal(true)} className="cursor-pointer p-3 bg-blue-600 text-white rounded-full" > Ajouter un admin
} content={ {createMutation.isPending ? "Création de l'admin..." : "Créer le compte"} } /> } /> table.setGlobalFilter(value)} button={ } />
); }} /> ); }