51 lines
1.4 KiB
TypeScript
51 lines
1.4 KiB
TypeScript
"use client"
|
|
|
|
import { create } from "zustand"
|
|
import { persist } from "zustand/middleware"
|
|
import { debouncedPersistJSONStorage } from "@/lib/stores/debounced-json-storage"
|
|
import type { AgendaView } from "./agenda-url.ts"
|
|
|
|
interface AgendaSettingsState {
|
|
/** Agendas décochés dans la barre latérale. */
|
|
hiddenCalendarIds: string[]
|
|
lastView: AgendaView
|
|
toggleCalendarVisible: (id: string) => void
|
|
setLastView: (view: AgendaView) => void
|
|
}
|
|
|
|
export const useAgendaSettingsStore = create<AgendaSettingsState>()(
|
|
persist(
|
|
(set, get) => ({
|
|
hiddenCalendarIds: [],
|
|
lastView: "week",
|
|
toggleCalendarVisible: (id) => {
|
|
const hidden = get().hiddenCalendarIds
|
|
set({
|
|
hiddenCalendarIds: hidden.includes(id)
|
|
? hidden.filter((h) => h !== id)
|
|
: [...hidden, id],
|
|
})
|
|
},
|
|
setLastView: (lastView) => set({ lastView }),
|
|
}),
|
|
{
|
|
name: "agenda-settings-store",
|
|
storage: debouncedPersistJSONStorage,
|
|
partialize: (s) => ({
|
|
hiddenCalendarIds: s.hiddenCalendarIds,
|
|
lastView: s.lastView,
|
|
}),
|
|
},
|
|
),
|
|
)
|
|
|
|
interface AgendaUIState {
|
|
sidebarCollapsed: boolean
|
|
setSidebarCollapsed: (v: boolean) => void
|
|
}
|
|
|
|
export const useAgendaUIStore = create<AgendaUIState>((set) => ({
|
|
sidebarCollapsed: false,
|
|
setSidebarCollapsed: (sidebarCollapsed) => set({ sidebarCollapsed }),
|
|
}))
|