"use client"; import { useState } from "react"; import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; import { toast } from "sonner"; import { UserPlus, Trash2, Users } from "lucide-react"; import { api } from "@/lib/api"; import type { CaseAssignment, UserTenant } from "@/lib/types"; import { CASE_ASSIGNMENT_ROLE_LABELS } from "@/lib/types"; import type { CaseAssignmentRole } from "@/lib/types"; import { Skeleton } from "@/components/ui/Skeleton"; import { EmptyState } from "@/components/ui/EmptyState"; import { usePermissions } from "@/lib/hooks/usePermissions"; export function CaseAssignments({ caseId }: { caseId: string }) { const queryClient = useQueryClient(); const { can } = usePermissions(); const canManage = can("manage_team"); const tenantId = typeof window !== "undefined" ? localStorage.getItem("kanzlai_tenant_id") : null; const [selectedUser, setSelectedUser] = useState(""); const [assignRole, setAssignRole] = useState("team"); const { data, isLoading } = useQuery({ queryKey: ["case-assignments", caseId], queryFn: () => api.get<{ assignments: CaseAssignment[]; total: number }>( `/cases/${caseId}/assignments`, ), }); const { data: members } = useQuery({ queryKey: ["tenant-members", tenantId], queryFn: () => api.get(`/tenants/${tenantId}/members`), enabled: !!tenantId && canManage, }); const assignMutation = useMutation({ mutationFn: (input: { user_id: string; role: string }) => api.post(`/cases/${caseId}/assignments`, input), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ["case-assignments", caseId] }); setSelectedUser(""); toast.success("Mitarbeiter zugewiesen"); }, onError: (err: { error?: string }) => { toast.error(err.error || "Fehler beim Zuweisen"); }, }); const unassignMutation = useMutation({ mutationFn: (userId: string) => api.delete(`/cases/${caseId}/assignments/${userId}`), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ["case-assignments", caseId] }); toast.success("Zuweisung entfernt"); }, onError: (err: { error?: string }) => { toast.error(err.error || "Fehler beim Entfernen"); }, }); const assignments = data?.assignments ?? []; const assignedUserIds = new Set(assignments.map((a) => a.user_id)); const availableMembers = (members ?? []).filter( (m) => !assignedUserIds.has(m.user_id), ); const handleAssign = (e: React.FormEvent) => { e.preventDefault(); if (!selectedUser) return; assignMutation.mutate({ user_id: selectedUser, role: assignRole }); }; if (isLoading) { return (
); } return (

Zugewiesene Mitarbeiter

{/* Assign form — only for owners/partners */} {canManage && availableMembers.length > 0 && (
)} {/* Assignments list */} {assignments.length > 0 ? (
{assignments.map((a, i) => (

{a.user_id.slice(0, 8)}...

{CASE_ASSIGNMENT_ROLE_LABELS[a.role as CaseAssignmentRole] ?? a.role}

{canManage && ( )}
))}
) : ( )}
); }