@thefreshop/tb 1.0.15 → 1.0.17
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 +121 -157
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/types/provider.types.d.ts +10 -13
- package/dist/cjs/types/tbframe.types.d.ts +2 -2
- package/dist/esm/index.js +121 -157
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/types/provider.types.d.ts +10 -13
- package/dist/esm/types/tbframe.types.d.ts +2 -2
- package/dist/index.d.ts +11 -14
- package/package.json +8 -2
|
@@ -1,25 +1,22 @@
|
|
|
1
1
|
import { userType } from "./user.types";
|
|
2
|
-
import {
|
|
2
|
+
import { tabType } from "./tbframe.types";
|
|
3
3
|
export type ProviderType = {
|
|
4
4
|
topkey: string;
|
|
5
5
|
setTopkey: (value: string) => void;
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
6
|
+
tabList: tabType[];
|
|
7
|
+
setTabList: (tabList: tabType[]) => void;
|
|
8
|
+
tabKeys: string[];
|
|
9
|
+
currentTabKey?: string;
|
|
10
|
+
setCurrentTabKey: (key: string) => void;
|
|
11
|
+
addTabKey: (key: string) => void;
|
|
12
|
+
removeTabKey: (key: string) => void;
|
|
13
|
+
startTabKey?: string;
|
|
14
|
+
setStartTabKey: (key: string) => void;
|
|
11
15
|
loginUser: (value: userType | null) => void;
|
|
12
16
|
logout: (force?: boolean) => void;
|
|
13
17
|
user?: userType;
|
|
14
|
-
startpage?: React.ReactNode;
|
|
15
|
-
setStartpage: (value: React.ReactNode) => void;
|
|
16
18
|
SetWarning: (value: ErrMsgType) => void;
|
|
17
19
|
errMsg?: ErrMsgType;
|
|
18
|
-
setGlobalpages: (value: tabType[]) => void;
|
|
19
|
-
globalpages?: tabType[];
|
|
20
|
-
addGlobalTabs: (key: string) => void;
|
|
21
|
-
setMenupages: (value: navType) => void;
|
|
22
|
-
goTabs: (key: string) => void;
|
|
23
20
|
};
|
|
24
21
|
export type ErrMsgType = {
|
|
25
22
|
err?: string;
|
|
@@ -2,10 +2,9 @@ export interface tbframeType {
|
|
|
2
2
|
islogin?: boolean;
|
|
3
3
|
isgroup?: boolean;
|
|
4
4
|
isgroupauth?: boolean;
|
|
5
|
-
|
|
5
|
+
startTabKey?: string;
|
|
6
6
|
loginpage?: React.ReactNode;
|
|
7
7
|
logoutComponent?: React.ReactNode;
|
|
8
|
-
globalpages?: tabType[];
|
|
9
8
|
}
|
|
10
9
|
export declare const baseAdminDat: TbFrameType;
|
|
11
10
|
export type TbFrameType = {
|
|
@@ -50,6 +49,7 @@ export type menuType = {
|
|
|
50
49
|
};
|
|
51
50
|
export type navType = {
|
|
52
51
|
menuSet: menuSetType[];
|
|
52
|
+
globalTabs?: tabType[];
|
|
53
53
|
openIcon?: React.ReactElement | JSX.Element;
|
|
54
54
|
closeIcon?: React.ReactElement | JSX.Element;
|
|
55
55
|
};
|
package/dist/esm/index.js
CHANGED
|
@@ -22,18 +22,17 @@ const tbContext = createContext(undefined);
|
|
|
22
22
|
const SESSION_STORAGE_KEY = "tbFrameState";
|
|
23
23
|
const TbProvider = ({ children }) => {
|
|
24
24
|
const [topkey, setTopkey] = useState("");
|
|
25
|
-
const [
|
|
25
|
+
const [tabList, setTabList] = useState([]);
|
|
26
|
+
const [currentTabKey, setCurrentTabKey] = useState();
|
|
27
|
+
const [startTabKey, setStartTabKey] = useState();
|
|
26
28
|
const [user, setloginUser] = useState();
|
|
27
|
-
// const [tabs, setTabs] = useState<tabType[]>([]);
|
|
28
|
-
const [startpage, setStartpage] = useState();
|
|
29
29
|
const [errMsg, setErrMsg] = useState();
|
|
30
|
-
const [globalpages, setGlobalpages] = useState();
|
|
31
|
-
const [menupages, setMenupages] = useState();
|
|
32
30
|
// 1. 초기 상태를 sessionStorage 불러오도록 수정
|
|
33
|
-
const [
|
|
31
|
+
const [tabKeys, setTabKeys] = useState(() => {
|
|
34
32
|
try {
|
|
35
33
|
const savedState = sessionStorage.getItem(SESSION_STORAGE_KEY);
|
|
36
|
-
|
|
34
|
+
const tt = savedState ? JSON.parse(savedState).tabs : [];
|
|
35
|
+
return tt === undefined ? [] : tt;
|
|
37
36
|
}
|
|
38
37
|
catch (error) {
|
|
39
38
|
console.error("Failed to parse state from sessionStorage", error);
|
|
@@ -42,50 +41,33 @@ const TbProvider = ({ children }) => {
|
|
|
42
41
|
});
|
|
43
42
|
// 2. 상태가 변경될 때마다 sessionStorage 저장하는 useEffect 추가
|
|
44
43
|
useEffect(() => {
|
|
45
|
-
//
|
|
46
|
-
const
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
const addTabs = (tab) => {
|
|
54
|
-
setCurrentTab(tab);
|
|
55
|
-
if (tabs.find((m) => m.key === tab.key) === undefined) {
|
|
56
|
-
setTabs([...tabs, tab]);
|
|
44
|
+
// 불러올 때의 데이터 구조({ tabs: ... })와 일치시키기 위해 객체 형태로 저장
|
|
45
|
+
const stateToSave = { tabs: tabKeys };
|
|
46
|
+
sessionStorage.setItem(SESSION_STORAGE_KEY, JSON.stringify(stateToSave));
|
|
47
|
+
}, [tabKeys, currentTabKey /* ... 다른 상태 의존성 ... */]);
|
|
48
|
+
const addTabKey = (key) => {
|
|
49
|
+
setCurrentTabKey(key);
|
|
50
|
+
if (tabKeys.find((m) => m === key) === undefined) {
|
|
51
|
+
setTabKeys([...tabKeys, key]);
|
|
57
52
|
}
|
|
58
53
|
};
|
|
59
|
-
const
|
|
54
|
+
const removeTabKey = (key) => {
|
|
60
55
|
// console.log('tab', tab)
|
|
61
|
-
let newTabs = [...
|
|
62
|
-
const itemToFind = newTabs.find((m) => m
|
|
56
|
+
let newTabs = [...tabKeys];
|
|
57
|
+
const itemToFind = newTabs.find((m) => m === key);
|
|
63
58
|
if (itemToFind !== undefined) {
|
|
64
59
|
const idx = newTabs.indexOf(itemToFind);
|
|
65
60
|
if (idx > -1)
|
|
66
61
|
newTabs.splice(idx, 1);
|
|
67
|
-
|
|
62
|
+
setTabKeys(newTabs);
|
|
68
63
|
// console.log('newTabs', newTabs)
|
|
69
|
-
if (
|
|
70
|
-
|
|
64
|
+
if (currentTabKey === key) {
|
|
65
|
+
setCurrentTabKey(newTabs[idx === 0 ? 0 : idx - 1]);
|
|
71
66
|
}
|
|
72
67
|
}
|
|
73
68
|
};
|
|
74
69
|
const loginUser = (user) => {
|
|
75
70
|
if (user !== null) {
|
|
76
|
-
if (startpage) {
|
|
77
|
-
addTabs({
|
|
78
|
-
title: "HOME",
|
|
79
|
-
key: "HOME",
|
|
80
|
-
page: startpage,
|
|
81
|
-
noremove: true,
|
|
82
|
-
});
|
|
83
|
-
setCurrentTab({
|
|
84
|
-
title: "HOME",
|
|
85
|
-
key: "HOME",
|
|
86
|
-
page: startpage,
|
|
87
|
-
});
|
|
88
|
-
}
|
|
89
71
|
if (user?.user_group?.group_section_start) {
|
|
90
72
|
setTopkey(user?.user_group?.group_section_start);
|
|
91
73
|
}
|
|
@@ -97,63 +79,49 @@ const TbProvider = ({ children }) => {
|
|
|
97
79
|
};
|
|
98
80
|
const logout = (force = false) => {
|
|
99
81
|
setloginUser(undefined);
|
|
100
|
-
|
|
101
|
-
|
|
82
|
+
setCurrentTabKey(undefined);
|
|
83
|
+
setTabKeys([]);
|
|
102
84
|
setTopkey("");
|
|
103
85
|
if (force)
|
|
104
86
|
window.location.reload();
|
|
105
87
|
};
|
|
106
|
-
const
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
if (gotab) {
|
|
127
|
-
addTabs(gotab);
|
|
128
|
-
}
|
|
129
|
-
const newtab = globalpages?.find((m) => {
|
|
130
|
-
return m.key === key;
|
|
131
|
-
});
|
|
132
|
-
// console.log(globalpages, newtab)
|
|
133
|
-
if (newtab) {
|
|
134
|
-
addTabs(newtab);
|
|
135
|
-
}
|
|
136
|
-
};
|
|
88
|
+
// const goTabKey = (key: string) => {
|
|
89
|
+
// let gotab;
|
|
90
|
+
// menupages?.menuSet.forEach((item: menuSetType) => {
|
|
91
|
+
// item.menuSetting.forEach((sub) => {
|
|
92
|
+
// sub.children?.forEach((page) => {
|
|
93
|
+
// if (page.tab.key === key) gotab = page;
|
|
94
|
+
// });
|
|
95
|
+
// });
|
|
96
|
+
// });
|
|
97
|
+
// if (gotab) {
|
|
98
|
+
// addTabKey(gotab);
|
|
99
|
+
// }
|
|
100
|
+
// const newtab = globalpages?.find((m) => {
|
|
101
|
+
// return m.key === key;
|
|
102
|
+
// });
|
|
103
|
+
// // console.log(globalpages, newtab)
|
|
104
|
+
// if (newtab) {
|
|
105
|
+
// addTabKey(newtab);
|
|
106
|
+
// }
|
|
107
|
+
// };
|
|
137
108
|
return (React__default.createElement(tbContext.Provider, { value: {
|
|
138
109
|
topkey,
|
|
139
110
|
setTopkey,
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
111
|
+
tabKeys,
|
|
112
|
+
removeTabKey,
|
|
113
|
+
currentTabKey,
|
|
114
|
+
setCurrentTabKey,
|
|
115
|
+
addTabKey,
|
|
145
116
|
loginUser,
|
|
146
117
|
logout,
|
|
147
118
|
user,
|
|
148
|
-
|
|
149
|
-
|
|
119
|
+
startTabKey,
|
|
120
|
+
setStartTabKey,
|
|
150
121
|
SetWarning,
|
|
151
122
|
errMsg,
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
addGlobalTabs,
|
|
155
|
-
setMenupages,
|
|
156
|
-
goTabs,
|
|
123
|
+
tabList,
|
|
124
|
+
setTabList,
|
|
157
125
|
} }, children));
|
|
158
126
|
};
|
|
159
127
|
const useTbState = () => {
|
|
@@ -203,7 +171,8 @@ var styles$8 = {"topframe":"top-module_topframe__LhKDg","top_left":"top-module_t
|
|
|
203
171
|
styleInject(css_248z$a);
|
|
204
172
|
|
|
205
173
|
const Top = ({ setting, top: { title = topbase.title, titleimage, topMenuSetting, menuStyle, imgstyle, titleStyle, topRight }, }) => {
|
|
206
|
-
const { logout, user,
|
|
174
|
+
const { logout, user, addTabKey, setCurrentTabKey } = useTbState();
|
|
175
|
+
const navigate = useNavigate();
|
|
207
176
|
const userTop = () => {
|
|
208
177
|
let topmenutable = [];
|
|
209
178
|
if (user?.user_group?.group_key === "master" || setting.islogin === false) {
|
|
@@ -223,12 +192,11 @@ const Top = ({ setting, top: { title = topbase.title, titleimage, topMenuSetting
|
|
|
223
192
|
};
|
|
224
193
|
return (React__default.createElement("div", { className: styles$8.topframe },
|
|
225
194
|
React__default.createElement("div", { className: styles$8.top_left, style: { cursor: "pointer" }, onClick: () => {
|
|
226
|
-
if (
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
});
|
|
195
|
+
if (setting?.startTabKey) {
|
|
196
|
+
addTabKey(setting?.startTabKey);
|
|
197
|
+
setCurrentTabKey(setting?.startTabKey);
|
|
198
|
+
navigate("/" + setting?.startTabKey);
|
|
199
|
+
}
|
|
232
200
|
console.log("home");
|
|
233
201
|
} },
|
|
234
202
|
titleimage ? React__default.createElement("img", { src: titleimage, className: styles$8.toplogo, alt: "logo", style: imgstyle }) : null,
|
|
@@ -276,7 +244,7 @@ const Menu = ({ menu_setting: { tab, icon, children, hasPage, defalultOpen }, op
|
|
|
276
244
|
const { title, key, page } = tab;
|
|
277
245
|
const [hover, setHover] = useState(false);
|
|
278
246
|
const [subOpen, setSubOpen] = useState(false);
|
|
279
|
-
const {
|
|
247
|
+
const { addTabKey, currentTabKey, user } = useTbState();
|
|
280
248
|
const navigate = useNavigate();
|
|
281
249
|
useEffect(() => {
|
|
282
250
|
if (defalultOpen) {
|
|
@@ -303,18 +271,14 @@ const Menu = ({ menu_setting: { tab, icon, children, hasPage, defalultOpen }, op
|
|
|
303
271
|
return usersubmenutable;
|
|
304
272
|
};
|
|
305
273
|
return (React__default.createElement("div", null,
|
|
306
|
-
React__default.createElement("div", { className: `${styles$9.nav_item} ${
|
|
274
|
+
React__default.createElement("div", { className: `${styles$9.nav_item} ${currentTabKey === key ? styles$9.menu_select : hover ? styles$9.menu_hover : styles$9.menu_nomal}`, onMouseEnter: () => {
|
|
307
275
|
setHover(true);
|
|
308
276
|
}, onMouseLeave: () => {
|
|
309
277
|
setHover(false);
|
|
310
278
|
}, onClick: () => {
|
|
311
279
|
setSubOpen((prev) => !prev);
|
|
312
|
-
if (hasPage &&
|
|
313
|
-
|
|
314
|
-
title,
|
|
315
|
-
key,
|
|
316
|
-
page,
|
|
317
|
-
});
|
|
280
|
+
if (hasPage && currentTabKey !== key) {
|
|
281
|
+
addTabKey(key);
|
|
318
282
|
navigate("/" + key);
|
|
319
283
|
}
|
|
320
284
|
// console.log(tabs)
|
|
@@ -327,19 +291,15 @@ const Menu = ({ menu_setting: { tab, icon, children, hasPage, defalultOpen }, op
|
|
|
327
291
|
const SubMenu = ({ menu_setting: { tab, icon, hasPage } }) => {
|
|
328
292
|
const { title, key, page } = tab;
|
|
329
293
|
const [hover, setHover] = useState(false);
|
|
330
|
-
const {
|
|
294
|
+
const { addTabKey, currentTabKey } = useTbState();
|
|
331
295
|
const navigate = useNavigate();
|
|
332
|
-
return (React__default.createElement("div", { className: `${styles$9.sub_item} ${
|
|
296
|
+
return (React__default.createElement("div", { className: `${styles$9.sub_item} ${currentTabKey === key ? styles$9.menu_select : hover ? styles$9.menu_hover : styles$9.menu_nomal}`, onMouseEnter: () => {
|
|
333
297
|
setHover(true);
|
|
334
298
|
}, onMouseLeave: () => {
|
|
335
299
|
setHover(false);
|
|
336
300
|
}, onClick: () => {
|
|
337
|
-
if (hasPage &&
|
|
338
|
-
|
|
339
|
-
title,
|
|
340
|
-
key,
|
|
341
|
-
page,
|
|
342
|
-
});
|
|
301
|
+
if (hasPage && currentTabKey !== key)
|
|
302
|
+
addTabKey(key);
|
|
343
303
|
navigate("/" + key);
|
|
344
304
|
// console.log(tabs)
|
|
345
305
|
} },
|
|
@@ -352,9 +312,10 @@ var styles$7 = {"bottom_item":"bottom-module_bottom_item__fac0H"};
|
|
|
352
312
|
styleInject(css_248z$9);
|
|
353
313
|
|
|
354
314
|
const Bottom = ({ bottom }) => {
|
|
355
|
-
const {
|
|
315
|
+
const { currentTabKey, user, tabList } = useTbState();
|
|
316
|
+
const tab = tabList.find((tab) => tab.key === currentTabKey);
|
|
356
317
|
return (React__default.createElement("div", { className: styles$7.bottom_item },
|
|
357
|
-
React__default.createElement("div", null,
|
|
318
|
+
React__default.createElement("div", null, tab?.title),
|
|
358
319
|
React__default.createElement("div", { style: { display: "flex", gap: 16 } },
|
|
359
320
|
React__default.createElement("div", null,
|
|
360
321
|
user?.user_name ?? "이름없음",
|
|
@@ -370,53 +331,44 @@ var styles$6 = {"tabFrame":"tabs-module_tabFrame__qyHsD","tab_item":"tabs-module
|
|
|
370
331
|
styleInject(css_248z$8);
|
|
371
332
|
|
|
372
333
|
const Tabs = ({ nav: { menuSet, openIcon, closeIcon } }) => {
|
|
373
|
-
const {
|
|
334
|
+
const { tabList, tabKeys, removeTabKey, setCurrentTabKey, addTabKey, currentTabKey } = useTbState();
|
|
374
335
|
const navigate = useNavigate();
|
|
375
336
|
const location = useLocation();
|
|
376
337
|
const findTabs = useCallback((pathKey) => {
|
|
377
338
|
// 1. 현재 열린 탭 중에 있는지 확인
|
|
378
|
-
const
|
|
379
|
-
if (
|
|
380
|
-
|
|
339
|
+
const existingTabKey = tabKeys.find((key) => key === pathKey);
|
|
340
|
+
if (existingTabKey) {
|
|
341
|
+
setCurrentTabKey(existingTabKey);
|
|
381
342
|
return;
|
|
382
343
|
}
|
|
383
344
|
// 2. 없다면, 전체 페이지 목록에서 찾아서 추가
|
|
384
345
|
let tabInfo;
|
|
385
346
|
// 2-1. 메뉴 페이지에서 찾기
|
|
386
347
|
menuSet.forEach((item) => {
|
|
387
|
-
|
|
388
|
-
if (
|
|
389
|
-
tabInfo =
|
|
390
|
-
else {
|
|
391
|
-
sub.children?.forEach((page) => {
|
|
392
|
-
if (page.tab.key === pathKey)
|
|
393
|
-
tabInfo = page;
|
|
394
|
-
});
|
|
395
|
-
}
|
|
348
|
+
tabList.forEach((tab) => {
|
|
349
|
+
if (tab.key === pathKey)
|
|
350
|
+
tabInfo = pathKey;
|
|
396
351
|
});
|
|
397
352
|
});
|
|
398
|
-
// 2-2. 전역 페이지에서 찾기 (메뉴에 없으면)
|
|
399
|
-
if (!tabInfo) {
|
|
400
|
-
tabInfo = globalpages?.find((m) => m.key === pathKey);
|
|
401
|
-
}
|
|
402
353
|
if (tabInfo) {
|
|
403
|
-
|
|
354
|
+
addTabKey(tabInfo);
|
|
404
355
|
}
|
|
405
|
-
}, [
|
|
356
|
+
}, [tabKeys]);
|
|
406
357
|
// 3. 페이지 로드 시 URL을 기반으로 currentTab을 설정하는 useEffect 추가
|
|
407
358
|
useEffect(() => {
|
|
408
359
|
const pathKey = location.pathname.substring(1); // 맨 앞의 '/' 제거
|
|
409
360
|
findTabs(pathKey);
|
|
410
361
|
}, []);
|
|
411
|
-
return (React__default.createElement("div", { className: styles$6.tabFrame },
|
|
412
|
-
|
|
362
|
+
return (React__default.createElement("div", { className: styles$6.tabFrame }, tabKeys?.map((key) => {
|
|
363
|
+
const tab = tabList.find((tab) => tab.key === key);
|
|
364
|
+
return (React__default.createElement("div", { key: key, className: `${styles$6.tab_item} ${currentTabKey === key ? styles$6.tab_select : styles$6.tab_normal}` },
|
|
413
365
|
React__default.createElement("div", { className: styles$6.tab_item_text, onClick: () => {
|
|
414
|
-
|
|
415
|
-
navigate("/" +
|
|
366
|
+
setCurrentTabKey(key);
|
|
367
|
+
navigate("/" + key);
|
|
416
368
|
// console.log('setCurrentTab', m)
|
|
417
|
-
} },
|
|
418
|
-
!
|
|
419
|
-
React__default.createElement("button", { className: styles$6.tab_x_button, onClick: () =>
|
|
369
|
+
} }, tab?.title),
|
|
370
|
+
!tab?.noremove && (React__default.createElement("div", { className: styles$6.tab_item_button },
|
|
371
|
+
React__default.createElement("button", { className: styles$6.tab_x_button, onClick: () => removeTabKey(key) }, "x")))));
|
|
420
372
|
})));
|
|
421
373
|
};
|
|
422
374
|
|
|
@@ -520,25 +472,32 @@ const NullPage = () => {
|
|
|
520
472
|
};
|
|
521
473
|
|
|
522
474
|
const TbFrame = ({ setting, top, bottom, nav, top_banner, hashmode = false, }) => {
|
|
523
|
-
const { user,
|
|
475
|
+
const { user, errMsg, tabList, setTabList, startTabKey, setStartTabKey } = useTbState();
|
|
524
476
|
useEffect(() => {
|
|
525
|
-
if (
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
477
|
+
if (tabList.length === 0) {
|
|
478
|
+
let p_tabList = [];
|
|
479
|
+
nav.menuSet.forEach((item) => {
|
|
480
|
+
item.menuSetting.forEach((sub) => {
|
|
481
|
+
p_tabList.push(sub.tab);
|
|
482
|
+
sub.children?.forEach((page) => {
|
|
483
|
+
p_tabList.push(page.tab);
|
|
484
|
+
});
|
|
485
|
+
});
|
|
486
|
+
});
|
|
487
|
+
nav?.globalTabs?.forEach((item) => {
|
|
488
|
+
p_tabList.push(item);
|
|
489
|
+
});
|
|
490
|
+
setTabList(p_tabList);
|
|
537
491
|
}
|
|
538
|
-
}, [
|
|
492
|
+
}, [tabList]);
|
|
539
493
|
useEffect(() => {
|
|
540
494
|
if (!errMsg?.isPopup) ;
|
|
541
495
|
}, [errMsg]);
|
|
496
|
+
useEffect(() => {
|
|
497
|
+
if (!startTabKey && setting?.startTabKey) {
|
|
498
|
+
setStartTabKey(setting?.startTabKey);
|
|
499
|
+
}
|
|
500
|
+
}, [setting.startTabKey]);
|
|
542
501
|
const route = () => {
|
|
543
502
|
let route = [];
|
|
544
503
|
if (setting?.islogin) {
|
|
@@ -547,6 +506,12 @@ const TbFrame = ({ setting, top, bottom, nav, top_banner, hashmode = false, }) =
|
|
|
547
506
|
element: setting?.loginpage ? setting.loginpage : React__default.createElement(LoginPage, null),
|
|
548
507
|
});
|
|
549
508
|
}
|
|
509
|
+
nav.globalTabs?.forEach((item) => {
|
|
510
|
+
route.push({
|
|
511
|
+
path: "/" + item.key,
|
|
512
|
+
element: item.page,
|
|
513
|
+
});
|
|
514
|
+
});
|
|
550
515
|
nav.menuSet.forEach((item) => {
|
|
551
516
|
item.menuSetting.forEach((sub) => {
|
|
552
517
|
route.push({
|
|
@@ -561,6 +526,11 @@ const TbFrame = ({ setting, top, bottom, nav, top_banner, hashmode = false, }) =
|
|
|
561
526
|
});
|
|
562
527
|
});
|
|
563
528
|
});
|
|
529
|
+
// 일치하는 라우트가 없을 경우 메인으로 리다이렉트
|
|
530
|
+
route.push({
|
|
531
|
+
path: "*",
|
|
532
|
+
element: React__default.createElement(Navigate, { to: "/", replace: true }),
|
|
533
|
+
});
|
|
564
534
|
return route;
|
|
565
535
|
};
|
|
566
536
|
const router = useMemo(() => {
|
|
@@ -568,7 +538,7 @@ const TbFrame = ({ setting, top, bottom, nav, top_banner, hashmode = false, }) =
|
|
|
568
538
|
return createHashRouter([
|
|
569
539
|
{
|
|
570
540
|
path: "/",
|
|
571
|
-
element: (React__default.createElement(MainLayout, { errMsg: errMsg,
|
|
541
|
+
element: (React__default.createElement(MainLayout, { errMsg: errMsg, setting: setting, top_banner: top_banner, nav: nav, user: user, top: top, bottom: bottom })),
|
|
572
542
|
children: route(),
|
|
573
543
|
errorElement: React__default.createElement(NullPage, null),
|
|
574
544
|
},
|
|
@@ -578,7 +548,7 @@ const TbFrame = ({ setting, top, bottom, nav, top_banner, hashmode = false, }) =
|
|
|
578
548
|
return createBrowserRouter([
|
|
579
549
|
{
|
|
580
550
|
path: "/",
|
|
581
|
-
element: (React__default.createElement(MainLayout, { errMsg: errMsg,
|
|
551
|
+
element: (React__default.createElement(MainLayout, { errMsg: errMsg, setting: setting, top_banner: top_banner, nav: nav, user: user, top: top, bottom: bottom })),
|
|
582
552
|
children: route(),
|
|
583
553
|
errorElement: React__default.createElement(NullPage, null),
|
|
584
554
|
},
|
|
@@ -587,13 +557,7 @@ const TbFrame = ({ setting, top, bottom, nav, top_banner, hashmode = false, }) =
|
|
|
587
557
|
}, [hashmode, user]);
|
|
588
558
|
return React__default.createElement(RouterProvider, { router: router });
|
|
589
559
|
};
|
|
590
|
-
const MainLayout = ({ errMsg,
|
|
591
|
-
useCallback(() => {
|
|
592
|
-
if (startpage)
|
|
593
|
-
return setting?.loginpage ? setting.loginpage : React__default.createElement(LoginPage, null);
|
|
594
|
-
else
|
|
595
|
-
return null;
|
|
596
|
-
}, [setting?.loginpage, startpage]);
|
|
560
|
+
const MainLayout = ({ errMsg, setting, top_banner, nav, user, top, bottom, }) => {
|
|
597
561
|
const TOPBANNER = useCallback(() => {
|
|
598
562
|
return top_banner ? top_banner : null;
|
|
599
563
|
}, [top_banner]);
|