ultisuite-client/lib/stores/mail-ui-store.ts
2026-05-25 13:52:40 +02:00

40 lines
1.3 KiB
TypeScript

"use client"
import { create } from "zustand"
interface MailUiState {
sidebarCollapsed: boolean
mobileSearchOpen: boolean
folderUnreadCounts: Record<string, number>
/** Skip split-view auto-open of first row once (back, sidebar folder change). */
suppressSplitAutoOpenOnce: boolean
}
interface MailUiActions {
setSidebarCollapsed: (collapsed: boolean) => void
toggleSidebarCollapsed: () => void
setMobileSearchOpen: (open: boolean) => void
setFolderUnreadCounts: (counts: Record<string, number>) => void
requestSuppressSplitAutoOpen: () => void
consumeSuppressSplitAutoOpen: () => boolean
}
export const useMailUiStore = create<MailUiState & MailUiActions>()((set, get) => ({
sidebarCollapsed: true,
mobileSearchOpen: false,
folderUnreadCounts: {},
suppressSplitAutoOpenOnce: false,
setSidebarCollapsed: (collapsed) => set({ sidebarCollapsed: collapsed }),
toggleSidebarCollapsed: () =>
set((s) => ({ sidebarCollapsed: !s.sidebarCollapsed })),
setMobileSearchOpen: (open) => set({ mobileSearchOpen: open }),
setFolderUnreadCounts: (counts) => set({ folderUnreadCounts: counts }),
requestSuppressSplitAutoOpen: () => set({ suppressSplitAutoOpenOnce: true }),
consumeSuppressSplitAutoOpen: () => {
if (!get().suppressSplitAutoOpenOnce) return false
set({ suppressSplitAutoOpenOnce: false })
return true
},
}))