@bwg-ui/core 1.3.1 → 1.3.2

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 (34) hide show
  1. package/dist/chunks/{CMSearchIntfGwP01-BWm9OqAH.js → CMSearchIntfGwP01-Bx5cpkhH.js} +1 -1
  2. package/dist/chunks/{CMSearchIntfGwP01-CihGc5Q1.cjs → CMSearchIntfGwP01-Uhl4uqiV.cjs} +1 -1
  3. package/dist/chunks/{MenuReport-khjaUz1Q.cjs → MenuReport-CPwq8w-z.cjs} +1 -1
  4. package/dist/chunks/{MenuReport-yYhMOHyq.js → MenuReport-DxJIaW8D.js} +1 -1
  5. package/dist/chunks/{common-components-DletnDTf.cjs → common-components-Dd_AsKs7.cjs} +36 -36
  6. package/dist/chunks/{common-components-coAoWxE9.js → common-components-dzN5Nuq0.js} +1380 -1318
  7. package/dist/chunks/{layout-components-C1DG2B74.js → layout-components-B25FFvXj.js} +679 -663
  8. package/dist/chunks/layout-components-Cz7Zets7.cjs +35 -0
  9. package/dist/components/common/BwgDetail.d.ts.map +1 -1
  10. package/dist/components/common/BwgGrid.d.ts.map +1 -1
  11. package/dist/components/common/index.cjs +1 -1
  12. package/dist/components/common/index.js +1 -1
  13. package/dist/components/guide/index.cjs +1 -1
  14. package/dist/components/guide/index.js +1 -1
  15. package/dist/components/layout/BwgPortal01.d.ts.map +1 -1
  16. package/dist/components/layout/custom/ConfigurableMenuTab.d.ts.map +1 -1
  17. package/dist/components/layout/custom/ConfigurableSidebar.d.ts.map +1 -1
  18. package/dist/components/layout/default/LoadingContainer.d.ts.map +1 -1
  19. package/dist/components/layout/index.cjs +1 -1
  20. package/dist/components/layout/index.js +1 -1
  21. package/dist/components/popup/index.cjs +1 -1
  22. package/dist/components/popup/index.js +1 -1
  23. package/dist/index.cjs +1 -1
  24. package/dist/index.js +2 -2
  25. package/dist/stores/index.cjs +2 -2
  26. package/dist/stores/index.d.ts +6 -2
  27. package/dist/stores/index.d.ts.map +1 -1
  28. package/dist/stores/index.js +116 -100
  29. package/dist/stores/menuViewStore.d.ts +6 -2
  30. package/dist/stores/menuViewStore.d.ts.map +1 -1
  31. package/dist/utils/index.cjs +1 -1
  32. package/dist/utils/index.js +1 -1
  33. package/package.json +1 -1
  34. package/dist/chunks/layout-components-C6KeWPIu.cjs +0 -35
@@ -1,10 +1,10 @@
1
1
  import { create as N } from "zustand";
2
2
  import { callService as b, getServiceCode as F, getUserId as v, getUserInfo as ee, getCookie as te, encryptSha256 as oe, setCookie as $ } from "../utils/index.js";
3
- import { message as w } from "antd";
4
- import { l as se } from "../chunks/layout-components-C1DG2B74.js";
3
+ import { message as K, Modal as se } from "antd";
4
+ import { l as ne } from "../chunks/layout-components-B25FFvXj.js";
5
5
  import { useState as X, useCallback as W } from "react";
