@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 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
- // export const TbBase = createContext<TbBaseProviderType>({})
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] = React.useState([]);
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
- return (React.createElement("div", { className: styles$6.tabFrame }, tabs?.map((m, index) => {
365
- return (React.createElement("div", { key: index, className: `${styles$6.tab_item} ${currentTab?.key === m.key ? styles$6.tab_select : styles$6.tab_normal}` },
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
- const { currentTab } = useTbState();
390
- return (React.createElement("div", { className: styles$5.mainFrame }, currentTab?.page ? currentTab.page : React.createElement(NullPage, null)));
439
+ return (React.createElement("div", { className: styles$5.mainFrame },
440
+ React.createElement(reactRouter.Outlet, null)));
391
441
  };
392
442
 
393
- var css_248z$6 = ".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 */";
394
- var styles$3 = {"loginpage":"loginpage-module_loginpage__TF9Rl"};
395
- styleInject(css_248z$6);
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$3.loginpage },
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, null),
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;