/** * πŸ“„ useSearchModalStore * 검색 λͺ¨λ‹¬ Zustand μŠ€ν† μ–΄ * * - 검색 λͺ¨λ‹¬ μ—΄κΈ°/λ‹«κΈ° 및 νƒ­ μ „ν™˜ μƒνƒœ 관리 * - 기본정보 및 μœ μ§€κ΄€λ¦¬ 정보 νƒ­ 데이터 필터링 및 쑰회 * - ν…Œμ΄λΈ” 데이터 및 νŽ˜μ΄μ§€λ„€μ΄μ…˜ μƒνƒœ 관리 * - μ§€μ—­(μ‹œλ„/μ‹œκ΅°κ΅¬) 및 λ‚ μ§œ λ²”μœ„ 필터링 κΈ°λŠ₯ * - λ‘œλ”© μƒνƒœ 및 리셋 ν”Œλž˜κ·Έ 관리 * - Zustandλ₯Ό ν†΅ν•œ 쀑앙 집쀑식 μƒνƒœ 관리 * - 데이터 λ³€κ²½ 감지 및 λΆˆν•„μš”ν•œ μž¬λ Œλ”λ§ λ°©μ§€ */ import { create } from "zustand"; // λ‚ μ§œ μ‘°ν•© ν•¨μˆ˜ const getDateString = ( year: string, month: string, day: string, defaultDate: string, ) => { if (!year && !month && !day) return defaultDate; const y = year || defaultDate.slice(0, 4); const m = month || defaultDate.slice(4, 6); const d = day || defaultDate.slice(6, 8); return `${y}${m}${d}`; }; // 였늘 λ‚ μ§œ 계산 const today = new Date(); const todayYear = today.getFullYear().toString(); const todayMonth = (today.getMonth() + 1).toString().padStart(2, "0"); const todayDate = today.getDate().toString().padStart(2, "0"); export interface SearchModalState { // λͺ¨λ‹¬ μ—΄λ¦Ό μƒνƒœ isSearchModalOpen: boolean; // νƒ­ κ΄€λ ¨ activeTab: string; basicType: string; workType: string; // 졜초 λ Œλ” λ°©μ§€ ν”Œλž˜κ·Έ showTable: boolean; // ν…Œμ΄λΈ” 데이터 tableData: any[]; detailTableData: any[]; tableCount: number; detailTableCount: number; // νŽ˜μ΄μ§€λ„€μ΄μ…˜ curPage: number; detailCurPage: number; // λ‘œλ”© μƒνƒœ isLoading: boolean; isDetailLoading: boolean; // 리셋 ν”Œλž˜κ·Έ isResetPage: boolean; isResetDetailPage: boolean; isResetSelection: boolean; isResetDetailSelection: boolean; // 사업 ID detailBizId: number; // μ§€μ—­ ν•„ν„° ctpvCd: string; ctpvName: string; sggCd: string; sggName: string; // λ²”μœ„ ν•„ν„° start1: string; start2: string; end1: string; end2: string; // λ³€μˆ˜ ν•„ν„° var1: string; var2: string; // 연도 ν•„ν„° yearFilter: { start: string; end: string }; // λ‚ μ§œ κ΄€λ ¨ today: Date; todayYear: string; todayMonth: string; todayDate: string; // setters setIsSearchModalOpen: (open: boolean) => void; setActiveTab: (tab: string) => void; setBasicType: (type: string) => void; setWorkType: (type: string) => void; setShowTable: (show: boolean) => void; setTableData: (data: any[]) => void; setDetailTableData: (data: any[]) => void; setTableCount: (count: number) => void; setDetailTableCount: (count: number) => void; setCurPage: (page: number) => void; setDetailCurPage: (page: number) => void; setIsLoading: (loading: boolean) => void; setIsDetailLoading: (loading: boolean) => void; setIsResetPage: (reset: boolean) => void; setIsResetDetailPage: (reset: boolean) => void; setIsResetSelection: (reset: boolean) => void; setIsResetDetailSelection: (reset: boolean) => void; setDetailBizId: (id: number) => void; setCtpvCd: (cd: string) => void; setCtpvName: (name: string) => void; setSggCd: (cd: string) => void; setSggName: (name: string) => void; setStart1: (val: string) => void; setStart2: (val: string) => void; setEnd1: (val: string) => void; setEnd2: (val: string) => void; setVar1: (val: string) => void; setVar2: (val: string) => void; setYearFilter: (filter: { start: string; end: string }) => void; getDateString: (year: string, month: string, day: string, defaultDate: string) => string; resetFilters: () => void; // μ΄ˆκΈ°ν™” μ•‘μ…˜ } const useSearchModalStore = create((set) => ({ isSearchModalOpen: false, activeTab: "basic", basicType: "tb_ms_swage_ppl", workType: "['200', '201', '204']", showTable: false, tableData: [], detailTableData: [], tableCount: 0, detailTableCount: 0, curPage: 1, detailCurPage: 1, isLoading: false, isDetailLoading: false, isResetPage: false, isResetDetailPage: false, isResetSelection: false, isResetDetailSelection: false, detailBizId: 0, ctpvCd: "0", ctpvName: "", sggCd: "0", sggName: "", start1: "", start2: "", end1: "", end2: "", var1: "", var2: "", yearFilter: { start: "", end: "" }, today, todayYear, todayMonth, todayDate, setIsSearchModalOpen: (isSearchModalOpen) => set({ isSearchModalOpen }), setActiveTab: (tab) => set({ activeTab: tab }), setBasicType: (type) => set({ basicType: type }), setWorkType: (type) => set({ workType: type }), setShowTable: (show) => set({ showTable: show }), setTableData: (data) => set({ tableData: data }), setDetailTableData: (data) => set({ detailTableData: data }), setTableCount: (count) => set({ tableCount: count }), setDetailTableCount: (count) => set({ detailTableCount: count }), setCurPage: (page) => set({ curPage: page }), setDetailCurPage: (page) => set({ detailCurPage: page }), setIsLoading: (loading) => set({ isLoading: loading }), setIsDetailLoading: (loading) => set({ isDetailLoading: loading }), setIsResetPage: (reset) => set({ isResetPage: reset }), setIsResetDetailPage: (reset) => set({ isResetDetailPage: reset }), setIsResetSelection: (reset) => set({ isResetSelection: reset }), setIsResetDetailSelection: (reset) => set({ isResetDetailSelection: reset }), setDetailBizId: (id) => set({ detailBizId: id }), setCtpvCd: (cd) => set({ ctpvCd: cd }), setCtpvName: (name) => set({ ctpvName: name }), setSggCd: (cd) => set({ sggCd: cd }), setSggName: (name) => set({ sggName: name }), setStart1: (val) => set({ start1: val }), setStart2: (val) => set({ start2: val }), setEnd1: (val) => set({ end1: val }), setEnd2: (val) => set({ end2: val }), setVar1: (val) => set({ var1: val }), setVar2: (val) => set({ var2: val }), setYearFilter: (filter) => set({ yearFilter: filter }), getDateString: getDateString, // μ΄ˆκΈ°ν™” μ•‘μ…˜ resetFilters: () => set({ showTable: false, start1: "", start2: "", end1: "", end2: "", var1: "", var2: "", ctpvCd: "0", sggCd: "0", yearFilter: { start: "", end: "" }, tableData: [], detailTableData: [], tableCount: 0, detailTableCount: 0, curPage: 1, detailCurPage: 1, isResetPage: true, isResetDetailPage: true, isResetSelection: true, isResetDetailSelection: true, detailBizId: 0, }), })); export default useSearchModalStore;