"use client"; import { useState } from "react"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "@/components/ui/table"; import { Button } from "@/components/ui/button"; import { Checkbox } from "@/components/ui/checkbox"; import { ScrollArea } from "@/components/ui/scroll-area"; import MemberDialog, { Member } from "./member-dialog"; import { useApi } from "@/hooks/use-api"; import request from "@/lib/request"; import { CircleX, Loader2, Trash2, UserRoundPen, UserRoundPlus, } from "lucide-react"; import Link from "next/link"; import IUser from "@/interfaces/IUser"; import hasPermissions from "@/lib/hasPermissions"; export default function MembersTable({ user }: { user: IUser }) { const { data: members, error, mutate, success, isLoading, } = useApi("/users", undefined, true, false); const [selectMode, setSelectMode] = useState(false); const [selectedMembers, setSelectedMembers] = useState([]); const [dialogOpen, setDialogOpen] = useState(false); const [currentMember, setCurrentMember] = useState(null); const toggleSelectMode = () => { setSelectMode(!selectMode); setSelectedMembers([]); }; const toggleMemberSelection = (userId: string) => { setSelectedMembers((prev) => prev.includes(userId) ? prev.filter((id) => id !== userId) : [...prev, userId], ); }; const handleOpenDialog = (member: Member | null) => { setCurrentMember(member); setDialogOpen(true); }; const handleSaveMember = async (savedMember: Member) => { if (savedMember.userId) { const res = await request( `/users/${savedMember.userId}/update`, { body: savedMember, requiresAuth: true, method: "PATCH", }, ); if (res.status === "Success") mutate(); // Update existing member // setMembers((prev) => // prev.map((m) => // m.user_id === savedMember.user_id ? savedMember : m, // ), // ); } else { delete savedMember.userId; const res = await request("/users/new", { body: savedMember, method: "POST", requiresAuth: true, }); if (res.status === "Success") mutate(); } }; const handleDelete = async (userId: string) => { const res = await request(`/users/${userId}/delete`, { method: "DELETE", requiresAuth: true, }); if (res.status === "Success") mutate(); }; return (
{hasPermissions(user.roles, { users: ["insert"] }) && ( )}
{selectMode && ( Sélectionner )} Prénom Nom Email Téléphone Rôle Actions {isLoading && } {members && members.map((member) => ( {selectMode && ( toggleMemberSelection( member.userId!, ) } /> )} {member.firstname} {member.lastname} {member.email} {member.phone} {member.role} {hasPermissions(user.roles, { users: ["update"], }) && ( )} {hasPermissions(user.roles, { users: ["delete"], }) && ( )} ))}
setDialogOpen(false)} member={currentMember} onSave={handleSaveMember} />
); }