import { useState } from "react"; import { Loader2, Plus, Trash2, UserPlus, Users } from "lucide-react"; import { trpc } from "@/lib/trpc"; import { Button } from "@/components/ui/button"; import { toast } from "sonner"; const PRESET_COLORS = [ "#10b981", // emerald "#06b6d4", // cyan "#0d9488", // teal "#8b5cf6", // violet "#f97316", // orange "#ec4899", // pink "#3b82f6", // blue "#eab308", // yellow ]; export default function PractitionerManager({ clinicId }: { clinicId: number }) { const utils = trpc.useUtils(); const membersQuery = trpc.clinic.listMembers.useQuery( { clinicId }, { enabled: clinicId > 0 } ); const [adding, setAdding] = useState(false); const [email, setEmail] = useState(""); const [displayName, setDisplayName] = useState(""); const [color, setColor] = useState(PRESET_COLORS[0]); const addMember = trpc.clinic.addMember.useMutation({ onSuccess: () => { toast.success("Praticien ajouté"); utils.clinic.listMembers.invalidate({ clinicId }); utils.clinic.listMembersPublic.invalidate({ clinicId }); setEmail(""); setDisplayName(""); setColor(PRESET_COLORS[0]); setAdding(false); }, onError: (e) => toast.error(e.message), }); const removeMember = trpc.clinic.removeMember.useMutation({ onSuccess: () => { toast.success("Praticien retiré"); utils.clinic.listMembers.invalidate({ clinicId }); utils.clinic.listMembersPublic.invalidate({ clinicId }); }, onError: (e) => toast.error(e.message), }); const updateMember = trpc.clinic.updateMember.useMutation({ onSuccess: () => { utils.clinic.listMembers.invalidate({ clinicId }); utils.clinic.listMembersPublic.invalidate({ clinicId }); }, onError: (e) => toast.error(e.message), }); const handleAdd = () => { if (!email.trim()) { toast.error("Email requis"); return; } addMember.mutate({ clinicId, email: email.trim(), displayName: displayName.trim() || undefined, color, }); }; const members = membersQuery.data ?? []; return (
Multi-médecins · couleur d'identification
Le praticien doit déjà avoir un compte QueueMed.
Aucun praticien associé. Ajoutez-en un pour activer l'attribution.
) : (