feat(03-02): navigation restructure, TotalsBar refactor, and setup hooks

- Move collection view from / to /collection with gear/planning tabs
- Rewrite / as dashboard with three summary cards (Collection, Planning, Setups)
- Refactor TotalsBar to accept optional stats/linkTo/title props
- Create DashboardCard component for dashboard summary cards
- Create useSetups hooks (CRUD + sync/remove item mutations)
- Update __root.tsx with route-aware TotalsBar, FAB visibility, resolve navigation
- Add item picker and setup delete UI state to uiStore
- Invalidate setups queries on item update/delete for stale data prevention
- Update routeTree.gen.ts with new collection/setups routes

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-03-15 12:49:03 +01:00
parent c2b8985d37
commit 86a7a0def1
11 changed files with 637 additions and 270 deletions

View File

@@ -29,6 +29,15 @@ interface UIState {
openResolveDialog: (threadId: number, candidateId: number) => void;
closeResolveDialog: () => void;
// Setup-related UI state
itemPickerOpen: boolean;
openItemPicker: () => void;
closeItemPicker: () => void;
confirmDeleteSetupId: number | null;
openConfirmDeleteSetup: (id: number) => void;
closeConfirmDeleteSetup: () => void;
}
export const useUIStore = create<UIState>((set) => ({
@@ -67,4 +76,13 @@ export const useUIStore = create<UIState>((set) => ({
set({ resolveThreadId: threadId, resolveCandidateId: candidateId }),
closeResolveDialog: () =>
set({ resolveThreadId: null, resolveCandidateId: null }),
// Setup-related UI state
itemPickerOpen: false,
openItemPicker: () => set({ itemPickerOpen: true }),
closeItemPicker: () => set({ itemPickerOpen: false }),
confirmDeleteSetupId: null,
openConfirmDeleteSetup: (id) => set({ confirmDeleteSetupId: id }),
closeConfirmDeleteSetup: () => set({ confirmDeleteSetupId: null }),
}));