@thefreshop/tb 1.0.16 → 1.0.18
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 +132 -173
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/tbpage/component/modules/antBaseModalCreate/wiget.d.ts +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 +132 -173
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/tbpage/component/modules/antBaseModalCreate/wiget.d.ts +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 +15 -3
|
@@ -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,7 +506,7 @@ 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
|
}
|
|
550
|
-
|
|
509
|
+
nav.globalTabs?.forEach((item) => {
|
|
551
510
|
route.push({
|
|
552
511
|
path: "/" + item.key,
|
|
553
512
|
element: item.page,
|
|
@@ -567,6 +526,11 @@ const TbFrame = ({ setting, top, bottom, nav, top_banner, hashmode = false, }) =
|
|
|
567
526
|
});
|
|
568
527
|
});
|
|
569
528
|
});
|
|
529
|
+
// 일치하는 라우트가 없을 경우 메인으로 리다이렉트
|
|
530
|
+
route.push({
|
|
531
|
+
path: "*",
|
|
532
|
+
element: React__default.createElement(Navigate, { to: "/", replace: true }),
|
|
533
|
+
});
|
|
570
534
|
return route;
|
|
571
535
|
};
|
|
572
536
|
const router = useMemo(() => {
|
|
@@ -574,7 +538,7 @@ const TbFrame = ({ setting, top, bottom, nav, top_banner, hashmode = false, }) =
|
|
|
574
538
|
return createHashRouter([
|
|
575
539
|
{
|
|
576
540
|
path: "/",
|
|
577
|
-
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 })),
|
|
578
542
|
children: route(),
|
|
579
543
|
errorElement: React__default.createElement(NullPage, null),
|
|
580
544
|
},
|
|
@@ -584,7 +548,7 @@ const TbFrame = ({ setting, top, bottom, nav, top_banner, hashmode = false, }) =
|
|
|
584
548
|
return createBrowserRouter([
|
|
585
549
|
{
|
|
586
550
|
path: "/",
|
|
587
|
-
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 })),
|
|
588
552
|
children: route(),
|
|
589
553
|
errorElement: React__default.createElement(NullPage, null),
|
|
590
554
|
},
|
|
@@ -593,13 +557,7 @@ const TbFrame = ({ setting, top, bottom, nav, top_banner, hashmode = false, }) =
|
|
|
593
557
|
}, [hashmode, user]);
|
|
594
558
|
return React__default.createElement(RouterProvider, { router: router });
|
|
595
559
|
};
|
|
596
|
-
const MainLayout = ({ errMsg,
|
|
597
|
-
useCallback(() => {
|
|
598
|
-
if (startpage)
|
|
599
|
-
return setting?.loginpage ? setting.loginpage : React__default.createElement(LoginPage, null);
|
|
600
|
-
else
|
|
601
|
-
return null;
|
|
602
|
-
}, [setting?.loginpage, startpage]);
|
|
560
|
+
const MainLayout = ({ errMsg, setting, top_banner, nav, user, top, bottom, }) => {
|
|
603
561
|
const TOPBANNER = useCallback(() => {
|
|
604
562
|
return top_banner ? top_banner : null;
|
|
605
563
|
}, [top_banner]);
|
|
@@ -21203,7 +21161,7 @@ const readfileData = (file) => {
|
|
|
21203
21161
|
};
|
|
21204
21162
|
}
|
|
21205
21163
|
else {
|
|
21206
|
-
reject(
|
|
21164
|
+
reject("not_file");
|
|
21207
21165
|
}
|
|
21208
21166
|
});
|
|
21209
21167
|
};
|
|
@@ -21216,25 +21174,25 @@ const Files = (props) => {
|
|
|
21216
21174
|
return;
|
|
21217
21175
|
let init = props.initialValues[props.id];
|
|
21218
21176
|
if (init) {
|
|
21219
|
-
if (typeof init ===
|
|
21177
|
+
if (typeof init === "string") {
|
|
21220
21178
|
setFileList([
|
|
21221
21179
|
{
|
|
21222
21180
|
fileData: init,
|
|
21223
|
-
name:
|
|
21224
|
-
status:
|
|
21181
|
+
name: "",
|
|
21182
|
+
status: "done",
|
|
21225
21183
|
thumbUrl: init,
|
|
21226
|
-
uid: props.id
|
|
21227
|
-
}
|
|
21184
|
+
uid: props.id,
|
|
21185
|
+
},
|
|
21228
21186
|
]);
|
|
21229
21187
|
}
|
|
21230
21188
|
else
|
|
21231
21189
|
setFileList(init.map((i) => {
|
|
21232
21190
|
return {
|
|
21233
21191
|
fileData: i,
|
|
21234
|
-
name:
|
|
21235
|
-
status:
|
|
21192
|
+
name: "",
|
|
21193
|
+
status: "done",
|
|
21236
21194
|
thumbUrl: i,
|
|
21237
|
-
uid: props.id
|
|
21195
|
+
uid: props.id,
|
|
21238
21196
|
};
|
|
21239
21197
|
}));
|
|
21240
21198
|
}
|
|
@@ -21247,8 +21205,8 @@ const Files = (props) => {
|
|
|
21247
21205
|
onChange(fileList);
|
|
21248
21206
|
}
|
|
21249
21207
|
}, [fileList, props.count, onChange]);
|
|
21250
|
-
return (React__default.createElement(Upload, { listType: props.listType, accept: props.listType ===
|
|
21251
|
-
removeIcon:
|
|
21208
|
+
return (React__default.createElement(Upload, { listType: props.listType, accept: props.listType === "picture" ? "image/*" : "", fileList: fileList, showUploadList: {
|
|
21209
|
+
removeIcon: "x",
|
|
21252
21210
|
}, onRemove: (file) => {
|
|
21253
21211
|
const index = fileList.indexOf(file);
|
|
21254
21212
|
const newFileList = fileList.slice();
|
|
@@ -21265,17 +21223,18 @@ const Files = (props) => {
|
|
|
21265
21223
|
{
|
|
21266
21224
|
uid: file.uid,
|
|
21267
21225
|
name: file.name,
|
|
21268
|
-
status:
|
|
21226
|
+
status: "done",
|
|
21269
21227
|
fileData: fileData,
|
|
21270
|
-
thumbUrl: fileData
|
|
21271
|
-
|
|
21228
|
+
thumbUrl: fileData,
|
|
21229
|
+
file: file,
|
|
21230
|
+
},
|
|
21272
21231
|
]);
|
|
21273
21232
|
if (props.setImgCheck)
|
|
21274
21233
|
props.setImgCheck(true);
|
|
21275
21234
|
return false;
|
|
21276
21235
|
} }, fileList.length >= props.count ? null : (React__default.createElement(React__default.Fragment, null,
|
|
21277
21236
|
React__default.createElement(Button, { icon: React__default.createElement(UploadOutlined, null) }, "\uD30C\uC77C\uC120\uD0DD"),
|
|
21278
|
-
fileList.length === 0 ?
|
|
21237
|
+
fileList.length === 0 ? " 선택된 파일 없음" : null))));
|
|
21279
21238
|
};
|
|
21280
21239
|
|
|
21281
21240
|
/******************************************************************************
|