From b11bbad7ed4dee1f4b5fbb35f1cc5752ab7a06c4 Mon Sep 17 00:00:00 2001 From: "gpt-engineer-app[bot]" <159125892+gpt-engineer-app[bot]@users.noreply.github.com> Date: Sat, 18 Apr 2026 07:10:43 +0000 Subject: [PATCH] Changes Co-authored-by: renee-png <262607627+renee-png@users.noreply.github.com> --- src/routes/collections.index.tsx | 41 ++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/src/routes/collections.index.tsx b/src/routes/collections.index.tsx index 6e2205c..8e56dc0 100644 --- a/src/routes/collections.index.tsx +++ b/src/routes/collections.index.tsx @@ -121,6 +121,47 @@ function CollectionsIndexPage() { ); }); + const sorted = useMemo(() => { + const getVal = (r: any): string | number => { + switch (sortKey) { + case "homeowner": + return `${r.homeowner?.last_name ?? ""} ${r.homeowner?.first_name ?? ""}`.toLowerCase(); + case "case": + return (r.case?.client?.name ?? "").toLowerCase(); + case "stage": + return (stages.find((s) => s.key === r.current_stage)?.label ?? "").toLowerCase(); + case "tasks": + return openTaskCounts[r.id] ?? 0; + case "opened": + return r.opened_at ? new Date(r.opened_at).getTime() : 0; + case "balance": + return balances[r.id] ?? 0; + } + }; + return [...filtered].sort((a, b) => { + const av = getVal(a); + const bv = getVal(b); + if (av < bv) return sortDir === "asc" ? -1 : 1; + if (av > bv) return sortDir === "asc" ? 1 : -1; + return 0; + }); + }, [filtered, sortKey, sortDir, balances, openTaskCounts, stages]); + + const SortHeader = ({ k, label, className }: { k: typeof sortKey; label: string; className?: string }) => { + const Icon = sortKey !== k ? ArrowUpDown : sortDir === "asc" ? ArrowUp : ArrowDown; + return ( + + + + ); + }; + return (