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:
1 parent
5e9d36c058
commit
0f72ea4c77
2 files changed
+115
-77
No files matched your search
@@ -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;
|
||||
|
||||
Reference in new issue
Block a user