/** * ๐Ÿ“„ useSearchModalStore * ๊ฒ€์ƒ‰ ๋ชจ๋‹ฌ Zustand ์Šคํ† ์–ด * * - ๊ฒ€์ƒ‰ ๋ชจ๋‹ฌ ์—ด๊ธฐ/๋‹ซ๊ธฐ ๋ฐ ํƒญ ์ „ํ™˜ ์ƒํƒœ ๊ด€๋ฆฌ * - ๊ธฐ๋ณธ์ •๋ณด ๋ฐ ์œ ์ง€๊ด€๋ฆฌ ์ •๋ณด ํƒญ ๋ฐ์ดํ„ฐ ํ•„ํ„ฐ๋ง ๋ฐ ์กฐํšŒ * - ํ…Œ์ด๋ธ” ๋ฐ์ดํ„ฐ ๋ฐ ํŽ˜์ด์ง€๋„ค์ด์…˜ ์ƒํƒœ ๊ด€๋ฆฌ * - ์ง€์—ญ(์‹œ๋„/์‹œ๊ตฐ๊ตฌ) ๋ฐ ๋‚ ์งœ ๋ฒ”์œ„ ํ•„ํ„ฐ๋ง ๊ธฐ๋Šฅ * - ๋กœ๋”ฉ ์ƒํƒœ ๋ฐ ๋ฆฌ์…‹ ํ”Œ๋ž˜๊ทธ ๊ด€๋ฆฌ * - Zustand๋ฅผ ํ†ตํ•œ ์ค‘์•™ ์ง‘์ค‘์‹ ์ƒํƒœ ๊ด€๋ฆฌ * - ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ๊ฐ์ง€ ๋ฐ ๋ถˆํ•„์š”ํ•œ ์žฌ๋ Œ๋”๋ง ๋ฐฉ์ง€ */ import { create } from "zustand"; import type { UiTableSort } from "@common/business_components/ui"; // ๋‚ ์งœ ์กฐํ•ฉ ํ•จ์ˆ˜ 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; // ๊ธฐ๋ณธ์ •๋ณดยท์œ ์ง€๊ด€๋ฆฌ ์‚ฌ์—…ยท๋ณด๊ณ ์„œ ๋ชฉ๋ก์ด ๊ณต์œ ํ•˜๋Š” ํ˜„์žฌ ๋‹จ์ผ ์ •๋ ฌ ์ƒํƒœ sort?: UiTableSort; // ์œ ์ง€๊ด€๋ฆฌ ์ƒ์„ธ ๋ชฉ๋ก์˜ ํ˜„์žฌ ๋‹จ์ผ ์ •๋ ฌ ์ƒํƒœ detailSort?: UiTableSort; // ๋กœ๋”ฉ ์ƒํƒœ 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; setSort: (sort?: UiTableSort) => void; setDetailSort: (sort?: UiTableSort) => 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, sort: undefined, detailSort: undefined, 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 }), setSort: (sort) => set({ sort }), setDetailSort: (detailSort) => set({ detailSort }), 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, sort: undefined, detailSort: undefined, isResetPage: true, isResetDetailPage: true, isResetSelection: true, isResetDetailSelection: true, detailBizId: 0, }), })); export default useSearchModalStore;