All files / layouts uiStore.ts

33.33% Statements 3/9
100% Branches 0/0
14.28% Functions 1/7
28.57% Lines 2/7

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37    73x       73x                                                            
import { create } from 'zustand'
import { persist } from 'zustand/middleware'
 
export type Theme = 'dark' | 'light' | 'high-contrast'
 
interface UiState {
  sidebarOpen: boolean
  theme: Theme

  toggleSidebar: () => void
  setSidebarOpen: (open: boolean) => void
  setTheme: (theme: Theme) => void
  resetSession: () => void
}

const defaults = {
  sidebarOpen: true,
  theme: 'dark' as Theme,
}
 
export const useUiStore = create<UiState>()(
  persist(
    (set) => ({
      ...defaults,
 
      toggleSidebar: () => set((s) => ({ sidebarOpen: !s.sidebarOpen })),
      setSidebarOpen: (open) => set({ sidebarOpen: open }),
      setTheme: (theme) => set({ theme }),
      resetSession: () => set({ ...defaults }),
    }),
    {
      name: 'ui-storage',
      partialize: (state) => ({ theme: state.theme }),
    },
  ),
)