6
- import { useNavigate as ne } from "react-router-dom";
7
- function re(n, r) {
6
+ import { useNavigate as re } from "react-router-dom";
7
+ function ae(n, r) {
8
8
  let e;
9
9
  try {
10
10
  e = n();
@@ -21,12 +21,12 @@ function re(n, r) {
21
21
  removeItem: (o) => e.removeItem(o)
22
22
  };
23
23
  }
24
- const K = (n) => (r) => {
24
+ const B = (n) => (r) => {
25
25
  try {
26
26
  const e = n(r);
27
27
  return e instanceof Promise ? e : {
28
28
  then(s) {
29
- return K(s)(e);
29
+ return B(s)(e);
30
30
  },
31
31
  catch(s) {
32
32
  return this;
@@ -38,13 +38,13 @@ const K = (n) => (r) => {
38
38
  return this;
39
39
  },
40
40
  catch(s) {
41
- return K(s)(e);
41
+ return B(s)(e);
42
42
  }
43
43
  };
44
44
  }
45
- }, ae = (n, r) => (e, s, o) => {
45
+ }, de = (n, r) => (e, s, o) => {
46
46
  let t = {
47
- storage: re(() => localStorage),
47
+ storage: ae(() => localStorage),
48
48
  partialize: (C) => C,
49
49
  version: 0,
50
50
  merge: (C, g) => ({
@@ -88,7 +88,7 @@ const K = (n) => (r) => {
88
88
  return I((S = s()) != null ? S : m);
89
89
  });
90
90
  const k = ((g = t.onRehydrateStorage) == null ? void 0 : g.call(t, (C = s()) != null ? C : m)) || void 0;
91
- return K(i.getItem.bind(i))(t.name).then((I) => {
91
+ return B(i.getItem.bind(i))(t.name).then((I) => {
92
92
  if (I)
93
93
  if (typeof I.version == "number" && I.version !== t.version) {
94
94
  if (t.migrate) {
@@ -96,7 +96,7 @@ const K = (n) => (r) => {
96
96
  I.state,
97
97
  I.version
98
98
  );
99
- return S instanceof Promise ? S.then((_) => [!0, _]) : [!0, S];
99
+ return S instanceof Promise ? S.then((T) => [!0, T]) : [!0, S];
100
100
  }
101
101
  console.error(
102
102
  "State loaded from storage couldn't be migrated since no migrate function was provided"
@@ -106,11 +106,11 @@ const K = (n) => (r) => {
106
106
  return [!1, void 0];
107
107
  }).then((I) => {
108
108
  var S;
109
- const [_, Q] = I;
109
+ const [T, Q] = I;
110
110
  if (u = t.merge(
111
111
  Q,
112
112
  (S = s()) != null ? S : m
113
- ), e(u, !0), _)
113
+ ), e(u, !0), T)
114
114
  return l();
115
115
  }).then(() => {
116
116
  k?.(u, void 0), u = s(), a = !0, c.forEach((I) => I(u));
@@ -138,7 +138,7 @@ const K = (n) => (r) => {
138
138
  c.delete(C);
139
139
  })
140
140
  }, t.skipHydration || f(), u || m;
141
- }, M = ae, H = N()(
141
+ }, M = de, H = N()(
142
142
  M(
143
143
  (n, r) => ({
144
144
  user: null,
@@ -268,7 +268,7 @@ const K = (n) => (r) => {
268
268
  // 저장할 상태만 선택
269
269
  }
270
270
  )
271
- ), T = {
271
+ ), w = {
272
272
  CACHE_SIZE_LIMIT: 1e3
273
273
  }, p = {
274
274
  codeCache: /* @__PURE__ */ new Map(),
@@ -292,7 +292,7 @@ const K = (n) => (r) => {
292
292
  markGroupLoaded(n) {
293
293
  this.loadedGroups.add(n);
294
294
  }
295
- }, L = (n) => {
295
+ }, P = (n) => {
296
296
  console.log("대규모 데이터 변환 시작:", n);
297
297
  const r = {};
298
298
  if (n && n.code && Array.isArray(n.code)) {
@@ -337,7 +337,7 @@ const K = (n) => (r) => {
337
337
  crprCd: "100"
338
338
  });
339
339
  console.log("시스템 공통코드 응답:", e), console.log("시스템 공통코드목록:", e.code), console.log("시스템 공통코드옵션목록:", e.opt);
340
- const s = L(e), t = {
340
+ const s = P(e), t = {
341
341
  ...r().codeData || {},
342
342
  ...s
343
343
  // 시스템 공통코드가 우선 (같은 그룹코드가 있으면 덮어씀)
@@ -369,7 +369,7 @@ const K = (n) => (r) => {
369
369
  sysCd: __SYS_CD__
370
370
  });
371
371
  console.log("업무 공통코드 응답:", e), console.log("업무 공통코드목록:", e.code), console.log("업무 공통코드옵션목록:", e.opt);
372
- const s = L(e), t = {
372
+ const s = P(e), t = {
373
373
  ...r().codeData || {},
374
374
  ...s
375
375
  // 업무 공통코드 추가 (같은 그룹코드가 있으면 덮어씀)
@@ -406,7 +406,7 @@ const K = (n) => (r) => {
406
406
  })
407
407
  ]);
408
408
  console.log("시스템 공통코드 응답:", e), console.log("업무 공통코드 응답:", s);
409
- const o = L(e), t = L(s), a = {
409
+ const o = P(e), t = P(s), a = {
410
410
  ...o,
411
411
  ...t
412
412
  // 업무 공통코드가 같은 그룹코드를 덮어쓸 수 있음
@@ -524,7 +524,7 @@ const K = (n) => (r) => {
524
524
  value: f.codeValue,
525
525
  tagColor: f.labelColor
526
526
  }));
527
- return p.optionCache.size >= T.CACHE_SIZE_LIMIT && p.cleanupCache(), p.optionCache.set(c, u), p.cacheHits.set(c, 1), u;
527
+ return p.optionCache.size >= w.CACHE_SIZE_LIMIT && p.cleanupCache(), p.optionCache.set(c, u), p.cacheHits.set(c, 1), u;
528
528
  },
529
529
  // 2. 코드를 던졌을 때 코드명을 리턴 (대규모 최적화)
530
530
  getCodeName: (e) => {
@@ -595,7 +595,7 @@ const K = (n) => (r) => {
595
595
  const i = d.sort(
596
596
  (l, h) => l.codeValue.localeCompare(h.codeValue)
597
597
  );
598
- return p.codeCache.size >= T.CACHE_SIZE_LIMIT && p.cleanupCache(), p.codeCache.set(t, i), p.cacheHits.set(t, 1), i;
598
+ return p.codeCache.size >= w.CACHE_SIZE_LIMIT && p.cleanupCache(), p.codeCache.set(t, i), p.cacheHits.set(t, 1), i;
599
599
  },
600
600
  // 6. 옵션코드별로 코드 목록 조회 (SimpleCodeItem 형태로 반환)
601
601
  getCodeListByOption: (e, s, o) => {
@@ -628,7 +628,7 @@ const K = (n) => (r) => {
628
628
  let m;
629
629
  return d ? m = l.sort((u, f) => u.value.localeCompare(f.value)) : m = l.sort(
630
630
  (u, f) => u.value.localeCompare(f.value)
631
- ), p.codeCache.size >= T.CACHE_SIZE_LIMIT && p.cleanupCache(), p.codeCache.set(c, m), p.cacheHits.set(c, 1), m;
631
+ ), p.codeCache.size >= w.CACHE_SIZE_LIMIT && p.cleanupCache(), p.codeCache.set(c, m), p.cacheHits.set(c, 1), m;
632
632
  },
633
633
  // 7. 그룹코드 목록 조회
634
634
  getAvailableGroupCodes: () => {
@@ -657,7 +657,7 @@ const K = (n) => (r) => {
657
657
  })
658
658
  }
659
659
  )
660
- ), ve = N()(
660
+ ), Pe = N()(
661
661
  M(
662
662
  (n, r) => ({
663
663
  // 공통 데이터 스토어에서 상태 가져오기
@@ -783,7 +783,7 @@ const K = (n) => (r) => {
783
783
  })
784
784
  }
785
785
  )
786
- ), de = (n, r) => ({
786
+ ), ce = (n, r) => ({
787
787
  nodes: {},
788
788
  rootIds: [],
789
789
  loadedFor: void 0,
@@ -824,7 +824,7 @@ const K = (n) => (r) => {
824
824
  if (!(!s && o.loadedFor === e && Object.keys(o.nodes).length)) {
825
825
  n({ loading: !0, error: void 0 });
826
826
  try {
827
- const t = await b("SCMBKMK00101", { userId: e }), a = Array.isArray(t?.sub) ? t.sub : [], d = ce(a), c = P(
827
+ const t = await b("SCMBKMK00101", { userId: e }), a = Array.isArray(t?.sub) ? t.sub : [], d = pe(a), c = L(
828
828
  d.nodes,
829
829
  d.rootIds
830
830
  );
@@ -855,7 +855,7 @@ const K = (n) => (r) => {
855
855
  },
856
856
  // ====== 공통: 생성 ======
857
857
  addNode: async (e) => {
858
- const s = A(r()), o = pe();
858
+ const s = _(r()), o = le();
859
859
  n((t) => {
860
860
  const a = e.sortOrdr ?? U(t, e.prntBkmkId), d = {
861
861
  ...t,
@@ -884,7 +884,7 @@ const K = (n) => (r) => {
884
884
  rootIds: t.rootIds.slice(),
885
885
  treeNodes: t.treeNodes
886
886
  };
887
- return le(d, o, e.prntBkmkId), d.treeNodes = P(d.nodes, d.rootIds), d;
887
+ return ie(d, o, e.prntBkmkId), d.treeNodes = L(d.nodes, d.rootIds), d;
888
888
  });
889
889
  try {
890
890
  let t = o;
@@ -902,10 +902,10 @@ const K = (n) => (r) => {
902
902
  chngId: v()
903
903
  });
904
904
  return t = String(d?.bkmkId ?? d?.itemId ?? o), n((c) => {
905
- const i = ue(c, o, t);
905
+ const i = me(c, o, t);
906
906
  return {
907
907
  ...i,
908
- treeNodes: P(i.nodes, i.rootIds)
908
+ treeNodes: L(i.nodes, i.rootIds)
909
909
  };
910
910
  }), t;
911
911
  } catch (t) {
@@ -946,7 +946,7 @@ const K = (n) => (r) => {
946
946
  },
947
947
  // ====== 공통: 삭제 ======
948
948
  removeNode: async (e) => {
949
- const s = A(r());
949
+ const s = _(r());
950
950
  n((o) => {
951
951
  if (!o.nodes[e]) return o;
952
952
  const t = {
@@ -955,7 +955,7 @@ const K = (n) => (r) => {
955
955
  rootIds: o.rootIds.slice(),
956
956
  treeNodes: o.treeNodes
957
957
  };
958
- return J(t, e), t.treeNodes = P(t.nodes, t.rootIds), t;
958
+ return J(t, e), t.treeNodes = L(t.nodes, t.rootIds), t;
959
959
  });
960
960
  try {
961
961
  await b("SCMBKMK00103", { bkmkId: e });
@@ -965,7 +965,7 @@ const K = (n) => (r) => {
965
965
  },
966
966
  // ====== 공통: 수정 ======
967
967
  editNode: async ({ bkmkId: e, userId: s, bkmkNm: o, prntBkmkId: t, sortOrdr: a }) => {
968
- const d = A(r());
968
+ const d = _(r());
969
969
  n((c) => {
970
970
  const i = { ...c, nodes: { ...c.nodes } }, l = i.nodes[e];
971
971
  return l?.type === "F" && typeof o == "string" && (i.nodes[e] = {
@@ -1073,8 +1073,8 @@ const K = (n) => (r) => {
1073
1073
  };
1074
1074
  return s.map(d).filter(Boolean);
1075
1075
  }
1076
- }), q = N(de);
1077
- function ce(n) {
1076
+ }), q = N(ce);
1077
+ function pe(n) {
1078
1078
  const r = {}, e = [], s = (o) => {
1079
1079
  o.forEach((t) => {
1080
1080
  const a = {
@@ -1113,14 +1113,14 @@ function ce(n) {
1113
1113
  );
1114
1114
  }), { nodes: r, rootIds: e };
1115
1115
  }
1116
- function A(n) {
1116
+ function _(n) {
1117
1117
  return {
1118
1118
  ...n,
1119
1119
  nodes: JSON.parse(JSON.stringify(n.nodes)),
1120
1120
  rootIds: n.rootIds.slice()
1121
1121
  };
1122
1122
  }
1123
- function pe() {
1123
+ function le() {
1124
1124
  return `tmp_${Math.random().toString(36).slice(2, 10)}`;
1125
1125
  }
1126
1126
  function U(n, r) {
@@ -1128,7 +1128,7 @@ function U(n, r) {
1128
1128
  const e = n.nodes[r];
1129
1129
  return e ? e.children.length : 0;
1130
1130
  }
1131
- function le(n, r, e) {
1131
+ function ie(n, r, e) {
1132
1132
  const s = n.nodes[r];
1133
1133
  if (s)
1134
1134
  if (e && e !== "-") {
@@ -1138,7 +1138,7 @@ function le(n, r, e) {
1138
1138
  } else
1139
1139
  s.prntBkmkId = "-", n.rootIds = [...n.rootIds, r];
1140
1140
  }
1141
- function ie(n, r) {
1141
+ function ue(n, r) {
1142
1142
  const e = n.nodes[r];
1143
1143
  if (!e) return;
1144
1144
  const s = e.prntBkmkId;
@@ -1151,11 +1151,11 @@ function ie(n, r) {
1151
1151
  function J(n, r) {
1152
1152
  const e = n.nodes[r];
1153
1153
  if (!e) return;
1154
- e.type === "F" && e.children.slice().forEach((a) => J(n, a)), ie(n, r);
1154
+ e.type === "F" && e.children.slice().forEach((a) => J(n, a)), ue(n, r);
1155
1155
  const { [r]: s, ...o } = n.nodes;
1156
1156
  n.nodes = o;
1157
1157
  }
1158
- function ue(n, r, e) {
1158
+ function me(n, r, e) {
1159
1159
  if (r === e) return n;
1160
1160
  const s = n.nodes[r];
1161
1161
  if (!s) return n;
@@ -1177,7 +1177,7 @@ function ue(n, r, e) {
1177
1177
  function x(n) {
1178
1178
  return n.rootIds.find((r) => n.nodes[r]?.type === "F") ?? null;
1179
1179
  }
1180
- function P(n, r) {
1180
+ function L(n, r) {
1181
1181
  const e = {};
1182
1182
  Object.values(n).forEach((c) => {
1183
1183
  const i = c.bkmkId, l = c.prntBkmkId;
@@ -1229,17 +1229,17 @@ function z(n, r, e) {
1229
1229
  }
1230
1230
  const E = {
1231
1231
  DEFAULT_PRNT_GBCD: 1
1232
- }, me = (n) => n && typeof n == "object" && typeof n.menuId == "string" && typeof n.menuNm == "string", j = (n) => Array.isArray(n) && n.every(me);
1233
- let B = [], Y = [];
1234
- const Ce = (n) => {
1232
+ }, Ce = (n) => n && typeof n == "object" && typeof n.menuId == "string" && typeof n.menuNm == "string", j = (n) => Array.isArray(n) && n.every(Ce);
1233
+ let A = [], Y = [];
1234
+ const fe = (n) => {
1235
1235
  if (n && typeof n == "object") {
1236
1236
  const r = n;
1237
1237
  if (r.menus && j(r.menus)) return r.menus;
1238
1238
  if (j(n)) return n;
1239
1239
  }
1240
1240
  return console.warn("⚠️ 메뉴 응답이 비어있거나 예상과 다릅니다."), [];
1241
- }, fe = (n, r) => !!r && n.crprCd === r.crprCd && n.userId === r.userId && (n.prntGbcd ?? E.DEFAULT_PRNT_GBCD) === (r.prntGbcd ?? E.DEFAULT_PRNT_GBCD), he = (n) => {
1242
- if (B.length === n.length && B.every(
1241
+ }, he = (n, r) => !!r && n.crprCd === r.crprCd && n.userId === r.userId && (n.prntGbcd ?? E.DEFAULT_PRNT_GBCD) === (r.prntGbcd ?? E.DEFAULT_PRNT_GBCD), ye = (n) => {
1242
+ if (A.length === n.length && A.every(
1243
1243
  (t, a) => t.menuId === n[a]?.menuId && t.menuPrntId === n[a]?.menuPrntId
1244
1244
  ))
1245
1245
  return Y;
@@ -1253,7 +1253,7 @@ const Ce = (n) => {
1253
1253
  ...a,
1254
1254
  children: a.children && a.children.length ? s(a.children) : void 0
1255
1255
  })), o = s(e);
1256
- return B = [...n], Y = o, o;
1256
+ return A = [...n], Y = o, o;
1257
1257
  }, R = N((n, r) => ({
1258
1258
  // 📊 초기 상태값
1259
1259
  menuList: [],
@@ -1269,13 +1269,13 @@ const Ce = (n) => {
1269
1269
  userId: s,
1270
1270
  prntGbcd: o ?? E.DEFAULT_PRNT_GBCD
1271
1271
  };
1272
- if (fe(t, r()._lastFetchParams)) {
1272
+ if (he(t, r()._lastFetchParams)) {
1273
1273
  console.log("✅ 중복 fetch 차단", t);
1274
1274
  return;
1275
1275
  }
1276
1276
  n({ isLoading: !0, error: null, _lastFetchParams: t });
1277
1277
  try {
1278
- const a = await b(F("AUTH_MENU"), t), d = Ce(a), c = he(d);
1278
+ const a = await b(F("AUTH_MENU"), t), d = fe(a), c = ye(d);
1279
1279
  n({
1280
1280
  flatMenuList: d,
1281
1281
  // 평면 리스트 저장
@@ -1336,40 +1336,56 @@ const Ce = (n) => {
1336
1336
  },
1337
1337
  // 🔧 탭 추가 (메뉴 아이템 객체로)
1338
1338
  // 사이드바에서 메뉴 클릭 시 호출되는 메인 함수
1339
- openTabFromMenu: (e, s) => {
1340
- const { tabs: o } = r(), t = o.find((d) => d.key === e.menuId), a = o.find((d) => d.key === e.menuId);
1341
- if (t)
1342
- a != null ? (n({ activeMenuId: e.menuId, activeMenuItem: e }), r().setTabParams(e.menuId, s || {}), e?.prsnInfoYn === "Y" && r().setProtectFlagForKey(e.menuId)) : w.warning("유효하지 않은 메뉴정보입니다.");
1343
- else {
1344
- if (o.length > O.MAX_TABS) {
1345
- console.warn("❌ 최대 탭 개수를 초과했습니다."), w.warning(
1346
- `최대 ${O.MAX_TABS}개의 탭만 열 수 있습니다.
1347
- 기존 탭을 닫고 다시 시도해주세요.`
1348
- );
1339
+ openTabFromMenu: (e, s, o) => {
1340
+ const { tabs: t } = r(), a = t.find((i) => i.key === e.menuId), d = o?.skipRefreshModal ?? !1;
1341
+ if (a) {
1342
+ if (d) {
1343
+ r().focusTab(e.menuId), r().setTabParams(e.menuId, s || {}), e?.prsnInfoYn === "Y" && r().setProtectFlagForKey(e.menuId);
1349
1344
  return;
1350
1345
  }
1351
- const d = {
1352
- key: e.menuId,
1353
- label: e.menuNm,
1354
- gubun: "M",
1355
- menuItem: e,
1356
- closable: !0
1357
- };
1358
- n({
1359
- tabs: [...o, d],
1360
- // 목록에 추가
1361
- activeMenuId: e.menuId,
1362
- // 새 탭을 활성화
1363
- activeMenuItem: e
1364
- // 현재 프로그램으로 설정
1365
- }), r().setTabParams(e.menuId, s || {}), e?.prsnInfoYn === "Y" && r().setProtectFlagForKey(e.menuId);
1346
+ se.confirm({
1347
+ title: `[${e.menuNm}] 메뉴이동 알림`,
1348
+ content: "이미 열린 화면입니다. 새로고침 하시겠습니까?",
1349
+ centered: !0,
1350
+ okText: "예",
1351
+ cancelText: "아니오",
1352
+ onOk: () => {
1353
+ r().refreshTab(e.menuId), r().focusTab(e.menuId), r().setTabParams(e.menuId, s || {}), e?.prsnInfoYn === "Y" && r().setProtectFlagForKey(e.menuId);
1354
+ },
1355
+ onCancel: () => {
1356
+ r().focusTab(e.menuId), r().setTabParams(e.menuId, s || {}), e?.prsnInfoYn === "Y" && r().setProtectFlagForKey(e.menuId);
1357
+ }
1358
+ });
1359
+ return;
1366
1360
  }
1361
+ if (t.length >= O.MAX_TABS) {
1362
+ console.warn("❌ 최대 탭 개수를 초과했습니다."), K.warning(
1363
+ `최대 ${O.MAX_TABS}개의 탭만 열 수 있습니다.
1364
+ 기존 탭을 닫고 다시 시도해주세요.`
1365
+ );
1366
+ return;
1367
+ }
1368
+ const c = {
1369
+ key: e.menuId,
1370
+ label: e.menuNm,
1371
+ gubun: "M",
1372
+ menuItem: e,
1373
+ closable: !0
1374
+ };
1375
+ n({
1376
+ tabs: [...t, c],
1377
+ // 탭 목록에 추가
1378
+ activeMenuId: e.menuId,
1379
+ // 새 탭을 활성화
1380
+ activeMenuItem: e
1381
+ // 현재 프로그램으로 설정
1382
+ }), r().setTabParams(e.menuId, s || {}), e?.prsnInfoYn === "Y" && r().setProtectFlagForKey(e.menuId);
1367
1383
  },
1368
1384
  // 🔧 탭 추가 (메뉴 ID로)
1369
1385
  // URL 파라미터로 메뉴 열기 시 사용 (예: ?menuId=CM000301)
1370
- openTabByMenuId: (e, s) => {
1371
- const o = R.getState().findMenuById(e);
1372
- o ? r().openTabFromMenu(o, s) : w.warning("메뉴 ID를 찾을 수 없습니다.");
1386
+ openTabByMenuId: (e, s, o) => {
1387
+ const t = R.getState().findMenuById(e);
1388
+ t ? r().openTabFromMenu(t, s, o) : K.warning("메뉴 ID를 찾을 수 없습니다.");
1373
1389
  },
1374
1390
  openDetailView: (e, s, o) => {
1375
1391
  const { tabs: t } = r();
@@ -1504,7 +1520,7 @@ const Ce = (n) => {
1504
1520
  const t = r().pinnedTabs;
1505
1521
  s.slice(o + 1).filter((d) => !t.has(d.key)).forEach((d) => r().closeTab(d.key));
1506
1522
  }
1507
- })), ye = N((n, r) => ({
1523
+ })), Ie = N((n, r) => ({
1508
1524
  popups: [],
1509
1525
  activePopupId: null,
1510
1526
  isLoading: !1,
@@ -1566,7 +1582,7 @@ const Ce = (n) => {
1566
1582
  },
1567
1583
  // 로컬 팝업 열기 (DB 조회 없이 레지스트리 매핑으로 렌더)
1568
1584
  openCorePopup: (e, s) => {
1569
- const o = `popup_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`, t = r().zIndexSeed + 1, d = se[e]?.defaultConfig || {}, c = {
1585
+ const o = `popup_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`, t = r().zIndexSeed + 1, d = ne[e]?.defaultConfig || {}, c = {
1570
1586
  ...d,
1571
1587
  ...s,
1572
1588
  // buttons와 callback은 완전히 덮어쓰기 (병합하지 않음)
@@ -2060,7 +2076,7 @@ const Ce = (n) => {
2060
2076
  // localStorage key
2061
2077
  }
2062
2078
  )
2063
- ), Pe = N((n) => ({
2079
+ ), De = N((n) => ({
2064
2080
  requestCount: 0,
2065
2081
  loading: !1,
2066
2082
  showLoading: () => n((r) => {
@@ -2071,7 +2087,7 @@ const Ce = (n) => {
2071
2087
  const e = Math.max(0, r.requestCount - 1);
2072
2088
  return { requestCount: e, loading: e > 0 };
2073
2089
  })
2074
- })), De = N((n) => ({
2090
+ })), Oe = N((n) => ({
2075
2091
  requestCount: 0,
2076
2092
  loading: !1,
2077
2093
  showLoading: () => n((r) => {
@@ -2083,21 +2099,21 @@ const Ce = (n) => {
2083
2099
  return { requestCount: e, loading: e > 0 };
2084
2100
  })
2085
2101
  }));
2086
- function Ie() {
2102
+ function ge() {
2087
2103
  const [n, r] = X(!1), e = W((s) => {
2088
2104
  const o = s?.getModifierState?.("CapsLock");
2089
2105
  typeof o == "boolean" && r(o);
2090
2106
  }, []);
2091
2107
  return { capsOn: n, onKeyDown: e };
2092
2108
  }
2093
- function Oe(n) {
2109
+ function Fe(n) {
2094
2110
  const {
2095
2111
  loginApi: r,
2096
2112
  fetchCommonCodes: e,
2097
2113
  onAfterLogin: s,
2098
2114
  onError: o,
2099
2115
  rememberCookie: t = { enabled: !0, days: 30 }
2100
- } = n, [a, d] = X(!1), { capsOn: c, onKeyDown: i } = Ie(), l = "SCMSIGN00101", h = `${__SYS_CD__}_login_id`, m = {
2116
+ } = n, [a, d] = X(!1), { capsOn: c, onKeyDown: i } = ge(), l = "SCMSIGN00101", h = `${__SYS_CD__}_login_id`, m = {
2101
2117
  id: t?.enabled ? te(h) : void 0,
2102
2118
  pswr: void 0
2103
2119
  }, u = W(
@@ -2114,7 +2130,7 @@ function Oe(n) {
2114
2130
  const S = t.days ?? 30;
2115
2131
  f.remember ? $(h, f.id ?? "", S) : $(h, "", 0);
2116
2132
  }
2117
- return e ? await e() : await G.getState().fetchCommonCodes(), s ? s(I, C) : (w.success(`${I.userInfo.userNm}님 환영합니다.`), C("/main")), { user: I.userInfo, response: I };
2133
+ return e ? await e() : await G.getState().fetchCommonCodes(), s ? s(I, C) : (K.success(`${I.userInfo.userNm}님 환영합니다.`), C("/main")), { user: I.userInfo, response: I };
2118
2134
  } else
2119
2135
  throw o?.({ user: I.userInfo, response: I, navigate: C }), new Error("사용자 정보가 유효하지 않습니다.");
2120
2136
  } catch (g) {
@@ -2141,33 +2157,33 @@ function Oe(n) {
2141
2157
  doLogin: u
2142
2158
  };
2143
2159
  }
2144
- function we() {
2145
- const n = ne();
2160
+ function Te() {
2161
+ const n = re();
2146
2162
  return () => {
2147
2163
  H.getState().clearLoginUser(), V.getState().clearSystemMap(), G.getState().clearCodes(), R.getState().clearMenu(), Z.getState().clearMenuViewStore(), q.getState().clearFavorites(), n("/login");
2148
2164
  };
2149
2165
  }
2150
- const Fe = () => G.getState(), _e = () => ye.getState(), Te = () => H.getState(), Ae = () => q.getState(), Be = () => R.getState(), Ke = () => Z.getState(), Ee = () => V.getState();
2166
+ const we = () => G.getState(), _e = () => Ie.getState(), Ae = () => H.getState(), Ke = () => q.getState(), Be = () => R.getState(), Ee = () => Z.getState(), He = () => V.getState();
2151
2167
  export {
2152
- Ie as useCapsLock,
2153
- Fe as useCode,
2168
+ ge as useCapsLock,
2169
+ we as useCode,
2154
2170
  G as useCodeStore,
2155
2171
  Le as useColorStore,
2156
- Ae as useFavorite,
2172
+ Ke as useFavorite,
2157
2173
  q as useFavoriteStore,
2158
- Pe as useLoadingStore,
2159
- Oe as useLogin,
2160
- we as useLogout,
2174
+ De as useLoadingStore,
2175
+ Fe as useLogin,
2176
+ Te as useLogout,
2161
2177
  Be as useMenuModel,
2162
2178
  R as useMenuModelStore,
2163
- Ke as useMenuView,
2179
+ Ee as useMenuView,
2164
2180
  Z as useMenuViewStore,
2165
- ve as useOptionStore,
2166
- De as usePopupLoadingStore,
2181
+ Pe as useOptionStore,
2182
+ Oe as usePopupLoadingStore,
2167
2183
  _e as usePopupState,
2168
- ye as usePopupStore,
2169
- Ee as useSystemCode,
2184
+ Ie as usePopupStore,
2185
+ He as useSystemCode,
2170
2186
  V as useSystemStore,
2171
- Te as useUser,
2187
+ Ae as useUser,
2172
2188
  H as useUserStore
2173
2189
  };
@@ -37,8 +37,12 @@ type MenuViewState = {
37
37
  pinnedTabs: Set<string>;
38
38
  refreshTabKey: Record<string, number>;
39
39
  clearMenuViewStore: () => void;
40
- openTabFromMenu: (menuItem: MenuItem, params?: Record<string, any>) => void;
41
- openTabByMenuId: (menuId: string, params?: Record<string, any>) => void;
40
+ openTabFromMenu: (menuItem: MenuItem, params?: Record<string, any>, options?: {
41
+ skipRefreshModal?: boolean;
42
+ }) => void;
43
+ openTabByMenuId: (menuId: string, params?: Record<string, any>, options?: {
44
+ skipRefreshModal?: boolean;
45
+ }) => void;
42
46
  /**
43
47
  * 상세 탭 추가
44
48
  * @param viewInfo 상세 컴포넌트 정보
@@ -1 +1 @@
1
- {"version":3,"file":"menuViewStore.d.ts","sourceRoot":"","sources":["../../src/stores/menuViewStore.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"menuViewStore.d.ts","sourceRoot":"","sources":["../../src/stores/menuViewStore.ts"],"names":[],"mappings":"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"}