54 lines
1.3 KiB
TypeScript
54 lines
1.3 KiB
TypeScript
'use client'
|
|
|
|
import { create } from 'zustand'
|
|
import { persist } from 'zustand/middleware'
|
|
|
|
export type ViewId =
|
|
| 'dashboard'
|
|
| 'crm'
|
|
| 'leads'
|
|
| 'estimates'
|
|
| 'projects'
|
|
| 'support'
|
|
| 'licenses'
|
|
| 'contracts'
|
|
| 'expenses'
|
|
| 'finance'
|
|
| 'accounting'
|
|
| 'audit'
|
|
| 'api'
|
|
| 'reporting'
|
|
| 'settings'
|
|
| 'setup'
|
|
|
|
interface AosState {
|
|
view: ViewId
|
|
setView: (v: ViewId) => void
|
|
selectedCompanyId: string | null
|
|
setSelectedCompany: (id: string | null) => void
|
|
selectedLeadId: string | null
|
|
setSelectedLead: (id: string | null) => void
|
|
sidebarOpen: boolean
|
|
setSidebarOpen: (open: boolean) => void
|
|
commandOpen: boolean
|
|
setCommandOpen: (open: boolean) => void
|
|
}
|
|
|
|
export const useAos = create<AosState>()(
|
|
persist(
|
|
(set) => ({
|
|
view: 'dashboard',
|
|
setView: (view) => set({ view }),
|
|
selectedCompanyId: null,
|
|
setSelectedCompany: (selectedCompanyId) => set({ selectedCompanyId }),
|
|
selectedLeadId: null,
|
|
setSelectedLead: (selectedLeadId) => set({ selectedLeadId }),
|
|
sidebarOpen: false,
|
|
setSidebarOpen: (sidebarOpen) => set({ sidebarOpen }),
|
|
commandOpen: false,
|
|
setCommandOpen: (commandOpen) => set({ commandOpen }),
|
|
}),
|
|
{ name: 'aos-ui', partialize: (s) => ({ view: s.view }) }
|
|
)
|
|
)
|