Reports frontend — spec-driven generate form, sliceable viewer, dimension bars #16
Reference in New Issue
Block a user
No description provided.
Delete Branch "cached-reporting"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
MR: Reports frontend — spec-driven generate form, sliceable viewer, dimension bars
Branch:
cached-reporting→ Target:mainSummary
Reports UI rebuilt to treat the backend OpenAPI spec as the source of truth: the
generate-report form renders generically from
ReportQuery, and the viewer displaysAPI-computed metrics verbatim instead of recomputing them client-side.
Changes
react-openapi (library)
MultiEnumFieldrenderer for array-of-enum fields; dispatch branch inFormFieldRendereruseFkFieldOptionshook +FKFieldConfig.value(FK options keyed by a non-PKfield — accounts resolve by
name)FieldConfig.defaultValueseeding inextractFields; enum lift foritems.enumarrays; sanitize-payload bypasses FK resolution whenfk.valueis setReports page
served
ReportQueryschema (labels, order, defaults, multi-enum, account picker);server-side validation only
period_id; bucketsmerged per period (disjoint slices), txn ids deduped
metricsverbatim (outflows/inflows/sum/count/avg/min/max/cadence/frequency); Net = one subtraction at render
with sliding indicator; pills disabled when the report has ≤1 distinct value;
top-10 bars in a fixed view paged by chevrons (hidden scrollbar)
payee=*/tags=*when its ownfilter is unselected; explicit selections always slice normally
groupsprop (API periods +metrics) used by the viewer; Expense page keeps the client-side fallback path;
group strip shows Sum · Avg · Min · Max · Cadence (or Frequency /day when
cadence < 1)
Fixes
parseOccurredAt) in period merges and date ordering —new Date()mis-read dates as MM-DD-YYYY and corrupted merged cadence(Aug Zomato: 12.89 days displayed vs 0.76 actual)
Replace hand-written GenerateReportPanel inputs with a generic loop over extractFields("ReportQuery") + FormFieldRenderer; submit via useResource("reports").create with server-side validation only. react-openapi additions (all additive): - lift items.enum into FieldConfig.enumValues for array-of-enum props - extract schema `default` into FieldConfig.defaultValue - new MultiEnumField renderer dispatched for isArray && enumValues - FKFieldConfig.value: bind option values to a target property instead of the primary key (account names); sanitize-payload skips resolveFk when set - new useFkFieldOptions hook encapsulating FK option loading/prefetch - export extractFields, useFkFieldOptions, MultiEnumField Drop now-unused granularityOptions/groupDimOptions helpers.