65 lines
2.3 KiB
TypeScript
65 lines
2.3 KiB
TypeScript
/**
|
|
* 📄 useReportTabStore
|
|
* 보고서 탭 Zustand 스토어
|
|
*
|
|
* - 보고서 탭 모달 열기/닫기 상태 관리
|
|
* - 보고서 파일 목록 및 트리 구조 상태 관리
|
|
* - DC 트리 데이터 조회 및 캐싱 기능
|
|
* - DC 파일 목록 조회 및 상태 업데이트
|
|
* - Zustand를 통한 중앙 집중식 상태 관리
|
|
* - 데이터 변경 감지 및 불필요한 재렌더링 방지
|
|
*
|
|
* 🔗 사용 API
|
|
* - 보고서 분류 조회: GET /api/v1/dc/clsf (sewerage-service)
|
|
*/
|
|
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 = async (clsfSystmSn: string): Promise<ReportDataFile[]> => {
|
|
if (!clsfSystmSn) {
|
|
console.error("clsfSystmSn is required to get files.");
|
|
return [];
|
|
}
|
|
const queryString = 'clsfSystmSn=' + clsfSystmSn;
|
|
const result = await getDcData(`/api/v1/dc/file${queryString ? `?${queryString}` : ''}`);
|
|
return result;
|
|
};
|
|
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);
|
|
}
|
|
}
|
|
})); |