diff --git a/mcp-server/src/legal_mcp/services/db.py b/mcp-server/src/legal_mcp/services/db.py index 5815120..1f3bdb2 100644 --- a/mcp-server/src/legal_mcp/services/db.py +++ b/mcp-server/src/legal_mcp/services/db.py @@ -3700,7 +3700,11 @@ async def list_external_case_law( created_at, (SELECT COUNT(*) FROM halachot h WHERE h.case_law_id = case_law.id) AS halachot_count, (SELECT COUNT(*) FROM halachot h WHERE h.case_law_id = case_law.id - AND h.review_status IN ('approved', 'published')) AS approved_count + AND h.review_status IN ('approved', 'published')) AS approved_count, + (SELECT COUNT(*) FROM halachot h WHERE h.case_law_id = case_law.id + AND h.review_status IN ('pending_review', 'deferred')) AS pending_count, + (SELECT COUNT(*) FROM halachot h WHERE h.case_law_id = case_law.id + AND h.review_status = 'rejected') AS rejected_count FROM case_law WHERE {where_sql} ORDER BY created_at DESC diff --git a/web-ui/src/components/precedents/library-list-panel.tsx b/web-ui/src/components/precedents/library-list-panel.tsx index 65403c3..501653f 100644 --- a/web-ui/src/components/precedents/library-list-panel.tsx +++ b/web-ui/src/components/precedents/library-list-panel.tsx @@ -138,13 +138,37 @@ function StatusPill({ p }: { p: Precedent }) { if (p.halachot_count === 0) { return ללא הלכות; } + // Split the count into approved / pending / rejected so a high total no + // longer reads as "lots waiting" when the remainder is actually rejected. + // Pending is the only state that needs the chair — highlight it in red. + const hasPending = p.pending_count > 0; return ( - - {p.approved_count}/{p.halachot_count} מאושרות + + {p.approved_count} + / + + {p.pending_count} + + / + {p.rejected_count} + הלכות ); } +// Rows with halachot still awaiting the chair get a reddish wash so the +// "needs attention" queue is visible at a glance without opening each row. +function rowClassName(p: Precedent): string { + return p.pending_count > 0 + ? "border-rule bg-danger-bg/40 hover:bg-danger-bg/60 align-top" + : "border-rule hover:bg-gold-wash/30 align-top"; +} + function CourtRow({ p, onEdit }: { p: Precedent; onEdit: (id: string) => void }) { const del = useDeletePrecedent(); const reqHalachot = useRequestHalachotExtraction(); @@ -175,7 +199,7 @@ function CourtRow({ p, onEdit }: { p: Precedent; onEdit: (id: string) => void }) }; return ( - + voi }; return ( - +