spb/note-spboucher-ai
Public
1import type { Property, RowOut, OptionColor } from "@/lib/databases/types";2export interface Group { key: string; label: string; color: OptionColor; value: unknown; rows: RowOut[] }3/** Group rows by a select/status/checkbox property, keeping option order; empty group last. */4export function groupRows(rows: RowOut[], p: Property | undefined): Group[] {5 if (!p) return [{ key: "all", label: "All", color: "gray", value: undefined, rows }];6 if (p.type === "checkbox") return [{ key: "false", label: "Unchecked", color: "gray", value: false, rows: rows.filter((r) => !r.values[p.id]) }, { key: "true", label: "Checked", color: "green", value: true, rows: rows.filter((r) => !!r.values[p.id]) }];7 const opts = p.config.options ?? []; const groups: Group[] = opts.map((o) => ({ key: o.id, label: o.name, color: o.color, value: o.id, rows: [] }));8 const none: Group = { key: "__none", label: `No ${p.name}`, color: "gray", value: null, rows: [] };9 for (const r of rows) { const v = r.values[p.id]; const g = groups.find((x) => x.key === v); (g ?? none).rows.push(r); }10 return [...groups, none];11}12