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 (