feat(01-01): migrate App.tsx from 31 useState calls to Zustand store

- Replace all 31 useState declarations with useAppStore selectors
- Add direct setters (setCommandPaletteOpen, setConsoleOpen, etc.) to NavigationSlice
- Replace IPC debounce with createEventBatcher (50ms window)
- Route shortcut events through store.getState() for toggle actions
- Remove unused type imports (SidebarBadges, CompanyMetrics, etc.)
- Zero useState calls remain in App.tsx (down from 31)
- TypeScript compilation passes with zero errors
- All 14 unit tests continue to pass

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
ZacharyZhang-NYandClaude Opus 4.6 committed 2026-03-22 01:36:55 -04:00
1 parent 5e9d36c058
commit 0f72ea4c77
2 files changed
+115 -77

No files matched your search

+24
View File
@@ -11,11 +11,15 @@ export interface NavigationSlice {
sidebarCollapsed: boolean;
companySwitcherOpen: boolean;
setSection: (section: SectionId) => void;
setCommandPaletteOpen: (open: boolean) => void;
toggleCommandPalette: () => void;
setCommandPaletteSearch: (search: string) => void;
setSelectedPaletteIndex: (index: number) => void;
setConsoleOpen: (open: boolean) => void;
toggleConsole: () => void;
setSidebarCollapsed: (collapsed: boolean) => void;
toggleSidebar: () => void;
setCompanySwitcherOpen: (open: boolean) => void;
toggleCompanySwitcher: () => void;
navigateTo: (section: SectionId, entityId?: string) => void;
}
@@ -37,6 +41,14 @@ export const createNavigationSlice: StateCreator<
set((state) => {
state.section = section;
}),
setCommandPaletteOpen: (open) =>
set((state) => {
state.commandPaletteOpen = open;
if (!open) {
state.commandPaletteSearch = "";
state.selectedPaletteIndex = 0;
}
}),
toggleCommandPalette: () =>
set((state) => {
state.commandPaletteOpen = !state.commandPaletteOpen;
@@ -54,14 +66,26 @@ export const createNavigationSlice: StateCreator<
set((state) => {
state.selectedPaletteIndex = index;
}),
setConsoleOpen: (open) =>
set((state) => {
state.consoleOpen = open;
}),
toggleConsole: () =>
set((state) => {
state.consoleOpen = !state.consoleOpen;
}),
setSidebarCollapsed: (collapsed) =>
set((state) => {
state.sidebarCollapsed = collapsed;
}),
toggleSidebar: () =>
set((state) => {
state.sidebarCollapsed = !state.sidebarCollapsed;
}),
setCompanySwitcherOpen: (open) =>
set((state) => {
state.companySwitcherOpen = open;
}),
toggleCompanySwitcher: () =>
set((state) => {
state.companySwitcherOpen = !state.companySwitcherOpen;