The source filter was persisted under a browser-wide v1 key (#1105), but
the stale-filter guard added in #1124 compared the restored value against
sourceItems before cash accounts, skattekonto rows, and transactions had
loaded, so every mount reset the in-memory filter back to 'Alla källor'
while storage kept the old choice: restore-then-reset on every visit.
- New pure helper components/transactions/source-filter-storage.ts:
per-company v2 key, isSourceFilter moved out of the page, read/write
helpers (read removes the retired v1 key once), and
resolveEffectiveSourceFilter.
- page.tsx keeps sourceFilter as the WANTED filter, restored per company
(with a state-only ?source= URL override that is never written to
storage); the guard effect is replaced by a derived
effectiveSourceFilter memo used by every consumer, so a source that is
still loading or went stale shows 'all' without destroying the choice.
- ?highlight= deep links widen to 'all' in memory when the wanted filter
would hide the highlighted row.
- Unit tests for the helper; no i18n changes, no migrations.
Co-authored-by: Jakob Wennberg <311770904+jakobwennberg-oss@users.noreply.github.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>