@zat-design/sisyphus-react 4.5.10-beta.1 → 4.6.0-beta.1
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/es/FormsProvider/index.js +14 -21
- package/es/ProAction/components/CheckModalContent/index.js +12 -26
- package/es/ProAction/index.js +79 -83
- package/es/ProAction/propsType.js +0 -1
- package/es/ProConfigProvider/index.js +63 -110
- package/es/ProConfigProvider/propsType.js +0 -1
- package/es/ProDownload/index.js +55 -65
- package/es/ProDownload/propsType.js +0 -1
- package/es/ProDownload/utils.js +61 -95
- package/es/ProDrawerForm/components/ProDrawer/index.js +83 -113
- package/es/ProDrawerForm/components/ProModal/index.js +77 -108
- package/es/ProDrawerForm/components/index.js +6 -2
- package/es/ProDrawerForm/hooks/useConfirmClose.js +20 -39
- package/es/ProDrawerForm/index.js +29 -38
- package/es/ProDrawerForm/propsType.js +0 -1
- package/es/ProDrawerForm/utils/index.js +18 -36
- package/es/ProEditLabel/components/RenderProForm.js +45 -49
- package/es/ProEditLabel/index.js +126 -163
- package/es/ProEditLabel/propsType.js +0 -1
- package/es/ProEditLabel/utils/index.js +5 -8
- package/es/ProEditTable/components/ActionButton/index.js +111 -119
- package/es/ProEditTable/components/RcTable/BaseTable.js +38 -51
- package/es/ProEditTable/components/RcTable/DraggableTable.js +97 -129
- package/es/ProEditTable/components/RcTable/index.js +6 -4
- package/es/ProEditTable/components/RenderField/ListChangedWrapper.js +77 -95
- package/es/ProEditTable/components/RenderField/index.js +490 -587
- package/es/ProEditTable/components/RenderField/propsType.js +0 -1
- package/es/ProEditTable/components/RenderField/tools.js +115 -112
- package/es/ProEditTable/components/RenderToolbar/index.js +47 -73
- package/es/ProEditTable/components/Summary/index.js +38 -64
- package/es/ProEditTable/components/Validator/index.js +46 -46
- package/es/ProEditTable/components/index.js +12 -5
- package/es/ProEditTable/index.js +456 -378
- package/es/ProEditTable/propsType.js +0 -1
- package/es/ProEditTable/utils/config.js +60 -122
- package/es/ProEditTable/utils/diffOriginal.js +45 -82
- package/es/ProEditTable/utils/getDefaultProps.js +19 -24
- package/es/ProEditTable/utils/index.js +150 -236
- package/es/ProEditTable/utils/tools.js +149 -286
- package/es/ProEditTable/utils/transform.js +25 -30
- package/es/ProEditTable/utils/useEditTableError.js +30 -43
- package/es/ProEditTable/utils/useShouldUpdateForTable.js +42 -72
- package/es/ProEditTable/utils/validateAll.js +87 -154
- package/es/ProEnum/components/Group.js +38 -30
- package/es/ProEnum/components/Tag.js +22 -26
- package/es/ProEnum/hooks/useEnum.js +48 -116
- package/es/ProEnum/hooks/useEnumRequest.js +128 -179
- package/es/ProEnum/hooks/useFrequentEnumRequest.js +40 -48
- package/es/ProEnum/index.js +162 -172
- package/es/ProEnum/propsType.js +0 -1
- package/es/ProEnum/utils/eventCenter.js +10 -12
- package/es/ProEnum/utils/frequentEnum.js +35 -92
- package/es/ProEnum/utils/getEnum.js +32 -90
- package/es/ProEnum/utils/getEnumLabel.js +44 -49
- package/es/ProEnum/utils/index.js +93 -207
- package/es/ProForm/components/Container.js +13 -28
- package/es/ProForm/components/FormFooter/index.js +36 -44
- package/es/ProForm/components/FormFooter/propsType.js +0 -1
- package/es/ProForm/components/base/Checkbox/index.js +32 -59
- package/es/ProForm/components/base/DatePicker/index.js +49 -71
- package/es/ProForm/components/base/Input/index.js +63 -97
- package/es/ProForm/components/base/Input/propsType.js +0 -1
- package/es/ProForm/components/base/InputNumber/index.js +118 -172
- package/es/ProForm/components/base/Radio/index.js +39 -52
- package/es/ProForm/components/base/RangePicker/index.js +109 -127
- package/es/ProForm/components/base/RangePicker/useDateRange.js +20 -17
- package/es/ProForm/components/base/Select/index.js +63 -89
- package/es/ProForm/components/base/Switch/index.js +27 -35
- package/es/ProForm/components/base/SwitchCheckbox/index.js +36 -54
- package/es/ProForm/components/base/TextArea/index.js +30 -41
- package/es/ProForm/components/base/TimePicker/index.js +27 -37
- package/es/ProForm/components/combination/Container/index.js +37 -47
- package/es/ProForm/components/combination/Container/propsType.js +0 -1
- package/es/ProForm/components/combination/FormList/components/ActionButton.js +165 -237
- package/es/ProForm/components/combination/FormList/components/BlockFields.js +98 -103
- package/es/ProForm/components/combination/FormList/components/Empty.js +27 -54
- package/es/ProForm/components/combination/FormList/components/LineFields.js +57 -54
- package/es/ProForm/components/combination/FormList/components/ToolbarButton.js +61 -109
- package/es/ProForm/components/combination/FormList/index.js +151 -161
- package/es/ProForm/components/combination/FormList/propsType.js +0 -1
- package/es/ProForm/components/combination/FormList/utils.js +22 -38
- package/es/ProForm/components/combination/Group/component/AddonWrapper/index.js +12 -28
- package/es/ProForm/components/combination/Group/component/ComRender.js +50 -111
- package/es/ProForm/components/combination/Group/component/FlexibleGroup.js +105 -206
- package/es/ProForm/components/combination/Group/hooks/index.js +68 -128
- package/es/ProForm/components/combination/Group/index.js +87 -126
- package/es/ProForm/components/combination/Group/propsType.js +0 -1
- package/es/ProForm/components/combination/Group/utils/index.js +124 -239
- package/es/ProForm/components/combination/ProCascader/index.js +156 -199
- package/es/ProForm/components/combination/ProCascader/propsType.js +0 -1
- package/es/ProForm/components/combination/ProCascader/utils/index.js +12 -21
- package/es/ProForm/components/combination/ProModalSelect/hooks/useRequestList.js +63 -75
- package/es/ProForm/components/combination/ProModalSelect/index.js +290 -348
- package/es/ProForm/components/combination/ProModalSelect/propsType.js +0 -1
- package/es/ProForm/components/combination/ProModalSelect/utils/index.js +32 -39
- package/es/ProForm/components/combination/ProNumberRange/index.js +100 -156
- package/es/ProForm/components/combination/ProNumberRange/propsType.js +0 -1
- package/es/ProForm/components/combination/ProRangeLimit/index.js +104 -115
- package/es/ProForm/components/combination/ProRangeLimit/propsType.js +0 -1
- package/es/ProForm/components/combination/ProTimeLimit/hooks/useControlled.js +16 -16
- package/es/ProForm/components/combination/ProTimeLimit/index.js +75 -109
- package/es/ProForm/components/index.js +56 -34
- package/es/ProForm/components/render/ChangedWrapper.js +85 -94
- package/es/ProForm/components/render/ConfirmWrapper.js +27 -39
- package/es/ProForm/components/render/CustomComponentViewWrapper.js +65 -82
- package/es/ProForm/components/render/Render.js +223 -329
- package/es/ProForm/components/render/RenderFields.js +76 -113
- package/es/ProForm/components/render/propsType.js +0 -1
- package/es/ProForm/hooks/useControlled.js +8 -10
- package/es/ProForm/hooks/useDeepCompareMemo.js +11 -11
- package/es/ProForm/hooks/useFieldProps.js +8 -4
- package/es/ProForm/hooks/useForm.js +50 -110
- package/es/ProForm/hooks/useRules.js +17 -33
- package/es/ProForm/hooks/useShouldUpdate.js +77 -152
- package/es/ProForm/hooks/useWatch.js +58 -129
- package/es/ProForm/index.js +157 -194
- package/es/ProForm/propsType.js +15 -7
- package/es/ProForm/utils/buildFormItemProps.js +51 -58
- package/es/ProForm/utils/diffOriginal.js +43 -73
- package/es/ProForm/utils/getDefaultProps.js +18 -24
- package/es/ProForm/utils/index.js +159 -234
- package/es/ProForm/utils/processDependencies.js +21 -60
- package/es/ProForm/utils/reactiveValues.js +20 -34
- package/es/ProForm/utils/rulesCreator.js +42 -40
- package/es/ProForm/utils/transformNames.js +10 -13
- package/es/ProForm/utils/transformValue.js +16 -29
- package/es/ProForm/utils/valueType.js +96 -178
- package/es/ProIcon/config/index.js +340 -274
- package/es/ProIcon/index.js +135 -209
- package/es/ProIcon/propsTypes.js +0 -1
- package/es/ProIcon/utils/index.js +24 -39
- package/es/ProLayout/components/Layout/Header/index.js +108 -141
- package/es/ProLayout/components/Layout/Menu/FoldMenu/index.js +134 -190
- package/es/ProLayout/components/Layout/Menu/OpenMenu/index.js +111 -137
- package/es/ProLayout/components/Layout/Menu/OpenMenu/propsType.js +0 -1
- package/es/ProLayout/components/Layout/Menu/SideMenu/index.js +23 -31
- package/es/ProLayout/components/Layout/Menu/index.js +92 -89
- package/es/ProLayout/components/Layout/Notice/index.js +13 -27
- package/es/ProLayout/components/Layout/index.js +8 -3
- package/es/ProLayout/components/ProCollapse/PropTypes.js +0 -1
- package/es/ProLayout/components/ProCollapse/index.js +89 -111
- package/es/ProLayout/components/ProFooter/PropTypes.js +0 -1
- package/es/ProLayout/components/ProFooter/index.js +27 -25
- package/es/ProLayout/components/ProHeader/PropTypes.js +0 -1
- package/es/ProLayout/components/ProHeader/components/Copy/index.js +23 -21
- package/es/ProLayout/components/ProHeader/components/Describe/index.js +67 -86
- package/es/ProLayout/components/ProHeader/components/ProBackBtn/index.js +18 -21
- package/es/ProLayout/components/ProHeader/components/ProBackBtn/propsType.js +0 -1
- package/es/ProLayout/components/ProHeader/components/index.js +6 -2
- package/es/ProLayout/components/ProHeader/index.js +216 -356
- package/es/ProLayout/components/ProHeader/utils/index.js +19 -26
- package/es/ProLayout/components/TabsManager/components/TabContextMenu.js +92 -85
- package/es/ProLayout/components/TabsManager/components/TabItem.js +53 -64
- package/es/ProLayout/components/TabsManager/components/TabsContext.js +5 -5
- package/es/ProLayout/components/TabsManager/components/TabsHeader.js +42 -52
- package/es/ProLayout/components/TabsManager/hooks/useActiveTab.js +8 -9
- package/es/ProLayout/components/TabsManager/hooks/useIframeRoute.js +19 -32
- package/es/ProLayout/components/TabsManager/hooks/useProLayoutTabs.js +6 -20
- package/es/ProLayout/components/TabsManager/hooks/useTabsCache.js +25 -42
- package/es/ProLayout/components/TabsManager/hooks/useTabsState.js +310 -412
- package/es/ProLayout/components/TabsManager/hooks/useTabsUrlSync.js +132 -95
- package/es/ProLayout/components/TabsManager/index.js +415 -391
- package/es/ProLayout/components/TabsManager/propTypes.js +7 -15
- package/es/ProLayout/components/TabsManager/utils/historyObserver.js +26 -23
- package/es/ProLayout/components/TabsManager/utils/index.d.ts +2 -1
- package/es/ProLayout/components/TabsManager/utils/index.js +135 -184
- package/es/ProLayout/components/index.js +8 -3
- package/es/ProLayout/index.js +171 -229
- package/es/ProLayout/propTypes.d.ts +9 -0
- package/es/ProLayout/propTypes.js +12 -52
- package/es/ProLayout/utils/index.js +48 -128
- package/es/ProSelect/components/AdaptiveTooltip.js +26 -25
- package/es/ProSelect/index.js +184 -229
- package/es/ProSelect/propsType.js +0 -1
- package/es/ProSelect/utils/index.js +100 -146
- package/es/ProStep/components/Anchor/index.js +71 -82
- package/es/ProStep/components/Item/index.js +49 -56
- package/es/ProStep/components/LazyLoad/index.js +23 -29
- package/es/ProStep/components/Listener/index.js +20 -33
- package/es/ProStep/components/Step/index.js +31 -38
- package/es/ProStep/constants.js +4 -1
- package/es/ProStep/index.js +166 -153
- package/es/ProStep/propsType.js +0 -1
- package/es/ProStep/utils/index.js +29 -55
- package/es/ProStepTab/index.js +83 -138
- package/es/ProStepTab/propsType.js +0 -1
- package/es/ProTable/components/EditableCell/EditIcon.js +10 -14
- package/es/ProTable/components/EditableCell/index.js +37 -71
- package/es/ProTable/components/EditableCell/propsType.js +0 -1
- package/es/ProTable/components/FormatColumn/index.js +209 -340
- package/es/ProTable/components/FormatColumn/propsType.js +0 -1
- package/es/ProTable/components/RcTable/components/BaseTable/index.js +35 -39
- package/es/ProTable/components/RcTable/components/DraggableTable/components/DndWrapper/index.js +80 -107
- package/es/ProTable/components/RcTable/components/DraggableTable/components/DndWrapper/utils/index.js +54 -48
- package/es/ProTable/components/RcTable/components/DraggableTable/components/DndWrapper/utils/propsType.js +0 -1
- package/es/ProTable/components/RcTable/components/DraggableTable/index.js +47 -54
- package/es/ProTable/components/RcTable/index.js +6 -4
- package/es/ProTable/components/RenderColumn/index.js +158 -186
- package/es/ProTable/components/RenderEmptyText/index.js +12 -21
- package/es/ProTable/components/RenderFooter/index.js +15 -15
- package/es/ProTable/components/RenderSummary/index.js +33 -50
- package/es/ProTable/components/RenderTableHeader/index.js +44 -46
- package/es/ProTable/components/RenderTabs/index.js +47 -51
- package/es/ProTable/components/TableResizable/index.js +56 -72
- package/es/ProTable/components/TooltipTitle/index.js +13 -21
- package/es/ProTable/components/index.js +16 -36
- package/es/ProTable/hooks/useAntdTable.js +185 -219
- package/es/ProTable/index.js +232 -249
- package/es/ProTable/propsType.js +0 -1
- package/es/ProTable/utils/columnStorage.js +63 -88
- package/es/ProTable/utils/index.js +57 -90
- package/es/ProTabs/components/Card/index.js +20 -48
- package/es/ProTabs/components/index.js +4 -1
- package/es/ProTabs/index.js +39 -56
- package/es/ProTabs/propType.js +0 -1
- package/es/ProThemeTools/component/ProTools/index.js +106 -158
- package/es/ProThemeTools/component/index.js +4 -1
- package/es/ProThemeTools/context/ThemeContext.js +67 -146
- package/es/ProThemeTools/index.js +103 -156
- package/es/ProThemeTools/propsType.js +0 -1
- package/es/ProThemeTools/utils/index.js +60 -109
- package/es/ProTooltip/index.js +132 -165
- package/es/ProTooltip/propsType.js +0 -1
- package/es/ProTree/components/AdaptiveTooltip.js +15 -17
- package/es/ProTree/components/CloseIcon.js +18 -26
- package/es/ProTree/components/List.js +28 -47
- package/es/ProTree/components/ProTree.js +152 -211
- package/es/ProTree/components/ProTreeSelect/index.js +254 -458
- package/es/ProTree/components/ProTreeSelect/propsType.js +0 -1
- package/es/ProTree/components/SearchTitle.js +23 -42
- package/es/ProTree/components/Tree.js +147 -195
- package/es/ProTree/components/index.js +10 -5
- package/es/ProTree/index.js +12 -16
- package/es/ProTree/propsType.js +0 -1
- package/es/ProTree/utils.js +46 -118
- package/es/ProTreeModal/components/Cascader.js +56 -64
- package/es/ProTreeModal/components/CloseIcon.js +18 -26
- package/es/ProTreeModal/components/List.js +114 -180
- package/es/ProTreeModal/components/SearchTitle.js +15 -18
- package/es/ProTreeModal/components/SortableItem.js +29 -58
- package/es/ProTreeModal/components/Tree.js +99 -113
- package/es/ProTreeModal/components/Trigger.js +87 -121
- package/es/ProTreeModal/components/index.js +14 -6
- package/es/ProTreeModal/index.js +397 -435
- package/es/ProTreeModal/propsType.js +0 -1
- package/es/ProTreeModal/utils.js +52 -95
- package/es/ProUpload/components/ButtonRender.js +44 -54
- package/es/ProUpload/components/DragRender.js +94 -134
- package/es/ProUpload/components/DraggableUploadListItem.js +12 -25
- package/es/ProUpload/components/Example.js +27 -31
- package/es/ProUpload/components/FileItem.js +69 -163
- package/es/ProUpload/components/ImageRender.js +134 -170
- package/es/ProUpload/index.js +68 -100
- package/es/ProUpload/propsType.js +0 -1
- package/es/ProUpload/uitls.js +8 -4
- package/es/ProUtils/utils/index.js +17 -13
- package/es/ProViewer/index.js +154 -175
- package/es/ProViewer/propsType.js +0 -5
- package/es/ProWaterMark/index.js +9 -16
- package/es/ProWaterMark/propsType.js +0 -1
- package/es/hooks/useDraggableRow.js +25 -53
- package/es/index.js +57 -77
- package/es/locale/en_US.js +153 -142
- package/es/locale/index.js +23 -36
- package/es/locale/zh_CN.js +145 -142
- package/es/tokens.js +84 -83
- package/es/utils/index.js +24 -51
- package/package.json +4 -3
|
@@ -1,15 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
// 缓存管理器接口
|
|
10
|
-
|
|
11
|
-
// 默认配置
|
|
12
|
-
export const DEFAULT_TABS_CONFIG = {
|
|
13
|
-
storage: 'localStorage',
|
|
14
|
-
cacheKey: 'pro-layout-tabs'
|
|
15
|
-
};
|
|
1
|
+
const DEFAULT_TABS_CONFIG = {
|
|
2
|
+
storage: "localStorage",
|
|
3
|
+
cacheKey: "pro-layout-tabs"
|
|
4
|
+
};
|
|
5
|
+
export {
|
|
6
|
+
DEFAULT_TABS_CONFIG
|
|
7
|
+
};
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
const listeners = new Set();
|
|
1
|
+
const listeners = /* @__PURE__ */ new Set();
|
|
2
2
|
let originalPushState;
|
|
3
3
|
let originalReplaceState;
|
|
4
4
|
let wrappedPushState;
|
|
5
5
|
let wrappedReplaceState;
|
|
6
6
|
let installationSequence = 0;
|
|
7
7
|
let activeInstallation = 0;
|
|
8
|
-
const notify = source => {
|
|
9
|
-
listeners.forEach(listener => listener(source));
|
|
8
|
+
const notify = (source) => {
|
|
9
|
+
listeners.forEach((listener) => listener(source));
|
|
10
10
|
};
|
|
11
|
-
const handlePopState = () => notify(
|
|
12
|
-
const handleHashChange = () => notify(
|
|
11
|
+
const handlePopState = () => notify("pop");
|
|
12
|
+
const handleHashChange = () => notify("hash");
|
|
13
13
|
const install = () => {
|
|
14
14
|
const browserHistory = window.history;
|
|
15
15
|
const installation = installationSequence + 1;
|
|
@@ -21,16 +21,18 @@ const install = () => {
|
|
|
21
21
|
const installedReplaceState = originalReplaceState;
|
|
22
22
|
wrappedPushState = function pushState(...args) {
|
|
23
23
|
installedPushState.apply(browserHistory, args);
|
|
24
|
-
if (activeInstallation === installation)
|
|
24
|
+
if (activeInstallation === installation)
|
|
25
|
+
notify("push");
|
|
25
26
|
};
|
|
26
27
|
wrappedReplaceState = function replaceState(...args) {
|
|
27
28
|
installedReplaceState.apply(browserHistory, args);
|
|
28
|
-
if (activeInstallation === installation)
|
|
29
|
+
if (activeInstallation === installation)
|
|
30
|
+
notify("replace");
|
|
29
31
|
};
|
|
30
32
|
browserHistory.pushState = wrappedPushState;
|
|
31
33
|
browserHistory.replaceState = wrappedReplaceState;
|
|
32
|
-
window.addEventListener(
|
|
33
|
-
window.addEventListener(
|
|
34
|
+
window.addEventListener("popstate", handlePopState);
|
|
35
|
+
window.addEventListener("hashchange", handleHashChange);
|
|
34
36
|
};
|
|
35
37
|
const uninstall = () => {
|
|
36
38
|
const browserHistory = window.history;
|
|
@@ -41,22 +43,23 @@ const uninstall = () => {
|
|
|
41
43
|
if (wrappedReplaceState && originalReplaceState && browserHistory.replaceState === wrappedReplaceState) {
|
|
42
44
|
browserHistory.replaceState = originalReplaceState;
|
|
43
45
|
}
|
|
44
|
-
window.removeEventListener(
|
|
45
|
-
window.removeEventListener(
|
|
46
|
-
originalPushState =
|
|
47
|
-
originalReplaceState =
|
|
48
|
-
wrappedPushState =
|
|
49
|
-
wrappedReplaceState =
|
|
46
|
+
window.removeEventListener("popstate", handlePopState);
|
|
47
|
+
window.removeEventListener("hashchange", handleHashChange);
|
|
48
|
+
originalPushState = void 0;
|
|
49
|
+
originalReplaceState = void 0;
|
|
50
|
+
wrappedPushState = void 0;
|
|
51
|
+
wrappedReplaceState = void 0;
|
|
50
52
|
};
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
*/
|
|
55
|
-
export const subscribeHistoryLocation = listener => {
|
|
56
|
-
if (listeners.size === 0) install();
|
|
53
|
+
const subscribeHistoryLocation = (listener) => {
|
|
54
|
+
if (listeners.size === 0)
|
|
55
|
+
install();
|
|
57
56
|
listeners.add(listener);
|
|
58
57
|
return () => {
|
|
59
58
|
listeners.delete(listener);
|
|
60
|
-
if (listeners.size === 0)
|
|
59
|
+
if (listeners.size === 0)
|
|
60
|
+
uninstall();
|
|
61
61
|
};
|
|
62
|
-
};
|
|
62
|
+
};
|
|
63
|
+
export {
|
|
64
|
+
subscribeHistoryLocation
|
|
65
|
+
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AddTabParams, TabItem, MenusType } from '../../../propTypes';
|
|
1
|
+
import { AddTabParams, TabItem, MenusType, TabsUrlSyncConfig } from '../../../propTypes';
|
|
2
2
|
/**
|
|
3
3
|
* 获取菜单实际用于路由/签页的路径
|
|
4
4
|
* 约定优先使用 redirectUrl,其次回退 url
|
|
@@ -17,6 +17,7 @@ export declare const getCurrentTabUrl: () => string;
|
|
|
17
17
|
export declare const getTabUrlPathname: (value?: string) => string | undefined;
|
|
18
18
|
export interface FindExistingTabOptions {
|
|
19
19
|
urlSync?: boolean;
|
|
20
|
+
identity?: TabsUrlSyncConfig['identity'];
|
|
20
21
|
}
|
|
21
22
|
export declare const findExistingTab: (tabsList: TabItem[], menuItem: MenusType, options?: FindExistingTabOptions) => TabItem | undefined;
|
|
22
23
|
/**
|
|
@@ -1,67 +1,74 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
* 约定优先使用 redirectUrl,其次回退 url
|
|
4
|
-
*/
|
|
5
|
-
export const getMenuRoute = menuItem => {
|
|
6
|
-
return menuItem.redirectUrl || menuItem.url || '';
|
|
1
|
+
const getMenuRoute = (menuItem) => {
|
|
2
|
+
return menuItem.redirectUrl || menuItem.url || "";
|
|
7
3
|
};
|
|
8
|
-
|
|
9
|
-
const resolveHttpUrl = value => {
|
|
10
|
-
if (!value || typeof window ===
|
|
4
|
+
const hasRelationKey = (relationKey) => relationKey !== void 0 && relationKey !== null && relationKey !== "";
|
|
5
|
+
const resolveHttpUrl = (value) => {
|
|
6
|
+
if (!value || typeof window === "undefined")
|
|
7
|
+
return void 0;
|
|
11
8
|
try {
|
|
12
9
|
const resolved = new URL(value, window.location.origin);
|
|
13
|
-
return resolved.protocol ===
|
|
10
|
+
return resolved.protocol === "http:" || resolved.protocol === "https:" ? resolved : void 0;
|
|
14
11
|
} catch (_error) {
|
|
15
|
-
return
|
|
12
|
+
return void 0;
|
|
16
13
|
}
|
|
17
14
|
};
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
export const normalizeTabUrl = value => {
|
|
24
|
-
if (!value) return undefined;
|
|
25
|
-
if (typeof window === 'undefined') {
|
|
26
|
-
return value.startsWith('/') && !value.startsWith('//') ? value : undefined;
|
|
15
|
+
const normalizeTabUrl = (value) => {
|
|
16
|
+
if (!value)
|
|
17
|
+
return void 0;
|
|
18
|
+
if (typeof window === "undefined") {
|
|
19
|
+
return value.startsWith("/") && !value.startsWith("//") ? value : void 0;
|
|
27
20
|
}
|
|
28
21
|
const resolved = resolveHttpUrl(value);
|
|
29
|
-
if (!resolved || resolved.origin !== window.location.origin)
|
|
22
|
+
if (!resolved || resolved.origin !== window.location.origin)
|
|
23
|
+
return void 0;
|
|
30
24
|
return `${resolved.pathname}${resolved.search}${resolved.hash}`;
|
|
31
25
|
};
|
|
32
|
-
|
|
33
|
-
/** 仅允许将跨域 HTTP(S) URL 交给浏览器外部打开。 */
|
|
34
|
-
export const isSafeExternalUrl = value => {
|
|
26
|
+
const isSafeExternalUrl = (value) => {
|
|
35
27
|
const resolved = resolveHttpUrl(value);
|
|
36
28
|
return !!resolved && resolved.origin !== window.location.origin;
|
|
37
29
|
};
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
30
|
+
const isSafeHttpUrl = (value) => !!resolveHttpUrl(value);
|
|
31
|
+
const getCurrentTabUrl = () => `${window.location.pathname}${window.location.search}${window.location.hash}`;
|
|
32
|
+
const getTabUrlPathname = (value) => {
|
|
41
33
|
const normalized = normalizeTabUrl(value);
|
|
42
|
-
if (!normalized || typeof window ===
|
|
34
|
+
if (!normalized || typeof window === "undefined")
|
|
35
|
+
return void 0;
|
|
43
36
|
return new URL(normalized, window.location.origin).pathname;
|
|
44
37
|
};
|
|
45
|
-
|
|
38
|
+
const findExistingTab = (tabsList, menuItem, options = {}) => {
|
|
46
39
|
if (options.urlSync) {
|
|
40
|
+
if (options.identity === "relationKey" && hasRelationKey(menuItem.relationKey)) {
|
|
41
|
+
return tabsList.find(
|
|
42
|
+
(tab) => {
|
|
43
|
+
var _a;
|
|
44
|
+
return tab.relationKey === menuItem.relationKey || ((_a = tab.menuItem) == null ? void 0 : _a.relationKey) === menuItem.relationKey;
|
|
45
|
+
}
|
|
46
|
+
);
|
|
47
|
+
}
|
|
47
48
|
const targetUrl = normalizeTabUrl(getMenuRoute(menuItem));
|
|
48
|
-
if (!targetUrl)
|
|
49
|
-
|
|
49
|
+
if (!targetUrl)
|
|
50
|
+
return void 0;
|
|
51
|
+
return tabsList.find((tab) => normalizeTabUrl(tab.url) === targetUrl);
|
|
50
52
|
}
|
|
51
53
|
if (hasRelationKey(menuItem.relationKey)) {
|
|
52
|
-
return tabsList.find(
|
|
54
|
+
return tabsList.find(
|
|
55
|
+
(tab) => {
|
|
56
|
+
var _a;
|
|
57
|
+
return tab.relationKey === menuItem.relationKey || ((_a = tab.menuItem) == null ? void 0 : _a.relationKey) === menuItem.relationKey;
|
|
58
|
+
}
|
|
59
|
+
);
|
|
53
60
|
}
|
|
54
61
|
const menuRoute = getMenuRoute(menuItem);
|
|
55
|
-
const hasCode = menuItem.code !==
|
|
56
|
-
return tabsList.find(
|
|
62
|
+
const hasCode = menuItem.code !== void 0 && menuItem.code !== null && menuItem.code !== "";
|
|
63
|
+
return tabsList.find(
|
|
64
|
+
(tab) => {
|
|
65
|
+
var _a;
|
|
66
|
+
return hasCode && ((_a = tab.menuItem) == null ? void 0 : _a.code) === menuItem.code || tab.url === menuRoute;
|
|
67
|
+
}
|
|
68
|
+
);
|
|
57
69
|
};
|
|
58
|
-
|
|
59
|
-
/**
|
|
60
|
-
* 根据菜单项生成TabItem
|
|
61
|
-
*/
|
|
62
|
-
export const createTabFromMenu = (menuItem, index = 0) => {
|
|
70
|
+
const createTabFromMenu = (menuItem, index = 0) => {
|
|
63
71
|
const route = getMenuRoute(menuItem);
|
|
64
|
-
// pinned 优先取菜单显式声明,否则由 closable===false 推导(声明式固定标签)
|
|
65
72
|
const pinned = menuItem.pinned ?? menuItem.closable === false;
|
|
66
73
|
const result = {
|
|
67
74
|
id: String(menuItem.id || menuItem.code || menuItem.url || index),
|
|
@@ -78,74 +85,46 @@ export const createTabFromMenu = (menuItem, index = 0) => {
|
|
|
78
85
|
};
|
|
79
86
|
return result;
|
|
80
87
|
};
|
|
81
|
-
|
|
82
|
-
/**
|
|
83
|
-
* 生成唯一的tab ID
|
|
84
|
-
*/
|
|
85
|
-
export const generateTabId = (menuItem, existingIds) => {
|
|
88
|
+
const generateTabId = (menuItem, existingIds) => {
|
|
86
89
|
const baseId = String(menuItem.id || menuItem.code || menuItem.url);
|
|
87
90
|
let finalId = baseId;
|
|
88
91
|
let counter = 1;
|
|
89
|
-
|
|
90
|
-
// 如果ID已存在,则添加数字后缀
|
|
91
92
|
while (existingIds.includes(finalId)) {
|
|
92
93
|
finalId = `${baseId}_${counter}`;
|
|
93
94
|
counter += 1;
|
|
94
95
|
}
|
|
95
96
|
return finalId;
|
|
96
97
|
};
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
*/
|
|
101
|
-
export const shouldOpenExternal = (menuItem, target) => {
|
|
102
|
-
const menuTarget = menuItem?.target || target;
|
|
103
|
-
return menuTarget === '_blank' || menuItem.type === 'EXTERNAL';
|
|
98
|
+
const shouldOpenExternal = (menuItem, target) => {
|
|
99
|
+
const menuTarget = (menuItem == null ? void 0 : menuItem.target) || target;
|
|
100
|
+
return menuTarget === "_blank" || menuItem.type === "EXTERNAL";
|
|
104
101
|
};
|
|
105
|
-
|
|
106
|
-
/**
|
|
107
|
-
* 处理外部跳转
|
|
108
|
-
*/
|
|
109
|
-
export const handleExternalOpen = (menuItem, secure = false) => {
|
|
102
|
+
const handleExternalOpen = (menuItem, secure = false) => {
|
|
110
103
|
const url = getMenuRoute(menuItem);
|
|
111
|
-
if (!url)
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
104
|
+
if (!url)
|
|
105
|
+
return;
|
|
106
|
+
const target = menuItem.target || "_blank";
|
|
107
|
+
if (secure && target === "_blank") {
|
|
108
|
+
window.open(url, target, "noopener,noreferrer");
|
|
115
109
|
return;
|
|
116
110
|
}
|
|
117
111
|
window.open(url, target);
|
|
118
112
|
};
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
* 检查是否超出最大标签页限制
|
|
122
|
-
* @param currentTabs 当前标签页列表
|
|
123
|
-
* @param maxTabs 最大标签页数量,如果为 undefined 或 null,表示无限制
|
|
124
|
-
* @returns 如果超出限制返回 true,否则返回 false
|
|
125
|
-
*/
|
|
126
|
-
export const checkTabLimit = (currentTabs, maxTabs) => {
|
|
127
|
-
// 如果 maxTabs 为 undefined 或 null,表示无限制
|
|
128
|
-
if (maxTabs === undefined || maxTabs === null) {
|
|
113
|
+
const checkTabLimit = (currentTabs, maxTabs) => {
|
|
114
|
+
if (maxTabs === void 0 || maxTabs === null) {
|
|
129
115
|
return false;
|
|
130
116
|
}
|
|
131
117
|
return currentTabs.length >= maxTabs;
|
|
132
118
|
};
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
export const getRightTabs = (tabs, currentTabId) => {
|
|
138
|
-
const currentIndex = tabs.findIndex(tab => tab.id === currentTabId);
|
|
139
|
-
if (currentIndex === -1) return [];
|
|
119
|
+
const getRightTabs = (tabs, currentTabId) => {
|
|
120
|
+
const currentIndex = tabs.findIndex((tab) => tab.id === currentTabId);
|
|
121
|
+
if (currentIndex === -1)
|
|
122
|
+
return [];
|
|
140
123
|
return tabs.slice(currentIndex + 1);
|
|
141
124
|
};
|
|
142
|
-
|
|
143
|
-
/**
|
|
144
|
-
* 扁平化菜单数据
|
|
145
|
-
*/
|
|
146
|
-
export const flattenMenuData = (menus = []) => {
|
|
125
|
+
const flattenMenuData = (menus = []) => {
|
|
147
126
|
let flatMenus = [];
|
|
148
|
-
menus.forEach(item => {
|
|
127
|
+
menus.forEach((item) => {
|
|
149
128
|
flatMenus.push(item);
|
|
150
129
|
if (item.children) {
|
|
151
130
|
flatMenus = [...flatMenus, ...flattenMenuData(item.children)];
|
|
@@ -153,21 +132,15 @@ export const flattenMenuData = (menus = []) => {
|
|
|
153
132
|
});
|
|
154
133
|
return flatMenus;
|
|
155
134
|
};
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
export const resolveTabMenuItem = (params, menus = []) => {
|
|
161
|
-
const matchedMenu = flattenMenuData(menus).find(item => item.code === params.code);
|
|
162
|
-
const menuCodeSource = params.menuCodeSource?.trim() || matchedMenu?.menuCodeSource?.trim() || undefined;
|
|
135
|
+
const resolveTabMenuItem = (params, menus = []) => {
|
|
136
|
+
var _a, _b;
|
|
137
|
+
const matchedMenu = flattenMenuData(menus).find((item) => item.code === params.code);
|
|
138
|
+
const menuCodeSource = ((_a = params.menuCodeSource) == null ? void 0 : _a.trim()) || ((_b = matchedMenu == null ? void 0 : matchedMenu.menuCodeSource) == null ? void 0 : _b.trim()) || void 0;
|
|
163
139
|
if (matchedMenu) {
|
|
164
140
|
return {
|
|
165
141
|
...matchedMenu,
|
|
166
142
|
name: params.name || matchedMenu.name,
|
|
167
|
-
...
|
|
168
|
-
url: params.url,
|
|
169
|
-
redirectUrl: undefined
|
|
170
|
-
}),
|
|
143
|
+
...params.url !== void 0 && { url: params.url, redirectUrl: void 0 },
|
|
171
144
|
extra: params.extra ?? matchedMenu.extra,
|
|
172
145
|
relationKey: params.relationKey ?? matchedMenu.relationKey,
|
|
173
146
|
menuCodeSource
|
|
@@ -183,118 +156,96 @@ export const resolveTabMenuItem = (params, menus = []) => {
|
|
|
183
156
|
menuCodeSource
|
|
184
157
|
};
|
|
185
158
|
};
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
* 判断菜单项是否为最后一级(叶子节点)
|
|
189
|
-
* 只有当菜单项没有子菜单或子菜单为空时,才认为是叶子节点
|
|
190
|
-
*/
|
|
191
|
-
export const isLeafMenuItem = menuItem => {
|
|
192
|
-
const {
|
|
193
|
-
children
|
|
194
|
-
} = menuItem || {};
|
|
195
|
-
// 如果 children 不存在、为 null、为 undefined,或者为空数组,则认为是叶子节点
|
|
159
|
+
const isLeafMenuItem = (menuItem) => {
|
|
160
|
+
const { children } = menuItem || {};
|
|
196
161
|
return !children || Array.isArray(children) && children.length === 0;
|
|
197
162
|
};
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
export const canOpenAsTab = menuItem => {
|
|
204
|
-
if (!menuItem) return false;
|
|
205
|
-
if (!(menuItem.url || menuItem.redirectUrl)) return false;
|
|
163
|
+
const canOpenAsTab = (menuItem) => {
|
|
164
|
+
if (!menuItem)
|
|
165
|
+
return false;
|
|
166
|
+
if (!(menuItem.url || menuItem.redirectUrl))
|
|
167
|
+
return false;
|
|
206
168
|
return isLeafMenuItem(menuItem);
|
|
207
169
|
};
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
* pinned 为本质状态;未显式设置 pinned 的旧缓存标签,用 closable===false 推导。
|
|
212
|
-
*/
|
|
213
|
-
export const derivePinned = tab => tab.pinned ?? tab.closable === false;
|
|
214
|
-
|
|
215
|
-
/**
|
|
216
|
-
* 分区边界:第一个「非固定标签」的下标,等于固定标签的数量。
|
|
217
|
-
* 约定固定区始终排在普通区左侧,故边界即两区分界点。
|
|
218
|
-
*/
|
|
219
|
-
export const getPinnedBoundary = tabs => {
|
|
220
|
-
const index = tabs.findIndex(tab => !derivePinned(tab));
|
|
170
|
+
const derivePinned = (tab) => tab.pinned ?? tab.closable === false;
|
|
171
|
+
const getPinnedBoundary = (tabs) => {
|
|
172
|
+
const index = tabs.findIndex((tab) => !derivePinned(tab));
|
|
221
173
|
return index === -1 ? tabs.length : index;
|
|
222
174
|
};
|
|
223
|
-
|
|
224
|
-
/**
|
|
225
|
-
* 不依赖外部库的数组移动(immutable)。
|
|
226
|
-
* from/to 越界时返回原数组的浅拷贝。
|
|
227
|
-
*/
|
|
228
175
|
const moveItem = (list, from, to) => {
|
|
229
176
|
const result = [...list];
|
|
230
|
-
if (from < 0 || from >= result.length || to < 0 || to >= result.length)
|
|
177
|
+
if (from < 0 || from >= result.length || to < 0 || to >= result.length)
|
|
178
|
+
return result;
|
|
231
179
|
const [removed] = result.splice(from, 1);
|
|
232
180
|
result.splice(to, 0, removed);
|
|
233
181
|
return result;
|
|
234
182
|
};
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
const index = tabs.findIndex(tab => tab.id === tabId);
|
|
243
|
-
if (index === -1) return tabs;
|
|
244
|
-
if (derivePinned(tabs[index])) return tabs;
|
|
245
|
-
const pinnedTab = {
|
|
246
|
-
...tabs[index],
|
|
247
|
-
pinned: true,
|
|
248
|
-
closable: false
|
|
249
|
-
};
|
|
250
|
-
// 移除目标后计算固定区末尾位置(= 剩余标签中的固定数量)
|
|
183
|
+
const pinTab = (tabs, tabId) => {
|
|
184
|
+
const index = tabs.findIndex((tab) => tab.id === tabId);
|
|
185
|
+
if (index === -1)
|
|
186
|
+
return tabs;
|
|
187
|
+
if (derivePinned(tabs[index]))
|
|
188
|
+
return tabs;
|
|
189
|
+
const pinnedTab = { ...tabs[index], pinned: true, closable: false };
|
|
251
190
|
const rest = tabs.filter((_, i) => i !== index);
|
|
252
191
|
const insertAt = getPinnedBoundary(rest);
|
|
253
192
|
return [...rest.slice(0, insertAt), pinnedTab, ...rest.slice(insertAt)];
|
|
254
193
|
};
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
export const unpinTab = (tabs, tabId) => {
|
|
263
|
-
const index = tabs.findIndex(tab => tab.id === tabId);
|
|
264
|
-
if (index === -1) return tabs;
|
|
265
|
-
if (!derivePinned(tabs[index])) return tabs;
|
|
266
|
-
const normalTab = {
|
|
267
|
-
...tabs[index],
|
|
268
|
-
pinned: false,
|
|
269
|
-
closable: true
|
|
270
|
-
};
|
|
194
|
+
const unpinTab = (tabs, tabId) => {
|
|
195
|
+
const index = tabs.findIndex((tab) => tab.id === tabId);
|
|
196
|
+
if (index === -1)
|
|
197
|
+
return tabs;
|
|
198
|
+
if (!derivePinned(tabs[index]))
|
|
199
|
+
return tabs;
|
|
200
|
+
const normalTab = { ...tabs[index], pinned: false, closable: true };
|
|
271
201
|
const rest = tabs.filter((_, i) => i !== index);
|
|
272
202
|
const insertAt = getPinnedBoundary(rest);
|
|
273
203
|
return [...rest.slice(0, insertAt), normalTab, ...rest.slice(insertAt)];
|
|
274
204
|
};
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
export const reorderWithPinConstraint = (tabs, activeId, overId) => {
|
|
283
|
-
if (activeId === overId) return tabs;
|
|
284
|
-
const activeIndex = tabs.findIndex(tab => tab.id === activeId);
|
|
285
|
-
const overIndex = tabs.findIndex(tab => tab.id === overId);
|
|
286
|
-
if (activeIndex === -1 || overIndex === -1) return tabs;
|
|
205
|
+
const reorderWithPinConstraint = (tabs, activeId, overId) => {
|
|
206
|
+
if (activeId === overId)
|
|
207
|
+
return tabs;
|
|
208
|
+
const activeIndex = tabs.findIndex((tab) => tab.id === activeId);
|
|
209
|
+
const overIndex = tabs.findIndex((tab) => tab.id === overId);
|
|
210
|
+
if (activeIndex === -1 || overIndex === -1)
|
|
211
|
+
return tabs;
|
|
287
212
|
const boundary = getPinnedBoundary(tabs);
|
|
288
213
|
const activePinned = derivePinned(tabs[activeIndex]);
|
|
289
214
|
let targetIndex = overIndex;
|
|
290
215
|
if (activePinned) {
|
|
291
|
-
// 固定标签只能落在固定区内:[0, boundary-1]
|
|
292
216
|
const maxIndex = boundary - 1;
|
|
293
|
-
if (targetIndex > maxIndex)
|
|
217
|
+
if (targetIndex > maxIndex)
|
|
218
|
+
targetIndex = maxIndex;
|
|
294
219
|
} else {
|
|
295
|
-
|
|
296
|
-
|
|
220
|
+
if (targetIndex < boundary)
|
|
221
|
+
targetIndex = boundary;
|
|
297
222
|
}
|
|
298
|
-
if (targetIndex === activeIndex)
|
|
223
|
+
if (targetIndex === activeIndex)
|
|
224
|
+
return tabs;
|
|
299
225
|
return moveItem(tabs, activeIndex, targetIndex);
|
|
300
|
-
};
|
|
226
|
+
};
|
|
227
|
+
export {
|
|
228
|
+
canOpenAsTab,
|
|
229
|
+
checkTabLimit,
|
|
230
|
+
createTabFromMenu,
|
|
231
|
+
derivePinned,
|
|
232
|
+
findExistingTab,
|
|
233
|
+
flattenMenuData,
|
|
234
|
+
generateTabId,
|
|
235
|
+
getCurrentTabUrl,
|
|
236
|
+
getMenuRoute,
|
|
237
|
+
getPinnedBoundary,
|
|
238
|
+
getRightTabs,
|
|
239
|
+
getTabUrlPathname,
|
|
240
|
+
handleExternalOpen,
|
|
241
|
+
hasRelationKey,
|
|
242
|
+
isLeafMenuItem,
|
|
243
|
+
isSafeExternalUrl,
|
|
244
|
+
isSafeHttpUrl,
|
|
245
|
+
normalizeTabUrl,
|
|
246
|
+
pinTab,
|
|
247
|
+
reorderWithPinConstraint,
|
|
248
|
+
resolveTabMenuItem,
|
|
249
|
+
shouldOpenExternal,
|
|
250
|
+
unpinTab
|
|
251
|
+
};
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import { default as default2 } from "./ProCollapse";
|
|
2
|
+
import { default as default3 } from "./ProFooter";
|
|
3
|
+
import { default as default4 } from "./ProHeader";
|
|
4
|
+
export {
|
|
5
|
+
default2 as ProCollapse,
|
|
6
|
+
default3 as ProFooter,
|
|
7
|
+
default4 as ProHeader
|
|
8
|
+
};
|