perf(bookkeeping): fiscal-year pickers and cash accounts read the session cache (#1934)

First consumer migration onto lib/reference-data. FyPicker and
FiscalYearSelector (14 consumer surfaces, 47 fiscal-period fetch sites
before this series) now read useFiscalPeriods(); with the layout seed the
restore of the persisted scope runs in the first effect tick and onReady
fires on mount instead of after a round trip. Their restore rules are
extracted into a pure resolveInitialFiscalScope() (lib/reference-data/
fiscal-scope.ts) so the two pickers cannot drift apart again, and the
restore runs once per company load, not on every background revalidation.

- /reports: the static catalog renders immediately; only the "no fiscal
  year" empty state waits for the picker (previously six skeleton bars
  until /api/bookkeeping/fiscal-periods resolved).
- JournalEntryList (/bookkeeping): resolves its initial scope from the
  cached list instead of its own fetch; the saved-scope shortcut still
  unblocks the entries fetch first when nothing is cached, and resolution
  is guarded to once per company so a revalidation can never snap a
  deep-link "all years" visit back to the stored year.
- /transactions: the account chooser reads useCashAccounts({ enabledOnly })
  (seeded) instead of fetching /api/cash-accounts on every visit; the bank
  sync button invalidates that entry after a sync.
- STORAGE_KEY_PREFIX / ALL_YEARS_VALUE move to a dependency-free
  fiscal-year-storage.ts (re-exported from FiscalYearSelector) so lib/ code
  can import them without a React component.

raw-reference-fetch ratchet: 55 -> 51 files.

Co-authored-by: Jakob Wennberg <311770904+jakobwennberg-oss@users.noreply.github.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Jakob Wennberg
2026-08-26 14:24:24 +02:00
committed by GitHub
co-authored by Jakob Wennberg Claude Fable 5
parent b436d47b64
commit 9a56b7aff9
10 changed files with 282 additions and 195 deletions
+1 -5
View File
@@ -34,7 +34,7 @@
]
},
"rawReferenceFetch": {
"count": 55,
"count": 51,
"files": [
"app/(dashboard)/assets/[id]/dispose/page.tsx",
"app/(dashboard)/bookkeeping/year-end/page.tsx",
@@ -47,7 +47,6 @@
"app/(dashboard)/salary/employees/[id]/page.tsx",
"app/(dashboard)/salary/runs/[id]/page.tsx",
"app/(dashboard)/supplier-invoices/[id]/page.tsx",
"app/(dashboard)/transactions/page.tsx",
"components/articles/ArticleForm.tsx",
"components/bookkeeping/BookingTemplatePicker.tsx",
"components/bookkeeping/ChartOfAccounts.tsx",
@@ -55,12 +54,9 @@
"components/bookkeeping/CorrectionEntryDialog.tsx",
"components/bookkeeping/EditAccountDialog.tsx",
"components/bookkeeping/JournalEntryForm.tsx",
"components/bookkeeping/JournalEntryList.tsx",
"components/bookkeeping/StrikeLinesDialog.tsx",
"components/bookkeeping/TemplateBookDialog.tsx",
"components/common/CashAccountSelector.tsx",
"components/common/FiscalYearSelector.tsx",
"components/common/FyPicker.tsx",
"components/dimensions/types.ts",
"components/extensions/general/ArcimMigrationWorkspace.tsx",
"components/extensions/general/BookDirectlyDialog.tsx",