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 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | 1x 1x 39x 12x 36x 7x 30x 7x 30x 161x | /**
* Company Management Zustand Store
*
* Story 2.5.1 - Task 9b (GREEN Phase)
* AC14: State Management
*
* Manages UI state for company management feature:
* - Filter state (persisted in localStorage)
* - View mode toggle (grid/list, persisted)
* - Selected company name (transient, not persisted) - Story 1.16.2: uses company name as identifier
* - Modal states (transient, not persisted)
*
* Uses Zustand with persist middleware for filter and view mode persistence
*/
import { create } from 'zustand';
import { persist } from 'zustand/middleware';
import { CompanyStore, CompanyFilters } from '@/types/company.types';
export const useCompanyStore = create<CompanyStore>()(
persist(
(set) => ({
// Initial state
filters: {},
viewMode: 'grid',
selectedCompanyName: undefined,
isCreateModalOpen: false,
isEditModalOpen: false,
// Filter management
setFilters: (filters: CompanyFilters) => set({ filters }),
// View mode toggle
toggleViewMode: () =>
set((state) => ({
viewMode: state.viewMode === 'grid' ? 'list' : 'grid',
})),
// Selected company management (Story 1.16.2: uses company name as identifier)
setSelectedCompanyName: (name?: string) => set({ selectedCompanyName: name }),
// Create modal management
openCreateModal: () => set({ isCreateModalOpen: true }),
closeCreateModal: () => set({ isCreateModalOpen: false }),
// Edit modal management
openEditModal: (name: string) =>
set({
selectedCompanyName: name,
isEditModalOpen: true,
}),
closeEditModal: () =>
set({
isEditModalOpen: false,
selectedCompanyName: undefined,
}),
}),
{
name: 'company-store', // localStorage key
// Partial persist: only persist filters and viewMode
partialize: (state) => ({
filters: state.filters,
viewMode: state.viewMode,
}),
}
)
);
|