- searchModal Store 패턴을 사용하여 상태 관리 및 UI, 비즈니스로직 분리 - tsconfig.json에 import paths 추가
43 lines
1.5 KiB
TypeScript
43 lines
1.5 KiB
TypeScript
import useReportTab, { type Folder, type ReportDataFile } from '../(map-layout)/map/searchModal/useReportTab';
|
|
import { create } from 'zustand';
|
|
import { getDcData } from '@/components/lib/api';
|
|
|
|
interface useReportTabStoreType {
|
|
isOpen: boolean;
|
|
files: ReportDataFile[];
|
|
dcTree: Folder[];
|
|
dcFiles: ReportDataFile[];
|
|
setIsOpen: (open: boolean) => void;
|
|
setFiles: (files: ReportDataFile[]) => void;
|
|
fetchDcTree: (clsfSystmNm: string) => void;
|
|
fetchDcFiles: (clsfSystmNm: string) => void;
|
|
}
|
|
export const useReportTabStore = create<useReportTabStoreType>((set, get) => ({
|
|
isOpen: false,
|
|
files: [],
|
|
dcTree: [],
|
|
dcFiles: [],
|
|
setIsOpen: (open: boolean) => set({ isOpen: open }),
|
|
setFiles: (files: ReportDataFile[]) => set({ files }),
|
|
fetchDcTree: async (clsfSystmNm: string) => {
|
|
const { dcTree } = get();
|
|
try {
|
|
const result = await getDcData("/api/v1/dc/clsf?clsfSystmNm=" + clsfSystmNm);
|
|
if (result && JSON.stringify(result) !== JSON.stringify(dcTree))
|
|
set({ dcTree: result });
|
|
} catch (error) {
|
|
console.error('Failed to fetch DC tree:', error);
|
|
}
|
|
},
|
|
fetchDcFiles: async (clsfSystmNm: string) => {
|
|
const { getDcFiles } = useReportTab();
|
|
const { dcFiles } = get();
|
|
try {
|
|
const result = await getDcFiles(clsfSystmNm);
|
|
if (result && JSON.stringify(result) !== JSON.stringify(dcFiles))
|
|
set({ dcFiles: result });
|
|
} catch (error) {
|
|
console.error('Failed to fetch DC files:', error);
|
|
}
|
|
}
|
|
})); |