- Install zustand 5.x and immer 11.x dependencies - Create 6 Zustand slices: navigation, company, selection, ui, communication, social - Create combined store with devtools + immer middleware - Create IPC event batcher with 50ms debounce window (schedule/flush/dispose) - Create typed selector hooks for narrow state subscriptions - Add 14 unit tests covering store initialization, slice behaviors, and batcher timing Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
48 lines
2.2 KiB
TypeScript
48 lines
2.2 KiB
TypeScript
import { useAppStore } from "./store";
|
|
|
|
// Navigation slice selectors
|
|
export const useSection = () => useAppStore((s) => s.section);
|
|
export const useSetSection = () => useAppStore((s) => s.setSection);
|
|
export const useNavigateTo = () => useAppStore((s) => s.navigateTo);
|
|
export const useCommandPaletteOpen = () =>
|
|
useAppStore((s) => s.commandPaletteOpen);
|
|
export const useConsoleOpen = () => useAppStore((s) => s.consoleOpen);
|
|
export const useSidebarCollapsed = () =>
|
|
useAppStore((s) => s.sidebarCollapsed);
|
|
|
|
// Company slice selectors
|
|
export const useSnapshot = () => useAppStore((s) => s.snapshot);
|
|
export const useCurrentCompanyId = () =>
|
|
useAppStore((s) => s.currentCompanyId);
|
|
export const useError = () => useAppStore((s) => s.error);
|
|
export const useInboxItems = () => useAppStore((s) => s.inboxItems);
|
|
export const useCompanyMetrics = () => useAppStore((s) => s.companyMetrics);
|
|
export const useStandupReport = () => useAppStore((s) => s.standupReport);
|
|
export const useBadges = () => useAppStore((s) => s.badges);
|
|
|
|
// Selection slice selectors
|
|
export const useSelectedTaskId = () => useAppStore((s) => s.selectedTaskId);
|
|
export const useSelectedAgentId = () =>
|
|
useAppStore((s) => s.selectedAgentId);
|
|
export const useSelectedApprovalId = () =>
|
|
useAppStore((s) => s.selectedApprovalId);
|
|
export const useSelectedRunId = () => useAppStore((s) => s.selectedRunId);
|
|
export const useSelectedGoalId = () => useAppStore((s) => s.selectedGoalId);
|
|
export const useSelectedProjectId = () =>
|
|
useAppStore((s) => s.selectedProjectId);
|
|
export const useSelectedWorkspaceId = () =>
|
|
useAppStore((s) => s.selectedWorkspaceId);
|
|
export const useSelectedConnectorId = () =>
|
|
useAppStore((s) => s.selectedConnectorId);
|
|
export const useSelectedCommunicationEntityId = () =>
|
|
useAppStore((s) => s.selectedCommunicationEntityId);
|
|
|
|
// UI slice selectors
|
|
export const useLocale = () => useAppStore((s) => s.locale);
|
|
export const useShowOnboarding = () => useAppStore((s) => s.showOnboarding);
|
|
export const useTaskViewMode = () => useAppStore((s) => s.taskViewMode);
|
|
|
|
// Social slice selectors
|
|
export const useSocialAccounts = () => useAppStore((s) => s.socialAccounts);
|
|
export const useBrowserActions = () => useAppStore((s) => s.browserActions);
|