import { useState } from 'react' import { useParams, useNavigate } from 'react-router-dom' import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query' import { ArrowLeft, FolderOpen, FolderCheck, FolderArchive, MessageSquare, Calendar, Pencil, Trash2, Plus, X, Search, Inbox, Send, ExternalLink, AlertTriangle, CheckCircle2, } from 'lucide-react' import toast from 'react-hot-toast' import { Button } from '@/components/ui/Button' import { Input } from '@/components/ui/Input' import { Label } from '@/components/ui/Label' import { fascicoliApi, type FascicoloResponse, type FascicoloMessageItem, type FascicoloUpdate, } from '@/api/fascicoli.api' import { messagesApi } from '@/api/messages.api' import { formatDate } from '@/lib/utils' import { getErrorMessage } from '@/api/client' import { useAuth } from '@/hooks/useAuth' import { PecStateBadge } from '@/components/PecBadge/PecBadge' // ─── Badge stato ────────────────────────────────────────────────────────────── function StatoBadge({ stato }: { stato: FascicoloResponse['stato'] }) { const config: Record = { aperto: { label: 'Aperto', className: 'bg-green-100 text-green-800 border border-green-200' }, chiuso: { label: 'Chiuso', className: 'bg-gray-100 text-gray-700 border border-gray-200' }, archiviato: { label: 'Archiviato', className: 'bg-amber-100 text-amber-800 border border-amber-200' }, } const { label, className } = config[stato] ?? config.aperto return ( {label} ) } // ─── Dialog modifica fascicolo ──────────────────────────────────────────────── interface EditDialogProps { fascicolo: FascicoloResponse onClose: () => void } function EditDialog({ fascicolo, onClose }: EditDialogProps) { const queryClient = useQueryClient() const [form, setForm] = useState({ titolo: fascicolo.titolo, numero_pratica: fascicolo.numero_pratica ?? '', stato: fascicolo.stato, categoria: fascicolo.categoria ?? '', scadenza: fascicolo.scadenza ? fascicolo.scadenza.substring(0, 16) : '', note: fascicolo.note ?? '', }) const updateMutation = useMutation({ mutationFn: (data: FascicoloUpdate) => fascicoliApi.update(fascicolo.id, data), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['fascicolo', fascicolo.id] }) queryClient.invalidateQueries({ queryKey: ['fascicoli'] }) toast.success('Fascicolo aggiornato') onClose() }, onError: (e) => toast.error(getErrorMessage(e)), }) const handleSubmit = () => { if (!form.titolo?.trim()) { toast.error('Il titolo e obbligatorio'); return } updateMutation.mutate({ titolo: form.titolo?.trim(), numero_pratica: (form.numero_pratica as string)?.trim() || null, stato: form.stato, categoria: (form.categoria as string)?.trim() || null, scadenza: form.scadenza ? new Date(form.scadenza as string).toISOString() : null, note: (form.note as string)?.trim() || null, }) } return (

Modifica fascicolo

setForm((f) => ({ ...f, titolo: e.target.value }))} autoFocus />
setForm((f) => ({ ...f, numero_pratica: e.target.value }))} placeholder="Es. 2024/0042" />
setForm((f) => ({ ...f, categoria: e.target.value }))} />
setForm((f) => ({ ...f, scadenza: e.target.value }))} />