From 251262ab6714fdeb9b5e195d2027c8eeca0513fe Mon Sep 17 00:00:00 2001 From: Chaim Date: Tue, 16 Jun 2026 19:16:12 +0000 Subject: [PATCH] =?UTF-8?q?polish(ui):=20=D7=99=D7=99=D7=A9=D7=95=D7=A8=20?= =?UTF-8?q?5=20=D7=A4=D7=A8=D7=99=D7=98=D7=99=20=D7=A7=D7=98=D7=92=D7=95?= =?UTF-8?q?=D7=A8=D7=99=D7=94-A=20=D7=9C=D7=9E=D7=95=D7=A7=D7=90=D7=A4?= =?UTF-8?q?=D7=99=20X17=20=D7=94=D7=9E=D7=90=D7=95=D7=A9=D7=A8=D7=99=D7=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ליטושים שבהם הקוד פיגר אחרי מוקאפ-מאושר (אין צורך בסבב-עיצוב חדש): - methodology/golden-ratios: כותרות-טבלה לעברית (Section/Min/Max → בלוק/מינ׳/מקס׳), תיקון מחלקות directional (ml-→me-) ו-token שגוי (ink-faint→ink-muted). - halacha PanelDeliberation: seedline "הכרעתך תיקלט כתווית-הזהב…" (מוקאפ 18). - cases-table: תווית-זמן-יחסי ליד מועד-הדיון (היום/מחר/בעוד N ימים, מוקאפ 04b). - operations BURST: הדגשת chip ברירת-המחדל "שבת 18:00 (ברירת-מחדל)" (מוקאפ 02b). - archive: סלקטור-שנים (נגזר מ-archived_at) לצד סלקטור-הסוג (מוקאפ 05). נדחו (לא pure-alignment): chips סינון-מקור בפסיקה-חסרה (דורש פרם-סינון discovery_source ב-backend); סדר/שמות-טאבים באימון+מתודולוגיה (סיכון לדרוס שמות שנבחרו בכוונה — הסוכן/שיחה). Co-Authored-By: Claude Opus 4.8 (1M context) --- web-ui/src/app/archive/page.tsx | 40 ++++++++++++++++--- web-ui/src/app/operations/page.tsx | 4 +- web-ui/src/components/cases/cases-table.tsx | 23 +++++++++-- .../methodology/golden-ratios-panel.tsx | 16 ++++---- .../precedents/halacha-review-panel.tsx | 8 ++++ 5 files changed, 73 insertions(+), 18 deletions(-) diff --git a/web-ui/src/app/archive/page.tsx b/web-ui/src/app/archive/page.tsx index 06a0e41..d900043 100644 --- a/web-ui/src/app/archive/page.tsx +++ b/web-ui/src/app/archive/page.tsx @@ -168,9 +168,21 @@ export default function ArchivePage() { ]); const [globalFilter, setGlobalFilter] = useState(""); const [typeFilter, setTypeFilter] = useState("all"); + const [yearFilter, setYearFilter] = useState("all"); const rows = useMemo(() => data ?? [], [data]); + // years present in the archive (by archive date) — for the year filter (mockup 05) + const years = useMemo(() => { + const set = new Set(); + for (const c of rows) { + if (!c.archived_at) continue; + const y = new Date(c.archived_at).getFullYear(); + if (!Number.isNaN(y)) set.add(String(y)); + } + return [...set].sort((a, b) => Number(b) - Number(a)); + }, [rows]); + const table = useReactTable({ data: rows, columns, @@ -192,10 +204,16 @@ export default function ArchivePage() { // domain filter applied client-side (subtypeOf collapses בל"מ variants) const filteredRows = useMemo(() => { - const all = table.getFilteredRowModel().rows; - if (typeFilter === "all") return all; - return all.filter((r) => subtypeOf(r.original) === typeFilter); - }, [table, typeFilter, globalFilter, sorting, rows]); + let all = table.getFilteredRowModel().rows; + if (typeFilter !== "all") all = all.filter((r) => subtypeOf(r.original) === typeFilter); + if (yearFilter !== "all") { + all = all.filter((r) => { + const iso = r.original.archived_at; + return iso != null && String(new Date(iso).getFullYear()) === yearFilter; + }); + } + return all; + }, [table, typeFilter, yearFilter, globalFilter, sorting, rows]); const total = rows.length; const shown = filteredRows.length; @@ -242,6 +260,18 @@ export default function ArchivePage() { + {years.length > 0 ? ( + + ) : null} מציג {shown} מתוך {total} @@ -301,7 +331,7 @@ export default function ArchivePage() {
- {globalFilter || typeFilter !== "all" + {globalFilter || typeFilter !== "all" || yearFilter !== "all" ? "אין תיקים תואמים לחיפוש" : "אין תיקים בארכיון"} diff --git a/web-ui/src/app/operations/page.tsx b/web-ui/src/app/operations/page.tsx index f67c5e6..c3f449e 100644 --- a/web-ui/src/app/operations/page.tsx +++ b/web-ui/src/app/operations/page.tsx @@ -264,9 +264,9 @@ function BurstControl({ s }: { s: OpsService }) { onChange={(e) => setUntil(e.target.value)} />
-