@bwg-ui/core 1.1.18 → 1.1.20
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/BwgCheck-BDt8r0gn.js +200 -0
- package/dist/chunks/BwgCheck-BDt8r0gn.js.map +1 -0
- package/dist/chunks/BwgCheck-Dtzr-6rg.cjs +2 -0
- package/dist/chunks/BwgCheck-Dtzr-6rg.cjs.map +1 -0
- package/dist/chunks/{BwgLargeUploader-D6plJv5D.js → BwgDownload-CF_Zo2oU.js} +809 -908
- package/dist/chunks/BwgDownload-CF_Zo2oU.js.map +1 -0
- package/dist/chunks/BwgDownload-DvCaLWCL.cjs +3 -0
- package/dist/chunks/BwgDownload-DvCaLWCL.cjs.map +1 -0
- package/dist/chunks/SSOHandler-C7echUZs.cjs +236 -0
- package/dist/chunks/SSOHandler-C7echUZs.cjs.map +1 -0
- package/dist/chunks/{SSOHandler-yNjxYbHn.js → SSOHandler-Cr04mtMm.js} +10739 -8719
- package/dist/chunks/SSOHandler-Cr04mtMm.js.map +1 -0
- package/dist/chunks/{SearchBoxContext-CO1AyqH4.js → SearchBoxContext-C2ECWG9l.js} +7 -7
- package/dist/chunks/{SearchBoxContext-CO1AyqH4.js.map → SearchBoxContext-C2ECWG9l.js.map} +1 -1
- package/dist/chunks/{SearchBoxContext-Cinu3U4b.cjs → SearchBoxContext-aMXi2JmO.cjs} +2 -2
- package/dist/chunks/{SearchBoxContext-Cinu3U4b.cjs.map → SearchBoxContext-aMXi2JmO.cjs.map} +1 -1
- package/dist/chunks/{ViewContainer-BH7t9T4d.cjs → ViewContainer-DI7hvDi-.cjs} +2 -2
- package/dist/chunks/{ViewContainer-BH7t9T4d.cjs.map → ViewContainer-DI7hvDi-.cjs.map} +1 -1
- package/dist/chunks/{ViewContainer-CMbN_tYW.js → ViewContainer-DxhY26m3.js} +2 -2
- package/dist/chunks/{ViewContainer-CMbN_tYW.js.map → ViewContainer-DxhY26m3.js.map} +1 -1
- package/dist/chunks/apiUtils-BRaXRbjE.js +1428 -0
- package/dist/chunks/apiUtils-BRaXRbjE.js.map +1 -0
- package/dist/chunks/apiUtils-DL43X2ta.cjs +3 -0
- package/dist/chunks/apiUtils-DL43X2ta.cjs.map +1 -0
- package/dist/chunks/{codeStore-DTtOQhfW.cjs → codeStore-WWRT65Zk.cjs} +2 -2
- package/dist/chunks/{codeStore-DTtOQhfW.cjs.map → codeStore-WWRT65Zk.cjs.map} +1 -1
- package/dist/chunks/{codeStore-C0f5xZ_m.js → codeStore-kuUEfWSS.js} +2 -2
- package/dist/chunks/{codeStore-C0f5xZ_m.js.map → codeStore-kuUEfWSS.js.map} +1 -1
- package/dist/chunks/core-D7JhyoYH.cjs +2 -0
- package/dist/chunks/core-D7JhyoYH.cjs.map +1 -0
- package/dist/chunks/core-DLGhqegD.js +514 -0
- package/dist/chunks/core-DLGhqegD.js.map +1 -0
- package/dist/chunks/enc-base64-96WlVdPN.js +102 -0
- package/dist/chunks/enc-base64-96WlVdPN.js.map +1 -0
- package/dist/chunks/enc-base64-b9mIy966.cjs +2 -0
- package/dist/chunks/enc-base64-b9mIy966.cjs.map +1 -0
- package/dist/chunks/favoriteStore-D40XfOmq.js +439 -0
- package/dist/chunks/favoriteStore-D40XfOmq.js.map +1 -0
- package/dist/chunks/favoriteStore-DdGoghEn.cjs +2 -0
- package/dist/chunks/favoriteStore-DdGoghEn.cjs.map +1 -0
- package/dist/chunks/{popupStore-DGMxbQ--.cjs → popupStore-DKpp0bmC.cjs} +2 -2
- package/dist/chunks/{popupStore-DGMxbQ--.cjs.map → popupStore-DKpp0bmC.cjs.map} +1 -1
- package/dist/chunks/{popupStore-D1rxKTyJ.js → popupStore-axohgTV-.js} +2 -2
- package/dist/chunks/{popupStore-D1rxKTyJ.js.map → popupStore-axohgTV-.js.map} +1 -1
- package/dist/chunks/sha256-BMg1y0Py.js +79 -0
- package/dist/chunks/sha256-BMg1y0Py.js.map +1 -0
- package/dist/chunks/sha256-BxdSMFca.cjs +2 -0
- package/dist/chunks/sha256-BxdSMFca.cjs.map +1 -0
- package/dist/chunks/{usePopup-CdpFYf3m.cjs → usePopup-DYnRe9Th.cjs} +2 -2
- package/dist/chunks/{usePopup-CdpFYf3m.cjs.map → usePopup-DYnRe9Th.cjs.map} +1 -1
- package/dist/chunks/{usePopup-C1h8V04_.js → usePopup-Dftb7Bbl.js} +3 -3
- package/dist/chunks/{usePopup-C1h8V04_.js.map → usePopup-Dftb7Bbl.js.map} +1 -1
- package/dist/components/common/BookmarkMngModal.d.ts +16 -0
- package/dist/components/common/BookmarkMngModal.d.ts.map +1 -0
- package/dist/components/common/BookmarkPopver.d.ts +7 -0
- package/dist/components/common/BookmarkPopver.d.ts.map +1 -0
- package/dist/components/common/BwgDraggable.d.ts +25 -0
- package/dist/components/common/BwgDraggable.d.ts.map +1 -0
- package/dist/components/common/BwgEditor.d.ts +4 -0
- package/dist/components/common/BwgEditor.d.ts.map +1 -1
- package/dist/components/common/BwgGrid.d.ts +15 -3
- package/dist/components/common/BwgGrid.d.ts.map +1 -1
- package/dist/components/common/BwgPagination.d.ts +13 -0
- package/dist/components/common/BwgPagination.d.ts.map +1 -0
- package/dist/components/common/BwgView.d.ts.map +1 -1
- package/dist/components/common/SearchBox.d.ts.map +1 -1
- package/dist/components/common/index.cjs +1 -1
- package/dist/components/common/index.js +1 -1
- package/dist/components/core/BwgDownload.d.ts +33 -0
- package/dist/components/core/BwgDownload.d.ts.map +1 -0
- package/dist/components/core/index.cjs +1 -1
- package/dist/components/core/index.d.ts +2 -0
- package/dist/components/core/index.d.ts.map +1 -1
- package/dist/components/core/index.js +21 -19
- package/dist/components/core/index.js.map +1 -1
- package/dist/components/layout/index.cjs +1 -1
- package/dist/components/layout/index.js +1 -1
- package/dist/components/popup/MenuReport.d.ts +8 -0
- package/dist/components/popup/MenuReport.d.ts.map +1 -0
- package/dist/index.cjs +1 -1
- package/dist/index.js +184 -181
- package/dist/index.js.map +1 -1
- package/dist/provider/index.cjs +1 -1
- package/dist/provider/index.js +2 -2
- package/dist/stores/favoriteStore.d.ts +81 -17
- package/dist/stores/favoriteStore.d.ts.map +1 -1
- package/dist/stores/index.cjs +1 -1
- package/dist/stores/index.d.ts +1 -1
- package/dist/stores/index.d.ts.map +1 -1
- package/dist/stores/index.js +6 -6
- package/dist/styles/assets/images/header/icon/ico-bell.svg +3 -3
- package/dist/styles/assets/images/header/icon/ico-logout.svg +10 -10
- package/dist/styles/assets/images/header/icon/ico-setting.svg +4 -4
- package/dist/styles/assets/images/header/icon/ico-sidebar-arrow.svg +3 -3
- package/dist/utils/apiUtils.d.ts +8 -0
- package/dist/utils/apiUtils.d.ts.map +1 -1
- package/dist/utils/commonUtils.d.ts.map +1 -1
- package/dist/utils/index.cjs +1 -1
- package/dist/utils/index.cjs.map +1 -1
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +89 -88
- package/dist/utils/index.js.map +1 -1
- package/package.json +2 -1
- package/dist/chunks/BwgLargeUploader-D6plJv5D.js.map +0 -1
- package/dist/chunks/BwgLargeUploader-LMj6KXhK.cjs +0 -3
- package/dist/chunks/BwgLargeUploader-LMj6KXhK.cjs.map +0 -1
- package/dist/chunks/SSOHandler-DXnV_f_M.cjs +0 -236
- package/dist/chunks/SSOHandler-DXnV_f_M.cjs.map +0 -1
- package/dist/chunks/SSOHandler-yNjxYbHn.js.map +0 -1
- package/dist/chunks/apiUtils-BJRcT3Tm.js +0 -1315
- package/dist/chunks/apiUtils-BJRcT3Tm.js.map +0 -1
- package/dist/chunks/apiUtils-DEnQeWNI.cjs +0 -3
- package/dist/chunks/apiUtils-DEnQeWNI.cjs.map +0 -1
- package/dist/chunks/favoriteStore-Drhx0843.js +0 -111
- package/dist/chunks/favoriteStore-Drhx0843.js.map +0 -1
- package/dist/chunks/favoriteStore-Dyp89Kew.cjs +0 -2
- package/dist/chunks/favoriteStore-Dyp89Kew.cjs.map +0 -1
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { aQ as A } from "./apiUtils-BRaXRbjE.js";
|
|
2
|
+
import { r as b } from "./core-DLGhqegD.js";
|
|
3
|
+
function O(p, g) {
|
|
4
|
+
for (var f = 0; f < g.length; f++) {
|
|
5
|
+
const a = g[f];
|
|
6
|
+
if (typeof a != "string" && !Array.isArray(a)) {
|
|
7
|
+
for (const c in a)
|
|
8
|
+
if (c !== "default" && !(c in p)) {
|
|
9
|
+
const i = Object.getOwnPropertyDescriptor(a, c);
|
|
10
|
+
i && Object.defineProperty(p, c, i.get ? i : {
|
|
11
|
+
enumerable: !0,
|
|
12
|
+
get: () => a[c]
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
return Object.freeze(Object.defineProperty(p, Symbol.toStringTag, { value: "Module" }));
|
|
18
|
+
}
|
|
19
|
+
var h = { exports: {} }, E = h.exports, x;
|
|
20
|
+
function q() {
|
|
21
|
+
return x || (x = 1, (function(p, g) {
|
|
22
|
+
(function(f, a) {
|
|
23
|
+
p.exports = a(b());
|
|
24
|
+
})(E, function(f) {
|
|
25
|
+
return (function() {
|
|
26
|
+
var a = f, c = a.lib, i = c.WordArray, _ = a.enc;
|
|
27
|
+
_.Base64 = {
|
|
28
|
+
/**
|
|
29
|
+
* Converts a word array to a Base64 string.
|
|
30
|
+
*
|
|
31
|
+
* @param {WordArray} wordArray The word array.
|
|
32
|
+
*
|
|
33
|
+
* @return {string} The Base64 string.
|
|
34
|
+
*
|
|
35
|
+
* @static
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
*
|
|
39
|
+
* var base64String = CryptoJS.enc.Base64.stringify(wordArray);
|
|
40
|
+
*/
|
|
41
|
+
stringify: function(t) {
|
|
42
|
+
var s = t.words, o = t.sigBytes, n = this._map;
|
|
43
|
+
t.clamp();
|
|
44
|
+
for (var e = [], r = 0; r < o; r += 3)
|
|
45
|
+
for (var v = s[r >>> 2] >>> 24 - r % 4 * 8 & 255, l = s[r + 1 >>> 2] >>> 24 - (r + 1) % 4 * 8 & 255, d = s[r + 2 >>> 2] >>> 24 - (r + 2) % 4 * 8 & 255, C = v << 16 | l << 8 | d, u = 0; u < 4 && r + u * 0.75 < o; u++)
|
|
46
|
+
e.push(n.charAt(C >>> 6 * (3 - u) & 63));
|
|
47
|
+
var m = n.charAt(64);
|
|
48
|
+
if (m)
|
|
49
|
+
for (; e.length % 4; )
|
|
50
|
+
e.push(m);
|
|
51
|
+
return e.join("");
|
|
52
|
+
},
|
|
53
|
+
/**
|
|
54
|
+
* Converts a Base64 string to a word array.
|
|
55
|
+
*
|
|
56
|
+
* @param {string} base64Str The Base64 string.
|
|
57
|
+
*
|
|
58
|
+
* @return {WordArray} The word array.
|
|
59
|
+
*
|
|
60
|
+
* @static
|
|
61
|
+
*
|
|
62
|
+
* @example
|
|
63
|
+
*
|
|
64
|
+
* var wordArray = CryptoJS.enc.Base64.parse(base64String);
|
|
65
|
+
*/
|
|
66
|
+
parse: function(t) {
|
|
67
|
+
var s = t.length, o = this._map, n = this._reverseMap;
|
|
68
|
+
if (!n) {
|
|
69
|
+
n = this._reverseMap = [];
|
|
70
|
+
for (var e = 0; e < o.length; e++)
|
|
71
|
+
n[o.charCodeAt(e)] = e;
|
|
72
|
+
}
|
|
73
|
+
var r = o.charAt(64);
|
|
74
|
+
if (r) {
|
|
75
|
+
var v = t.indexOf(r);
|
|
76
|
+
v !== -1 && (s = v);
|
|
77
|
+
}
|
|
78
|
+
return y(t, s, n);
|
|
79
|
+
},
|
|
80
|
+
_map: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="
|
|
81
|
+
};
|
|
82
|
+
function y(t, s, o) {
|
|
83
|
+
for (var n = [], e = 0, r = 0; r < s; r++)
|
|
84
|
+
if (r % 4) {
|
|
85
|
+
var v = o[t.charCodeAt(r - 1)] << r % 4 * 2, l = o[t.charCodeAt(r)] >>> 6 - r % 4 * 2, d = v | l;
|
|
86
|
+
n[e >>> 2] |= d << 24 - e % 4 * 8, e++;
|
|
87
|
+
}
|
|
88
|
+
return i.create(n, e);
|
|
89
|
+
}
|
|
90
|
+
})(), f.enc.Base64;
|
|
91
|
+
});
|
|
92
|
+
})(h)), h.exports;
|
|
93
|
+
}
|
|
94
|
+
var B = q();
|
|
95
|
+
const w = /* @__PURE__ */ A(B), D = /* @__PURE__ */ O({
|
|
96
|
+
__proto__: null,
|
|
97
|
+
default: w
|
|
98
|
+
}, [B]);
|
|
99
|
+
export {
|
|
100
|
+
D as e
|
|
101
|
+
};
|
|
102
|
+
//# sourceMappingURL=enc-base64-96WlVdPN.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enc-base64-96WlVdPN.js","sources":["../../node_modules/crypto-js/enc-base64.js"],"sourcesContent":[";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var C_enc = C.enc;\n\n\t /**\n\t * Base64 encoding strategy.\n\t */\n\t var Base64 = C_enc.Base64 = {\n\t /**\n\t * Converts a word array to a Base64 string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The Base64 string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var base64String = CryptoJS.enc.Base64.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\t var map = this._map;\n\n\t // Clamp excess bits\n\t wordArray.clamp();\n\n\t // Convert\n\t var base64Chars = [];\n\t for (var i = 0; i < sigBytes; i += 3) {\n\t var byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff;\n\t var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff;\n\n\t var triplet = (byte1 << 16) | (byte2 << 8) | byte3;\n\n\t for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) {\n\t base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f));\n\t }\n\t }\n\n\t // Add padding\n\t var paddingChar = map.charAt(64);\n\t if (paddingChar) {\n\t while (base64Chars.length % 4) {\n\t base64Chars.push(paddingChar);\n\t }\n\t }\n\n\t return base64Chars.join('');\n\t },\n\n\t /**\n\t * Converts a Base64 string to a word array.\n\t *\n\t * @param {string} base64Str The Base64 string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Base64.parse(base64String);\n\t */\n\t parse: function (base64Str) {\n\t // Shortcuts\n\t var base64StrLength = base64Str.length;\n\t var map = this._map;\n\t var reverseMap = this._reverseMap;\n\n\t if (!reverseMap) {\n\t reverseMap = this._reverseMap = [];\n\t for (var j = 0; j < map.length; j++) {\n\t reverseMap[map.charCodeAt(j)] = j;\n\t }\n\t }\n\n\t // Ignore padding\n\t var paddingChar = map.charAt(64);\n\t if (paddingChar) {\n\t var paddingIndex = base64Str.indexOf(paddingChar);\n\t if (paddingIndex !== -1) {\n\t base64StrLength = paddingIndex;\n\t }\n\t }\n\n\t // Convert\n\t return parseLoop(base64Str, base64StrLength, reverseMap);\n\n\t },\n\n\t _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='\n\t };\n\n\t function parseLoop(base64Str, base64StrLength, reverseMap) {\n\t var words = [];\n\t var nBytes = 0;\n\t for (var i = 0; i < base64StrLength; i++) {\n\t if (i % 4) {\n\t var bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << ((i % 4) * 2);\n\t var bits2 = reverseMap[base64Str.charCodeAt(i)] >>> (6 - (i % 4) * 2);\n\t var bitsCombined = bits1 | bits2;\n\t words[nBytes >>> 2] |= bitsCombined << (24 - (nBytes % 4) * 8);\n\t nBytes++;\n\t }\n\t }\n\t return WordArray.create(words, nBytes);\n\t }\n\t}());\n\n\n\treturn CryptoJS.enc.Base64;\n\n}));"],"names":["root","factory","module","require$$0","this","CryptoJS","C","C_lib","WordArray","C_enc","wordArray","words","sigBytes","map","base64Chars","i","byte1","byte2","byte3","triplet","j","paddingChar","base64Str","base64StrLength","reverseMap","paddingIndex","parseLoop","nBytes","bits1","bits2","bitsCombined"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAC,KAAC,SAAUA,GAAMC,GAAS;AAGzB,MAAAC,YAA2BD,EAAQE,GAAiB;AAAA,IAUtD,GAAEC,GAAM,SAAUC,GAAU;AAE3B,cAAC,WAAY;AAET,YAAIC,IAAID,GACJE,IAAQD,EAAE,KACVE,IAAYD,EAAM,WAClBE,IAAQH,EAAE;AAKD,QAAAG,EAAM,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAcxB,WAAW,SAAUC,GAAW;AAE5B,gBAAIC,IAAQD,EAAU,OAClBE,IAAWF,EAAU,UACrBG,IAAM,KAAK;AAGf,YAAAH,EAAU,MAAK;AAIf,qBADII,IAAc,CAAA,GACTC,IAAI,GAAGA,IAAIH,GAAUG,KAAK;AAO/B,uBANIC,IAASL,EAAMI,MAAM,CAAC,MAAa,KAAMA,IAAI,IAAK,IAAY,KAC9DE,IAASN,EAAOI,IAAI,MAAO,CAAC,MAAO,MAAOA,IAAI,KAAK,IAAK,IAAM,KAC9DG,IAASP,EAAOI,IAAI,MAAO,CAAC,MAAO,MAAOA,IAAI,KAAK,IAAK,IAAM,KAE9DI,IAAWH,KAAS,KAAOC,KAAS,IAAKC,GAEpCE,IAAI,GAAIA,IAAI,KAAOL,IAAIK,IAAI,OAAOR,GAAWQ;AAClD,gBAAAN,EAAY,KAAKD,EAAI,OAAQM,MAAa,KAAK,IAAIC,KAAO,EAAI,CAAC;AAKvE,gBAAIC,IAAcR,EAAI,OAAO,EAAE;AAC/B,gBAAIQ;AACA,qBAAOP,EAAY,SAAS;AACxB,gBAAAA,EAAY,KAAKO,CAAW;AAIpC,mBAAOP,EAAY,KAAK,EAAE;AAAA,UACvC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAeS,OAAO,SAAUQ,GAAW;AAExB,gBAAIC,IAAkBD,EAAU,QAC5BT,IAAM,KAAK,MACXW,IAAa,KAAK;AAEtB,gBAAI,CAACA,GAAY;AACT,cAAAA,IAAa,KAAK,cAAc,CAAA;AAChC,uBAASJ,IAAI,GAAGA,IAAIP,EAAI,QAAQO;AAC5B,gBAAAI,EAAWX,EAAI,WAAWO,CAAC,CAAC,IAAIA;AAAA,YAEzD;AAGa,gBAAIC,IAAcR,EAAI,OAAO,EAAE;AAC/B,gBAAIQ,GAAa;AACb,kBAAII,IAAeH,EAAU,QAAQD,CAAW;AAChD,cAAII,MAAiB,OACjBF,IAAkBE;AAAA,YAEvC;AAGa,mBAAOC,EAAUJ,GAAWC,GAAiBC,CAAU;AAAA,UAEpE;AAAA,UAES,MAAM;AAAA;AAGV,iBAASE,EAAUJ,GAAWC,GAAiBC,GAAY;AAGzD,mBAFIb,IAAQ,CAAA,GACRgB,IAAS,GACJZ,IAAI,GAAGA,IAAIQ,GAAiBR;AACjC,gBAAIA,IAAI,GAAG;AACP,kBAAIa,IAAQJ,EAAWF,EAAU,WAAWP,IAAI,CAAC,CAAC,KAAOA,IAAI,IAAK,GAC9Dc,IAAQL,EAAWF,EAAU,WAAWP,CAAC,CAAC,MAAO,IAAKA,IAAI,IAAK,GAC/De,IAAeF,IAAQC;AAC3B,cAAAlB,EAAMgB,MAAW,CAAC,KAAKG,KAAiB,KAAMH,IAAS,IAAK,GAC5DA;AAAA,YACf;AAEO,iBAAOnB,EAAU,OAAOG,GAAOgB,CAAM;AAAA,QAC5C;AAAA,MACA,GAAE,GAGMtB,EAAS,IAAI;AAAA,IAErB,CAAC;AAAA;;;;;;;","x_google_ignoreList":[0]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";const A=require("./apiUtils-DL43X2ta.cjs"),b=require("./core-D7JhyoYH.cjs");function O(i,l){for(var c=0;c<l.length;c++){const a=l[c];if(typeof a!="string"&&!Array.isArray(a)){for(const f in a)if(f!=="default"&&!(f in i)){const u=Object.getOwnPropertyDescriptor(a,f);u&&Object.defineProperty(i,f,u.get?u:{enumerable:!0,get:()=>a[f]})}}}return Object.freeze(Object.defineProperty(i,Symbol.toStringTag,{value:"Module"}))}var h={exports:{}},q=h.exports,x;function E(){return x||(x=1,(function(i,l){(function(c,a){i.exports=a(b.requireCore())})(q,function(c){return(function(){var a=c,f=a.lib,u=f.WordArray,m=a.enc;m.Base64={stringify:function(t){var s=t.words,o=t.sigBytes,n=this._map;t.clamp();for(var e=[],r=0;r<o;r+=3)for(var v=s[r>>>2]>>>24-r%4*8&255,g=s[r+1>>>2]>>>24-(r+1)%4*8&255,d=s[r+2>>>2]>>>24-(r+2)%4*8&255,C=v<<16|g<<8|d,p=0;p<4&&r+p*.75<o;p++)e.push(n.charAt(C>>>6*(3-p)&63));var B=n.charAt(64);if(B)for(;e.length%4;)e.push(B);return e.join("")},parse:function(t){var s=t.length,o=this._map,n=this._reverseMap;if(!n){n=this._reverseMap=[];for(var e=0;e<o.length;e++)n[o.charCodeAt(e)]=e}var r=o.charAt(64);if(r){var v=t.indexOf(r);v!==-1&&(s=v)}return y(t,s,n)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="};function y(t,s,o){for(var n=[],e=0,r=0;r<s;r++)if(r%4){var v=o[t.charCodeAt(r-1)]<<r%4*2,g=o[t.charCodeAt(r)]>>>6-r%4*2,d=v|g;n[e>>>2]|=d<<24-e%4*8,e++}return u.create(n,e)}})(),c.enc.Base64})})(h)),h.exports}var _=E();const w=A.getDefaultExportFromCjs(_),M=O({__proto__:null,default:w},[_]);exports.encBase64=M;
|
|
2
|
+
//# sourceMappingURL=enc-base64-b9mIy966.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enc-base64-b9mIy966.cjs","sources":["../../node_modules/crypto-js/enc-base64.js"],"sourcesContent":[";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var C_enc = C.enc;\n\n\t /**\n\t * Base64 encoding strategy.\n\t */\n\t var Base64 = C_enc.Base64 = {\n\t /**\n\t * Converts a word array to a Base64 string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The Base64 string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var base64String = CryptoJS.enc.Base64.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\t var map = this._map;\n\n\t // Clamp excess bits\n\t wordArray.clamp();\n\n\t // Convert\n\t var base64Chars = [];\n\t for (var i = 0; i < sigBytes; i += 3) {\n\t var byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff;\n\t var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff;\n\n\t var triplet = (byte1 << 16) | (byte2 << 8) | byte3;\n\n\t for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) {\n\t base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f));\n\t }\n\t }\n\n\t // Add padding\n\t var paddingChar = map.charAt(64);\n\t if (paddingChar) {\n\t while (base64Chars.length % 4) {\n\t base64Chars.push(paddingChar);\n\t }\n\t }\n\n\t return base64Chars.join('');\n\t },\n\n\t /**\n\t * Converts a Base64 string to a word array.\n\t *\n\t * @param {string} base64Str The Base64 string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Base64.parse(base64String);\n\t */\n\t parse: function (base64Str) {\n\t // Shortcuts\n\t var base64StrLength = base64Str.length;\n\t var map = this._map;\n\t var reverseMap = this._reverseMap;\n\n\t if (!reverseMap) {\n\t reverseMap = this._reverseMap = [];\n\t for (var j = 0; j < map.length; j++) {\n\t reverseMap[map.charCodeAt(j)] = j;\n\t }\n\t }\n\n\t // Ignore padding\n\t var paddingChar = map.charAt(64);\n\t if (paddingChar) {\n\t var paddingIndex = base64Str.indexOf(paddingChar);\n\t if (paddingIndex !== -1) {\n\t base64StrLength = paddingIndex;\n\t }\n\t }\n\n\t // Convert\n\t return parseLoop(base64Str, base64StrLength, reverseMap);\n\n\t },\n\n\t _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='\n\t };\n\n\t function parseLoop(base64Str, base64StrLength, reverseMap) {\n\t var words = [];\n\t var nBytes = 0;\n\t for (var i = 0; i < base64StrLength; i++) {\n\t if (i % 4) {\n\t var bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << ((i % 4) * 2);\n\t var bits2 = reverseMap[base64Str.charCodeAt(i)] >>> (6 - (i % 4) * 2);\n\t var bitsCombined = bits1 | bits2;\n\t words[nBytes >>> 2] |= bitsCombined << (24 - (nBytes % 4) * 8);\n\t nBytes++;\n\t }\n\t }\n\t return WordArray.create(words, nBytes);\n\t }\n\t}());\n\n\n\treturn CryptoJS.enc.Base64;\n\n}));"],"names":["root","factory","module","require$$0","this","CryptoJS","C","C_lib","WordArray","C_enc","wordArray","words","sigBytes","map","base64Chars","i","byte1","byte2","byte3","triplet","j","paddingChar","base64Str","base64StrLength","reverseMap","paddingIndex","parseLoop","nBytes","bits1","bits2","bitsCombined"],"mappings":"4fAAE,SAAUA,EAAMC,EAAS,CAGzBC,UAA2BD,EAAQE,EAAAA,aAAiB,CAUtD,GAAEC,EAAM,SAAUC,EAAU,CAE3B,OAAC,UAAY,CAET,IAAIC,EAAID,EACJE,EAAQD,EAAE,IACVE,EAAYD,EAAM,UAClBE,EAAQH,EAAE,IAKDG,EAAM,OAAS,CAcxB,UAAW,SAAUC,EAAW,CAE5B,IAAIC,EAAQD,EAAU,MAClBE,EAAWF,EAAU,SACrBG,EAAM,KAAK,KAGfH,EAAU,MAAK,EAIf,QADII,EAAc,CAAA,EACTC,EAAI,EAAGA,EAAIH,EAAUG,GAAK,EAO/B,QANIC,EAASL,EAAMI,IAAM,CAAC,IAAa,GAAMA,EAAI,EAAK,EAAY,IAC9DE,EAASN,EAAOI,EAAI,IAAO,CAAC,IAAO,IAAOA,EAAI,GAAK,EAAK,EAAM,IAC9DG,EAASP,EAAOI,EAAI,IAAO,CAAC,IAAO,IAAOA,EAAI,GAAK,EAAK,EAAM,IAE9DI,EAAWH,GAAS,GAAOC,GAAS,EAAKC,EAEpCE,EAAI,EAAIA,EAAI,GAAOL,EAAIK,EAAI,IAAOR,EAAWQ,IAClDN,EAAY,KAAKD,EAAI,OAAQM,IAAa,GAAK,EAAIC,GAAO,EAAI,CAAC,EAKvE,IAAIC,EAAcR,EAAI,OAAO,EAAE,EAC/B,GAAIQ,EACA,KAAOP,EAAY,OAAS,GACxBA,EAAY,KAAKO,CAAW,EAIpC,OAAOP,EAAY,KAAK,EAAE,CACvC,EAeS,MAAO,SAAUQ,EAAW,CAExB,IAAIC,EAAkBD,EAAU,OAC5BT,EAAM,KAAK,KACXW,EAAa,KAAK,YAEtB,GAAI,CAACA,EAAY,CACTA,EAAa,KAAK,YAAc,CAAA,EAChC,QAASJ,EAAI,EAAGA,EAAIP,EAAI,OAAQO,IAC5BI,EAAWX,EAAI,WAAWO,CAAC,CAAC,EAAIA,CAEzD,CAGa,IAAIC,EAAcR,EAAI,OAAO,EAAE,EAC/B,GAAIQ,EAAa,CACb,IAAII,EAAeH,EAAU,QAAQD,CAAW,EAC5CI,IAAiB,KACjBF,EAAkBE,EAEvC,CAGa,OAAOC,EAAUJ,EAAWC,EAAiBC,CAAU,CAEpE,EAES,KAAM,qEAGV,SAASE,EAAUJ,EAAWC,EAAiBC,EAAY,CAGzD,QAFIb,EAAQ,CAAA,EACRgB,EAAS,EACJZ,EAAI,EAAGA,EAAIQ,EAAiBR,IACjC,GAAIA,EAAI,EAAG,CACP,IAAIa,EAAQJ,EAAWF,EAAU,WAAWP,EAAI,CAAC,CAAC,GAAOA,EAAI,EAAK,EAC9Dc,EAAQL,EAAWF,EAAU,WAAWP,CAAC,CAAC,IAAO,EAAKA,EAAI,EAAK,EAC/De,EAAeF,EAAQC,EAC3BlB,EAAMgB,IAAW,CAAC,GAAKG,GAAiB,GAAMH,EAAS,EAAK,EAC5DA,GACf,CAEO,OAAOnB,EAAU,OAAOG,EAAOgB,CAAM,CAC5C,CACA,GAAE,EAGMtB,EAAS,IAAI,MAErB,CAAC","x_google_ignoreList":[0]}
|
|
@@ -0,0 +1,439 @@
|
|
|
1
|
+
import { aq as f, c as I } from "./apiUtils-BRaXRbjE.js";
|
|
2
|
+
import { create as F } from "zustand";
|
|
3
|
+
const M = (d, o) => ({
|
|
4
|
+
nodes: {},
|
|
5
|
+
rootIds: [],
|
|
6
|
+
loadedFor: void 0,
|
|
7
|
+
loading: !1,
|
|
8
|
+
error: void 0,
|
|
9
|
+
treeNodes: [],
|
|
10
|
+
// ====== 셀렉터 ======
|
|
11
|
+
isMenuBookmarked: (e) => Object.values(o().nodes).some(
|
|
12
|
+
(r) => r.type === "M" && r.menuId === e
|
|
13
|
+
),
|
|
14
|
+
getPrntBkmkIdByMenuId: (e) => {
|
|
15
|
+
const r = y(o().nodes, e);
|
|
16
|
+
return r ? o().nodes[r]?.prntBkmkId ?? "-" : "-";
|
|
17
|
+
},
|
|
18
|
+
getNodeByMenuId: (e) => {
|
|
19
|
+
const r = y(o().nodes, e);
|
|
20
|
+
if (!r) return null;
|
|
21
|
+
const t = o().nodes[r];
|
|
22
|
+
return t?.type === "M" ? t : null;
|
|
23
|
+
},
|
|
24
|
+
getFolderTree: (e) => {
|
|
25
|
+
const { nodes: r, rootIds: t } = o(), n = (s) => e ? s.toLowerCase().includes(e.toLowerCase()) : !0, c = (s) => {
|
|
26
|
+
const i = r[s];
|
|
27
|
+
if (!i || i.type !== "F") return null;
|
|
28
|
+
const a = i, l = (a.children || []).map((u) => r[u]).filter((u) => !!u && u.type === "F").map((u) => c(u.bkmkId)).filter(Boolean);
|
|
29
|
+
return n(a.bkmkNm) || l.length > 0 ? {
|
|
30
|
+
key: a.bkmkId,
|
|
31
|
+
title: `📁 ${a.bkmkNm}`,
|
|
32
|
+
children: l.length ? l : void 0
|
|
33
|
+
} : null;
|
|
34
|
+
};
|
|
35
|
+
return t.map((s) => c(s)).filter(Boolean);
|
|
36
|
+
},
|
|
37
|
+
// ====== 로더 ======
|
|
38
|
+
loadFavorites: async (e, r = !1) => {
|
|
39
|
+
console.log("loadFavorites ::::: ", e, r);
|
|
40
|
+
const t = o();
|
|
41
|
+
if (!(!r && t.loadedFor === e && Object.keys(t.nodes).length)) {
|
|
42
|
+
d({ loading: !0, error: void 0 });
|
|
43
|
+
try {
|
|
44
|
+
const n = await I("SCMBKMK00101", { userId: e }), c = Array.isArray(n?.sub) ? n.sub : [], s = O(c), i = p(
|
|
45
|
+
s.nodes,
|
|
46
|
+
s.rootIds
|
|
47
|
+
);
|
|
48
|
+
d({
|
|
49
|
+
...s,
|
|
50
|
+
treeNodes: i,
|
|
51
|
+
loadedFor: e,
|
|
52
|
+
loading: !1
|
|
53
|
+
});
|
|
54
|
+
} catch (n) {
|
|
55
|
+
throw d({ loading: !1, error: n?.message || "즐겨찾기 로드 실패" }), n;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
loadFavoritesIfNeeded: async (e) => {
|
|
60
|
+
const r = o();
|
|
61
|
+
(r.loadedFor !== e || Object.keys(r.nodes).length === 0) && await o().loadFavorites(e);
|
|
62
|
+
},
|
|
63
|
+
// ====== 공통: 생성 ======
|
|
64
|
+
addNode: async (e) => {
|
|
65
|
+
const r = h(o()), t = w();
|
|
66
|
+
d((n) => {
|
|
67
|
+
const c = e.sortOrdr ?? N(n, e.prntBkmkId), s = {
|
|
68
|
+
...n,
|
|
69
|
+
nodes: {
|
|
70
|
+
...n.nodes,
|
|
71
|
+
[t]: e.type === "F" ? {
|
|
72
|
+
bkmkId: t,
|
|
73
|
+
type: "F",
|
|
74
|
+
prntBkmkId: e.prntBkmkId || "-",
|
|
75
|
+
sortOrdr: c,
|
|
76
|
+
bkmkNm: e.bkmkNm ?? "새 폴더",
|
|
77
|
+
children: [],
|
|
78
|
+
sysCd: e.sysCd,
|
|
79
|
+
userId: e.userId
|
|
80
|
+
} : {
|
|
81
|
+
bkmkId: t,
|
|
82
|
+
type: "M",
|
|
83
|
+
prntBkmkId: e.prntBkmkId,
|
|
84
|
+
sortOrdr: c,
|
|
85
|
+
menuId: e.menuId ?? "",
|
|
86
|
+
menuNm: e.menuNm,
|
|
87
|
+
sysCd: e.sysCd,
|
|
88
|
+
userId: e.userId
|
|
89
|
+
}
|
|
90
|
+
},
|
|
91
|
+
rootIds: n.rootIds.slice(),
|
|
92
|
+
treeNodes: n.treeNodes
|
|
93
|
+
};
|
|
94
|
+
return S(s, t, e.prntBkmkId), s.treeNodes = p(s.nodes, s.rootIds), s;
|
|
95
|
+
});
|
|
96
|
+
try {
|
|
97
|
+
let n = t;
|
|
98
|
+
const c = N(o(), e.prntBkmkId), s = await I("SCMBKMK00102", {
|
|
99
|
+
iudFlag: "I",
|
|
100
|
+
type: e.type,
|
|
101
|
+
sysCd: e.sysCd,
|
|
102
|
+
userId: e.userId,
|
|
103
|
+
bkmkId: t,
|
|
104
|
+
// 서버 새 ID 반환 시 매칭용
|
|
105
|
+
bkmkNm: e.bkmkNm,
|
|
106
|
+
prntBkmkId: e.prntBkmkId,
|
|
107
|
+
menuId: e.menuId,
|
|
108
|
+
sortOrdr: c,
|
|
109
|
+
chngId: f()
|
|
110
|
+
});
|
|
111
|
+
return n = String(s?.bkmkId ?? s?.itemId ?? t), d((i) => {
|
|
112
|
+
const a = K(i, t, n);
|
|
113
|
+
return {
|
|
114
|
+
...a,
|
|
115
|
+
treeNodes: p(a.nodes, a.rootIds)
|
|
116
|
+
};
|
|
117
|
+
}), n;
|
|
118
|
+
} catch (n) {
|
|
119
|
+
throw d(r), n;
|
|
120
|
+
}
|
|
121
|
+
},
|
|
122
|
+
// ====== 공통: 이동 ======
|
|
123
|
+
moveNode: async ({ bkmkId: e, newPrntBkmkId: r, sortOrdr: t, userId: n }) => {
|
|
124
|
+
const c = o(), s = structuredClone(c.nodes), i = [...c.rootIds], a = s[e];
|
|
125
|
+
if (!a) return;
|
|
126
|
+
if (r !== "-") {
|
|
127
|
+
const k = s[r];
|
|
128
|
+
if (!k || k.type !== "F")
|
|
129
|
+
throw new Error("부모는 폴더만 가능합니다.");
|
|
130
|
+
}
|
|
131
|
+
const l = a.prntBkmkId ?? "-", m = l === "-" ? i : s[l].children ||= [];
|
|
132
|
+
{
|
|
133
|
+
const k = m.indexOf(e);
|
|
134
|
+
k >= 0 && m.splice(k, 1);
|
|
135
|
+
}
|
|
136
|
+
const u = r === "-" ? i : s[r].children ||= [];
|
|
137
|
+
u.splice(
|
|
138
|
+
Math.max(0, Math.min(t, u.length)),
|
|
139
|
+
0,
|
|
140
|
+
e
|
|
141
|
+
), a.prntBkmkId = r, d({ nodes: s, rootIds: i }), b(s, i, r), b(s, i, l);
|
|
142
|
+
try {
|
|
143
|
+
await I("SCMBKMK00104", {
|
|
144
|
+
// 백엔드 명칭 호환
|
|
145
|
+
bkmkId: e,
|
|
146
|
+
prntBkmkId: r,
|
|
147
|
+
sortOrdr: t,
|
|
148
|
+
chngId: n
|
|
149
|
+
});
|
|
150
|
+
} catch (k) {
|
|
151
|
+
throw d(c), k;
|
|
152
|
+
}
|
|
153
|
+
},
|
|
154
|
+
// ====== 공통: 삭제 ======
|
|
155
|
+
removeNode: async (e) => {
|
|
156
|
+
const r = h(o());
|
|
157
|
+
d((t) => {
|
|
158
|
+
if (!t.nodes[e]) return t;
|
|
159
|
+
const n = {
|
|
160
|
+
...t,
|
|
161
|
+
nodes: { ...t.nodes },
|
|
162
|
+
rootIds: t.rootIds.slice(),
|
|
163
|
+
treeNodes: t.treeNodes
|
|
164
|
+
};
|
|
165
|
+
return v(n, e), n.treeNodes = p(n.nodes, n.rootIds), n;
|
|
166
|
+
});
|
|
167
|
+
try {
|
|
168
|
+
await I("SCMBKMK00103", { bkmkId: e });
|
|
169
|
+
} catch (t) {
|
|
170
|
+
throw d(r), t;
|
|
171
|
+
}
|
|
172
|
+
},
|
|
173
|
+
// ====== 공통: 수정 ======
|
|
174
|
+
editNode: async ({ bkmkId: e, userId: r, bkmkNm: t, prntBkmkId: n, sortOrdr: c }) => {
|
|
175
|
+
const s = h(o());
|
|
176
|
+
d((i) => {
|
|
177
|
+
const a = { ...i, nodes: { ...i.nodes } }, l = a.nodes[e];
|
|
178
|
+
return l?.type === "F" && typeof t == "string" && (a.nodes[e] = {
|
|
179
|
+
...l,
|
|
180
|
+
bkmkNm: t
|
|
181
|
+
}), a;
|
|
182
|
+
});
|
|
183
|
+
try {
|
|
184
|
+
await I("SCMBKMK00102", {
|
|
185
|
+
iudFlag: "U",
|
|
186
|
+
userId: r,
|
|
187
|
+
bkmkId: e,
|
|
188
|
+
bkmkNm: t,
|
|
189
|
+
prntBkmkId: n,
|
|
190
|
+
sortOrdr: c,
|
|
191
|
+
chngId: f()
|
|
192
|
+
});
|
|
193
|
+
} catch (i) {
|
|
194
|
+
throw d(s), i;
|
|
195
|
+
}
|
|
196
|
+
},
|
|
197
|
+
// ====== 호환용 래퍼 ======
|
|
198
|
+
addFolder: async (e, r, t, n) => await o().addNode({
|
|
199
|
+
type: "F",
|
|
200
|
+
bkmkNm: e,
|
|
201
|
+
prntBkmkId: r,
|
|
202
|
+
sysCd: t,
|
|
203
|
+
userId: n
|
|
204
|
+
}),
|
|
205
|
+
addMenuToFolder: async (e, r) => y(o().nodes, r.menuId) ? "이미 북마크에 저장된 메뉴입니다." : await o().addNode({
|
|
206
|
+
type: "M",
|
|
207
|
+
prntBkmkId: e,
|
|
208
|
+
sysCd: "KH",
|
|
209
|
+
userId: f(),
|
|
210
|
+
menuId: r.menuId,
|
|
211
|
+
menuNm: r.menuNm
|
|
212
|
+
}),
|
|
213
|
+
toggleMenuFavorite: async (e, r) => {
|
|
214
|
+
const t = o(), n = Object.values(t.nodes).find(
|
|
215
|
+
(s) => s.type === "M" && s.menuId === r.menuId
|
|
216
|
+
);
|
|
217
|
+
if (n) {
|
|
218
|
+
await o().removeNode(n.bkmkId);
|
|
219
|
+
return;
|
|
220
|
+
}
|
|
221
|
+
let c = B(t);
|
|
222
|
+
c || (await o().loadFavorites(e, !0), c = B(o())), c && await o().addNode({
|
|
223
|
+
type: "M",
|
|
224
|
+
prntBkmkId: c,
|
|
225
|
+
sysCd: "KH",
|
|
226
|
+
userId: f(),
|
|
227
|
+
menuId: r.menuId,
|
|
228
|
+
menuNm: r.menuNm
|
|
229
|
+
});
|
|
230
|
+
},
|
|
231
|
+
removeMenuByMenuId: async (e) => {
|
|
232
|
+
const r = o(), t = y(r.nodes, e);
|
|
233
|
+
t && await o().removeNode(t);
|
|
234
|
+
},
|
|
235
|
+
removeMenu: async (e) => {
|
|
236
|
+
await o().removeNode(e);
|
|
237
|
+
},
|
|
238
|
+
removeFolder: async (e) => {
|
|
239
|
+
await o().removeNode(e);
|
|
240
|
+
},
|
|
241
|
+
editFolder: async (e, r, t, n, c) => {
|
|
242
|
+
await o().editNode({
|
|
243
|
+
bkmkId: e,
|
|
244
|
+
userId: r,
|
|
245
|
+
bkmkNm: t,
|
|
246
|
+
prntBkmkId: n,
|
|
247
|
+
sortOrdr: c
|
|
248
|
+
});
|
|
249
|
+
},
|
|
250
|
+
/** Ant Tree 데이터 변환 (검색 포함) */
|
|
251
|
+
convertToAntTreeData: (e, r, t, n = !1) => {
|
|
252
|
+
const c = (i) => t ? i.toLowerCase().includes(t.toLowerCase()) : !0, s = (i) => {
|
|
253
|
+
const a = e[i];
|
|
254
|
+
if (!a || n && a.type !== "F") return null;
|
|
255
|
+
if (a.type === "F") {
|
|
256
|
+
const l = a, m = (l.children || []).map((k) => s(k)).filter(Boolean);
|
|
257
|
+
return c(l.bkmkNm) || m.length > 0 ? {
|
|
258
|
+
key: l.bkmkId,
|
|
259
|
+
type: "F",
|
|
260
|
+
title: `📁 ${l.bkmkNm}`,
|
|
261
|
+
bkmkNm: l.bkmkNm,
|
|
262
|
+
prntBkmkId: l.prntBkmkId,
|
|
263
|
+
sortOrdr: l.sortOrdr,
|
|
264
|
+
fullPath: l.fullPath,
|
|
265
|
+
children: m.length ? m : void 0
|
|
266
|
+
} : null;
|
|
267
|
+
} else {
|
|
268
|
+
const l = a, m = l.menuNm ? `${l.menuNm} (${l.menuId})` : l.menuId;
|
|
269
|
+
return c(m) ? {
|
|
270
|
+
key: l.bkmkId,
|
|
271
|
+
type: "M",
|
|
272
|
+
title: `📄 ${m}`,
|
|
273
|
+
prntBkmkId: l.prntBkmkId,
|
|
274
|
+
sortOrdr: l.sortOrdr,
|
|
275
|
+
fullPath: l.fullPath,
|
|
276
|
+
isLeaf: !0
|
|
277
|
+
} : null;
|
|
278
|
+
}
|
|
279
|
+
};
|
|
280
|
+
return r.map(s).filter(Boolean);
|
|
281
|
+
}
|
|
282
|
+
}), E = F(M);
|
|
283
|
+
function O(d) {
|
|
284
|
+
const o = {}, e = [], r = (t) => {
|
|
285
|
+
t.forEach((n) => {
|
|
286
|
+
const c = {
|
|
287
|
+
type: n.type,
|
|
288
|
+
bkmkId: n.bkmkId ?? n.BKMK_ID ?? n.id,
|
|
289
|
+
prntBkmkId: n.prntBkmkId ?? n.PRNT_BKMK_ID ?? "-",
|
|
290
|
+
sortOrdr: Number(n.sortOrdr ?? n.SORT_ORDR ?? 0),
|
|
291
|
+
sysCd: n.sysCd ?? n.SYS_CD,
|
|
292
|
+
userId: n.userId ?? n.USER_ID,
|
|
293
|
+
fullPath: n.fullPath ?? n.FULL_PATH
|
|
294
|
+
};
|
|
295
|
+
if (n.type === "F") {
|
|
296
|
+
o[c.bkmkId] = {
|
|
297
|
+
...c,
|
|
298
|
+
bkmkNm: n.bkmkNm ?? n.BKMK_NM ?? n.name ?? c.bkmkId,
|
|
299
|
+
children: []
|
|
300
|
+
};
|
|
301
|
+
const s = Array.isArray(n.children) ? n.children : [];
|
|
302
|
+
r(s);
|
|
303
|
+
} else
|
|
304
|
+
o[c.bkmkId] = {
|
|
305
|
+
...c,
|
|
306
|
+
menuId: n.menuId ?? n.MENU_ID ?? "",
|
|
307
|
+
menuNm: n.menuNm ?? n.MENU_NM
|
|
308
|
+
};
|
|
309
|
+
});
|
|
310
|
+
};
|
|
311
|
+
return r(d), Object.values(o).forEach((t) => {
|
|
312
|
+
if (t.prntBkmkId && t.prntBkmkId !== "-") {
|
|
313
|
+
const n = o[t.prntBkmkId];
|
|
314
|
+
n?.type === "F" && n.children.push(t.bkmkId);
|
|
315
|
+
} else t.type === "F" && e.push(t.bkmkId);
|
|
316
|
+
}), e.sort((t, n) => (o[t].sortOrdr ?? 0) - (o[n].sortOrdr ?? 0)), Object.values(o).forEach((t) => {
|
|
317
|
+
t.type === "F" && t.children.sort(
|
|
318
|
+
(c, s) => (o[c].sortOrdr ?? 0) - (o[s].sortOrdr ?? 0)
|
|
319
|
+
);
|
|
320
|
+
}), { nodes: o, rootIds: e };
|
|
321
|
+
}
|
|
322
|
+
function h(d) {
|
|
323
|
+
return {
|
|
324
|
+
...d,
|
|
325
|
+
nodes: JSON.parse(JSON.stringify(d.nodes)),
|
|
326
|
+
rootIds: d.rootIds.slice()
|
|
327
|
+
};
|
|
328
|
+
}
|
|
329
|
+
function w() {
|
|
330
|
+
return `tmp_${Math.random().toString(36).slice(2, 10)}`;
|
|
331
|
+
}
|
|
332
|
+
function N(d, o) {
|
|
333
|
+
if (!o || o === "-") return d.rootIds.length;
|
|
334
|
+
const e = d.nodes[o];
|
|
335
|
+
return e ? e.children.length : 0;
|
|
336
|
+
}
|
|
337
|
+
function S(d, o, e) {
|
|
338
|
+
const r = d.nodes[o];
|
|
339
|
+
if (r)
|
|
340
|
+
if (e && e !== "-") {
|
|
341
|
+
const t = d.nodes[e];
|
|
342
|
+
if (!t || t.type !== "F") return;
|
|
343
|
+
r.prntBkmkId = e, t.children = [...t.children, o];
|
|
344
|
+
} else
|
|
345
|
+
r.prntBkmkId = "-", d.rootIds = [...d.rootIds, o];
|
|
346
|
+
}
|
|
347
|
+
function C(d, o) {
|
|
348
|
+
const e = d.nodes[o];
|
|
349
|
+
if (!e) return;
|
|
350
|
+
const r = e.prntBkmkId;
|
|
351
|
+
if (r && r !== "-") {
|
|
352
|
+
const t = d.nodes[r];
|
|
353
|
+
t?.type === "F" && (t.children = t.children.filter((n) => n !== o));
|
|
354
|
+
} else
|
|
355
|
+
d.rootIds = d.rootIds.filter((t) => t !== o);
|
|
356
|
+
}
|
|
357
|
+
function v(d, o) {
|
|
358
|
+
const e = d.nodes[o];
|
|
359
|
+
if (!e) return;
|
|
360
|
+
e.type === "F" && e.children.slice().forEach((c) => v(d, c)), C(d, o);
|
|
361
|
+
const { [o]: r, ...t } = d.nodes;
|
|
362
|
+
d.nodes = t;
|
|
363
|
+
}
|
|
364
|
+
function K(d, o, e) {
|
|
365
|
+
if (o === e) return d;
|
|
366
|
+
const r = d.nodes[o];
|
|
367
|
+
if (!r) return d;
|
|
368
|
+
const t = JSON.parse(JSON.stringify(r));
|
|
369
|
+
t.bkmkId = e;
|
|
370
|
+
const n = { ...d.nodes, [e]: t };
|
|
371
|
+
delete n[o];
|
|
372
|
+
let c = d.rootIds;
|
|
373
|
+
if (t.prntBkmkId && t.prntBkmkId !== "-") {
|
|
374
|
+
const s = n[t.prntBkmkId];
|
|
375
|
+
s?.type === "F" && (n[t.prntBkmkId] = {
|
|
376
|
+
...s,
|
|
377
|
+
children: s.children.map((i) => i === o ? e : i)
|
|
378
|
+
});
|
|
379
|
+
} else
|
|
380
|
+
c = d.rootIds.map((s) => s === o ? e : s);
|
|
381
|
+
return { ...d, nodes: n, rootIds: c };
|
|
382
|
+
}
|
|
383
|
+
function B(d) {
|
|
384
|
+
return d.rootIds.find((o) => d.nodes[o]?.type === "F") ?? null;
|
|
385
|
+
}
|
|
386
|
+
function p(d, o) {
|
|
387
|
+
const e = {};
|
|
388
|
+
Object.values(d).forEach((i) => {
|
|
389
|
+
const a = i.bkmkId, l = i.prntBkmkId;
|
|
390
|
+
!a || !l || l === "-" || l === a || (e[l] ??= []).push(a);
|
|
391
|
+
});
|
|
392
|
+
const r = /* @__PURE__ */ new Set(), t = (i) => {
|
|
393
|
+
if (r.has(i)) return null;
|
|
394
|
+
const a = d[i];
|
|
395
|
+
if (!a) return null;
|
|
396
|
+
r.add(i);
|
|
397
|
+
try {
|
|
398
|
+
if (a.type === "F") {
|
|
399
|
+
const m = a, u = e[i] ?? [];
|
|
400
|
+
return {
|
|
401
|
+
type: "F",
|
|
402
|
+
bkmkId: i,
|
|
403
|
+
bkmkNm: m.bkmkNm,
|
|
404
|
+
prntBkmkId: m.prntBkmkId,
|
|
405
|
+
children: u.map(t).filter(Boolean)
|
|
406
|
+
};
|
|
407
|
+
}
|
|
408
|
+
const l = a;
|
|
409
|
+
return {
|
|
410
|
+
type: "M",
|
|
411
|
+
bkmkId: i,
|
|
412
|
+
bkmkNm: l.menuNm,
|
|
413
|
+
menuId: l.menuId,
|
|
414
|
+
menuNm: l.menuNm,
|
|
415
|
+
prntBkmkId: l.prntBkmkId
|
|
416
|
+
};
|
|
417
|
+
} finally {
|
|
418
|
+
r.delete(i);
|
|
419
|
+
}
|
|
420
|
+
}, n = Object.values(d).filter((i) => i.prntBkmkId === "-" && i.type === "M").map((i) => i.bkmkId), c = Object.values(d).filter((i) => i.prntBkmkId === "-" && i.type === "F").map((i) => i.bkmkId);
|
|
421
|
+
return Array.from(
|
|
422
|
+
/* @__PURE__ */ new Set([...o, ...n, ...c])
|
|
423
|
+
).map(t).filter(Boolean);
|
|
424
|
+
}
|
|
425
|
+
function y(d, o) {
|
|
426
|
+
for (const e of Object.values(d))
|
|
427
|
+
if (e.type === "M" && e.menuId === o) return e.bkmkId;
|
|
428
|
+
return null;
|
|
429
|
+
}
|
|
430
|
+
function b(d, o, e) {
|
|
431
|
+
(!e || e === "-" ? o : d[e].children || []).forEach((t, n) => {
|
|
432
|
+
const c = d[t];
|
|
433
|
+
c && (c.sortOrdr = n);
|
|
434
|
+
});
|
|
435
|
+
}
|
|
436
|
+
export {
|
|
437
|
+
E as u
|
|
438
|
+
};
|
|
439
|
+
//# sourceMappingURL=favoriteStore-D40XfOmq.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"favoriteStore-D40XfOmq.js","sources":["../../src/stores/favoriteStore.ts"],"sourcesContent":["// -------------------------------------------------------\r\n// 즐겨찾기(폴더형) Zustand Store (단일 테이블 CM_BKMK_MSTR 기반)\r\n// 공통 CRUD로 통합: addNode / moveNode / removeNode / editNode\r\n// 기존 API(폴더/메뉴 전용)는 호환용으로 래핑만 유지\r\n// - 정규화(nodes + rootIds)\r\n// - 낙관적 업데이트 + 임시ID(tmp_* → 서버ID) 스왑\r\n// - 필수 기능: 로드, 생성, 이동, 삭제, 수정 + 셀렉터/뷰 변환\r\n// -------------------------------------------------------\r\n\r\nimport { callService } from \"../utils/apiUtils\";\r\nimport { getUserId } from \"../utils/userUtils\";\r\nimport { DataNode } from \"antd/es/tree\";\r\nimport { create, StateCreator } from \"zustand\";\r\n\r\n// 🔧 공통 ID 타입\r\nexport type Id = string;\r\n\r\n/** 공통 베이스 (CM_BKMK_MSTR 매핑) */\r\nexport type BkmkBase = {\r\n type: \"F\" | \"M\"; // TYPE\r\n bkmkId: Id; // BKMK_ID\r\n prntBkmkId: Id | \"-\"; // PRNT_BKMK_ID ('-'=루트)\r\n sortOrdr: number; // SORT_ORDR\r\n sysCd?: string; // SYS_CD (옵션)\r\n userId?: string | null; // USER_ID (옵션)\r\n fullPath?: string; // 프론트 보조(옵션)\r\n};\r\n\r\n/** 폴더 노드 (BKMK_NM 사용) */\r\nexport type FolderNode = BkmkBase & {\r\n bkmkNm: string; // BKMK_NM (폴더 전용)\r\n children: Id[]; // 폴더/아이템 혼재(정규화용)\r\n};\r\n\r\n/** 아이템 노드 (메뉴 전용 메타) */\r\nexport type ItemNode = BkmkBase & {\r\n menuId: string; // MENU_ID\r\n menuNm?: string; // 프론트 보조(메뉴명)\r\n};\r\n\r\nexport type FavNode = FolderNode | ItemNode;\r\n\r\nexport type MovePayload = {\r\n bkmkId: Id;\r\n newPrntBkmkId: Id | \"-\";\r\n sortOrdr: number; // 새 부모 내 0-based\r\n userId: string | null;\r\n};\r\n\r\nexport type AddNodePayload = {\r\n type: \"F\" | \"M\";\r\n prntBkmkId: Id | \"-\";\r\n sysCd: string;\r\n userId: string | null;\r\n bkmkNm?: string; // F 전용\r\n menuId?: string; // M 전용\r\n menuNm?: string; // 프론트 보조\r\n sortOrdr?: number; // 선택: 지정 없으면 tailIndex 사용\r\n};\r\n\r\nexport type EditNodePayload = {\r\n bkmkId: Id;\r\n userId: string;\r\n bkmkNm?: string; // F일 때만 의미\r\n prntBkmkId?: Id | \"-\"; // 선택(이동은 moveNode 권장)\r\n sortOrdr?: number; // 선택\r\n};\r\n\r\nexport type Normalized = { nodes: Record<Id, FavNode>; rootIds: Id[] };\r\n\r\nexport type State = {\r\n // ========== 데이터(정규화) ==========\r\n nodes: Record<Id, FavNode>;\r\n rootIds: Id[];\r\n treeNodes: FavNode[]; // 단순 트리(뷰용)\r\n\r\n // ========== 메타 ==========\r\n loadedFor?: string;\r\n loading: boolean;\r\n error?: string;\r\n\r\n // ========== 셀렉터 ==========\r\n isMenuBookmarked: (menuId: string) => boolean;\r\n getPrntBkmkIdByMenuId: (menuId: string) => Id | \"-\";\r\n getNodeByMenuId: (menuId: string) => ItemNode | null;\r\n getFolderTree: (q?: string) => DataNode[]; // 폴더만 Tree (검색 필터)\r\n\r\n // ========== 로더 ==========\r\n loadFavorites: (userId: string, force?: boolean) => Promise<void>;\r\n loadFavoritesIfNeeded: (userId: string) => Promise<void>;\r\n\r\n // ========== 공통 CRUD ==========\r\n addNode: (p: AddNodePayload) => Promise<Id>;\r\n moveNode: (p: MovePayload) => Promise<void>;\r\n removeNode: (bkmkId: Id) => Promise<void>;\r\n editNode: (p: EditNodePayload) => Promise<void>;\r\n\r\n // ========== 호환용(기존 API 유지, 내부에서 공통 호출) ==========\r\n addFolder: (\r\n bkmkNm: string,\r\n prntBkmkId: Id | \"-\",\r\n sysCd: string,\r\n userId: string | null\r\n ) => Promise<Id>;\r\n addMenuToFolder: (\r\n folderBkmkId: Id,\r\n menu: { menuId: string; menuNm: string }\r\n ) => Promise<Id | string>;\r\n toggleMenuFavorite: (\r\n userId: string | null,\r\n menu: { menuId: string; menuNm: string }\r\n ) => Promise<void>;\r\n removeMenu: (bkmkId: Id) => Promise<void>;\r\n removeMenuByMenuId: (menuId: string) => Promise<void>;\r\n removeFolder: (folderBkmkId: Id) => Promise<void>;\r\n editFolder: (\r\n folderBkmkId: Id,\r\n userId: string | null,\r\n newBkmkNm?: string,\r\n prntBkmkId?: Id | \"-\",\r\n sortOrdr?: number\r\n ) => Promise<void>;\r\n convertToAntTreeData: (\r\n nodesMap: Record<string, FavNode>,\r\n rootIds: string[],\r\n q: string,\r\n onlyFolder?: boolean\r\n ) => any[];\r\n};\r\n\r\nconst creator: StateCreator<State> = (set, get) => ({\r\n nodes: {},\r\n rootIds: [],\r\n loadedFor: undefined,\r\n loading: false,\r\n error: undefined,\r\n treeNodes: [],\r\n\r\n // ====== 셀렉터 ======\r\n isMenuBookmarked: (menuId) =>\r\n Object.values(get().nodes).some(\r\n (n) => n.type === \"M\" && (n as ItemNode).menuId === menuId\r\n ),\r\n getPrntBkmkIdByMenuId: (menuId) => {\r\n const id = findItemByMenuId(get().nodes, menuId);\r\n return id ? get().nodes[id]?.prntBkmkId ?? \"-\" : \"-\";\r\n },\r\n\r\n getNodeByMenuId: (menuId) => {\r\n const nodeId = findItemByMenuId(get().nodes, menuId);\r\n if (!nodeId) return null;\r\n const node = get().nodes[nodeId];\r\n return node?.type === \"M\" ? (node as ItemNode) : null;\r\n },\r\n\r\n getFolderTree: (q) => {\r\n const { nodes, rootIds } = get();\r\n const match = (s: string) =>\r\n q ? s.toLowerCase().includes(q.toLowerCase()) : true;\r\n\r\n const make = (id: Id): DataNode | null => {\r\n const n = nodes[id];\r\n if (!n || n.type !== \"F\") return null;\r\n const folder = n as FolderNode;\r\n\r\n const kids = (folder.children || [])\r\n .map((cid) => nodes[cid])\r\n .filter((c): c is FolderNode => !!c && c.type === \"F\")\r\n .map((f) => make(f.bkmkId))\r\n .filter(Boolean) as DataNode[];\r\n\r\n const visible = match(folder.bkmkNm) || kids.length > 0;\r\n if (!visible) return null;\r\n\r\n return {\r\n key: folder.bkmkId,\r\n title: `📁 ${folder.bkmkNm}`,\r\n children: kids.length ? kids : undefined,\r\n };\r\n };\r\n\r\n return rootIds.map((rid) => make(rid)).filter(Boolean) as DataNode[];\r\n },\r\n\r\n // ====== 로더 ======\r\n loadFavorites: async (userId, force = false) => {\r\n console.log(\"loadFavorites ::::: \", userId, force);\r\n const s = get();\r\n if (!force && s.loadedFor === userId && Object.keys(s.nodes).length) return;\r\n\r\n set({ loading: true, error: undefined });\r\n try {\r\n // 기대 응답 예시: { sub: rawTree[] }\r\n const res = await callService(\"SCMBKMK00101\", { userId });\r\n const raw: any[] = Array.isArray(res?.sub) ? res.sub : [];\r\n const normalized = normalize(raw);\r\n\r\n const treeNodes = toSimpleTreeFromMap(\r\n normalized.nodes,\r\n normalized.rootIds\r\n );\r\n\r\n set({\r\n ...normalized,\r\n treeNodes,\r\n loadedFor: userId,\r\n loading: false,\r\n });\r\n } catch (e: any) {\r\n set({ loading: false, error: e?.message || \"즐겨찾기 로드 실패\" });\r\n throw e;\r\n }\r\n },\r\n\r\n loadFavoritesIfNeeded: async (userId) => {\r\n const s = get();\r\n const notLoaded =\r\n s.loadedFor !== userId || Object.keys(s.nodes).length === 0;\r\n if (notLoaded) {\r\n await get().loadFavorites(userId);\r\n }\r\n },\r\n\r\n // ====== 공통: 생성 ======\r\n addNode: async (p) => {\r\n const prev = snapshot(get());\r\n const tmp = tempId();\r\n\r\n // 1) 낙관적 반영\r\n set((s) => {\r\n const sort = p.sortOrdr ?? tailIndex(s, p.prntBkmkId);\r\n const next: State = {\r\n ...s,\r\n nodes: {\r\n ...s.nodes,\r\n [tmp]:\r\n p.type === \"F\"\r\n ? ({\r\n bkmkId: tmp,\r\n type: \"F\",\r\n prntBkmkId: p.prntBkmkId || \"-\",\r\n sortOrdr: sort,\r\n bkmkNm: p.bkmkNm ?? \"새 폴더\",\r\n children: [],\r\n sysCd: p.sysCd,\r\n userId: p.userId,\r\n } as FolderNode)\r\n : ({\r\n bkmkId: tmp,\r\n type: \"M\",\r\n prntBkmkId: p.prntBkmkId,\r\n sortOrdr: sort,\r\n menuId: p.menuId ?? \"\",\r\n menuNm: p.menuNm,\r\n sysCd: p.sysCd,\r\n userId: p.userId,\r\n } as ItemNode),\r\n },\r\n rootIds: s.rootIds.slice(),\r\n treeNodes: s.treeNodes,\r\n };\r\n attach(next, tmp, p.prntBkmkId);\r\n next.treeNodes = toSimpleTreeFromMap(next.nodes, next.rootIds);\r\n return next;\r\n });\r\n\r\n try {\r\n // 2) 서버 호출\r\n // 백엔드는 통합 IUD가 아닐 수 있으므로, 호환 분기 적용\r\n let real: string = tmp;\r\n const sortForServer = tailIndex(get(), p.prntBkmkId);\r\n const res = await callService(\"SCMBKMK00102\", {\r\n iudFlag: \"I\",\r\n type: p.type,\r\n sysCd: p.sysCd,\r\n userId: p.userId,\r\n bkmkId: tmp, // 서버 새 ID 반환 시 매칭용\r\n bkmkNm: p.bkmkNm,\r\n prntBkmkId: p.prntBkmkId,\r\n menuId: p.menuId,\r\n sortOrdr: sortForServer,\r\n chngId: getUserId(),\r\n });\r\n real = String(res?.bkmkId ?? res?.itemId ?? tmp);\r\n\r\n // 3) tmp → real 스왑\r\n set((s) => {\r\n const swapped = idSwapImmutable(s, tmp, real);\r\n return {\r\n ...swapped,\r\n treeNodes: toSimpleTreeFromMap(swapped.nodes, swapped.rootIds),\r\n };\r\n });\r\n return real;\r\n } catch (e) {\r\n set(prev);\r\n throw e;\r\n }\r\n },\r\n\r\n // ====== 공통: 이동 ======\r\n moveNode: async ({ bkmkId, newPrntBkmkId, sortOrdr, userId }) => {\r\n const prev = get(); // 함수 포함 스냅샷(rollback 용으로 set(prev) 사용)\r\n\r\n const nodes = structuredClone(prev.nodes);\r\n const rootIds = [...prev.rootIds];\r\n\r\n const node = nodes[bkmkId];\r\n if (!node) return;\r\n\r\n // 부모는 반드시 폴더만 허용\r\n if (newPrntBkmkId !== \"-\") {\r\n const parent = nodes[newPrntBkmkId];\r\n if (!parent || parent.type !== \"F\")\r\n throw new Error(\"부모는 폴더만 가능합니다.\");\r\n }\r\n\r\n const oldParentId = node.prntBkmkId ?? \"-\";\r\n\r\n const removeFrom =\r\n oldParentId === \"-\"\r\n ? rootIds\r\n : ((nodes[oldParentId] as FolderNode).children ||= []);\r\n {\r\n const idx = removeFrom.indexOf(bkmkId);\r\n if (idx >= 0) removeFrom.splice(idx, 1);\r\n }\r\n\r\n const insertTo =\r\n newPrntBkmkId === \"-\"\r\n ? rootIds\r\n : ((nodes[newPrntBkmkId] as FolderNode).children ||= []);\r\n insertTo.splice(\r\n Math.max(0, Math.min(sortOrdr, insertTo.length)),\r\n 0,\r\n bkmkId\r\n );\r\n\r\n node.prntBkmkId = newPrntBkmkId as Id;\r\n set({ nodes, rootIds });\r\n _resequence(nodes, rootIds, newPrntBkmkId);\r\n _resequence(nodes, rootIds, oldParentId);\r\n\r\n try {\r\n await callService(\"SCMBKMK00104\", {\r\n // 백엔드 명칭 호환\r\n bkmkId,\r\n prntBkmkId: newPrntBkmkId,\r\n sortOrdr,\r\n chngId: userId,\r\n });\r\n } catch (e) {\r\n set(prev);\r\n throw e;\r\n }\r\n },\r\n\r\n // ====== 공통: 삭제 ======\r\n removeNode: async (bkmkId) => {\r\n const prev = snapshot(get());\r\n\r\n set((s) => {\r\n if (!s.nodes[bkmkId]) return s as State;\r\n const next: State = {\r\n ...s,\r\n nodes: { ...s.nodes },\r\n rootIds: s.rootIds.slice(),\r\n treeNodes: s.treeNodes,\r\n };\r\n removeRecursively(next, bkmkId);\r\n next.treeNodes = toSimpleTreeFromMap(next.nodes, next.rootIds);\r\n return next;\r\n });\r\n\r\n try {\r\n await callService(\"SCMBKMK00103\", { bkmkId });\r\n } catch (e) {\r\n set(prev);\r\n throw e;\r\n }\r\n },\r\n\r\n // ====== 공통: 수정 ======\r\n editNode: async ({ bkmkId, userId, bkmkNm, prntBkmkId, sortOrdr }) => {\r\n const prev = snapshot(get());\r\n\r\n // 폴더명 변경만 프런트 즉시 반영(옵션)\r\n set((s) => {\r\n const next = { ...s, nodes: { ...s.nodes } } as State;\r\n const target = next.nodes[bkmkId] as FavNode | undefined;\r\n if (target?.type === \"F\" && typeof bkmkNm === \"string\") {\r\n next.nodes[bkmkId] = {\r\n ...(target as FolderNode),\r\n bkmkNm,\r\n } as FolderNode;\r\n }\r\n return next;\r\n });\r\n\r\n try {\r\n await callService(\"SCMBKMK00102\", {\r\n iudFlag: \"U\",\r\n userId,\r\n bkmkId,\r\n bkmkNm,\r\n prntBkmkId,\r\n sortOrdr,\r\n chngId: getUserId(),\r\n });\r\n } catch (e) {\r\n set(prev);\r\n throw e;\r\n }\r\n },\r\n\r\n // ====== 호환용 래퍼 ======\r\n addFolder: async (bkmkNm, prntBkmkId, sysCd, userId) => {\r\n return await get().addNode({\r\n type: \"F\",\r\n bkmkNm,\r\n prntBkmkId,\r\n sysCd,\r\n userId,\r\n });\r\n },\r\n\r\n addMenuToFolder: async (folderBkmkId, menu) => {\r\n // 전역 중복 방지\r\n const dup = findItemByMenuId(get().nodes, menu.menuId);\r\n if (dup) return \"이미 북마크에 저장된 메뉴입니다.\";\r\n return await get().addNode({\r\n type: \"M\",\r\n prntBkmkId: folderBkmkId,\r\n sysCd: \"KH\",\r\n userId: getUserId(),\r\n menuId: menu.menuId,\r\n menuNm: menu.menuNm,\r\n });\r\n },\r\n\r\n toggleMenuFavorite: async (userId, menu) => {\r\n const s = get();\r\n const exists = Object.values(s.nodes).find(\r\n (n) => n.type === \"M\" && (n as ItemNode).menuId === menu.menuId\r\n );\r\n if (exists) {\r\n await get().removeNode(exists.bkmkId);\r\n return;\r\n }\r\n\r\n let folderId = pickDefaultFolderId(s);\r\n if (!folderId) {\r\n await get().loadFavorites(userId, true);\r\n folderId = pickDefaultFolderId(get());\r\n }\r\n if (folderId) {\r\n await get().addNode({\r\n type: \"M\",\r\n prntBkmkId: folderId,\r\n sysCd: \"KH\",\r\n userId: getUserId(),\r\n menuId: menu.menuId,\r\n menuNm: menu.menuNm,\r\n });\r\n }\r\n },\r\n\r\n removeMenuByMenuId: async (menuId) => {\r\n const s = get();\r\n const bkmkId = findItemByMenuId(s.nodes, menuId);\r\n if (bkmkId) await get().removeNode(bkmkId);\r\n },\r\n\r\n removeMenu: async (bkmkId) => {\r\n await get().removeNode(bkmkId);\r\n },\r\n\r\n removeFolder: async (folderBkmkId) => {\r\n await get().removeNode(folderBkmkId);\r\n },\r\n\r\n editFolder: async (folderBkmkId, userId, newBkmkNm, prntBkmkId, sortOrdr) => {\r\n await get().editNode({\r\n bkmkId: folderBkmkId,\r\n userId,\r\n bkmkNm: newBkmkNm,\r\n prntBkmkId,\r\n sortOrdr,\r\n });\r\n },\r\n\r\n /** Ant Tree 데이터 변환 (검색 포함) */\r\n convertToAntTreeData: (nodesMap, rootIds, q, onlyFolder = false) => {\r\n const match = (s: string) =>\r\n q ? s.toLowerCase().includes(q.toLowerCase()) : true;\r\n\r\n const build = (id: string): any | null => {\r\n const n = nodesMap[id];\r\n if (!n) return null;\r\n\r\n if (onlyFolder && n.type !== \"F\") return null;\r\n\r\n if (n.type === \"F\") {\r\n const f = n as FolderNode;\r\n const children = (f.children || [])\r\n .map((cid) => build(cid))\r\n .filter(Boolean);\r\n const visible = match(f.bkmkNm) || children.length > 0;\r\n if (!visible) return null;\r\n return {\r\n key: f.bkmkId,\r\n type: \"F\",\r\n title: `📁 ${f.bkmkNm}`,\r\n bkmkNm: f.bkmkNm,\r\n prntBkmkId: f.prntBkmkId,\r\n sortOrdr: f.sortOrdr,\r\n fullPath: f.fullPath,\r\n children: children.length ? children : undefined,\r\n };\r\n } else {\r\n const i = n as ItemNode;\r\n const label = i.menuNm ? `${i.menuNm} (${i.menuId})` : i.menuId;\r\n const visible = match(label);\r\n if (!visible) return null;\r\n return {\r\n key: i.bkmkId,\r\n type: \"M\",\r\n title: `📄 ${label}`,\r\n prntBkmkId: i.prntBkmkId,\r\n sortOrdr: i.sortOrdr,\r\n fullPath: i.fullPath,\r\n isLeaf: true,\r\n };\r\n }\r\n };\r\n\r\n return rootIds.map(build).filter(Boolean);\r\n },\r\n});\r\n\r\nexport const useFavoriteStore = create<State>(creator);\r\n\r\n// ===================================================================\r\n// Helpers\r\n// ===================================================================\r\n\r\nfunction normalize(raw: any[]): Normalized {\r\n const nodes: Record<Id, FavNode> = {};\r\n const roots: Id[] = [];\r\n\r\n const walk = (arr: any[]) => {\r\n arr.forEach((r: any) => {\r\n // 서버 raw 필드: TYPE, BKMK_ID, PRNT_BKMK_ID, SORT_ORDR, BKMK_NM, MENU_ID, FULL_PATH?\r\n const base: BkmkBase = {\r\n type: r.type,\r\n bkmkId: r.bkmkId ?? r.BKMK_ID ?? r.id,\r\n prntBkmkId: r.prntBkmkId ?? r.PRNT_BKMK_ID ?? \"-\",\r\n sortOrdr: Number(r.sortOrdr ?? r.SORT_ORDR ?? 0),\r\n sysCd: r.sysCd ?? r.SYS_CD,\r\n userId: r.userId ?? r.USER_ID,\r\n fullPath: r.fullPath ?? r.FULL_PATH,\r\n };\r\n\r\n if (r.type === \"F\") {\r\n nodes[base.bkmkId] = {\r\n ...base,\r\n bkmkNm: r.bkmkNm ?? r.BKMK_NM ?? r.name ?? base.bkmkId,\r\n children: [],\r\n } as FolderNode;\r\n\r\n const children = Array.isArray(r.children) ? r.children : [];\r\n walk(children);\r\n } else {\r\n nodes[base.bkmkId] = {\r\n ...base,\r\n menuId: r.menuId ?? r.MENU_ID ?? \"\",\r\n menuNm: r.menuNm ?? r.MENU_NM,\r\n } as ItemNode;\r\n }\r\n });\r\n };\r\n\r\n walk(raw);\r\n\r\n // children / rootIds 구성\r\n Object.values(nodes).forEach((n) => {\r\n if (n.prntBkmkId && n.prntBkmkId !== \"-\") {\r\n const p = nodes[n.prntBkmkId] as FolderNode;\r\n if (p?.type === \"F\") p.children.push(n.bkmkId);\r\n } else if (n.type === \"F\") {\r\n roots.push(n.bkmkId);\r\n }\r\n });\r\n\r\n // 정렬 인덱스 보정(안전)\r\n roots.sort((a, b) => (nodes[a].sortOrdr ?? 0) - (nodes[b].sortOrdr ?? 0));\r\n Object.values(nodes).forEach((n) => {\r\n if (n.type === \"F\") {\r\n const f = n as FolderNode;\r\n f.children.sort(\r\n (A, B) => (nodes[A].sortOrdr ?? 0) - (nodes[B].sortOrdr ?? 0)\r\n );\r\n }\r\n });\r\n\r\n return { nodes, rootIds: roots };\r\n}\r\n\r\nfunction snapshot(s: State): State {\r\n return {\r\n ...s,\r\n nodes: JSON.parse(JSON.stringify(s.nodes)),\r\n rootIds: s.rootIds.slice(),\r\n };\r\n}\r\n\r\nfunction tempId(): Id {\r\n return `tmp_${Math.random().toString(36).slice(2, 10)}`;\r\n}\r\n\r\nfunction tailIndex(s: Pick<State, \"nodes\" | \"rootIds\">, parentId: Id | \"-\") {\r\n if (!parentId || parentId === \"-\") return s.rootIds.length;\r\n const p = s.nodes[parentId] as FolderNode | undefined;\r\n return p ? p.children.length : 0;\r\n}\r\n\r\nfunction attach(s: State, bkmkId: Id, parentId: Id | \"-\") {\r\n const n = s.nodes[bkmkId];\r\n if (!n) return;\r\n\r\n if (parentId && parentId !== \"-\") {\r\n const p = s.nodes[parentId] as FolderNode | undefined;\r\n if (!p || p.type !== \"F\") return;\r\n n.prntBkmkId = parentId;\r\n p.children = [...p.children, bkmkId];\r\n } else {\r\n n.prntBkmkId = \"-\";\r\n s.rootIds = [...s.rootIds, bkmkId];\r\n }\r\n}\r\n\r\nfunction detach(s: State, bkmkId: Id) {\r\n const n = s.nodes[bkmkId];\r\n if (!n) return;\r\n const pid = n.prntBkmkId;\r\n\r\n if (pid && pid !== \"-\") {\r\n const p = s.nodes[pid] as FolderNode | undefined;\r\n if (p?.type === \"F\") {\r\n p.children = p.children.filter((c) => c !== bkmkId);\r\n }\r\n } else {\r\n s.rootIds = s.rootIds.filter((r) => r !== bkmkId);\r\n }\r\n}\r\n\r\nfunction removeRecursively(s: State, bkmkId: Id) {\r\n const node = s.nodes[bkmkId];\r\n if (!node) return;\r\n if (node.type === \"F\") {\r\n const children = (node as FolderNode).children.slice();\r\n children.forEach((cid) => removeRecursively(s, cid));\r\n }\r\n detach(s, bkmkId);\r\n const { [bkmkId]: _omit, ...rest } = s.nodes as Record<string, FavNode>;\r\n s.nodes = rest;\r\n}\r\n\r\n/** 임시ID → 실제ID 스왑 (불변성 유지) */\r\nfunction idSwapImmutable(s: State, tmp: Id, real: Id): State {\r\n if (tmp === real) return s;\r\n const node = s.nodes[tmp];\r\n if (!node) return s;\r\n\r\n const newNode: FavNode = JSON.parse(JSON.stringify(node));\r\n newNode.bkmkId = real;\r\n\r\n const newNodes: Record<Id, FavNode> = { ...s.nodes, [real]: newNode };\r\n delete newNodes[tmp];\r\n\r\n let newRootIds = s.rootIds;\r\n if (newNode.prntBkmkId && newNode.prntBkmkId !== \"-\") {\r\n const p = newNodes[newNode.prntBkmkId] as FolderNode | undefined;\r\n if (p?.type === \"F\") {\r\n newNodes[newNode.prntBkmkId] = {\r\n ...p,\r\n children: p.children.map((c) => (c === tmp ? real : c)),\r\n } as FolderNode;\r\n }\r\n } else {\r\n newRootIds = s.rootIds.map((r) => (r === tmp ? real : r));\r\n }\r\n\r\n return { ...s, nodes: newNodes, rootIds: newRootIds };\r\n}\r\n\r\nfunction pickDefaultFolderId(s: Pick<State, \"nodes\" | \"rootIds\">): Id | null {\r\n return s.rootIds.find((id) => s.nodes[id]?.type === \"F\") ?? null;\r\n}\r\n\r\nfunction toSimpleTreeFromMap(nodes: Record<Id, FavNode>, rootIds: Id[]) {\r\n const childrenByParent: Record<string, string[]> = {};\r\n Object.values(nodes).forEach((n) => {\r\n const id = n.bkmkId;\r\n const pid = n.prntBkmkId;\r\n if (!id || !pid || pid === \"-\" || pid === id) return;\r\n (childrenByParent[pid] ??= []).push(id);\r\n });\r\n\r\n const visiting = new Set<string>();\r\n\r\n const build = (id: Id): any => {\r\n if (visiting.has(id)) return null;\r\n const n = nodes[id];\r\n if (!n) return null;\r\n\r\n visiting.add(id);\r\n try {\r\n if (n.type === \"F\") {\r\n const f = n as FolderNode;\r\n const childIds = childrenByParent[id] ?? [];\r\n return {\r\n type: \"F\",\r\n bkmkId: id,\r\n bkmkNm: f.bkmkNm,\r\n prntBkmkId: f.prntBkmkId,\r\n children: childIds.map(build).filter(Boolean),\r\n };\r\n }\r\n const i = n as ItemNode;\r\n\r\n return {\r\n type: \"M\",\r\n bkmkId: id,\r\n bkmkNm: i.menuNm,\r\n menuId: i.menuId,\r\n menuNm: i.menuNm,\r\n prntBkmkId: i.prntBkmkId,\r\n };\r\n } finally {\r\n visiting.delete(id);\r\n }\r\n };\r\n\r\n const rootMenuIds = Object.values(nodes)\r\n .filter((n) => n.prntBkmkId === \"-\" && n.type === \"M\")\r\n .map((n) => n.bkmkId);\r\n\r\n const rootFolderIds = Object.values(nodes)\r\n .filter((n) => n.prntBkmkId === \"-\" && n.type === \"F\")\r\n .map((n) => n.bkmkId);\r\n\r\n const rootKeys = Array.from(\r\n new Set([...rootIds, ...rootMenuIds, ...rootFolderIds])\r\n );\r\n return rootKeys.map(build).filter(Boolean);\r\n}\r\n\r\nfunction findItemByMenuId(\r\n nodes: Record<Id, FavNode>,\r\n menuId: string\r\n): Id | null {\r\n for (const n of Object.values(nodes)) {\r\n if (n.type === \"M\" && (n as ItemNode).menuId === menuId) return n.bkmkId;\r\n }\r\n return null;\r\n}\r\n\r\nfunction _resequence(\r\n nodes: Record<Id, FavNode>,\r\n rootIds: Id[],\r\n parentId: Id | \"-\"\r\n) {\r\n const siblings: Id[] =\r\n !parentId || parentId === \"-\"\r\n ? rootIds\r\n : (nodes[parentId] as FolderNode).children || [];\r\n siblings.forEach((sid, idx) => {\r\n const n = nodes[sid];\r\n if (!n) return;\r\n n.sortOrdr = idx;\r\n });\r\n}\r\n"],"names":["creator","set","get","menuId","n","id","findItemByMenuId","nodeId","node","q","nodes","rootIds","match","make","folder","kids","cid","c","f","rid","userId","force","s","res","callService","raw","normalized","normalize","treeNodes","toSimpleTreeFromMap","e","p","prev","snapshot","tmp","tempId","sort","tailIndex","next","attach","real","sortForServer","getUserId","swapped","idSwapImmutable","bkmkId","newPrntBkmkId","sortOrdr","parent","oldParentId","removeFrom","idx","insertTo","_resequence","removeRecursively","bkmkNm","prntBkmkId","target","sysCd","folderBkmkId","menu","exists","folderId","pickDefaultFolderId","newBkmkNm","nodesMap","onlyFolder","build","children","i","label","useFavoriteStore","create","roots","walk","arr","r","base","a","b","A","B","parentId","detach","pid","_omit","rest","newNode","newNodes","newRootIds","childrenByParent","visiting","childIds","rootMenuIds","rootFolderIds","sid"],"mappings":"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"}
|