refactor(state): clean layoutStore, add selectors, centralise STALE constants

- layoutStore: remove 4 dead field groups (pinnedPanels, selectedResultId,
  compareTrayVisible, notificationsOpen) — none were read outside the store
- CompareTray: drop dead useLayoutStore side-effect (state was write-only)
- 8 components: replace bare useStore() with explicit selectors / useShallow
  to prevent unnecessary re-renders on unrelated state mutations
- lib/constants: add STALE_MARKET_SIGNALS + STALE_REVIEW_QUEUE (30s each)
- useMarketSignals, useReviewQueue: use global constants instead of
  hook-local magic numbers
- Add STATE_MANAGEMENT.md: decision tree + rules for RQ/Zustand/local/derived

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Benjamin Sutter
2026-05-24 01:30:44 +02:00
parent eedee83b49
commit 5d53f35dea
14 changed files with 263 additions and 41 deletions
+4 -1
View File
@@ -16,7 +16,10 @@ interface AuthContextValue {
const AuthContext = createContext<AuthContextValue | null>(null)
export function AuthProvider({ children }: { children: ReactNode }) {
const { currentUser, isAuthenticated, login, logout } = useSessionStore()
const currentUser = useSessionStore(s => s.currentUser)
const isAuthenticated = useSessionStore(s => s.isAuthenticated)
const login = useSessionStore(s => s.login)
const logout = useSessionStore(s => s.logout)
const value: AuthContextValue = {
user: currentUser,