ultisuite-client/lib/stores/mail-search-store.ts
R3D347HR4Y aad897b617 Huhu
2026-05-20 14:06:44 +02:00

67 lines
1.7 KiB
TypeScript

"use client"
import { create } from "zustand"
interface MailSearchState {
inputValue: string
dropdownOpen: boolean
selectedIndex: number
advancedOpen: boolean
/** Filter chips active in the dropdown (before submitting to URL). */
chipAttachment: boolean
chipLast7Days: boolean
chipFromMe: boolean
}
interface MailSearchActions {
setInputValue: (value: string) => void
setDropdownOpen: (open: boolean) => void
setSelectedIndex: (index: number) => void
setAdvancedOpen: (open: boolean) => void
toggleChipAttachment: () => void
toggleChipLast7Days: () => void
toggleChipFromMe: () => void
resetChips: () => void
reset: () => void
}
const INITIAL: MailSearchState = {
inputValue: "",
dropdownOpen: false,
selectedIndex: -1,
advancedOpen: false,
chipAttachment: false,
chipLast7Days: false,
chipFromMe: false,
}
export const useMailSearchStore = create<MailSearchState & MailSearchActions>()(
(set) => ({
...INITIAL,
setInputValue: (value) =>
set({ inputValue: value, dropdownOpen: value.length > 0, selectedIndex: -1 }),
setDropdownOpen: (open) => set({ dropdownOpen: open }),
setSelectedIndex: (index) => set({ selectedIndex: index }),
setAdvancedOpen: (open) =>
set({ advancedOpen: open, dropdownOpen: false }),
toggleChipAttachment: () =>
set((s) => ({ chipAttachment: !s.chipAttachment })),
toggleChipLast7Days: () =>
set((s) => ({ chipLast7Days: !s.chipLast7Days })),
toggleChipFromMe: () =>
set((s) => ({ chipFromMe: !s.chipFromMe })),
resetChips: () =>
set({ chipAttachment: false, chipLast7Days: false, chipFromMe: false }),
reset: () => set(INITIAL),
})
)