@thefreshop/tb 1.0.8 → 1.0.9
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/cjs/index.js +107 -24
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/tbframe/layout/main.d.ts +1 -1
- package/dist/cjs/tbframe/layout/tabs.d.ts +5 -2
- package/dist/cjs/types/provider.types.d.ts +1 -0
- package/dist/esm/index.js +108 -25
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/tbframe/layout/main.d.ts +1 -1
- package/dist/esm/tbframe/layout/tabs.d.ts +5 -2
- package/dist/esm/types/provider.types.d.ts +1 -0
- package/dist/index.d.ts +1 -0
- package/package.json +9 -6
package/dist/cjs/index.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var React = require('react');
|
|
4
|
+
var reactRouter = require('react-router');
|
|
4
5
|
var Editor = require('@monaco-editor/react');
|
|
5
6
|
var icons = require('@ant-design/icons');
|
|
6
7
|
var antd = require('antd');
|
|
@@ -38,16 +39,35 @@ var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
|
|
|
38
39
|
|
|
39
40
|
const tbContext = React.createContext(undefined);
|
|
40
41
|
|
|
41
|
-
|
|
42
|
+
const SESSION_STORAGE_KEY = "tbFrameState";
|
|
42
43
|
const TbProvider = ({ children }) => {
|
|
43
44
|
const [topkey, setTopkey] = React.useState("");
|
|
44
45
|
const [currentTab, setCurrentTab] = React.useState();
|
|
45
46
|
const [user, setloginUser] = React.useState();
|
|
46
|
-
const [tabs, setTabs] =
|
|
47
|
+
// const [tabs, setTabs] = useState<tabType[]>([]);
|
|
47
48
|
const [startpage, setStartpage] = React.useState();
|
|
48
49
|
const [errMsg, setErrMsg] = React.useState();
|
|
49
50
|
const [globalpages, setGlobalpages] = React.useState();
|
|
50
51
|
const [menupages, setMenupages] = React.useState();
|
|
52
|
+
// 1. 초기 상태를 sessionStorage 불러오도록 수정
|
|
53
|
+
const [tabs, setTabs] = React.useState(() => {
|
|
54
|
+
try {
|
|
55
|
+
const savedState = sessionStorage.getItem(SESSION_STORAGE_KEY);
|
|
56
|
+
return savedState ? JSON.parse(savedState).tabs : [];
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
console.error("Failed to parse state from sessionStorage", error);
|
|
60
|
+
return [];
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
// 2. 상태가 변경될 때마다 sessionStorage 저장하는 useEffect 추가
|
|
64
|
+
React.useEffect(() => {
|
|
65
|
+
const stateToSave = {
|
|
66
|
+
tabs,
|
|
67
|
+
// ... 저장할 다른 상태들 ...
|
|
68
|
+
};
|
|
69
|
+
sessionStorage.setItem(SESSION_STORAGE_KEY, JSON.stringify(stateToSave));
|
|
70
|
+
}, [tabs, currentTab /* ... 다른 상태 의존성 ... */]);
|
|
51
71
|
const addTabs = (tab) => {
|
|
52
72
|
setCurrentTab(tab);
|
|
53
73
|
if (tabs.find((m) => m.key === tab.key) === undefined) {
|
|
@@ -148,6 +168,7 @@ const TbProvider = ({ children }) => {
|
|
|
148
168
|
SetWarning,
|
|
149
169
|
errMsg,
|
|
150
170
|
setGlobalpages,
|
|
171
|
+
globalpages,
|
|
151
172
|
addGlobalTabs,
|
|
152
173
|
setMenupages,
|
|
153
174
|
goTabs,
|
|
@@ -273,6 +294,7 @@ const Menu = ({ menu_setting: { title, icon, key, children, hasPage, page, defal
|
|
|
273
294
|
const [hover, setHover] = React.useState(false);
|
|
274
295
|
const [subOpen, setSubOpen] = React.useState(false);
|
|
275
296
|
const { addTabs, currentTab, user } = useTbState();
|
|
297
|
+
const navigate = reactRouter.useNavigate();
|
|
276
298
|
React.useEffect(() => {
|
|
277
299
|
if (defalultOpen) {
|
|
278
300
|
setSubOpen(true);
|
|
@@ -304,12 +326,14 @@ const Menu = ({ menu_setting: { title, icon, key, children, hasPage, page, defal
|
|
|
304
326
|
setHover(false);
|
|
305
327
|
}, onClick: () => {
|
|
306
328
|
setSubOpen((prev) => !prev);
|
|
307
|
-
if (hasPage && currentTab?.key !== key)
|
|
329
|
+
if (hasPage && currentTab?.key !== key) {
|
|
308
330
|
addTabs({
|
|
309
331
|
title,
|
|
310
332
|
key,
|
|
311
333
|
page,
|
|
312
334
|
});
|
|
335
|
+
navigate("/" + key);
|
|
336
|
+
}
|
|
313
337
|
// console.log(tabs)
|
|
314
338
|
} },
|
|
315
339
|
React.createElement("div", { className: styles$9.nav_icon }, icon),
|
|
@@ -320,6 +344,7 @@ const Menu = ({ menu_setting: { title, icon, key, children, hasPage, page, defal
|
|
|
320
344
|
const SubMenu = ({ menu_setting: { title, icon, key, page, hasPage } }) => {
|
|
321
345
|
const [hover, setHover] = React.useState(false);
|
|
322
346
|
const { addTabs, currentTab } = useTbState();
|
|
347
|
+
const navigate = reactRouter.useNavigate();
|
|
323
348
|
return (React.createElement("div", { className: `${styles$9.sub_item} ${currentTab?.key === key ? styles$9.menu_select : hover ? styles$9.menu_hover : styles$9.menu_nomal}`, onMouseEnter: () => {
|
|
324
349
|
setHover(true);
|
|
325
350
|
}, onMouseLeave: () => {
|
|
@@ -331,6 +356,7 @@ const SubMenu = ({ menu_setting: { title, icon, key, page, hasPage } }) => {
|
|
|
331
356
|
key,
|
|
332
357
|
page,
|
|
333
358
|
});
|
|
359
|
+
navigate("/" + key);
|
|
334
360
|
// console.log(tabs)
|
|
335
361
|
} },
|
|
336
362
|
React.createElement("div", { className: styles$9.nav_icon }, icon),
|
|
@@ -359,12 +385,45 @@ var css_248z$9 = ".tabs-module_tabFrame__qyHsD{background-color:#fff;display:fle
|
|
|
359
385
|
var styles$6 = {"tabFrame":"tabs-module_tabFrame__qyHsD","tab_item":"tabs-module_tab_item__dtp6M","tab_item_text":"tabs-module_tab_item_text__w9h73","tab_item_button":"tabs-module_tab_item_button__2CdJE","tab_x_button":"tabs-module_tab_x_button__To6OB","tab_normal":"tabs-module_tab_normal__Ky5vz","tab_select":"tabs-module_tab_select__kEPQi"};
|
|
360
386
|
styleInject(css_248z$9);
|
|
361
387
|
|
|
362
|
-
const Tabs = () => {
|
|
363
|
-
const { tabs, removeTabs, setCurrentTab, currentTab } = useTbState();
|
|
364
|
-
|
|
365
|
-
|
|
388
|
+
const Tabs = ({ nav: { menuSet, openIcon, closeIcon } }) => {
|
|
389
|
+
const { tabs, removeTabs, setCurrentTab, addTabs, currentTab, globalpages } = useTbState();
|
|
390
|
+
const navigate = reactRouter.useNavigate();
|
|
391
|
+
const location = reactRouter.useLocation();
|
|
392
|
+
const findTabs = React.useCallback((pathKey) => {
|
|
393
|
+
// 1. 현재 열린 탭 중에 있는지 확인
|
|
394
|
+
const existingTab = tabs.find((t) => t.key === pathKey);
|
|
395
|
+
if (existingTab) {
|
|
396
|
+
setCurrentTab(existingTab);
|
|
397
|
+
return;
|
|
398
|
+
}
|
|
399
|
+
// 2. 없다면, 전체 페이지 목록에서 찾아서 추가
|
|
400
|
+
let tabInfo;
|
|
401
|
+
// 2-1. 메뉴 페이지에서 찾기
|
|
402
|
+
menuSet.forEach((item) => {
|
|
403
|
+
item.menuSetting.forEach((sub) => {
|
|
404
|
+
if (sub.key === pathKey)
|
|
405
|
+
tabInfo = sub;
|
|
406
|
+
});
|
|
407
|
+
});
|
|
408
|
+
// 2-2. 전역 페이지에서 찾기 (메뉴에 없으면)
|
|
409
|
+
if (!tabInfo) {
|
|
410
|
+
tabInfo = globalpages?.find((m) => m.key === pathKey);
|
|
411
|
+
}
|
|
412
|
+
if (tabInfo) {
|
|
413
|
+
addTabs(tabInfo);
|
|
414
|
+
}
|
|
415
|
+
}, [tabs, globalpages]);
|
|
416
|
+
// 3. 페이지 로드 시 URL을 기반으로 currentTab을 설정하는 useEffect 추가
|
|
417
|
+
React.useEffect(() => {
|
|
418
|
+
const pathKey = location.pathname.substring(1); // 맨 앞의 '/' 제거
|
|
419
|
+
findTabs(pathKey);
|
|
420
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
421
|
+
}, []); // 이 효과는 컴포넌트가 처음 마운트될 때 한 번만 실행됩니다.
|
|
422
|
+
return (React.createElement("div", { className: styles$6.tabFrame }, tabs?.map((m) => {
|
|
423
|
+
return (React.createElement("div", { key: m.key, className: `${styles$6.tab_item} ${currentTab?.key === m.key ? styles$6.tab_select : styles$6.tab_normal}` },
|
|
366
424
|
React.createElement("div", { className: styles$6.tab_item_text, onClick: () => {
|
|
367
425
|
setCurrentTab(m);
|
|
426
|
+
navigate("/" + m.key);
|
|
368
427
|
// console.log('setCurrentTab', m)
|
|
369
428
|
} }, m.title),
|
|
370
429
|
!m.noremove && (React.createElement("div", { className: styles$6.tab_item_button },
|
|
@@ -376,30 +435,21 @@ var css_248z$8 = ".main-module_mainFrame__Etjvl{height:100%;width:100%}\n/*# sou
|
|
|
376
435
|
var styles$5 = {"mainFrame":"main-module_mainFrame__Etjvl"};
|
|
377
436
|
styleInject(css_248z$8);
|
|
378
437
|
|
|
379
|
-
var css_248z$7 = ".nullpage-module_nullpage__aLHyg{align-items:center;display:flex;flex-direction:row;height:30vh;justify-content:center;width:100%}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm51bGxwYWdlLm1vZHVsZS5jc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsaUNBSUUsa0JBQW1CLENBSG5CLFlBQWEsQ0FDYixrQkFBbUIsQ0FJbkIsV0FBWSxDQUhaLHNCQUF1QixDQUV2QixVQUVGIiwiZmlsZSI6Im51bGxwYWdlLm1vZHVsZS5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyIubnVsbHBhZ2Uge1xyXG4gIGRpc3BsYXk6IGZsZXg7XHJcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcclxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gIHdpZHRoOiAxMDAlO1xyXG4gIGhlaWdodDogMzB2aDtcclxufVxyXG4iXX0= */";
|
|
380
|
-
var styles$4 = {"nullpage":"nullpage-module_nullpage__aLHyg"};
|
|
381
|
-
styleInject(css_248z$7);
|
|
382
|
-
|
|
383
|
-
const NullPage = () => {
|
|
384
|
-
return (React.createElement("div", { className: styles$4.nullpage },
|
|
385
|
-
React.createElement("div", null, "\uD398\uC774\uC9C0\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4.")));
|
|
386
|
-
};
|
|
387
|
-
|
|
388
438
|
const Main = () => {
|
|
389
|
-
|
|
390
|
-
|
|
439
|
+
return (React.createElement("div", { className: styles$5.mainFrame },
|
|
440
|
+
React.createElement(reactRouter.Outlet, null)));
|
|
391
441
|
};
|
|
392
442
|
|
|
393
|
-
var css_248z$
|
|
394
|
-
var styles$
|
|
395
|
-
styleInject(css_248z$
|
|
443
|
+
var css_248z$7 = ".loginpage-module_loginpage__TF9Rl{align-items:center;display:flex;flex-direction:column;height:100vh;justify-content:center;width:100%}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxvZ2lucGFnZS5tb2R1bGUuY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1DQUlFLGtCQUFtQixDQUhuQixZQUFhLENBQ2IscUJBQXNCLENBSXRCLFlBQWEsQ0FIYixzQkFBdUIsQ0FFdkIsVUFFRiIsImZpbGUiOiJsb2dpbnBhZ2UubW9kdWxlLmNzcyIsInNvdXJjZXNDb250ZW50IjpbIi5sb2dpbnBhZ2Uge1xyXG4gIGRpc3BsYXk6IGZsZXg7XHJcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gIHdpZHRoOiAxMDAlO1xyXG4gIGhlaWdodDogMTAwdmg7XHJcbn1cclxuIl19 */";
|
|
444
|
+
var styles$4 = {"loginpage":"loginpage-module_loginpage__TF9Rl"};
|
|
445
|
+
styleInject(css_248z$7);
|
|
396
446
|
|
|
397
447
|
const LoginPage = () => {
|
|
398
448
|
const { loginUser } = useTbState();
|
|
399
449
|
const [user, setUser] = React.useState(defaultuser);
|
|
400
450
|
const [isTypeCheck, setTypeCheck] = React.useState(true);
|
|
401
451
|
const [editorValue, setEditorValue] = React.useState(JSON.stringify(defaultuser, null, 2));
|
|
402
|
-
return (React.createElement("div", { className: styles$
|
|
452
|
+
return (React.createElement("div", { className: styles$4.loginpage },
|
|
403
453
|
React.createElement("div", { style: { display: "flex" } },
|
|
404
454
|
React.createElement("button", { onClick: () => {
|
|
405
455
|
setEditorValue(JSON.stringify(alluser, null, 2));
|
|
@@ -471,6 +521,15 @@ const testuser = {
|
|
|
471
521
|
},
|
|
472
522
|
};
|
|
473
523
|
|
|
524
|
+
var css_248z$6 = ".nullpage-module_nullpage__aLHyg{align-items:center;display:flex;flex-direction:row;height:30vh;justify-content:center;width:100%}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm51bGxwYWdlLm1vZHVsZS5jc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsaUNBSUUsa0JBQW1CLENBSG5CLFlBQWEsQ0FDYixrQkFBbUIsQ0FJbkIsV0FBWSxDQUhaLHNCQUF1QixDQUV2QixVQUVGIiwiZmlsZSI6Im51bGxwYWdlLm1vZHVsZS5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyIubnVsbHBhZ2Uge1xyXG4gIGRpc3BsYXk6IGZsZXg7XHJcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcclxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gIHdpZHRoOiAxMDAlO1xyXG4gIGhlaWdodDogMzB2aDtcclxufVxyXG4iXX0= */";
|
|
525
|
+
var styles$3 = {"nullpage":"nullpage-module_nullpage__aLHyg"};
|
|
526
|
+
styleInject(css_248z$6);
|
|
527
|
+
|
|
528
|
+
const NullPage = () => {
|
|
529
|
+
return (React.createElement("div", { className: styles$3.nullpage },
|
|
530
|
+
React.createElement("div", null, "\uD398\uC774\uC9C0\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4.")));
|
|
531
|
+
};
|
|
532
|
+
|
|
474
533
|
const TbFrame = ({ setting, top, bottom, nav, top_banner, }) => {
|
|
475
534
|
const { user, startpage, setStartpage, errMsg, setGlobalpages, setMenupages } = useTbState();
|
|
476
535
|
React.useEffect(() => {
|
|
@@ -491,6 +550,29 @@ const TbFrame = ({ setting, top, bottom, nav, top_banner, }) => {
|
|
|
491
550
|
React.useEffect(() => {
|
|
492
551
|
if (!errMsg?.isPopup) ;
|
|
493
552
|
}, [errMsg]);
|
|
553
|
+
const route = () => {
|
|
554
|
+
let route = [];
|
|
555
|
+
nav.menuSet.forEach((m) => {
|
|
556
|
+
m.menuSetting.forEach((m) => {
|
|
557
|
+
route.push({
|
|
558
|
+
path: "/" + m.key,
|
|
559
|
+
element: m.page,
|
|
560
|
+
});
|
|
561
|
+
});
|
|
562
|
+
});
|
|
563
|
+
return route;
|
|
564
|
+
};
|
|
565
|
+
const router = React.useMemo(() => reactRouter.createBrowserRouter([
|
|
566
|
+
{
|
|
567
|
+
path: "/",
|
|
568
|
+
element: (React.createElement(MainLayout, { errMsg: errMsg, startpage: startpage, setting: setting, top_banner: top_banner, nav: nav, user: user, top: top, bottom: bottom })),
|
|
569
|
+
children: route(),
|
|
570
|
+
errorElement: React.createElement(NullPage, null),
|
|
571
|
+
},
|
|
572
|
+
]), []);
|
|
573
|
+
return React.createElement(reactRouter.RouterProvider, { router: router });
|
|
574
|
+
};
|
|
575
|
+
const MainLayout = ({ errMsg, startpage, setting, top_banner, nav, user, top, bottom, }) => {
|
|
494
576
|
const LOGIN = React.useCallback(() => {
|
|
495
577
|
if (startpage)
|
|
496
578
|
return setting?.loginpage ? setting.loginpage : React.createElement(LoginPage, null);
|
|
@@ -537,7 +619,7 @@ const TbFrame = ({ setting, top, bottom, nav, top_banner, }) => {
|
|
|
537
619
|
React.createElement("div", { className: styles$9.centerFrame, style: top_banner ? { height: "calc(100vh - 120px)" } : { height: "calc(100vh - 80px)" } },
|
|
538
620
|
React.createElement(Nav, { nav: nav, islogin: setting.islogin ?? false }),
|
|
539
621
|
React.createElement("div", { className: styles$9.contentsFrame },
|
|
540
|
-
React.createElement(Tabs,
|
|
622
|
+
React.createElement(Tabs, { nav: nav }),
|
|
541
623
|
React.createElement(Main, null))),
|
|
542
624
|
React.createElement("div", { className: styles$9.bottomFrame }, bottom && React.createElement(Bottom, { bottom: bottom }))))));
|
|
543
625
|
};
|
|
@@ -22402,10 +22484,11 @@ var Cropper = /** @class */function (_super) {
|
|
|
22402
22484
|
}
|
|
22403
22485
|
};
|
|
22404
22486
|
_this.recomputeCropPosition = function () {
|
|
22487
|
+
var _a, _b;
|
|
22405
22488
|
if (!_this.state.cropSize) return;
|
|
22406
22489
|
var adjustedCrop = _this.props.crop;
|
|
22407
22490
|
// Only scale if we're initialized and this is a legitimate resize
|
|
22408
|
-
if (_this.isInitialized && _this.previousCropSize) {
|
|
22491
|
+
if (_this.isInitialized && ((_a = _this.previousCropSize) === null || _a === void 0 ? void 0 : _a.width) && ((_b = _this.previousCropSize) === null || _b === void 0 ? void 0 : _b.height)) {
|
|
22409
22492
|
var sizeChanged = Math.abs(_this.previousCropSize.width - _this.state.cropSize.width) > 1e-6 || Math.abs(_this.previousCropSize.height - _this.state.cropSize.height) > 1e-6;
|
|
22410
22493
|
if (sizeChanged) {
|
|
22411
22494
|
var scaleX = _this.state.cropSize.width / _this.previousCropSize.width;
|