@bwg-ui/core 1.1.25 → 1.1.27
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunks/common-components-CniOkOzu.js +15776 -0
- package/dist/chunks/common-components-DrcQahsO.cjs +183 -0
- package/dist/chunks/{core-Dl0PdDdT.js → core-CEDyqniq.js} +1 -2
- package/dist/chunks/core-lmAmbqvY.cjs +1 -0
- package/dist/chunks/{enc-base64-D7t4BoUA.js → enc-base64-CF2tIkYl.js} +4 -5
- package/dist/chunks/enc-base64-Dxq399hI.cjs +1 -0
- package/dist/chunks/{sha256-C2-s1oZe.js → sha256-DYurgXCU.js} +12 -13
- package/dist/chunks/sha256-H5WWQnKT.cjs +1 -0
- package/dist/components/common/BwgPagination.d.ts +1 -1
- package/dist/components/common/BwgPagination.d.ts.map +1 -1
- package/dist/components/common/index.cjs +1 -2
- package/dist/components/common/index.d.ts +3 -1
- package/dist/components/common/index.d.ts.map +1 -1
- package/dist/components/common/index.js +16 -17
- package/dist/components/core/BwgFormItem.d.ts +2 -2
- package/dist/components/core/BwgFormItem.d.ts.map +1 -1
- package/dist/components/core/BwgInput.d.ts.map +1 -1
- package/dist/components/core/index.cjs +1 -2
- package/dist/components/core/index.js +1218 -23
- package/dist/components/guide/index.cjs +1 -2
- package/dist/components/guide/index.js +3 -4
- package/dist/components/layout/index.cjs +35 -2
- package/dist/components/layout/index.js +350 -10
- package/dist/components/popup/MenuReport.d.ts.map +1 -1
- package/dist/index.cjs +1 -2
- package/dist/index.js +211 -222
- package/dist/provider/index.cjs +1 -2
- package/dist/provider/index.js +384 -25
- package/dist/stores/index.cjs +2 -2
- package/dist/stores/index.js +1394 -24
- package/dist/utils/index.cjs +1 -2
- package/dist/utils/index.js +1369 -200
- package/package.json +2 -3
- package/dist/chunks/AuthContext-CXng9fj0.cjs +0 -2
- package/dist/chunks/AuthContext-CXng9fj0.cjs.map +0 -1
- package/dist/chunks/AuthContext-DrEpBrpB.js +0 -57
- package/dist/chunks/AuthContext-DrEpBrpB.js.map +0 -1
- package/dist/chunks/BwgSpace-CnLM4qcg.js +0 -27
- package/dist/chunks/BwgSpace-CnLM4qcg.js.map +0 -1
- package/dist/chunks/BwgSpace-b0hmM1Ht.cjs +0 -2
- package/dist/chunks/BwgSpace-b0hmM1Ht.cjs.map +0 -1
- package/dist/chunks/BwgSwitch-DOlc57wi.cjs +0 -2
- package/dist/chunks/BwgSwitch-DOlc57wi.cjs.map +0 -1
- package/dist/chunks/BwgSwitch-D_scwi9_.js +0 -269
- package/dist/chunks/BwgSwitch-D_scwi9_.js.map +0 -1
- package/dist/chunks/BwgUploader-CkXwkcUL.cjs +0 -3
- package/dist/chunks/BwgUploader-CkXwkcUL.cjs.map +0 -1
- package/dist/chunks/BwgUploader-DBFF9BPF.js +0 -3250
- package/dist/chunks/BwgUploader-DBFF9BPF.js.map +0 -1
- package/dist/chunks/LoadingOverlay-DAZJF5wg.js +0 -19
- package/dist/chunks/LoadingOverlay-DAZJF5wg.js.map +0 -1
- package/dist/chunks/LoadingOverlay-DcmKvoZA.cjs +0 -2
- package/dist/chunks/LoadingOverlay-DcmKvoZA.cjs.map +0 -1
- package/dist/chunks/SSOHandler-BY6LXMLc.cjs +0 -237
- package/dist/chunks/SSOHandler-BY6LXMLc.cjs.map +0 -1
- package/dist/chunks/SSOHandler-CxvxEBaH.js +0 -28654
- package/dist/chunks/SSOHandler-CxvxEBaH.js.map +0 -1
- package/dist/chunks/ScreenProtectContext-3my4PHFa.js +0 -154
- package/dist/chunks/ScreenProtectContext-3my4PHFa.js.map +0 -1
- package/dist/chunks/ScreenProtectContext-CVuXrJm6.cjs +0 -2
- package/dist/chunks/ScreenProtectContext-CVuXrJm6.cjs.map +0 -1
- package/dist/chunks/SearchBoxContext-DwFDOyYG.cjs +0 -2
- package/dist/chunks/SearchBoxContext-DwFDOyYG.cjs.map +0 -1
- package/dist/chunks/SearchBoxContext-gWM7FHIw.js +0 -86
- package/dist/chunks/SearchBoxContext-gWM7FHIw.js.map +0 -1
- package/dist/chunks/ViewContainer-Bhq22_B3.cjs +0 -36
- package/dist/chunks/ViewContainer-Bhq22_B3.cjs.map +0 -1
- package/dist/chunks/ViewContainer-D9SKBnrn.js +0 -338
- package/dist/chunks/ViewContainer-D9SKBnrn.js.map +0 -1
- package/dist/chunks/apiUtils-BZ6s0_NI.cjs +0 -3
- package/dist/chunks/apiUtils-BZ6s0_NI.cjs.map +0 -1
- package/dist/chunks/apiUtils-DSwE62oG.js +0 -1450
- package/dist/chunks/apiUtils-DSwE62oG.js.map +0 -1
- package/dist/chunks/codeStore-il4-kZPe.cjs +0 -2
- package/dist/chunks/codeStore-il4-kZPe.cjs.map +0 -1
- package/dist/chunks/codeStore-vPj4Y0TK.js +0 -450
- package/dist/chunks/codeStore-vPj4Y0TK.js.map +0 -1
- package/dist/chunks/core-BHejg5iS.cjs +0 -2
- package/dist/chunks/core-BHejg5iS.cjs.map +0 -1
- package/dist/chunks/core-Dl0PdDdT.js.map +0 -1
- package/dist/chunks/enc-base64-BkBtNBQV.cjs +0 -2
- package/dist/chunks/enc-base64-BkBtNBQV.cjs.map +0 -1
- package/dist/chunks/enc-base64-D7t4BoUA.js.map +0 -1
- package/dist/chunks/favoriteStore-Bh1FuZm9.js +0 -439
- package/dist/chunks/favoriteStore-Bh1FuZm9.js.map +0 -1
- package/dist/chunks/favoriteStore-CcKg_nEH.cjs +0 -2
- package/dist/chunks/favoriteStore-CcKg_nEH.cjs.map +0 -1
- package/dist/chunks/jsx-runtime-CeSfJrVB.cjs +0 -31
- package/dist/chunks/jsx-runtime-CeSfJrVB.cjs.map +0 -1
- package/dist/chunks/jsx-runtime-Dpn_P65e.js +0 -634
- package/dist/chunks/jsx-runtime-Dpn_P65e.js.map +0 -1
- package/dist/chunks/popupStore-BRRmB4zH.js +0 -92
- package/dist/chunks/popupStore-BRRmB4zH.js.map +0 -1
- package/dist/chunks/popupStore-DUApUBF2.cjs +0 -2
- package/dist/chunks/popupStore-DUApUBF2.cjs.map +0 -1
- package/dist/chunks/realFormat-Cha7OTd9.cjs +0 -2
- package/dist/chunks/realFormat-Cha7OTd9.cjs.map +0 -1
- package/dist/chunks/realFormat-DRGLFabQ.js +0 -305
- package/dist/chunks/realFormat-DRGLFabQ.js.map +0 -1
- package/dist/chunks/sha256-C2-s1oZe.js.map +0 -1
- package/dist/chunks/sha256-DiIRoCQ8.cjs +0 -2
- package/dist/chunks/sha256-DiIRoCQ8.cjs.map +0 -1
- package/dist/chunks/usePopup-D2JEuDrO.cjs +0 -2
- package/dist/chunks/usePopup-D2JEuDrO.cjs.map +0 -1
- package/dist/chunks/usePopup-DarKTbRC.js +0 -109
- package/dist/chunks/usePopup-DarKTbRC.js.map +0 -1
- package/dist/components/common/index.cjs.map +0 -1
- package/dist/components/common/index.js.map +0 -1
- package/dist/components/core/index.cjs.map +0 -1
- package/dist/components/core/index.js.map +0 -1
- package/dist/components/guide/index.cjs.map +0 -1
- package/dist/components/guide/index.js.map +0 -1
- package/dist/components/layout/index.cjs.map +0 -1
- package/dist/components/layout/index.js.map +0 -1
- package/dist/index.cjs.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/provider/index.cjs.map +0 -1
- package/dist/provider/index.js.map +0 -1
- package/dist/stores/index.cjs.map +0 -1
- package/dist/stores/index.js.map +0 -1
- package/dist/utils/index.cjs.map +0 -1
- package/dist/utils/index.js.map +0 -1
|
@@ -1,450 +0,0 @@
|
|
|
1
|
-
import { create as D } from "zustand";
|
|
2
|
-
import { aJ as S, c as H, al as _ } from "./apiUtils-DSwE62oG.js";
|
|
3
|
-
const O = {
|
|
4
|
-
CACHE_SIZE_LIMIT: 1e3
|
|
5
|
-
}, t = {
|
|
6
|
-
codeCache: /* @__PURE__ */ new Map(),
|
|
7
|
-
nameCache: /* @__PURE__ */ new Map(),
|
|
8
|
-
optionCache: /* @__PURE__ */ new Map(),
|
|
9
|
-
colorCache: /* @__PURE__ */ new Map(),
|
|
10
|
-
loadedGroups: /* @__PURE__ */ new Set(),
|
|
11
|
-
cacheHits: /* @__PURE__ */ new Map(),
|
|
12
|
-
clearCache() {
|
|
13
|
-
this.codeCache.clear(), this.nameCache.clear(), this.optionCache.clear(), this.colorCache.clear(), this.loadedGroups.clear(), this.cacheHits.clear();
|
|
14
|
-
},
|
|
15
|
-
cleanupCache() {
|
|
16
|
-
const s = Array.from(this.cacheHits.entries());
|
|
17
|
-
s.sort((e, c) => e[1] - c[1]), s.slice(0, Math.floor(s.length * 0.3)).forEach(([e]) => {
|
|
18
|
-
this.codeCache.delete(e), this.nameCache.delete(e), this.optionCache.delete(e), this.colorCache.delete(e), this.cacheHits.delete(e);
|
|
19
|
-
});
|
|
20
|
-
},
|
|
21
|
-
isGroupLoaded(s) {
|
|
22
|
-
return this.loadedGroups.has(s);
|
|
23
|
-
},
|
|
24
|
-
markGroupLoaded(s) {
|
|
25
|
-
this.loadedGroups.add(s);
|
|
26
|
-
}
|
|
27
|
-
}, y = (s) => {
|
|
28
|
-
console.log("대규모 데이터 변환 시작:", s);
|
|
29
|
-
const p = {};
|
|
30
|
-
if (s && s.code && Array.isArray(s.code)) {
|
|
31
|
-
const e = s.code, c = s.opt || [], o = /* @__PURE__ */ new Map();
|
|
32
|
-
c.forEach((a) => {
|
|
33
|
-
a.cmmnCd && a.enblYn === "Y" && (o.has(a.cmmnCd) || o.set(a.cmmnCd, []), o.get(a.cmmnCd).push(a));
|
|
34
|
-
}), e.forEach((a) => {
|
|
35
|
-
if (a && a.cmmnCdGrp && a.cmmnCd && a.enblYn === "Y") {
|
|
36
|
-
const n = a.cmmnCdGrp;
|
|
37
|
-
p[n] || (p[n] = {});
|
|
38
|
-
const d = (o.get(a.cmmnCd) || []).reduce((i, l) => (l.optnCd && l.optnNm && (i[l.optnCd] = l.optnNm), i), {});
|
|
39
|
-
p[n][a.cmmnCd] = {
|
|
40
|
-
codeValue: a.cmmnCd,
|
|
41
|
-
codeNm: a.cmmnCdNm,
|
|
42
|
-
groupCode: a.cmmnCdGrp,
|
|
43
|
-
commonCode: a.cmmnCd,
|
|
44
|
-
labelColor: a.cmmnCdClr,
|
|
45
|
-
systemCodeYn: a.syscdYn,
|
|
46
|
-
sortOrder: parseInt(a.sortOrd) || 1,
|
|
47
|
-
enabled: a.enblYn === "Y",
|
|
48
|
-
options: Object.keys(d).length > 0 ? d : null,
|
|
49
|
-
originalData: a
|
|
50
|
-
};
|
|
51
|
-
}
|
|
52
|
-
});
|
|
53
|
-
}
|
|
54
|
-
return console.log("대규모 데이터 변환 완료:", p), p;
|
|
55
|
-
}, r = D()(
|
|
56
|
-
S(
|
|
57
|
-
(s, p) => ({
|
|
58
|
-
codeData: null,
|
|
59
|
-
isLoading: !1,
|
|
60
|
-
error: null,
|
|
61
|
-
lastUpdated: null,
|
|
62
|
-
loadedGroups: /* @__PURE__ */ new Set(),
|
|
63
|
-
fetchData: async () => {
|
|
64
|
-
s({ isLoading: !0, error: null });
|
|
65
|
-
try {
|
|
66
|
-
console.log("대규모 공통코드 데이터 가져오기 시작: SCMSIGN00301");
|
|
67
|
-
const e = await H(_("SRCH_CODE"), {
|
|
68
|
-
crprCd: "100"
|
|
69
|
-
});
|
|
70
|
-
console.log("대규모 공통코드 응답:", e), console.log("대규모 공통코드목록:", e.code), console.log("대규모 공통코드옵션션목록:", e.opt);
|
|
71
|
-
const c = y(e);
|
|
72
|
-
t.clearCache();
|
|
73
|
-
const o = new Set(Object.keys(c));
|
|
74
|
-
o.forEach((a) => {
|
|
75
|
-
t.markGroupLoaded(a);
|
|
76
|
-
}), s({
|
|
77
|
-
codeData: c,
|
|
78
|
-
isLoading: !1,
|
|
79
|
-
error: null,
|
|
80
|
-
lastUpdated: /* @__PURE__ */ new Date(),
|
|
81
|
-
loadedGroups: o
|
|
82
|
-
}), console.log("대규모 공통코드 데이터 가져오기 완료");
|
|
83
|
-
} catch (e) {
|
|
84
|
-
console.error("대규모 공통코드 데이터 가져오기 실패:", e), s({
|
|
85
|
-
isLoading: !1,
|
|
86
|
-
error: e instanceof Error ? e.message : "대규모 공통코드 데이터 가져오기 실패"
|
|
87
|
-
});
|
|
88
|
-
}
|
|
89
|
-
},
|
|
90
|
-
loadSpecificGroup: async (e) => {
|
|
91
|
-
const { codeData: c, loadedGroups: o } = p();
|
|
92
|
-
if (!c || o.has(e)) return;
|
|
93
|
-
const a = new Set(o).add(e);
|
|
94
|
-
s({ loadedGroups: a }), t.markGroupLoaded(e);
|
|
95
|
-
},
|
|
96
|
-
setData: (e) => {
|
|
97
|
-
t.clearCache();
|
|
98
|
-
const c = new Set(Object.keys(e));
|
|
99
|
-
c.forEach((o) => {
|
|
100
|
-
t.markGroupLoaded(o);
|
|
101
|
-
}), s({
|
|
102
|
-
codeData: e,
|
|
103
|
-
lastUpdated: /* @__PURE__ */ new Date(),
|
|
104
|
-
loadedGroups: c
|
|
105
|
-
});
|
|
106
|
-
},
|
|
107
|
-
clearData: () => {
|
|
108
|
-
t.clearCache(), s({
|
|
109
|
-
codeData: null,
|
|
110
|
-
isLoading: !1,
|
|
111
|
-
error: null,
|
|
112
|
-
lastUpdated: null,
|
|
113
|
-
loadedGroups: /* @__PURE__ */ new Set()
|
|
114
|
-
});
|
|
115
|
-
},
|
|
116
|
-
getLoadedGroups: () => Array.from(p().loadedGroups)
|
|
117
|
-
}),
|
|
118
|
-
{
|
|
119
|
-
name: "large-data-storage",
|
|
120
|
-
partialize: (s) => ({
|
|
121
|
-
codeData: s.codeData,
|
|
122
|
-
lastUpdated: s.lastUpdated,
|
|
123
|
-
loadedGroups: Array.from(s.loadedGroups)
|
|
124
|
-
})
|
|
125
|
-
}
|
|
126
|
-
)
|
|
127
|
-
), $ = D()(
|
|
128
|
-
S(
|
|
129
|
-
(s, p) => ({
|
|
130
|
-
// 공통 데이터 스토어에서 상태 가져오기
|
|
131
|
-
get codeData() {
|
|
132
|
-
return r.getState().codeData;
|
|
133
|
-
},
|
|
134
|
-
get isLoading() {
|
|
135
|
-
return r.getState().isLoading;
|
|
136
|
-
},
|
|
137
|
-
get error() {
|
|
138
|
-
return r.getState().error;
|
|
139
|
-
},
|
|
140
|
-
get lastUpdated() {
|
|
141
|
-
return r.getState().lastUpdated;
|
|
142
|
-
},
|
|
143
|
-
// 공통코드 가져오기 (중앙 스토어 사용)
|
|
144
|
-
fetchCommonCodes: async () => {
|
|
145
|
-
await r.getState().fetchData();
|
|
146
|
-
},
|
|
147
|
-
// 1. 통합된 코드 목록 조회 (그룹코드 필수, 옵션으로 필터링)
|
|
148
|
-
getCodeList: (e, c) => {
|
|
149
|
-
const {
|
|
150
|
-
enabledOnly: o = !0,
|
|
151
|
-
systemCodeOnly: a = !1,
|
|
152
|
-
sortByOrder: n = !1,
|
|
153
|
-
excludeParentCode: u = !1
|
|
154
|
-
} = c || {}, d = `simpleCodeList_${e}_${o}_${a}_${n}_${u}`;
|
|
155
|
-
if (t.optionCache.has(d)) {
|
|
156
|
-
const h = t.cacheHits.get(d) || 0;
|
|
157
|
-
return t.cacheHits.set(d, h + 1), t.optionCache.get(d);
|
|
158
|
-
}
|
|
159
|
-
const i = r.getState().codeData;
|
|
160
|
-
if (!i) return [];
|
|
161
|
-
if (!t.isGroupLoaded(e) && !i[e])
|
|
162
|
-
return console.warn(`그룹 ${e}가 아직 로드되지 않았습니다.`), [];
|
|
163
|
-
const l = [], f = i[e];
|
|
164
|
-
f && Object.values(f).forEach((h) => {
|
|
165
|
-
if (!(o && !h.enabled) && !(a && h.systemCodeYn !== "Y"))
|
|
166
|
-
if (u) {
|
|
167
|
-
const m = e.length, b = h.codeValue.substring(m);
|
|
168
|
-
b.length > 0 && l.push({
|
|
169
|
-
...h,
|
|
170
|
-
codeValue: b
|
|
171
|
-
// 자식코드만 사용
|
|
172
|
-
});
|
|
173
|
-
} else
|
|
174
|
-
l.push(h);
|
|
175
|
-
});
|
|
176
|
-
let g;
|
|
177
|
-
n ? g = l.sort((h, m) => h.sortOrder !== m.sortOrder ? h.sortOrder - m.sortOrder : h.codeValue.localeCompare(m.codeValue)) : g = l.sort(
|
|
178
|
-
(h, m) => h.codeValue.localeCompare(m.codeValue)
|
|
179
|
-
);
|
|
180
|
-
const C = g.map((h) => ({
|
|
181
|
-
label: h.codeNm,
|
|
182
|
-
value: h.codeValue,
|
|
183
|
-
tagColor: h.labelColor
|
|
184
|
-
}));
|
|
185
|
-
return t.optionCache.size >= O.CACHE_SIZE_LIMIT && t.cleanupCache(), t.optionCache.set(d, C), t.cacheHits.set(d, 1), C;
|
|
186
|
-
},
|
|
187
|
-
// 2. 코드를 던졌을 때 코드명을 리턴 (대규모 최적화)
|
|
188
|
-
getCodeName: (e) => {
|
|
189
|
-
if (t.nameCache.has(e)) {
|
|
190
|
-
const o = t.cacheHits.get(`name_${e}`) || 0;
|
|
191
|
-
return t.cacheHits.set(`name_${e}`, o + 1), t.nameCache.get(e);
|
|
192
|
-
}
|
|
193
|
-
const c = r.getState().codeData;
|
|
194
|
-
if (!c) return null;
|
|
195
|
-
for (const o of Object.values(c))
|
|
196
|
-
for (const a of Object.values(o))
|
|
197
|
-
if (a.codeValue === e)
|
|
198
|
-
return t.nameCache.set(e, a.codeNm), t.cacheHits.set(`name_${e}`, 1), a.codeNm;
|
|
199
|
-
return null;
|
|
200
|
-
},
|
|
201
|
-
// 3. 코드를 던졌을 때 라벨 컬러를 리턴 (대규모 최적화)
|
|
202
|
-
getCodeColor: (e) => {
|
|
203
|
-
if (t.colorCache.has(e)) {
|
|
204
|
-
const o = t.cacheHits.get(`color_${e}`) || 0;
|
|
205
|
-
return t.cacheHits.set(`color_${e}`, o + 1), t.colorCache.get(e);
|
|
206
|
-
}
|
|
207
|
-
const c = r.getState().codeData;
|
|
208
|
-
if (!c) return null;
|
|
209
|
-
for (const o of Object.values(c))
|
|
210
|
-
for (const a of Object.values(o))
|
|
211
|
-
if (a.codeValue === e)
|
|
212
|
-
return t.colorCache.set(
|
|
213
|
-
e,
|
|
214
|
-
a.labelColor || ""
|
|
215
|
-
), t.cacheHits.set(`color_${e}`, 1), a.labelColor;
|
|
216
|
-
return null;
|
|
217
|
-
},
|
|
218
|
-
// 4. 그리드 lookup용 데이터 반환 (labels, values 배열, lookupDisplay 포함)
|
|
219
|
-
getGridLookup: (e) => {
|
|
220
|
-
const c = `gridLookup_${e}`;
|
|
221
|
-
if (t.optionCache.has(c)) {
|
|
222
|
-
const i = t.cacheHits.get(c) || 0;
|
|
223
|
-
return t.cacheHits.set(c, i + 1), t.optionCache.get(c);
|
|
224
|
-
}
|
|
225
|
-
const o = r.getState().codeData;
|
|
226
|
-
if (!o) return { labels: [], values: [], lookupDisplay: !0 };
|
|
227
|
-
const a = o[e];
|
|
228
|
-
if (!a) return { labels: [], values: [], lookupDisplay: !0 };
|
|
229
|
-
const n = [], u = [];
|
|
230
|
-
Object.values(a).filter((i) => i.enabled).sort((i, l) => i.sortOrder - l.sortOrder).forEach((i) => {
|
|
231
|
-
n.push(i.codeNm), u.push(i.codeValue);
|
|
232
|
-
});
|
|
233
|
-
const d = { labels: n, values: u, lookupDisplay: !0 };
|
|
234
|
-
return t.optionCache.set(c, d), t.cacheHits.set(c, 1), d;
|
|
235
|
-
},
|
|
236
|
-
// 3. 옵션값으로 코드를 조회하는 새로운 메서드
|
|
237
|
-
getCodeByOption: (e, c, o) => {
|
|
238
|
-
const a = `codeByOption_${e}_${c}_${o}`;
|
|
239
|
-
if (t.codeCache.has(a)) {
|
|
240
|
-
const l = t.cacheHits.get(a) || 0;
|
|
241
|
-
return t.cacheHits.set(a, l + 1), t.codeCache.get(a);
|
|
242
|
-
}
|
|
243
|
-
const n = r.getState().codeData;
|
|
244
|
-
if (!n) return [];
|
|
245
|
-
const u = [], d = n[e];
|
|
246
|
-
d && Object.values(d).forEach((l) => {
|
|
247
|
-
l.enabled && l.options && l.options[c] === o && u.push({
|
|
248
|
-
...l,
|
|
249
|
-
codeNm: l.options[c] || l.codeNm
|
|
250
|
-
// 옵션값을 코드명으로 사용
|
|
251
|
-
});
|
|
252
|
-
});
|
|
253
|
-
const i = u.sort(
|
|
254
|
-
(l, f) => l.codeValue.localeCompare(f.codeValue)
|
|
255
|
-
);
|
|
256
|
-
return t.codeCache.size >= O.CACHE_SIZE_LIMIT && t.cleanupCache(), t.codeCache.set(a, i), t.cacheHits.set(a, 1), i;
|
|
257
|
-
},
|
|
258
|
-
// 6. 옵션코드별로 코드 목록 조회 (SimpleCodeItem 형태로 반환)
|
|
259
|
-
getCodeListByOption: (e, c, o) => {
|
|
260
|
-
const {
|
|
261
|
-
enabledOnly: a = !0,
|
|
262
|
-
systemCodeOnly: n = !1,
|
|
263
|
-
sortByOrder: u = !1
|
|
264
|
-
} = o || {}, d = `codeListByOption_${e}_${c}_${a}_${n}_${u}`;
|
|
265
|
-
if (t.codeCache.has(d)) {
|
|
266
|
-
const C = t.cacheHits.get(d) || 0;
|
|
267
|
-
return t.cacheHits.set(d, C + 1), t.codeCache.get(
|
|
268
|
-
d
|
|
269
|
-
);
|
|
270
|
-
}
|
|
271
|
-
const i = r.getState().codeData;
|
|
272
|
-
if (!i) return [];
|
|
273
|
-
if (!t.isGroupLoaded(e) && !i[e])
|
|
274
|
-
return console.warn(`그룹 ${e}가 아직 로드되지 않았습니다.`), [];
|
|
275
|
-
const l = [], f = i[e];
|
|
276
|
-
f && Object.values(f).forEach((C) => {
|
|
277
|
-
a && !C.enabled || n && C.systemCodeYn !== "Y" || C.options && C.options[c] && l.push({
|
|
278
|
-
label: C.options[c],
|
|
279
|
-
// optnNm 값
|
|
280
|
-
value: C.commonCode,
|
|
281
|
-
// 공통코드값
|
|
282
|
-
tagColor: C.labelColor
|
|
283
|
-
// 라벨 컬러
|
|
284
|
-
});
|
|
285
|
-
});
|
|
286
|
-
let g;
|
|
287
|
-
return u ? g = l.sort((C, h) => C.value.localeCompare(h.value)) : g = l.sort(
|
|
288
|
-
(C, h) => C.value.localeCompare(h.value)
|
|
289
|
-
), t.codeCache.size >= O.CACHE_SIZE_LIMIT && t.cleanupCache(), t.codeCache.set(d, g), t.cacheHits.set(d, 1), g;
|
|
290
|
-
},
|
|
291
|
-
// 7. 그룹코드 목록 조회
|
|
292
|
-
getAvailableGroupCodes: () => {
|
|
293
|
-
const e = "available_group_codes";
|
|
294
|
-
if (t.nameCache.has(e)) {
|
|
295
|
-
const a = t.cacheHits.get(e) || 0;
|
|
296
|
-
return t.cacheHits.set(e, a + 1), JSON.parse(t.nameCache.get(e));
|
|
297
|
-
}
|
|
298
|
-
const c = r.getState().codeData;
|
|
299
|
-
if (!c) return [];
|
|
300
|
-
const o = Object.keys(c).sort();
|
|
301
|
-
return t.nameCache.set(
|
|
302
|
-
e,
|
|
303
|
-
JSON.stringify(o)
|
|
304
|
-
), t.cacheHits.set(e, 1), o;
|
|
305
|
-
},
|
|
306
|
-
// 공통코드 초기화
|
|
307
|
-
clearCodes: () => {
|
|
308
|
-
r.getState().clearData();
|
|
309
|
-
}
|
|
310
|
-
}),
|
|
311
|
-
{
|
|
312
|
-
name: "code-storage",
|
|
313
|
-
partialize: (s) => ({
|
|
314
|
-
// 상태는 중앙 스토어에서 관리하므로 여기서는 저장하지 않음
|
|
315
|
-
})
|
|
316
|
-
}
|
|
317
|
-
)
|
|
318
|
-
), v = D()(
|
|
319
|
-
S(
|
|
320
|
-
(s, p) => ({
|
|
321
|
-
// 공통 데이터 스토어에서 상태 가져오기
|
|
322
|
-
get codeData() {
|
|
323
|
-
return r.getState().codeData;
|
|
324
|
-
},
|
|
325
|
-
get isLoading() {
|
|
326
|
-
return r.getState().isLoading;
|
|
327
|
-
},
|
|
328
|
-
get error() {
|
|
329
|
-
return r.getState().error;
|
|
330
|
-
},
|
|
331
|
-
get lastUpdated() {
|
|
332
|
-
return r.getState().lastUpdated;
|
|
333
|
-
},
|
|
334
|
-
// 공통코드 가져오기 (중앙 스토어 사용)
|
|
335
|
-
fetchCommonCodes: async () => {
|
|
336
|
-
await r.getState().fetchData();
|
|
337
|
-
},
|
|
338
|
-
// 그룹코드와 옵션코드를 던졌을 때 상세코드의 옵션값을 리턴 (대규모 최적화)
|
|
339
|
-
getOptionValue: (e, c) => {
|
|
340
|
-
const o = `option_${e}_${c}`;
|
|
341
|
-
if (t.optionCache.has(o)) {
|
|
342
|
-
const u = t.cacheHits.get(o) || 0;
|
|
343
|
-
return t.cacheHits.set(o, u + 1), t.optionCache.get(o);
|
|
344
|
-
}
|
|
345
|
-
const a = r.getState().codeData;
|
|
346
|
-
if (!a) return null;
|
|
347
|
-
const n = a[e];
|
|
348
|
-
if (n && n[c]) {
|
|
349
|
-
const u = n[c].options;
|
|
350
|
-
return t.optionCache.set(o, u), t.cacheHits.set(o, 1), u;
|
|
351
|
-
}
|
|
352
|
-
return null;
|
|
353
|
-
},
|
|
354
|
-
// 특정 옵션 키의 값 가져오기 (대규모 최적화)
|
|
355
|
-
getOptionByKey: (e, c, o) => {
|
|
356
|
-
const a = `option_${e}_${c}_${o}`;
|
|
357
|
-
if (t.optionCache.has(a)) {
|
|
358
|
-
const d = t.cacheHits.get(a) || 0;
|
|
359
|
-
return t.cacheHits.set(a, d + 1), t.optionCache.get(a);
|
|
360
|
-
}
|
|
361
|
-
const n = p().getOptionValue(e, c), u = n ? n[o] : null;
|
|
362
|
-
return t.optionCache.set(a, u), t.cacheHits.set(a, 1), u;
|
|
363
|
-
},
|
|
364
|
-
// 공통코드 초기화
|
|
365
|
-
clearCodes: () => {
|
|
366
|
-
r.getState().clearData();
|
|
367
|
-
}
|
|
368
|
-
}),
|
|
369
|
-
{
|
|
370
|
-
name: "option-storage",
|
|
371
|
-
partialize: (s) => ({
|
|
372
|
-
// 상태는 중앙 스토어에서 관리하므로 여기서는 저장하지 않음
|
|
373
|
-
})
|
|
374
|
-
}
|
|
375
|
-
)
|
|
376
|
-
), E = D()(
|
|
377
|
-
S(
|
|
378
|
-
(s, p) => ({
|
|
379
|
-
// 공통 데이터 스토어에서 상태 가져오기
|
|
380
|
-
get codeData() {
|
|
381
|
-
return r.getState().codeData;
|
|
382
|
-
},
|
|
383
|
-
get isLoading() {
|
|
384
|
-
return r.getState().isLoading;
|
|
385
|
-
},
|
|
386
|
-
get error() {
|
|
387
|
-
return r.getState().error;
|
|
388
|
-
},
|
|
389
|
-
get lastUpdated() {
|
|
390
|
-
return r.getState().lastUpdated;
|
|
391
|
-
},
|
|
392
|
-
// 공통코드 가져오기 (중앙 스토어 사용)
|
|
393
|
-
fetchCommonCodes: async () => {
|
|
394
|
-
await r.getState().fetchData();
|
|
395
|
-
},
|
|
396
|
-
// 코드를 던졌을 때 컬러코드를 리턴 (대규모 최적화)
|
|
397
|
-
getColorCode: (e) => {
|
|
398
|
-
if (t.colorCache.has(e)) {
|
|
399
|
-
const o = t.cacheHits.get(`color_${e}`) || 0;
|
|
400
|
-
return t.cacheHits.set(`color_${e}`, o + 1), t.colorCache.get(e);
|
|
401
|
-
}
|
|
402
|
-
const c = r.getState().codeData;
|
|
403
|
-
if (!c) return null;
|
|
404
|
-
for (const o of Object.values(c))
|
|
405
|
-
for (const a of Object.values(o))
|
|
406
|
-
if (a.codeValue === e)
|
|
407
|
-
return t.colorCache.set(
|
|
408
|
-
e,
|
|
409
|
-
a.labelColor || ""
|
|
410
|
-
), t.cacheHits.set(`color_${e}`, 1), a.labelColor;
|
|
411
|
-
return null;
|
|
412
|
-
},
|
|
413
|
-
// 코드/컬러 매핑 배열 가져오기 (대규모 최적화)
|
|
414
|
-
getColorMapping: () => {
|
|
415
|
-
const e = "color_mapping";
|
|
416
|
-
if (t.optionCache.has(e)) {
|
|
417
|
-
const a = t.cacheHits.get(e) || 0;
|
|
418
|
-
return t.cacheHits.set(e, a + 1), t.optionCache.get(e);
|
|
419
|
-
}
|
|
420
|
-
const c = r.getState().codeData;
|
|
421
|
-
if (!c) return [];
|
|
422
|
-
const o = [];
|
|
423
|
-
return Object.values(c).forEach((a) => {
|
|
424
|
-
Object.values(a).forEach((n) => {
|
|
425
|
-
n.labelColor && o.push({
|
|
426
|
-
code: n.codeValue,
|
|
427
|
-
color: n.labelColor
|
|
428
|
-
});
|
|
429
|
-
});
|
|
430
|
-
}), t.optionCache.set(e, o), t.cacheHits.set(e, 1), o;
|
|
431
|
-
},
|
|
432
|
-
// 공통코드 초기화
|
|
433
|
-
clearCodes: () => {
|
|
434
|
-
r.getState().clearData();
|
|
435
|
-
}
|
|
436
|
-
}),
|
|
437
|
-
{
|
|
438
|
-
name: "color-storage",
|
|
439
|
-
partialize: (s) => ({
|
|
440
|
-
// 상태는 중앙 스토어에서 관리하므로 여기서는 저장하지 않음
|
|
441
|
-
})
|
|
442
|
-
}
|
|
443
|
-
)
|
|
444
|
-
);
|
|
445
|
-
export {
|
|
446
|
-
E as a,
|
|
447
|
-
v as b,
|
|
448
|
-
$ as u
|
|
449
|
-
};
|
|
450
|
-
//# sourceMappingURL=codeStore-vPj4Y0TK.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"codeStore-vPj4Y0TK.js","sources":["../../src/stores/codeStore.ts"],"sourcesContent":["import { create } from 'zustand';\r\nimport { persist } from 'zustand/middleware';\r\nimport { callService } from '../utils/apiUtils';\r\nimport { getServiceCode } from '../utils/serviceConfig';\r\n\r\n// 공통코드 관련 타입 정의\r\n\r\n// 서버 응답의 개별 코드 아이템 (실제 SCMSIGN00301 서비스 응답 구조)\r\nexport interface ServerCodeItem {\r\n cmmnCdGrp: string; // 그룹 코드\r\n cmmnCd: string; // 공통 코드\r\n cmmnCdNm: string; // 공통 코드명\r\n cmmnCdClr: string | null; // 공통 코드 컬러\r\n syscdYn: string; // 시스템 코드 여부\r\n sortOrd: string | null; // 정렬 순서\r\n enblYn: string; // 사용 여부\r\n}\r\n\r\n// 서버 응답의 개별 옵션 아이템 (실제 SCMSIGN00301 서비스 응답 구조)\r\nexport interface ServerOptionItem {\r\n cmmnCdGrp: string; // 그룹 코드\r\n cmmnCd: string; // 공통 코드\r\n cmmnCdClr: string | null; // 공통 코드 컬러\r\n optnCd: string; // 옵션 코드\r\n optnNm: string; // 옵션명\r\n syscdYn: string; // 시스템 코드 여부\r\n sortOrd: string | null; // 정렬 순서\r\n enblYn: string; // 사용 여부\r\n}\r\n\r\n// SCMSIGN00301 서비스 응답 구조\r\nexport interface ServerCommonCodeResponse {\r\n code: ServerCodeItem[]; // 공통코드 목록\r\n opt: ServerOptionItem[]; // 옵션 목록\r\n}\r\n\r\n// 클라이언트에서 사용할 코드 아이템 (실제 응답 구조 반영)\r\nexport interface CodeItem {\r\n codeValue: string; // 공통 코드 (cmmnCd)\r\n codeNm: string; // 공통 코드명 (cmmnCdNm)\r\n groupCode: string; // 그룹 코드 (cmmnCdGrp)\r\n commonCode: string; // 공통 코드 (cmmnCd)\r\n labelColor: string | null; // 라벨 컬러 (cmmnCdClr)\r\n systemCodeYn: string; // 시스템 코드 여부 (syscdYn)\r\n sortOrder: number; // 정렬 순서 (sortOrd)\r\n enabled: boolean; // 사용 여부 (enblYn === 'Y')\r\n options: Record<string, any> | null; // 옵션 (optnCd: optnNm 형태)\r\n originalData: ServerCodeItem; // 원본 데이터\r\n}\r\n\r\n// 코드 그룹 (그룹코드별로 정리된 상세코드들)\r\nexport interface CodeGroup {\r\n [codeValue: string]: CodeItem;\r\n}\r\n\r\n// 전체 공통코드 구조\r\nexport interface CommonCodeData {\r\n [groupCode: string]: CodeGroup;\r\n}\r\n\r\n// 단순화된 코드 아이템 (getCodeList용)\r\nexport interface SimpleCodeItem {\r\n label: string; // codeNm\r\n value: string; // codeValue\r\n tagColor?: string | null; // labelColor\r\n}\r\n\r\n// 공통코드 응답 타입\r\nexport interface CommonCodeResponse {\r\n codeList: CommonCodeData;\r\n}\r\n\r\n// 기본 스토어 상태 (공통 속성)\r\nexport interface BaseStoreState {\r\n codeData: CommonCodeData | null;\r\n isLoading: boolean;\r\n error: string | null;\r\n lastUpdated: Date | null;\r\n fetchCommonCodes: () => Promise<void>;\r\n clearCodes: () => void;\r\n}\r\n\r\n// 1. CODE 스토어 - 그룹코드별 상세코드 목록과 코드명 관리\r\nexport interface CodeStoreState extends BaseStoreState {\r\n // 1. 통합된 코드 목록 조회 (그룹코드 필수, 옵션으로 필터링)\r\n getCodeList: (\r\n groupCode: string,\r\n options?: {\r\n enabledOnly?: boolean;\r\n systemCodeOnly?: boolean;\r\n sortByOrder?: boolean;\r\n excludeParentCode?: boolean;\r\n }\r\n ) => SimpleCodeItem[];\r\n // 2. 코드를 던졌을 때 코드명을 리턴\r\n getCodeName: (codeValue: string) => string | null;\r\n // 3. 코드를 던졌을 때 라벨 컬러를 리턴\r\n getCodeColor: (codeValue: string) => string | null;\r\n // 3. 옵션값으로 코드를 조회\r\n getCodeByOption: (\r\n groupCode: string,\r\n optionKey: string,\r\n optionValue: string\r\n ) => CodeItem[];\r\n // 4. 옵션코드별로 코드 목록 조회 (SimpleCodeItem 형태로 반환)\r\n getCodeListByOption: (\r\n groupCode: string,\r\n optionCode: string,\r\n options?: {\r\n enabledOnly?: boolean;\r\n systemCodeOnly?: boolean;\r\n sortByOrder?: boolean;\r\n }\r\n ) => SimpleCodeItem[];\r\n // 5. 그룹코드 목록 조회\r\n getAvailableGroupCodes: () => string[];\r\n // 6. 그리드 lookup용 데이터 반환 (labels, values 배열, lookupDisplay 포함)\r\n getGridLookup: (groupCode: string) => {\r\n labels: string[];\r\n values: string[];\r\n lookupDisplay: boolean;\r\n };\r\n}\r\n\r\n// 2. OPTION 스토어 - 옵션값 관리\r\nexport interface OptionStoreState extends BaseStoreState {\r\n // 그룹코드와 옵션코드를 던졌을 때 상세코드의 옵션값을 리턴\r\n getOptionValue: (groupCode: string, optionCode: string) => any;\r\n // 특정 옵션 키의 값 가져오기\r\n getOptionByKey: (\r\n groupCode: string,\r\n optionCode: string,\r\n optionKey: string\r\n ) => any;\r\n}\r\n\r\n// 3. COLOR 스토어 - 코드/컬러 매핑 관리\r\nexport interface ColorStoreState extends BaseStoreState {\r\n // 코드를 던졌을 때 컬러코드를 리턴\r\n getColorCode: (codeValue: string) => string | null;\r\n // 코드/컬러 매핑 배열 가져오기\r\n getColorMapping: () => Array<{ code: string; color: string }>;\r\n}\r\n\r\n// 기존 CommonCodeState (하위 호환성을 위해 유지)\r\nexport interface CommonCodeState {\r\n // 데이터\r\n codeData: CommonCodeData | null;\r\n isLoading: boolean;\r\n error: string | null;\r\n lastUpdated: Date | null;\r\n\r\n // 액션들\r\n fetchCommonCodes: () => Promise<void>;\r\n getCodeGroup: (codeGroup: string) => CodeGroup | null;\r\n getCodeItem: (codeGroup: string, codeValue: string) => CodeItem | null;\r\n getCodeList: (codeGroup: string) => CodeItem[];\r\n getCodeListByOption: (\r\n codeGroup: string,\r\n optionKey: string,\r\n optionValue: any\r\n ) => CodeItem[];\r\n getCodeListWithColor: (codeGroup: string) => CodeItem[];\r\n getAvailableGroupCodes: () => string[];\r\n getDetailCodeList: (groupCode: string, enabledOnly?: boolean) => CodeItem[];\r\n getDetailCodeName: (detailCode: string) => string | null;\r\n getDetailCodeColor: (detailCode: string) => string | null;\r\n clearCodes: () => void;\r\n}\r\n\r\n// 공통코드 컨텍스트 타입\r\nexport interface CommonCodeContextType {\r\n codeData: CommonCodeData | null;\r\n isLoading: boolean;\r\n error: string | null;\r\n lastUpdated: Date | null;\r\n // 1. 통합된 코드 목록 조회 (그룹코드 필수, 옵션으로 필터링)\r\n getCodeList: (\r\n groupCode: string,\r\n options?: {\r\n enabledOnly?: boolean;\r\n systemCodeOnly?: boolean;\r\n sortByOrder?: boolean;\r\n excludeParentCode?: boolean;\r\n }\r\n ) => SimpleCodeItem[];\r\n // 2. 코드를 던졌을 때 코드명을 리턴\r\n getCodeName: (codeValue: string) => string | null;\r\n // 3. 코드를 던졌을 때 라벨 컬러를 리턴\r\n getCodeColor: (codeValue: string) => string | null;\r\n // 4. 옵션값으로 코드를 조회\r\n getCodeByOption: (\r\n groupCode: string,\r\n optionKey: string,\r\n optionValue: string\r\n ) => CodeItem[];\r\n // 5. 옵션코드별로 코드 목록 조회 (SimpleCodeItem 형태로 반환)\r\n getCodeListByOption: (\r\n groupCode: string,\r\n optionCode: string,\r\n options?: {\r\n enabledOnly?: boolean;\r\n systemCodeOnly?: boolean;\r\n sortByOrder?: boolean;\r\n }\r\n ) => SimpleCodeItem[];\r\n // 6. 그룹코드 목록 조회\r\n getAvailableGroupCodes: () => string[];\r\n // 7. 그리드 lookup용 데이터 반환 (labels, values 배열, lookupDisplay 포함)\r\n getGridLookup: (groupCode: string) => {\r\n labels: string[];\r\n values: string[];\r\n lookupDisplay: boolean;\r\n };\r\n refreshCodes: () => Promise<void>;\r\n}\r\n\r\n// 대규모 데이터셋 최적화를 위한 설정\r\nconst LARGE_DATASET_CONFIG = {\r\n CACHE_SIZE_LIMIT: 1000, // 캐시 크기 제한\r\n BATCH_SIZE: 100, // 배치 처리 크기\r\n DEBOUNCE_DELAY: 300, // 디바운스 지연시간\r\n MEMORY_THRESHOLD: 50 * 1024 * 1024, // 50MB 메모리 임계값\r\n};\r\n\r\n// 성능 최적화를 위한 캐시 관리 (대규모 데이터셋용)\r\ninterface OptimizedCacheManager {\r\n codeCache: Map<string, any>;\r\n nameCache: Map<string, string>;\r\n optionCache: Map<string, any>;\r\n colorCache: Map<string, string>;\r\n loadedGroups: Set<string>;\r\n cacheHits: Map<string, number>;\r\n clearCache: () => void;\r\n cleanupCache: () => void;\r\n isGroupLoaded: (groupCode: string) => boolean;\r\n markGroupLoaded: (groupCode: string) => void;\r\n}\r\n\r\nconst optimizedCacheManager: OptimizedCacheManager = {\r\n codeCache: new Map(),\r\n nameCache: new Map(),\r\n optionCache: new Map(),\r\n colorCache: new Map(),\r\n loadedGroups: new Set(),\r\n cacheHits: new Map(),\r\n\r\n clearCache() {\r\n this.codeCache.clear();\r\n this.nameCache.clear();\r\n this.optionCache.clear();\r\n this.colorCache.clear();\r\n this.loadedGroups.clear();\r\n this.cacheHits.clear();\r\n },\r\n\r\n cleanupCache() {\r\n // LRU 방식으로 캐시 정리\r\n const entries = Array.from(this.cacheHits.entries());\r\n entries.sort((a, b) => a[1] - b[1]);\r\n\r\n // 가장 적게 사용된 캐시 항목들 제거\r\n const toRemove = entries.slice(0, Math.floor(entries.length * 0.3));\r\n toRemove.forEach(([key]) => {\r\n this.codeCache.delete(key);\r\n this.nameCache.delete(key);\r\n this.optionCache.delete(key);\r\n this.colorCache.delete(key);\r\n this.cacheHits.delete(key);\r\n });\r\n },\r\n\r\n isGroupLoaded(groupCode: string) {\r\n return this.loadedGroups.has(groupCode);\r\n },\r\n\r\n markGroupLoaded(groupCode: string) {\r\n this.loadedGroups.add(groupCode);\r\n },\r\n};\r\n\r\n// 서버 응답을 클라이언트 형식으로 변환하는 함수 (실제 SCMSIGN00301 서비스 응답 구조 반영)\r\nconst transformServerResponse = (response: any): CommonCodeData => {\r\n console.log('대규모 데이터 변환 시작:', response);\r\n\r\n const codeData: CommonCodeData = {};\r\n\r\n // 실제 서비스 응답 구조: { code: [...], opt: [...] }\r\n if (response && response.code && Array.isArray(response.code)) {\r\n const codeList = response.code;\r\n const optionList = response.opt || [];\r\n\r\n // 옵션 데이터를 공통코드별로 그룹화\r\n const optionMap = new Map<string, any[]>();\r\n optionList.forEach((opt: any) => {\r\n if (opt.cmmnCd && opt.enblYn === 'Y') {\r\n if (!optionMap.has(opt.cmmnCd)) {\r\n optionMap.set(opt.cmmnCd, []);\r\n }\r\n optionMap.get(opt.cmmnCd)!.push(opt);\r\n }\r\n });\r\n\r\n // 공통코드 데이터를 그룹별로 정리\r\n codeList.forEach((item: any) => {\r\n if (item && item.cmmnCdGrp && item.cmmnCd && item.enblYn === 'Y') {\r\n const groupCode = item.cmmnCdGrp;\r\n\r\n // 그룹이 없으면 생성\r\n if (!codeData[groupCode]) {\r\n codeData[groupCode] = {};\r\n }\r\n\r\n // 해당 코드의 옵션들 찾기\r\n const codeOptions = optionMap.get(item.cmmnCd) || [];\r\n const options = codeOptions.reduce((acc: any, opt: any) => {\r\n if (opt.optnCd && opt.optnNm) {\r\n acc[opt.optnCd] = opt.optnNm;\r\n }\r\n return acc;\r\n }, {});\r\n\r\n // 코드 아이템 생성\r\n codeData[groupCode][item.cmmnCd] = {\r\n codeValue: item.cmmnCd,\r\n codeNm: item.cmmnCdNm,\r\n groupCode: item.cmmnCdGrp,\r\n commonCode: item.cmmnCd,\r\n labelColor: item.cmmnCdClr,\r\n systemCodeYn: item.syscdYn,\r\n sortOrder: parseInt(item.sortOrd) || 1,\r\n enabled: item.enblYn === 'Y',\r\n options: Object.keys(options).length > 0 ? options : null,\r\n originalData: item,\r\n };\r\n }\r\n });\r\n }\r\n\r\n console.log('대규모 데이터 변환 완료:', codeData);\r\n return codeData;\r\n};\r\n\r\n// 대규모 데이터를 관리하는 중앙 스토어\r\nconst useLargeDataStore = create<{\r\n codeData: CommonCodeData | null;\r\n isLoading: boolean;\r\n error: string | null;\r\n lastUpdated: Date | null;\r\n loadedGroups: Set<string>;\r\n fetchData: () => Promise<void>;\r\n loadSpecificGroup: (groupCode: string) => Promise<void>;\r\n setData: (data: CommonCodeData) => void;\r\n clearData: () => void;\r\n getLoadedGroups: () => string[];\r\n}>()(\r\n persist(\r\n (set, get) => ({\r\n codeData: null,\r\n isLoading: false,\r\n error: null,\r\n lastUpdated: null,\r\n loadedGroups: new Set(),\r\n\r\n fetchData: async () => {\r\n set({ isLoading: true, error: null });\r\n\r\n try {\r\n console.log('대규모 공통코드 데이터 가져오기 시작: SCMSIGN00301');\r\n\r\n const response = await callService(getServiceCode('SRCH_CODE'), {\r\n crprCd: '100',\r\n });\r\n\r\n console.log('대규모 공통코드 응답:', response);\r\n console.log('대규모 공통코드목록:', response.code);\r\n console.log('대규모 공통코드옵션션목록:', response.opt);\r\n\r\n const codeData = transformServerResponse(response);\r\n\r\n // 캐시 초기화\r\n optimizedCacheManager.clearCache();\r\n\r\n // 로드된 그룹들을 optimizedCacheManager에도 설정\r\n const loadedGroups = new Set(Object.keys(codeData));\r\n loadedGroups.forEach(groupCode => {\r\n optimizedCacheManager.markGroupLoaded(groupCode);\r\n });\r\n\r\n set({\r\n codeData,\r\n isLoading: false,\r\n error: null,\r\n lastUpdated: new Date(),\r\n loadedGroups,\r\n });\r\n\r\n console.log('대규모 공통코드 데이터 가져오기 완료');\r\n } catch (error) {\r\n console.error('대규모 공통코드 데이터 가져오기 실패:', error);\r\n set({\r\n isLoading: false,\r\n error:\r\n error instanceof Error\r\n ? error.message\r\n : '대규모 공통코드 데이터 가져오기 실패',\r\n });\r\n }\r\n },\r\n\r\n loadSpecificGroup: async (groupCode: string) => {\r\n const { codeData, loadedGroups } = get();\r\n if (!codeData || loadedGroups.has(groupCode)) return;\r\n\r\n // 특정 그룹만 로드 (필요시 서버에서 개별 요청)\r\n const newLoadedGroups = new Set(loadedGroups).add(groupCode);\r\n set({ loadedGroups: newLoadedGroups });\r\n optimizedCacheManager.markGroupLoaded(groupCode);\r\n },\r\n\r\n setData: (data: CommonCodeData) => {\r\n optimizedCacheManager.clearCache();\r\n\r\n // 로드된 그룹들을 optimizedCacheManager에도 설정\r\n const loadedGroups = new Set(Object.keys(data));\r\n loadedGroups.forEach(groupCode => {\r\n optimizedCacheManager.markGroupLoaded(groupCode);\r\n });\r\n\r\n set({\r\n codeData: data,\r\n lastUpdated: new Date(),\r\n loadedGroups,\r\n });\r\n },\r\n\r\n clearData: () => {\r\n optimizedCacheManager.clearCache();\r\n set({\r\n codeData: null,\r\n isLoading: false,\r\n error: null,\r\n lastUpdated: null,\r\n loadedGroups: new Set(),\r\n });\r\n },\r\n\r\n getLoadedGroups: () => {\r\n return Array.from(get().loadedGroups);\r\n },\r\n }),\r\n {\r\n name: 'large-data-storage',\r\n partialize: state => ({\r\n codeData: state.codeData,\r\n lastUpdated: state.lastUpdated,\r\n loadedGroups: Array.from(state.loadedGroups),\r\n }),\r\n }\r\n )\r\n);\r\n\r\n// 1. CODE 스토어 - 대규모 데이터 최적화\r\nexport const useCodeStore = create<CodeStoreState>()(\r\n persist(\r\n (set, get) => ({\r\n // 공통 데이터 스토어에서 상태 가져오기\r\n get codeData() {\r\n return useLargeDataStore.getState().codeData;\r\n },\r\n get isLoading() {\r\n return useLargeDataStore.getState().isLoading;\r\n },\r\n get error() {\r\n return useLargeDataStore.getState().error;\r\n },\r\n get lastUpdated() {\r\n return useLargeDataStore.getState().lastUpdated;\r\n },\r\n\r\n // 공통코드 가져오기 (중앙 스토어 사용)\r\n fetchCommonCodes: async () => {\r\n await useLargeDataStore.getState().fetchData();\r\n },\r\n\r\n // 1. 통합된 코드 목록 조회 (그룹코드 필수, 옵션으로 필터링)\r\n getCodeList: (\r\n groupCode: string,\r\n options?: {\r\n enabledOnly?: boolean;\r\n systemCodeOnly?: boolean;\r\n sortByOrder?: boolean;\r\n excludeParentCode?: boolean;\r\n }\r\n ): SimpleCodeItem[] => {\r\n const {\r\n enabledOnly = true,\r\n systemCodeOnly = false,\r\n sortByOrder = false,\r\n excludeParentCode = false,\r\n } = options || {};\r\n\r\n // 캐시 키 생성 (옵션 포함)\r\n const cacheKey = `simpleCodeList_${groupCode}_${enabledOnly}_${systemCodeOnly}_${sortByOrder}_${excludeParentCode}`;\r\n if (optimizedCacheManager.optionCache.has(cacheKey)) {\r\n const hits = optimizedCacheManager.cacheHits.get(cacheKey) || 0;\r\n optimizedCacheManager.cacheHits.set(cacheKey, hits + 1);\r\n return optimizedCacheManager.optionCache.get(cacheKey)!;\r\n }\r\n\r\n const codeData = useLargeDataStore.getState().codeData;\r\n if (!codeData) return [];\r\n\r\n // 그룹이 로드되었는지 확인 (데이터가 있으면 로드된 것으로 간주)\r\n if (\r\n !optimizedCacheManager.isGroupLoaded(groupCode) &&\r\n !codeData[groupCode]\r\n ) {\r\n console.warn(`그룹 ${groupCode}가 아직 로드되지 않았습니다.`);\r\n return [];\r\n }\r\n\r\n const detailCodes: CodeItem[] = [];\r\n\r\n // 해당 그룹만 처리하여 성능 최적화\r\n const group = codeData[groupCode];\r\n if (group) {\r\n Object.values(group).forEach(item => {\r\n // 사용여부 필터링\r\n if (enabledOnly && !item.enabled) return;\r\n\r\n // 시스템코드 필터링\r\n if (systemCodeOnly && item.systemCodeYn !== 'Y') return;\r\n\r\n // 부모코드 제외 옵션 처리\r\n if (excludeParentCode) {\r\n // 부모코드 길이 계산 (예: CMPRGR = 6자)\r\n const parentCodeLength = groupCode.length;\r\n\r\n // 자식코드만 추출 (부모코드 제외)\r\n const childCode = item.codeValue.substring(parentCodeLength);\r\n\r\n // 자식코드가 있는 경우만 추가\r\n if (childCode.length > 0) {\r\n detailCodes.push({\r\n ...item,\r\n codeValue: childCode, // 자식코드만 사용\r\n });\r\n }\r\n } else {\r\n detailCodes.push(item);\r\n }\r\n });\r\n }\r\n\r\n // 정렬\r\n let sortedCodes: CodeItem[];\r\n if (sortByOrder) {\r\n // 정렬순서로 정렬, 동일한 경우 코드값으로 정렬\r\n sortedCodes = detailCodes.sort((a, b) => {\r\n if (a.sortOrder !== b.sortOrder) {\r\n return a.sortOrder - b.sortOrder;\r\n }\r\n return a.codeValue.localeCompare(b.codeValue);\r\n });\r\n } else {\r\n // 코드값으로 정렬\r\n sortedCodes = detailCodes.sort((a, b) =>\r\n a.codeValue.localeCompare(b.codeValue)\r\n );\r\n }\r\n\r\n // SimpleCodeItem으로 변환\r\n const simpleCodes: SimpleCodeItem[] = sortedCodes.map(item => ({\r\n label: item.codeNm,\r\n value: item.codeValue,\r\n tagColor: item.labelColor,\r\n }));\r\n\r\n // 캐시 크기 제한 확인\r\n if (\r\n optimizedCacheManager.optionCache.size >=\r\n LARGE_DATASET_CONFIG.CACHE_SIZE_LIMIT\r\n ) {\r\n optimizedCacheManager.cleanupCache();\r\n }\r\n\r\n // 캐시에 저장\r\n optimizedCacheManager.optionCache.set(cacheKey, simpleCodes);\r\n optimizedCacheManager.cacheHits.set(cacheKey, 1);\r\n\r\n return simpleCodes;\r\n },\r\n\r\n // 2. 코드를 던졌을 때 코드명을 리턴 (대규모 최적화)\r\n getCodeName: (codeValue: string): string | null => {\r\n // 캐시 확인\r\n if (optimizedCacheManager.nameCache.has(codeValue)) {\r\n const hits =\r\n optimizedCacheManager.cacheHits.get(`name_${codeValue}`) || 0;\r\n optimizedCacheManager.cacheHits.set(`name_${codeValue}`, hits + 1);\r\n return optimizedCacheManager.nameCache.get(codeValue)!;\r\n }\r\n\r\n const codeData = useLargeDataStore.getState().codeData;\r\n if (!codeData) return null;\r\n\r\n // 전체 검색 대신 인덱스 활용 (실제 구현에서는 인덱스 테이블 사용)\r\n for (const group of Object.values(codeData)) {\r\n for (const item of Object.values(group)) {\r\n if (item.codeValue === codeValue) {\r\n // 캐시에 저장\r\n optimizedCacheManager.nameCache.set(codeValue, item.codeNm);\r\n optimizedCacheManager.cacheHits.set(`name_${codeValue}`, 1);\r\n return item.codeNm;\r\n }\r\n }\r\n }\r\n\r\n return null;\r\n },\r\n\r\n // 3. 코드를 던졌을 때 라벨 컬러를 리턴 (대규모 최적화)\r\n getCodeColor: (codeValue: string): string | null => {\r\n // 캐시 확인\r\n if (optimizedCacheManager.colorCache.has(codeValue)) {\r\n const hits =\r\n optimizedCacheManager.cacheHits.get(`color_${codeValue}`) || 0;\r\n optimizedCacheManager.cacheHits.set(`color_${codeValue}`, hits + 1);\r\n return optimizedCacheManager.colorCache.get(codeValue)!;\r\n }\r\n\r\n const codeData = useLargeDataStore.getState().codeData;\r\n if (!codeData) return null;\r\n\r\n // 전체 검색 대신 인덱스 활용 (실제 구현에서는 인덱스 테이블 사용)\r\n for (const group of Object.values(codeData)) {\r\n for (const item of Object.values(group)) {\r\n if (item.codeValue === codeValue) {\r\n // 캐시에 저장\r\n optimizedCacheManager.colorCache.set(\r\n codeValue,\r\n item.labelColor || ''\r\n );\r\n optimizedCacheManager.cacheHits.set(`color_${codeValue}`, 1);\r\n return item.labelColor;\r\n }\r\n }\r\n }\r\n\r\n return null;\r\n },\r\n\r\n // 4. 그리드 lookup용 데이터 반환 (labels, values 배열, lookupDisplay 포함)\r\n getGridLookup: (\r\n groupCode: string\r\n ): { labels: string[]; values: string[]; lookupDisplay: boolean } => {\r\n // 캐시 확인\r\n const cacheKey = `gridLookup_${groupCode}`;\r\n if (optimizedCacheManager.optionCache.has(cacheKey)) {\r\n const hits = optimizedCacheManager.cacheHits.get(cacheKey) || 0;\r\n optimizedCacheManager.cacheHits.set(cacheKey, hits + 1);\r\n return optimizedCacheManager.optionCache.get(cacheKey)!;\r\n }\r\n\r\n const codeData = useLargeDataStore.getState().codeData;\r\n if (!codeData) return { labels: [], values: [], lookupDisplay: true };\r\n\r\n const group = codeData[groupCode];\r\n if (!group) return { labels: [], values: [], lookupDisplay: true };\r\n\r\n const labels: string[] = [];\r\n const values: string[] = [];\r\n\r\n // 활성화된 코드만 필터링하여 순서대로 추가\r\n Object.values(group)\r\n .filter(item => item.enabled)\r\n .sort((a, b) => a.sortOrder - b.sortOrder)\r\n .forEach(item => {\r\n labels.push(item.codeNm);\r\n values.push(item.codeValue);\r\n });\r\n\r\n const result = { labels, values, lookupDisplay: true };\r\n\r\n // 캐시에 저장\r\n optimizedCacheManager.optionCache.set(cacheKey, result);\r\n optimizedCacheManager.cacheHits.set(cacheKey, 1);\r\n\r\n return result;\r\n },\r\n\r\n // 3. 옵션값으로 코드를 조회하는 새로운 메서드\r\n getCodeByOption: (\r\n groupCode: string,\r\n optionKey: string,\r\n optionValue: string\r\n ): CodeItem[] => {\r\n // 캐시 확인\r\n const cacheKey = `codeByOption_${groupCode}_${optionKey}_${optionValue}`;\r\n if (optimizedCacheManager.codeCache.has(cacheKey)) {\r\n const hits = optimizedCacheManager.cacheHits.get(cacheKey) || 0;\r\n optimizedCacheManager.cacheHits.set(cacheKey, hits + 1);\r\n return optimizedCacheManager.codeCache.get(cacheKey)!;\r\n }\r\n\r\n const codeData = useLargeDataStore.getState().codeData;\r\n if (!codeData) return [];\r\n\r\n const matchedCodes: CodeItem[] = [];\r\n\r\n // 해당 그룹에서 옵션값이 일치하는 코드들 찾기\r\n const group = codeData[groupCode];\r\n if (group) {\r\n Object.values(group).forEach(item => {\r\n if (\r\n item.enabled &&\r\n item.options &&\r\n item.options[optionKey] === optionValue\r\n ) {\r\n // 옵션값을 코드명으로 대체하여 반환\r\n matchedCodes.push({\r\n ...item,\r\n codeNm: item.options[optionKey] || item.codeNm, // 옵션값을 코드명으로 사용\r\n });\r\n }\r\n });\r\n }\r\n\r\n const sortedCodes = matchedCodes.sort((a, b) =>\r\n a.codeValue.localeCompare(b.codeValue)\r\n );\r\n\r\n // 캐시 크기 제한 확인\r\n if (\r\n optimizedCacheManager.codeCache.size >=\r\n LARGE_DATASET_CONFIG.CACHE_SIZE_LIMIT\r\n ) {\r\n optimizedCacheManager.cleanupCache();\r\n }\r\n\r\n // 캐시에 저장\r\n optimizedCacheManager.codeCache.set(cacheKey, sortedCodes);\r\n optimizedCacheManager.cacheHits.set(cacheKey, 1);\r\n\r\n return sortedCodes;\r\n },\r\n\r\n // 6. 옵션코드별로 코드 목록 조회 (SimpleCodeItem 형태로 반환)\r\n getCodeListByOption: (\r\n groupCode: string,\r\n optionCode: string,\r\n options?: {\r\n enabledOnly?: boolean;\r\n systemCodeOnly?: boolean;\r\n sortByOrder?: boolean;\r\n }\r\n ): SimpleCodeItem[] => {\r\n const {\r\n enabledOnly = true,\r\n systemCodeOnly = false,\r\n sortByOrder = false,\r\n } = options || {};\r\n\r\n // 캐시 키 생성 (옵션 포함)\r\n const cacheKey = `codeListByOption_${groupCode}_${optionCode}_${enabledOnly}_${systemCodeOnly}_${sortByOrder}`;\r\n if (optimizedCacheManager.codeCache.has(cacheKey)) {\r\n const hits = optimizedCacheManager.cacheHits.get(cacheKey) || 0;\r\n optimizedCacheManager.cacheHits.set(cacheKey, hits + 1);\r\n return optimizedCacheManager.codeCache.get(\r\n cacheKey\r\n ) as SimpleCodeItem[];\r\n }\r\n\r\n const codeData = useLargeDataStore.getState().codeData;\r\n if (!codeData) return [];\r\n\r\n // 그룹이 로드되었는지 확인 (데이터가 있으면 로드된 것으로 간주)\r\n if (\r\n !optimizedCacheManager.isGroupLoaded(groupCode) &&\r\n !codeData[groupCode]\r\n ) {\r\n console.warn(`그룹 ${groupCode}가 아직 로드되지 않았습니다.`);\r\n return [];\r\n }\r\n\r\n const matchedCodes: SimpleCodeItem[] = [];\r\n\r\n const group = codeData[groupCode];\r\n if (group) {\r\n Object.values(group).forEach(item => {\r\n // 사용여부 필터링\r\n if (enabledOnly && !item.enabled) return;\r\n\r\n // 시스템코드 필터링\r\n if (systemCodeOnly && item.systemCodeYn !== 'Y') return;\r\n\r\n // 해당 옵션코드가 있는지 확인\r\n if (item.options && item.options[optionCode]) {\r\n // SimpleCodeItem 형태로 변환\r\n matchedCodes.push({\r\n label: item.options[optionCode], // optnNm 값\r\n value: item.commonCode, // 공통코드값\r\n tagColor: item.labelColor, // 라벨 컬러\r\n });\r\n }\r\n });\r\n }\r\n\r\n // 정렬\r\n let sortedCodes: SimpleCodeItem[];\r\n if (sortByOrder) {\r\n // 정렬순서로 정렬, 동일한 경우 코드값으로 정렬\r\n sortedCodes = matchedCodes.sort((a, b) => {\r\n // sortOrder는 원본 item에서 가져와야 하므로 임시로 코드값으로 정렬\r\n return a.value.localeCompare(b.value);\r\n });\r\n } else {\r\n // 코드값으로 정렬\r\n sortedCodes = matchedCodes.sort((a, b) =>\r\n a.value.localeCompare(b.value)\r\n );\r\n }\r\n\r\n // 캐시 크기 제한 확인\r\n if (\r\n optimizedCacheManager.codeCache.size >=\r\n LARGE_DATASET_CONFIG.CACHE_SIZE_LIMIT\r\n ) {\r\n optimizedCacheManager.cleanupCache();\r\n }\r\n\r\n // 캐시에 저장\r\n optimizedCacheManager.codeCache.set(cacheKey, sortedCodes);\r\n optimizedCacheManager.cacheHits.set(cacheKey, 1);\r\n\r\n return sortedCodes;\r\n },\r\n\r\n // 7. 그룹코드 목록 조회\r\n getAvailableGroupCodes: (): string[] => {\r\n const cacheKey = 'available_group_codes';\r\n if (optimizedCacheManager.nameCache.has(cacheKey)) {\r\n const hits = optimizedCacheManager.cacheHits.get(cacheKey) || 0;\r\n optimizedCacheManager.cacheHits.set(cacheKey, hits + 1);\r\n return JSON.parse(optimizedCacheManager.nameCache.get(cacheKey)!);\r\n }\r\n\r\n const codeData = useLargeDataStore.getState().codeData;\r\n if (!codeData) return [];\r\n\r\n const groupCodes = Object.keys(codeData).sort();\r\n\r\n // 캐시에 저장\r\n optimizedCacheManager.nameCache.set(\r\n cacheKey,\r\n JSON.stringify(groupCodes)\r\n );\r\n optimizedCacheManager.cacheHits.set(cacheKey, 1);\r\n\r\n return groupCodes;\r\n },\r\n\r\n // 공통코드 초기화\r\n clearCodes: () => {\r\n useLargeDataStore.getState().clearData();\r\n },\r\n }),\r\n {\r\n name: 'code-storage',\r\n partialize: state => ({\r\n // 상태는 중앙 스토어에서 관리하므로 여기서는 저장하지 않음\r\n }),\r\n }\r\n )\r\n);\r\n\r\n// 2. OPTION 스토어 - 대규모 데이터 최적화\r\nexport const useOptionStore = create<OptionStoreState>()(\r\n persist(\r\n (set, get) => ({\r\n // 공통 데이터 스토어에서 상태 가져오기\r\n get codeData() {\r\n return useLargeDataStore.getState().codeData;\r\n },\r\n get isLoading() {\r\n return useLargeDataStore.getState().isLoading;\r\n },\r\n get error() {\r\n return useLargeDataStore.getState().error;\r\n },\r\n get lastUpdated() {\r\n return useLargeDataStore.getState().lastUpdated;\r\n },\r\n\r\n // 공통코드 가져오기 (중앙 스토어 사용)\r\n fetchCommonCodes: async () => {\r\n await useLargeDataStore.getState().fetchData();\r\n },\r\n\r\n // 그룹코드와 옵션코드를 던졌을 때 상세코드의 옵션값을 리턴 (대규모 최적화)\r\n getOptionValue: (groupCode: string, optionCode: string): any => {\r\n // 캐시 확인\r\n const cacheKey = `option_${groupCode}_${optionCode}`;\r\n if (optimizedCacheManager.optionCache.has(cacheKey)) {\r\n const hits = optimizedCacheManager.cacheHits.get(cacheKey) || 0;\r\n optimizedCacheManager.cacheHits.set(cacheKey, hits + 1);\r\n return optimizedCacheManager.optionCache.get(cacheKey);\r\n }\r\n\r\n const codeData = useLargeDataStore.getState().codeData;\r\n if (!codeData) return null;\r\n\r\n // 해당 그룹만 검색\r\n const group = codeData[groupCode];\r\n if (group && group[optionCode]) {\r\n const options = group[optionCode].options;\r\n optimizedCacheManager.optionCache.set(cacheKey, options);\r\n optimizedCacheManager.cacheHits.set(cacheKey, 1);\r\n return options;\r\n }\r\n\r\n return null;\r\n },\r\n\r\n // 특정 옵션 키의 값 가져오기 (대규모 최적화)\r\n getOptionByKey: (\r\n groupCode: string,\r\n optionCode: string,\r\n optionKey: string\r\n ): any => {\r\n const cacheKey = `option_${groupCode}_${optionCode}_${optionKey}`;\r\n if (optimizedCacheManager.optionCache.has(cacheKey)) {\r\n const hits = optimizedCacheManager.cacheHits.get(cacheKey) || 0;\r\n optimizedCacheManager.cacheHits.set(cacheKey, hits + 1);\r\n return optimizedCacheManager.optionCache.get(cacheKey);\r\n }\r\n\r\n const options = get().getOptionValue(groupCode, optionCode);\r\n const result = options ? options[optionKey] : null;\r\n\r\n // 캐시에 저장\r\n optimizedCacheManager.optionCache.set(cacheKey, result);\r\n optimizedCacheManager.cacheHits.set(cacheKey, 1);\r\n\r\n return result;\r\n },\r\n\r\n // 공통코드 초기화\r\n clearCodes: () => {\r\n useLargeDataStore.getState().clearData();\r\n },\r\n }),\r\n {\r\n name: 'option-storage',\r\n partialize: state => ({\r\n // 상태는 중앙 스토어에서 관리하므로 여기서는 저장하지 않음\r\n }),\r\n }\r\n )\r\n);\r\n\r\n// 3. COLOR 스토어 - 대규모 데이터 최적화\r\nexport const useColorStore = create<ColorStoreState>()(\r\n persist(\r\n (set, get) => ({\r\n // 공통 데이터 스토어에서 상태 가져오기\r\n get codeData() {\r\n return useLargeDataStore.getState().codeData;\r\n },\r\n get isLoading() {\r\n return useLargeDataStore.getState().isLoading;\r\n },\r\n get error() {\r\n return useLargeDataStore.getState().error;\r\n },\r\n get lastUpdated() {\r\n return useLargeDataStore.getState().lastUpdated;\r\n },\r\n\r\n // 공통코드 가져오기 (중앙 스토어 사용)\r\n fetchCommonCodes: async () => {\r\n await useLargeDataStore.getState().fetchData();\r\n },\r\n\r\n // 코드를 던졌을 때 컬러코드를 리턴 (대규모 최적화)\r\n getColorCode: (codeValue: string): string | null => {\r\n // 캐시 확인\r\n if (optimizedCacheManager.colorCache.has(codeValue)) {\r\n const hits =\r\n optimizedCacheManager.cacheHits.get(`color_${codeValue}`) || 0;\r\n optimizedCacheManager.cacheHits.set(`color_${codeValue}`, hits + 1);\r\n return optimizedCacheManager.colorCache.get(codeValue)!;\r\n }\r\n\r\n const codeData = useLargeDataStore.getState().codeData;\r\n if (!codeData) return null;\r\n\r\n // 전체 검색 (실제 구현에서는 컬러 인덱스 테이블 사용)\r\n for (const group of Object.values(codeData)) {\r\n for (const item of Object.values(group)) {\r\n if (item.codeValue === codeValue) {\r\n // 캐시에 저장\r\n optimizedCacheManager.colorCache.set(\r\n codeValue,\r\n item.labelColor || ''\r\n );\r\n optimizedCacheManager.cacheHits.set(`color_${codeValue}`, 1);\r\n return item.labelColor;\r\n }\r\n }\r\n }\r\n\r\n return null;\r\n },\r\n\r\n // 코드/컬러 매핑 배열 가져오기 (대규모 최적화)\r\n getColorMapping: (): Array<{ code: string; color: string }> => {\r\n const cacheKey = 'color_mapping';\r\n if (optimizedCacheManager.optionCache.has(cacheKey)) {\r\n const hits = optimizedCacheManager.cacheHits.get(cacheKey) || 0;\r\n optimizedCacheManager.cacheHits.set(cacheKey, hits + 1);\r\n return optimizedCacheManager.optionCache.get(cacheKey);\r\n }\r\n\r\n const codeData = useLargeDataStore.getState().codeData;\r\n if (!codeData) return [];\r\n\r\n const colorMapping: Array<{ code: string; color: string }> = [];\r\n\r\n // 배치 처리로 메모리 사용량 최적화\r\n Object.values(codeData).forEach(group => {\r\n Object.values(group).forEach(item => {\r\n if (item.labelColor) {\r\n colorMapping.push({\r\n code: item.codeValue,\r\n color: item.labelColor,\r\n });\r\n }\r\n });\r\n });\r\n\r\n // 캐시에 저장\r\n optimizedCacheManager.optionCache.set(cacheKey, colorMapping);\r\n optimizedCacheManager.cacheHits.set(cacheKey, 1);\r\n\r\n return colorMapping;\r\n },\r\n\r\n // 공통코드 초기화\r\n clearCodes: () => {\r\n useLargeDataStore.getState().clearData();\r\n },\r\n }),\r\n {\r\n name: 'color-storage',\r\n partialize: state => ({\r\n // 상태는 중앙 스토어에서 관리하므로 여기서는 저장하지 않음\r\n }),\r\n }\r\n )\r\n);\r\n"],"names":["LARGE_DATASET_CONFIG","optimizedCacheManager","entries","a","b","key","groupCode","transformServerResponse","response","codeData","codeList","optionList","optionMap","opt","item","options","acc","useLargeDataStore","create","persist","set","get","callService","getServiceCode","loadedGroups","error","newLoadedGroups","data","state","useCodeStore","enabledOnly","systemCodeOnly","sortByOrder","excludeParentCode","cacheKey","hits","detailCodes","group","parentCodeLength","childCode","sortedCodes","simpleCodes","codeValue","labels","values","result","optionKey","optionValue","matchedCodes","optionCode","groupCodes","useOptionStore","useColorStore","colorMapping"],"mappings":"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"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";const p=require("./apiUtils-BZ6s0_NI.cjs");function H(v){throw new Error('Could not dynamically require "'+v+'". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.')}var y={exports:{}};const I={},W=Object.freeze(Object.defineProperty({__proto__:null,default:I},Symbol.toStringTag,{value:"Module"})),E=p.getAugmentedNamespace(W);var O=y.exports,S;function P(){return S||(S=1,(function(v,T){(function(g,c){v.exports=c()})(O,function(){var g=g||(function(c,C){var s;if(typeof window<"u"&&window.crypto&&(s=window.crypto),typeof self<"u"&&self.crypto&&(s=self.crypto),typeof globalThis<"u"&&globalThis.crypto&&(s=globalThis.crypto),!s&&typeof window<"u"&&window.msCrypto&&(s=window.msCrypto),!s&&typeof p.commonjsGlobal<"u"&&p.commonjsGlobal.crypto&&(s=p.commonjsGlobal.crypto),!s&&typeof H=="function")try{s=E}catch{}var R=function(){if(s){if(typeof s.getRandomValues=="function")try{return s.getRandomValues(new Uint32Array(1))[0]}catch{}if(typeof s.randomBytes=="function")try{return s.randomBytes(4).readInt32LE()}catch{}}throw new Error("Native crypto module could not be used to get secure random number.")},z=Object.create||(function(){function t(){}return function(r){var e;return t.prototype=r,e=new t,t.prototype=null,e}})(),l={},d=l.lib={},f=d.Base=(function(){return{extend:function(t){var r=z(this);return t&&r.mixIn(t),(!r.hasOwnProperty("init")||this.init===r.init)&&(r.init=function(){r.$super.init.apply(this,arguments)}),r.init.prototype=r,r.$super=this,r},create:function(){var t=this.extend();return t.init.apply(t,arguments),t},init:function(){},mixIn:function(t){for(var r in t)t.hasOwnProperty(r)&&(this[r]=t[r]);t.hasOwnProperty("toString")&&(this.toString=t.toString)},clone:function(){return this.init.prototype.extend(this)}}})(),u=d.WordArray=f.extend({init:function(t,r){t=this.words=t||[],r!=C?this.sigBytes=r:this.sigBytes=t.length*4},toString:function(t){return(t||q).stringify(this)},concat:function(t){var r=this.words,e=t.words,n=this.sigBytes,i=t.sigBytes;if(this.clamp(),n%4)for(var o=0;o<i;o++){var m=e[o>>>2]>>>24-o%4*8&255;r[n+o>>>2]|=m<<24-(n+o)%4*8}else for(var a=0;a<i;a+=4)r[n+a>>>2]=e[a>>>2];return this.sigBytes+=i,this},clamp:function(){var t=this.words,r=this.sigBytes;t[r>>>2]&=4294967295<<32-r%4*8,t.length=c.ceil(r/4)},clone:function(){var t=f.clone.call(this);return t.words=this.words.slice(0),t},random:function(t){for(var r=[],e=0;e<t;e+=4)r.push(R());return new u.init(r,t)}}),w=l.enc={},q=w.Hex={stringify:function(t){for(var r=t.words,e=t.sigBytes,n=[],i=0;i<e;i++){var o=r[i>>>2]>>>24-i%4*8&255;n.push((o>>>4).toString(16)),n.push((o&15).toString(16))}return n.join("")},parse:function(t){for(var r=t.length,e=[],n=0;n<r;n+=2)e[n>>>3]|=parseInt(t.substr(n,2),16)<<24-n%8*4;return new u.init(e,r/2)}},_=w.Latin1={stringify:function(t){for(var r=t.words,e=t.sigBytes,n=[],i=0;i<e;i++){var o=r[i>>>2]>>>24-i%4*8&255;n.push(String.fromCharCode(o))}return n.join("")},parse:function(t){for(var r=t.length,e=[],n=0;n<r;n++)e[n>>>2]|=(t.charCodeAt(n)&255)<<24-n%4*8;return new u.init(e,r)}},k=w.Utf8={stringify:function(t){try{return decodeURIComponent(escape(_.stringify(t)))}catch{throw new Error("Malformed UTF-8 data")}},parse:function(t){return _.parse(unescape(encodeURIComponent(t)))}},x=d.BufferedBlockAlgorithm=f.extend({reset:function(){this._data=new u.init,this._nDataBytes=0},_append:function(t){typeof t=="string"&&(t=k.parse(t)),this._data.concat(t),this._nDataBytes+=t.sigBytes},_process:function(t){var r,e=this._data,n=e.words,i=e.sigBytes,o=this.blockSize,m=o*4,a=i/m;t?a=c.ceil(a):a=c.max((a|0)-this._minBufferSize,0);var h=a*o,b=c.min(h*4,i);if(h){for(var B=0;B<h;B+=o)this._doProcessBlock(n,B);r=n.splice(0,h),e.sigBytes-=b}return new u.init(r,b)},clone:function(){var t=f.clone.call(this);return t._data=this._data.clone(),t},_minBufferSize:0});d.Hasher=x.extend({cfg:f.extend(),init:function(t){this.cfg=this.cfg.extend(t),this.reset()},reset:function(){x.reset.call(this),this._doReset()},update:function(t){return this._append(t),this._process(),this},finalize:function(t){t&&this._append(t);var r=this._doFinalize();return r},blockSize:16,_createHelper:function(t){return function(r,e){return new t.init(e).finalize(r)}},_createHmacHelper:function(t){return function(r,e){return new j.HMAC.init(t,e).finalize(r)}}});var j=l.algo={};return l})(Math);return g})})(y)),y.exports}exports.requireCore=P;
|
|
2
|
-
//# sourceMappingURL=core-BHejg5iS.cjs.map
|