Skip to content

feat(harmonia): Export CSV + Print on every list surface - #6354

Merged
delchev merged 1 commit into
masterfrom
feat/list-export-print
Jul 21, 2026
Merged

feat(harmonia): Export CSV + Print on every list surface#6354
delchev merged 1 commit into
masterfrom
feat/list-export-print

Conversation

@delchev

@delchev delchev commented Jul 21, 2026

Copy link
Copy Markdown
Contributor

What

Every generated list surface - the manage list, plain list, master list, personal (my) list and partner list - gains toolbar Export (CSV download) and Print (browser print window; Save as PDF via the dialog) actions. Until now only documents (.print) and the report pages could produce an output file; entity lists had no export at all.

How

  • Shared helpers in basePage.js (application-core, one implementation for all shells):
    • exportRowsCsv(rows, columns, cellText, filename) - UTF-8 CSV with a BOM (Excel decodes localized text without an import wizard), RFC-quoted cells, headers translated through the column tkey;
    • printRows(rows, columns, cellText, title) - the report page's minimal print-window pattern, right-aligned number columns.
  • Each list template emits an exportColumns metadata array mirroring its table columns and resolves cells exactly like the table: FK columns export their referenced labels, EntityStatus its status text, dates their formatted form - never raw ids or Jackson date arrays.
  • Exports cover the full filtered(+sorted) set, not the current page; buttons disable on an empty set.
  • The personal/partner lists export only the own rows their scoped controller serves - sensitive and owner columns are absent from their column sets by construction, so they can never export.
  • New defaults.export catalog key; the report table/chart toolbar labels (Refresh/Export/Print) now translate through the same defaults.* keys instead of hard-coded English.

Verification

IntentEmissionCoverageIT extended per the engine-intent contract: asserts exportRowsCsv/printRows wiring in the generated manage/master/personal/partner list pages and the Export/Print buttons in their views. Ran green locally (1/1).

🤖 Generated with Claude Code

…t, master, personal, partner)

Every generated list page gains toolbar Export and Print actions, closing the
gap where only documents (.print) and report pages could produce an output file:

- shared basePage helpers: exportRowsCsv() downloads the rows as UTF-8 CSV
  (BOM so Excel decodes localized text, RFC-quoted cells, translated headers)
  and printRows() renders them into a minimal print window (the browser dialog
  covers paper and Save as PDF) - one implementation for all shells;
- each list template (manage list, plain list, master list, personal my-list,
  partner list) emits its exportColumns metadata mirroring the table columns
  and resolves cells exactly like the table: FK columns export their referenced
  labels, dates their formatted form - never raw ids or serialized arrays;
- exports cover the FULL filtered(+sorted) set, not the current page; the
  personal/partner lists export only the own rows the scoped controller serves
  (sensitive/owner columns are absent from their column sets by construction);
- new defaults.export catalog key; the report table/chart toolbar labels
  (Refresh/Export/Print) now translate through the same defaults keys;
- IntentEmissionCoverageIT asserts the helpers + toolbar buttons on the manage,
  master, personal and partner list fixtures (ran green locally, 1/1).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@delchev
delchev merged commit 404633e into master Jul 21, 2026
10 checks passed
@delchev
delchev deleted the feat/list-export-print branch July 21, 2026 19:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant