@bwg-ui/core 1.1.26 → 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.
Files changed (115) hide show
  1. package/dist/chunks/common-components-CniOkOzu.js +15776 -0
  2. package/dist/chunks/common-components-DrcQahsO.cjs +183 -0
  3. package/dist/chunks/{core-BBMCFpHx.js → core-CEDyqniq.js} +1 -2
  4. package/dist/chunks/core-lmAmbqvY.cjs +1 -0
  5. package/dist/chunks/{enc-base64-DAsYWbA2.js → enc-base64-CF2tIkYl.js} +4 -5
  6. package/dist/chunks/enc-base64-Dxq399hI.cjs +1 -0
  7. package/dist/chunks/{sha256-D80RpYO2.js → sha256-DYurgXCU.js} +12 -13
  8. package/dist/chunks/sha256-H5WWQnKT.cjs +1 -0
  9. package/dist/components/common/BwgPagination.d.ts +1 -1
  10. package/dist/components/common/BwgPagination.d.ts.map +1 -1
  11. package/dist/components/common/index.cjs +1 -2
  12. package/dist/components/common/index.d.ts +3 -1
  13. package/dist/components/common/index.d.ts.map +1 -1
  14. package/dist/components/common/index.js +16 -17
  15. package/dist/components/core/index.cjs +1 -2
  16. package/dist/components/core/index.js +1218 -23
  17. package/dist/components/guide/index.cjs +1 -2
  18. package/dist/components/guide/index.js +1 -2
  19. package/dist/components/layout/index.cjs +35 -2
  20. package/dist/components/layout/index.js +350 -10
  21. package/dist/components/popup/MenuReport.d.ts.map +1 -1
  22. package/dist/index.cjs +1 -2
  23. package/dist/index.js +211 -222
  24. package/dist/provider/index.cjs +1 -2
  25. package/dist/provider/index.js +384 -25
  26. package/dist/stores/index.cjs +2 -2
  27. package/dist/stores/index.js +1394 -24
  28. package/dist/utils/index.cjs +1 -2
  29. package/dist/utils/index.js +1369 -200
  30. package/package.json +1 -1
  31. package/dist/chunks/AuthContext-BQ3gHLbr.cjs +0 -2
  32. package/dist/chunks/AuthContext-BQ3gHLbr.cjs.map +0 -1
  33. package/dist/chunks/AuthContext-CVizgYxY.js +0 -57
  34. package/dist/chunks/AuthContext-CVizgYxY.js.map +0 -1
  35. package/dist/chunks/BwgSpace-BPJARdOc.js +0 -27
  36. package/dist/chunks/BwgSpace-BPJARdOc.js.map +0 -1
  37. package/dist/chunks/BwgSpace-Cw27d-XU.cjs +0 -2
  38. package/dist/chunks/BwgSpace-Cw27d-XU.cjs.map +0 -1
  39. package/dist/chunks/BwgSwitch-BLtVdW44.cjs +0 -2
  40. package/dist/chunks/BwgSwitch-BLtVdW44.cjs.map +0 -1
  41. package/dist/chunks/BwgSwitch-DdHo4gYR.js +0 -269
  42. package/dist/chunks/BwgSwitch-DdHo4gYR.js.map +0 -1
  43. package/dist/chunks/BwgUploader-BUmFmeuS.js +0 -3250
  44. package/dist/chunks/BwgUploader-BUmFmeuS.js.map +0 -1
  45. package/dist/chunks/BwgUploader-Djhl4lIt.cjs +0 -3
  46. package/dist/chunks/BwgUploader-Djhl4lIt.cjs.map +0 -1
  47. package/dist/chunks/LoadingOverlay-Uf6xy04v.js +0 -19
  48. package/dist/chunks/LoadingOverlay-Uf6xy04v.js.map +0 -1
  49. package/dist/chunks/LoadingOverlay-jdMzdB-z.cjs +0 -2
  50. package/dist/chunks/LoadingOverlay-jdMzdB-z.cjs.map +0 -1
  51. package/dist/chunks/SSOHandler-CR0nR3rJ.js +0 -28654
  52. package/dist/chunks/SSOHandler-CR0nR3rJ.js.map +0 -1
  53. package/dist/chunks/SSOHandler-DQG0Jp4V.cjs +0 -237
  54. package/dist/chunks/SSOHandler-DQG0Jp4V.cjs.map +0 -1
  55. package/dist/chunks/ScreenProtectContext-BMsPPcTX.js +0 -154
  56. package/dist/chunks/ScreenProtectContext-BMsPPcTX.js.map +0 -1
  57. package/dist/chunks/ScreenProtectContext-DrCGlcTs.cjs +0 -2
  58. package/dist/chunks/ScreenProtectContext-DrCGlcTs.cjs.map +0 -1
  59. package/dist/chunks/SearchBoxContext-DY6lES-W.cjs +0 -2
  60. package/dist/chunks/SearchBoxContext-DY6lES-W.cjs.map +0 -1
  61. package/dist/chunks/SearchBoxContext-Dtzo_rJd.js +0 -86
  62. package/dist/chunks/SearchBoxContext-Dtzo_rJd.js.map +0 -1
  63. package/dist/chunks/ViewContainer-BfiTFvLP.cjs +0 -36
  64. package/dist/chunks/ViewContainer-BfiTFvLP.cjs.map +0 -1
  65. package/dist/chunks/ViewContainer-CTl3_56W.js +0 -338
  66. package/dist/chunks/ViewContainer-CTl3_56W.js.map +0 -1
  67. package/dist/chunks/apiUtils-D9Vn1gwZ.cjs +0 -3
  68. package/dist/chunks/apiUtils-D9Vn1gwZ.cjs.map +0 -1
  69. package/dist/chunks/apiUtils-DPUgfmKk.js +0 -1450
  70. package/dist/chunks/apiUtils-DPUgfmKk.js.map +0 -1
  71. package/dist/chunks/codeStore-BrCfe9K3.js +0 -450
  72. package/dist/chunks/codeStore-BrCfe9K3.js.map +0 -1
  73. package/dist/chunks/codeStore-_b2fDZtD.cjs +0 -2
  74. package/dist/chunks/codeStore-_b2fDZtD.cjs.map +0 -1
  75. package/dist/chunks/core-BBMCFpHx.js.map +0 -1
  76. package/dist/chunks/core-CM9MsJRf.cjs +0 -2
  77. package/dist/chunks/core-CM9MsJRf.cjs.map +0 -1
  78. package/dist/chunks/enc-base64-DAsYWbA2.js.map +0 -1
  79. package/dist/chunks/enc-base64-DbK5VBfD.cjs +0 -2
  80. package/dist/chunks/enc-base64-DbK5VBfD.cjs.map +0 -1
  81. package/dist/chunks/favoriteStore-BnQ2u-sa.cjs +0 -2
  82. package/dist/chunks/favoriteStore-BnQ2u-sa.cjs.map +0 -1
  83. package/dist/chunks/favoriteStore-SyAjqLG8.js +0 -439
  84. package/dist/chunks/favoriteStore-SyAjqLG8.js.map +0 -1
  85. package/dist/chunks/popupStore-BrKcPw7K.js +0 -92
  86. package/dist/chunks/popupStore-BrKcPw7K.js.map +0 -1
  87. package/dist/chunks/popupStore-ChbYTqy1.cjs +0 -2
  88. package/dist/chunks/popupStore-ChbYTqy1.cjs.map +0 -1
  89. package/dist/chunks/realFormat-Cha7OTd9.cjs +0 -2
  90. package/dist/chunks/realFormat-Cha7OTd9.cjs.map +0 -1
  91. package/dist/chunks/realFormat-DRGLFabQ.js +0 -305
  92. package/dist/chunks/realFormat-DRGLFabQ.js.map +0 -1
  93. package/dist/chunks/sha256-BnWVPP1K.cjs +0 -2
  94. package/dist/chunks/sha256-BnWVPP1K.cjs.map +0 -1
  95. package/dist/chunks/sha256-D80RpYO2.js.map +0 -1
  96. package/dist/chunks/usePopup-DnfKRiYs.js +0 -109
  97. package/dist/chunks/usePopup-DnfKRiYs.js.map +0 -1
  98. package/dist/chunks/usePopup-Domnpg55.cjs +0 -2
  99. package/dist/chunks/usePopup-Domnpg55.cjs.map +0 -1
  100. package/dist/components/common/index.cjs.map +0 -1
  101. package/dist/components/common/index.js.map +0 -1
  102. package/dist/components/core/index.cjs.map +0 -1
  103. package/dist/components/core/index.js.map +0 -1
  104. package/dist/components/guide/index.cjs.map +0 -1
  105. package/dist/components/guide/index.js.map +0 -1
  106. package/dist/components/layout/index.cjs.map +0 -1
  107. package/dist/components/layout/index.js.map +0 -1
  108. package/dist/index.cjs.map +0 -1
  109. package/dist/index.js.map +0 -1
  110. package/dist/provider/index.cjs.map +0 -1
  111. package/dist/provider/index.js.map +0 -1
  112. package/dist/stores/index.cjs.map +0 -1
  113. package/dist/stores/index.js.map +0 -1
  114. package/dist/utils/index.cjs.map +0 -1
  115. 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-DPUgfmKk.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-BrCfe9K3.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"codeStore-BrCfe9K3.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 D=require("zustand"),S=require("./apiUtils-D9Vn1gwZ.cjs"),O={CACHE_SIZE_LIMIT:1e3},t={codeCache:new Map,nameCache:new Map,optionCache:new Map,colorCache:new Map,loadedGroups:new Set,cacheHits:new Map,clearCache(){this.codeCache.clear(),this.nameCache.clear(),this.optionCache.clear(),this.colorCache.clear(),this.loadedGroups.clear(),this.cacheHits.clear()},cleanupCache(){const s=Array.from(this.cacheHits.entries());s.sort((e,c)=>e[1]-c[1]),s.slice(0,Math.floor(s.length*.3)).forEach(([e])=>{this.codeCache.delete(e),this.nameCache.delete(e),this.optionCache.delete(e),this.colorCache.delete(e),this.cacheHits.delete(e)})},isGroupLoaded(s){return this.loadedGroups.has(s)},markGroupLoaded(s){this.loadedGroups.add(s)}},_=s=>{console.log("대규모 데이터 변환 시작:",s);const p={};if(s&&s.code&&Array.isArray(s.code)){const e=s.code,c=s.opt||[],o=new Map;c.forEach(a=>{a.cmmnCd&&a.enblYn==="Y"&&(o.has(a.cmmnCd)||o.set(a.cmmnCd,[]),o.get(a.cmmnCd).push(a))}),e.forEach(a=>{if(a&&a.cmmnCdGrp&&a.cmmnCd&&a.enblYn==="Y"){const n=a.cmmnCdGrp;p[n]||(p[n]={});const d=(o.get(a.cmmnCd)||[]).reduce((i,l)=>(l.optnCd&&l.optnNm&&(i[l.optnCd]=l.optnNm),i),{});p[n][a.cmmnCd]={codeValue:a.cmmnCd,codeNm:a.cmmnCdNm,groupCode:a.cmmnCdGrp,commonCode:a.cmmnCd,labelColor:a.cmmnCdClr,systemCodeYn:a.syscdYn,sortOrder:parseInt(a.sortOrd)||1,enabled:a.enblYn==="Y",options:Object.keys(d).length>0?d:null,originalData:a}}})}return console.log("대규모 데이터 변환 완료:",p),p},r=D.create()(S.persist((s,p)=>({codeData:null,isLoading:!1,error:null,lastUpdated:null,loadedGroups:new Set,fetchData:async()=>{s({isLoading:!0,error:null});try{console.log("대규모 공통코드 데이터 가져오기 시작: SCMSIGN00301");const e=await S.callService(S.getServiceCode("SRCH_CODE"),{crprCd:"100"});console.log("대규모 공통코드 응답:",e),console.log("대규모 공통코드목록:",e.code),console.log("대규모 공통코드옵션션목록:",e.opt);const c=_(e);t.clearCache();const o=new Set(Object.keys(c));o.forEach(a=>{t.markGroupLoaded(a)}),s({codeData:c,isLoading:!1,error:null,lastUpdated:new Date,loadedGroups:o}),console.log("대규모 공통코드 데이터 가져오기 완료")}catch(e){console.error("대규모 공통코드 데이터 가져오기 실패:",e),s({isLoading:!1,error:e instanceof Error?e.message:"대규모 공통코드 데이터 가져오기 실패"})}},loadSpecificGroup:async e=>{const{codeData:c,loadedGroups:o}=p();if(!c||o.has(e))return;const a=new Set(o).add(e);s({loadedGroups:a}),t.markGroupLoaded(e)},setData:e=>{t.clearCache();const c=new Set(Object.keys(e));c.forEach(o=>{t.markGroupLoaded(o)}),s({codeData:e,lastUpdated:new Date,loadedGroups:c})},clearData:()=>{t.clearCache(),s({codeData:null,isLoading:!1,error:null,lastUpdated:null,loadedGroups:new Set})},getLoadedGroups:()=>Array.from(p().loadedGroups)}),{name:"large-data-storage",partialize:s=>({codeData:s.codeData,lastUpdated:s.lastUpdated,loadedGroups:Array.from(s.loadedGroups)})})),b=D.create()(S.persist((s,p)=>({get codeData(){return r.getState().codeData},get isLoading(){return r.getState().isLoading},get error(){return r.getState().error},get lastUpdated(){return r.getState().lastUpdated},fetchCommonCodes:async()=>{await r.getState().fetchData()},getCodeList:(e,c)=>{const{enabledOnly:o=!0,systemCodeOnly:a=!1,sortByOrder:n=!1,excludeParentCode:u=!1}=c||{},d=`simpleCodeList_${e}_${o}_${a}_${n}_${u}`;if(t.optionCache.has(d)){const h=t.cacheHits.get(d)||0;return t.cacheHits.set(d,h+1),t.optionCache.get(d)}const i=r.getState().codeData;if(!i)return[];if(!t.isGroupLoaded(e)&&!i[e])return console.warn(`그룹 ${e}가 아직 로드되지 않았습니다.`),[];const l=[],f=i[e];f&&Object.values(f).forEach(h=>{if(!(o&&!h.enabled)&&!(a&&h.systemCodeYn!=="Y"))if(u){const m=e.length,H=h.codeValue.substring(m);H.length>0&&l.push({...h,codeValue:H})}else l.push(h)});let g;n?g=l.sort((h,m)=>h.sortOrder!==m.sortOrder?h.sortOrder-m.sortOrder:h.codeValue.localeCompare(m.codeValue)):g=l.sort((h,m)=>h.codeValue.localeCompare(m.codeValue));const C=g.map(h=>({label:h.codeNm,value:h.codeValue,tagColor:h.labelColor}));return t.optionCache.size>=O.CACHE_SIZE_LIMIT&&t.cleanupCache(),t.optionCache.set(d,C),t.cacheHits.set(d,1),C},getCodeName:e=>{if(t.nameCache.has(e)){const o=t.cacheHits.get(`name_${e}`)||0;return t.cacheHits.set(`name_${e}`,o+1),t.nameCache.get(e)}const c=r.getState().codeData;if(!c)return null;for(const o of Object.values(c))for(const a of Object.values(o))if(a.codeValue===e)return t.nameCache.set(e,a.codeNm),t.cacheHits.set(`name_${e}`,1),a.codeNm;return null},getCodeColor:e=>{if(t.colorCache.has(e)){const o=t.cacheHits.get(`color_${e}`)||0;return t.cacheHits.set(`color_${e}`,o+1),t.colorCache.get(e)}const c=r.getState().codeData;if(!c)return null;for(const o of Object.values(c))for(const a of Object.values(o))if(a.codeValue===e)return t.colorCache.set(e,a.labelColor||""),t.cacheHits.set(`color_${e}`,1),a.labelColor;return null},getGridLookup:e=>{const c=`gridLookup_${e}`;if(t.optionCache.has(c)){const i=t.cacheHits.get(c)||0;return t.cacheHits.set(c,i+1),t.optionCache.get(c)}const o=r.getState().codeData;if(!o)return{labels:[],values:[],lookupDisplay:!0};const a=o[e];if(!a)return{labels:[],values:[],lookupDisplay:!0};const n=[],u=[];Object.values(a).filter(i=>i.enabled).sort((i,l)=>i.sortOrder-l.sortOrder).forEach(i=>{n.push(i.codeNm),u.push(i.codeValue)});const d={labels:n,values:u,lookupDisplay:!0};return t.optionCache.set(c,d),t.cacheHits.set(c,1),d},getCodeByOption:(e,c,o)=>{const a=`codeByOption_${e}_${c}_${o}`;if(t.codeCache.has(a)){const l=t.cacheHits.get(a)||0;return t.cacheHits.set(a,l+1),t.codeCache.get(a)}const n=r.getState().codeData;if(!n)return[];const u=[],d=n[e];d&&Object.values(d).forEach(l=>{l.enabled&&l.options&&l.options[c]===o&&u.push({...l,codeNm:l.options[c]||l.codeNm})});const i=u.sort((l,f)=>l.codeValue.localeCompare(f.codeValue));return t.codeCache.size>=O.CACHE_SIZE_LIMIT&&t.cleanupCache(),t.codeCache.set(a,i),t.cacheHits.set(a,1),i},getCodeListByOption:(e,c,o)=>{const{enabledOnly:a=!0,systemCodeOnly:n=!1,sortByOrder:u=!1}=o||{},d=`codeListByOption_${e}_${c}_${a}_${n}_${u}`;if(t.codeCache.has(d)){const C=t.cacheHits.get(d)||0;return t.cacheHits.set(d,C+1),t.codeCache.get(d)}const i=r.getState().codeData;if(!i)return[];if(!t.isGroupLoaded(e)&&!i[e])return console.warn(`그룹 ${e}가 아직 로드되지 않았습니다.`),[];const l=[],f=i[e];f&&Object.values(f).forEach(C=>{a&&!C.enabled||n&&C.systemCodeYn!=="Y"||C.options&&C.options[c]&&l.push({label:C.options[c],value:C.commonCode,tagColor:C.labelColor})});let g;return u?g=l.sort((C,h)=>C.value.localeCompare(h.value)):g=l.sort((C,h)=>C.value.localeCompare(h.value)),t.codeCache.size>=O.CACHE_SIZE_LIMIT&&t.cleanupCache(),t.codeCache.set(d,g),t.cacheHits.set(d,1),g},getAvailableGroupCodes:()=>{const e="available_group_codes";if(t.nameCache.has(e)){const a=t.cacheHits.get(e)||0;return t.cacheHits.set(e,a+1),JSON.parse(t.nameCache.get(e))}const c=r.getState().codeData;if(!c)return[];const o=Object.keys(c).sort();return t.nameCache.set(e,JSON.stringify(o)),t.cacheHits.set(e,1),o},clearCodes:()=>{r.getState().clearData()}}),{name:"code-storage",partialize:s=>({})})),y=D.create()(S.persist((s,p)=>({get codeData(){return r.getState().codeData},get isLoading(){return r.getState().isLoading},get error(){return r.getState().error},get lastUpdated(){return r.getState().lastUpdated},fetchCommonCodes:async()=>{await r.getState().fetchData()},getOptionValue:(e,c)=>{const o=`option_${e}_${c}`;if(t.optionCache.has(o)){const u=t.cacheHits.get(o)||0;return t.cacheHits.set(o,u+1),t.optionCache.get(o)}const a=r.getState().codeData;if(!a)return null;const n=a[e];if(n&&n[c]){const u=n[c].options;return t.optionCache.set(o,u),t.cacheHits.set(o,1),u}return null},getOptionByKey:(e,c,o)=>{const a=`option_${e}_${c}_${o}`;if(t.optionCache.has(a)){const d=t.cacheHits.get(a)||0;return t.cacheHits.set(a,d+1),t.optionCache.get(a)}const n=p().getOptionValue(e,c),u=n?n[o]:null;return t.optionCache.set(a,u),t.cacheHits.set(a,1),u},clearCodes:()=>{r.getState().clearData()}}),{name:"option-storage",partialize:s=>({})})),L=D.create()(S.persist((s,p)=>({get codeData(){return r.getState().codeData},get isLoading(){return r.getState().isLoading},get error(){return r.getState().error},get lastUpdated(){return r.getState().lastUpdated},fetchCommonCodes:async()=>{await r.getState().fetchData()},getColorCode:e=>{if(t.colorCache.has(e)){const o=t.cacheHits.get(`color_${e}`)||0;return t.cacheHits.set(`color_${e}`,o+1),t.colorCache.get(e)}const c=r.getState().codeData;if(!c)return null;for(const o of Object.values(c))for(const a of Object.values(o))if(a.codeValue===e)return t.colorCache.set(e,a.labelColor||""),t.cacheHits.set(`color_${e}`,1),a.labelColor;return null},getColorMapping:()=>{const e="color_mapping";if(t.optionCache.has(e)){const a=t.cacheHits.get(e)||0;return t.cacheHits.set(e,a+1),t.optionCache.get(e)}const c=r.getState().codeData;if(!c)return[];const o=[];return Object.values(c).forEach(a=>{Object.values(a).forEach(n=>{n.labelColor&&o.push({code:n.codeValue,color:n.labelColor})})}),t.optionCache.set(e,o),t.cacheHits.set(e,1),o},clearCodes:()=>{r.getState().clearData()}}),{name:"color-storage",partialize:s=>({})}));exports.useCodeStore=b;exports.useColorStore=L;exports.useOptionStore=y;
2
- //# sourceMappingURL=codeStore-_b2fDZtD.cjs.map