72 lines
2.2 KiB
TypeScript
72 lines
2.2 KiB
TypeScript
import { create } from 'zustand'
|
|
import type { CommCode } from '@/types/CommCode'
|
|
|
|
interface SuitableState {
|
|
/* 공통코드 */
|
|
suitableCommCode: Map<string, CommCode[]>
|
|
/* 공통코드 설정 */
|
|
setSuitableCommCode: (headCode: string, commCode: CommCode[]) => void
|
|
|
|
/* 검색 상태 */
|
|
isSearch: boolean
|
|
/* 검색 상태 설정 */
|
|
setIsSearch: (isSearch: boolean) => void
|
|
|
|
/* 선택된 카테고리 */
|
|
selectedCategory: string
|
|
/* 선택된 카테고리 설정 */
|
|
setSelectedCategory: (category: string) => void
|
|
|
|
/* 검색 값 */
|
|
searchValue: string
|
|
/* 검색 값 설정 */
|
|
setSearchValue: (value: string) => void
|
|
|
|
/* 선택된 아이템 리스트 */
|
|
selectedItems: number[]
|
|
/* 선택된 아이템 추가 */
|
|
addSelectedItem: (itemId: number) => void
|
|
/* 선택된 아이템 제거 */
|
|
removeSelectedItem: (itemId: number) => void
|
|
/* 선택된 아이템 모두 제거 */
|
|
clearSelectedItems: () => void
|
|
}
|
|
|
|
export const useSuitableStore = create<SuitableState>((set) => ({
|
|
suitableCommCode: new Map() as Map<string, CommCode[]>,
|
|
isSearch: false as boolean,
|
|
selectedCategory: '' as string,
|
|
searchValue: '' as string,
|
|
selectedItems: [] as number[],
|
|
|
|
/* 공통코드 설정 */
|
|
setSuitableCommCode: (headCode: string, commCode: CommCode[]) =>
|
|
set((state) => ({
|
|
suitableCommCode: new Map(state.suitableCommCode).set(headCode, commCode),
|
|
})),
|
|
|
|
/* 검색 상태 설정 */
|
|
setIsSearch: (isSearch: boolean) => set({ isSearch }),
|
|
|
|
/* 선택된 카테고리 설정 */
|
|
setSelectedCategory: (category: string) => set({ selectedCategory: category }),
|
|
|
|
/* 검색 값 설정 */
|
|
setSearchValue: (value: string) => set({ searchValue: value }),
|
|
|
|
/* 선택된 아이템 추가 */
|
|
addSelectedItem: (itemId: number) =>
|
|
set((state) => ({
|
|
selectedItems: state.selectedItems.some((i) => i === itemId) ? state.selectedItems : [...state.selectedItems, itemId],
|
|
})),
|
|
|
|
/* 선택된 아이템 제거 */
|
|
removeSelectedItem: (itemId: number) =>
|
|
set((state) => ({
|
|
selectedItems: state.selectedItems.filter((i) => i !== itemId),
|
|
})),
|
|
|
|
/* 선택된 아이템 모두 제거 */
|
|
clearSelectedItems: () => set({ selectedItems: [] }),
|
|
}))
|