"use client"; import { useState } from "react"; import { Trash2, Upload, Pencil, ExternalLink } from "lucide-react"; import { toast } from "sonner"; import Link from "next/link"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "@/components/ui/table"; import { Button } from "@/components/ui/button"; import { Badge } from "@/components/ui/badge"; import { Skeleton } from "@/components/ui/skeleton"; import { useMissingPrecedents, useDeleteMissingPrecedent, CITED_BY_PARTY_LABELS, STATUS_LABELS, type MissingPrecedent, type MissingPrecedentStatus, } from "@/lib/api/missing-precedents"; import { MissingPrecedentDetailDrawer } from "./missing-precedent-detail-drawer"; function formatDate(iso: string | null) { if (!iso) return "—"; try { return new Date(iso).toLocaleDateString("he-IL"); } catch { return iso; } } function StatusBadge({ status }: { status: MissingPrecedentStatus }) { const variants: Record = { open: "bg-gold-wash text-gold-deep border-gold/40", uploaded: "bg-rule-soft text-ink-muted border-rule", closed: "bg-emerald-50 text-emerald-800 border-emerald-300/60", irrelevant: "bg-rule-soft text-ink-muted border-rule line-through", }; return ( {STATUS_LABELS[status]} ); } function TableSkeleton({ cols }: { cols: number }) { return ( <> {Array.from({ length: 4 }).map((_, i) => ( {Array.from({ length: cols }).map((__, j) => ( ))} ))} ); } type Props = { status?: MissingPrecedentStatus | ""; caseNumber?: string; legalTopic?: string; }; export function MissingPrecedentsTable({ status, caseNumber, legalTopic }: Props) { const [openId, setOpenId] = useState(null); const { data, isPending, error } = useMissingPrecedents({ status: status === "" ? undefined : status, caseNumber, legalTopic, limit: 200, }); const del = useDeleteMissingPrecedent(); const handleDelete = async (mp: MissingPrecedent) => { if (!confirm(`למחוק את הרשומה? ${mp.case_name || mp.citation.slice(0, 60)}...`)) { return; } try { await del.mutateAsync(mp.id); toast.success("הרשומה נמחקה"); } catch (e) { toast.error("מחיקה נכשלה"); console.error(e); } }; if (error) { return (
{error.message}
); } return ( <>
פסיקה נושא תיק צד מצטט סטטוס נוצר {isPending ? ( ) : !data?.items.length ? ( אין פסיקות חסרות בקריטריונים הנוכחיים. ) : ( data.items.map((mp) => ( setOpenId(mp.id)} >
{mp.case_name || mp.citation.split(" ").slice(0, 6).join(" ")}
{mp.citation}
{mp.legal_topic || "—"} {mp.cited_in_case_number ? ( e.stopPropagation()} className="text-sm text-navy hover:text-gold-deep inline-flex items-center gap-1" > {mp.cited_in_case_number} ) : ( )} {mp.cited_by_party ? CITED_BY_PARTY_LABELS[mp.cited_by_party] : "—"} {mp.cited_by_party_name ? (
{mp.cited_by_party_name}
) : null}
{mp.linked_case_law_number ? (
↳ {mp.linked_case_law_name || mp.linked_case_law_number}
) : null}
{formatDate(mp.created_at)}
)) )}
{ if (!open) setOpenId(null); }} /> ); }