refactor(useUIController): group reads via useShallow, fetch setters from getState (P1-17)

Replace 11 individual useAppStore subscriptions with a single useShallow
selector; setters read once from useAppStore.getState() (stable refs).
This commit is contained in:
ZacharyZhang-NY committed 2026-04-16 22:52:27 -04:00
1 parent 7f2d028080
commit 8dfa69cacf
1 file changed
+41 -22
+41 -22
View File
@@ -1,4 +1,5 @@
import { useCallback, useDeferredValue, useMemo } from "react"; import { useCallback, useDeferredValue, useMemo } from "react";
import { useShallow } from "zustand/shallow";
import type { AgentRecord, GoalRecord, ProjectRecord, RunRecord, SectionId, TaskRecord } from "@shared/types"; import type { AgentRecord, GoalRecord, ProjectRecord, RunRecord, SectionId, TaskRecord } from "@shared/types";
import { createTranslator } from "../i18n"; import { createTranslator } from "../i18n";
@@ -62,28 +63,46 @@ export function useUIController() {
[sidebarNav, t], [sidebarNav, t],
); );
const section = useAppStore((s) => s.section); const {
const setSection = useAppStore((s) => s.setSection); section,
const consoleOpen = useAppStore((s) => s.consoleOpen); consoleOpen,
const setConsoleOpen = useAppStore((s) => s.setConsoleOpen); sidebarCollapsed,
const sidebarCollapsed = useAppStore((s) => s.sidebarCollapsed); companySwitcherOpen,
const setSidebarCollapsed = useAppStore((s) => s.setSidebarCollapsed); confirmDeleteCompanyId,
const companySwitcherOpen = useAppStore((s) => s.companySwitcherOpen); taskViewMode,
const setCompanySwitcherOpen = useAppStore((s) => s.setCompanySwitcherOpen); showOnboarding,
const confirmDeleteCompanyId = useAppStore((s) => s.confirmDeleteCompanyId); initialOnboardingLocked,
const setConfirmDeleteCompanyId = useAppStore((s) => s.setConfirmDeleteCompanyId); commandPaletteOpen,
const taskViewMode = useAppStore((s) => s.taskViewMode); commandPaletteSearch,
const setTaskViewMode = useAppStore((s) => s.setTaskViewMode); selectedPaletteIndex,
const showOnboarding = useAppStore((s) => s.showOnboarding); } = useAppStore(
const setShowOnboarding = useAppStore((s) => s.setShowOnboarding); useShallow((s) => ({
const initialOnboardingLocked = useAppStore((s) => s.initialOnboardingLocked); section: s.section,
const setInitialOnboardingLocked = useAppStore((s) => s.setInitialOnboardingLocked); consoleOpen: s.consoleOpen,
const commandPaletteOpen = useAppStore((s) => s.commandPaletteOpen); sidebarCollapsed: s.sidebarCollapsed,
const setCommandPaletteOpen = useAppStore((s) => s.setCommandPaletteOpen); companySwitcherOpen: s.companySwitcherOpen,
const commandPaletteSearch = useAppStore((s) => s.commandPaletteSearch); confirmDeleteCompanyId: s.confirmDeleteCompanyId,
const setCommandPaletteSearch = useAppStore((s) => s.setCommandPaletteSearch); taskViewMode: s.taskViewMode,
const selectedPaletteIndex = useAppStore((s) => s.selectedPaletteIndex); showOnboarding: s.showOnboarding,
const setSelectedPaletteIndex = useAppStore((s) => s.setSelectedPaletteIndex); initialOnboardingLocked: s.initialOnboardingLocked,
commandPaletteOpen: s.commandPaletteOpen,
commandPaletteSearch: s.commandPaletteSearch,
selectedPaletteIndex: s.selectedPaletteIndex,
})),
);
const {
setSection,
setConsoleOpen,
setSidebarCollapsed,
setCompanySwitcherOpen,
setConfirmDeleteCompanyId,
setTaskViewMode,
setShowOnboarding,
setInitialOnboardingLocked,
setCommandPaletteOpen,
setCommandPaletteSearch,
setSelectedPaletteIndex,
} = useAppStore.getState();
const handleLocaleChange = useCallback(async (newLocale: AppLocale) => { const handleLocaleChange = useCallback(async (newLocale: AppLocale) => {
useAppStore.getState().setLocale(newLocale); useAppStore.getState().setLocale(newLocale);