@zat-design/sisyphus-react 4.0.0-beta.9 → 4.0.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/README.md +1 -1
- package/dist/index.esm.css +1 -1
- package/dist/less.esm.css +1 -1
- package/es/ProAction/index.js +14 -4
- package/es/ProConfigProvider/index.js +11 -2
- package/es/ProDownload/index.js +16 -5
- package/es/ProDownload/utils.js +8 -3
- package/es/ProDrawerForm/components/ProDrawer/index.js +14 -4
- package/es/ProDrawerForm/components/ProModal/index.js +14 -4
- package/es/ProDrawerForm/index.js +13 -3
- package/es/ProEditLabel/components/RenderProForm.js +5 -1
- package/es/ProEditLabel/index.js +16 -5
- package/es/ProEditTable/components/ActionButton/index.js +5 -1
- package/es/ProEditTable/components/RcTable/BaseTable.js +13 -3
- package/es/ProEditTable/components/RcTable/DraggableTable.js +7 -2
- package/es/ProEditTable/components/RenderField/ListChangedWrapper.js +16 -7
- package/es/ProEditTable/components/RenderField/index.js +54 -29
- package/es/ProEditTable/components/RenderToolbar/index.js +10 -4
- package/es/ProEditTable/index.js +16 -10
- package/es/ProEditTable/propsType.d.ts +12 -6
- package/es/ProEditTable/style/index.less +22 -1
- package/es/ProEditTable/utils/config.js +8 -3
- package/es/ProEditTable/utils/index.js +14 -10
- package/es/ProEditTable/utils/tools.js +22 -10
- package/es/ProEditTable/utils/useEditTableError.js +6 -1
- package/es/ProEditTable/utils/useShouldUpdateForTable.js +16 -7
- package/es/ProEnum/components/Group.js +6 -1
- package/es/ProEnum/components/Tag.js +6 -1
- package/es/ProEnum/hooks/useEnum.d.ts +8 -0
- package/es/ProEnum/hooks/useEnum.js +76 -4
- package/es/ProEnum/hooks/useEnumRequest.js +8 -3
- package/es/ProEnum/hooks/useFrequentEnumRequest.js +8 -3
- package/es/ProEnum/index.js +25 -15
- package/es/ProEnum/utils/eventCenter.js +3 -1
- package/es/ProEnum/utils/frequentEnum.js +5 -1
- package/es/ProEnum/utils/index.js +2 -1
- package/es/ProForm/components/FormFooter/index.js +5 -1
- package/es/ProForm/components/base/Checkbox/index.js +7 -2
- package/es/ProForm/components/base/DatePicker/index.js +7 -2
- package/es/ProForm/components/base/DatePicker/useDateLimit.js +6 -1
- package/es/ProForm/components/base/Input/index.js +7 -2
- package/es/ProForm/components/base/InputNumber/index.js +13 -3
- package/es/ProForm/components/base/Radio/index.js +7 -2
- package/es/ProForm/components/base/RangePicker/index.d.ts +7 -1
- package/es/ProForm/components/base/RangePicker/index.js +50 -4
- package/es/ProForm/components/base/RangePicker/useDateRange.js +6 -1
- package/es/ProForm/components/base/Select/index.js +7 -2
- package/es/ProForm/components/base/Switch/index.js +7 -2
- package/es/ProForm/components/base/SwitchCheckbox/index.js +7 -2
- package/es/ProForm/components/base/TextArea/index.js +7 -2
- package/es/ProForm/components/base/TimePicker/index.js +7 -2
- package/es/ProForm/components/combination/Container/index.js +5 -1
- package/es/ProForm/components/combination/Container/style/index.less +5 -0
- package/es/ProForm/components/combination/FormList/components/ActionButton.js +10 -4
- package/es/ProForm/components/combination/FormList/components/Empty.js +3 -2
- package/es/ProForm/components/combination/FormList/components/LineFields.js +5 -1
- package/es/ProForm/components/combination/FormList/components/ToolbarButton.js +10 -4
- package/es/ProForm/components/combination/FormList/index.js +41 -4
- package/es/ProForm/components/combination/FormList/style/index.less +1 -1
- package/es/ProForm/components/combination/FormList/utils.d.ts +6 -0
- package/es/ProForm/components/combination/FormList/utils.js +17 -0
- package/es/ProForm/components/combination/Group/component/ComRender.d.ts +3 -0
- package/es/ProForm/components/combination/Group/component/ComRender.js +70 -3
- package/es/ProForm/components/combination/Group/component/FlexibleGroup.d.ts +10 -0
- package/es/ProForm/components/combination/Group/component/FlexibleGroup.js +351 -0
- package/es/ProForm/components/combination/Group/hooks/index.d.ts +16 -1
- package/es/ProForm/components/combination/Group/hooks/index.js +107 -4
- package/es/ProForm/components/combination/Group/index.d.ts +3 -4
- package/es/ProForm/components/combination/Group/index.js +108 -24
- package/es/ProForm/components/combination/Group/propsType.d.ts +44 -1
- package/es/ProForm/components/combination/Group/style/index.less +425 -3
- package/es/ProForm/components/combination/Group/utils/index.d.ts +154 -0
- package/es/ProForm/components/combination/Group/utils/index.js +428 -0
- package/es/ProForm/components/combination/ProCascader/index.js +13 -3
- package/es/ProForm/components/combination/ProCascader/utils/index.js +7 -2
- package/es/ProForm/components/combination/ProModalSelect/hooks/useRequestList.js +14 -4
- package/es/ProForm/components/combination/ProModalSelect/index.js +16 -5
- package/es/ProForm/components/combination/ProNumberRange/index.js +24 -12
- package/es/ProForm/components/combination/ProNumberRange/propsType.d.ts +4 -0
- package/es/ProForm/components/combination/ProNumberRange/style/index.less +14 -7
- package/es/ProForm/components/combination/ProRangeLimit/index.js +13 -3
- package/es/ProForm/components/combination/ProTimeLimit/hooks/useControlled.js +6 -1
- package/es/ProForm/components/combination/ProTimeLimit/index.js +13 -3
- package/es/ProForm/components/render/ChangedWrapper.js +7 -2
- package/es/ProForm/components/render/ConfirmWrapper.js +10 -4
- package/es/ProForm/components/render/CustomComponentViewWrapper.d.ts +30 -0
- package/es/ProForm/components/render/CustomComponentViewWrapper.js +120 -0
- package/es/ProForm/components/render/Render.js +71 -16
- package/es/ProForm/components/render/RenderFields.js +7 -2
- package/es/ProForm/index.js +17 -4
- package/es/ProForm/propsType.d.ts +7 -0
- package/es/ProForm/style/index.less +11 -2
- package/es/ProForm/utils/index.js +7 -2
- package/es/ProForm/utils/rulesCreator.js +5 -1
- package/es/ProForm/utils/transformValue.js +5 -1
- package/es/ProForm/utils/useForm.js +15 -5
- package/es/ProForm/utils/useShouldUpdate.js +93 -35
- package/es/ProForm/utils/useWatch.js +6 -1
- package/es/ProForm/utils/valueType.js +11 -2
- package/es/ProIcon/index.js +13 -3
- package/es/ProIcon/utils/index.js +5 -1
- package/es/ProLayout/components/Layout/Menu/FoldMenu/index.js +28 -35
- package/es/ProLayout/components/Layout/Menu/FoldMenu/style/index.less +6 -2
- package/es/ProLayout/components/Layout/Menu/OpenMenu/index.js +54 -35
- package/es/ProLayout/components/Layout/Menu/OpenMenu/style/index.less +3 -12
- package/es/ProLayout/components/Layout/Notice/style/index.less +4 -0
- package/es/ProLayout/components/ProCollapse/index.js +5 -1
- package/es/ProLayout/components/ProCollapse/style/index.less +9 -9
- package/es/ProLayout/components/ProFooter/index.js +6 -2
- package/es/ProLayout/components/ProHeader/index.js +14 -4
- package/es/ProLayout/components/TabsManager/components/TabContextMenu.d.ts +7 -0
- package/es/ProLayout/components/TabsManager/components/TabContextMenu.js +100 -0
- package/es/ProLayout/components/TabsManager/components/TabItem.d.ts +26 -0
- package/es/ProLayout/components/TabsManager/components/TabItem.js +61 -0
- package/es/ProLayout/components/TabsManager/components/TabsContext.d.ts +6 -0
- package/es/ProLayout/components/TabsManager/components/TabsContext.js +5 -0
- package/es/ProLayout/components/TabsManager/hooks/useActiveTab.d.ts +6 -0
- package/es/ProLayout/components/TabsManager/hooks/useActiveTab.js +14 -0
- package/es/ProLayout/components/TabsManager/hooks/useProLayoutTabs.d.ts +18 -0
- package/es/ProLayout/components/TabsManager/hooks/useProLayoutTabs.js +26 -0
- package/es/ProLayout/components/TabsManager/hooks/useTabsCache.d.ts +31 -0
- package/es/ProLayout/components/TabsManager/hooks/useTabsCache.js +96 -0
- package/es/ProLayout/components/TabsManager/hooks/useTabsState.d.ts +5 -0
- package/es/ProLayout/components/TabsManager/hooks/useTabsState.js +364 -0
- package/es/ProLayout/components/TabsManager/index.d.ts +8 -0
- package/es/ProLayout/components/TabsManager/index.js +180 -0
- package/es/ProLayout/components/TabsManager/propTypes.d.ts +74 -0
- package/es/ProLayout/components/TabsManager/propTypes.js +16 -0
- package/es/ProLayout/components/TabsManager/style/index.less +179 -0
- package/es/ProLayout/components/TabsManager/utils/index.d.ts +38 -0
- package/es/ProLayout/components/TabsManager/utils/index.js +106 -0
- package/es/ProLayout/index.d.ts +10 -4
- package/es/ProLayout/index.js +100 -16
- package/es/ProLayout/propTypes.d.ts +139 -1
- package/es/ProLayout/propTypes.js +37 -1
- package/es/ProLayout/utils/index.js +16 -7
- package/es/ProSelect/components/AdaptiveTooltip.js +6 -1
- package/es/ProSelect/index.js +13 -3
- package/es/ProSelect/utils/index.js +3 -1
- package/es/ProStep/components/Item/index.js +8 -2
- package/es/ProStep/components/Listener/index.js +10 -4
- package/es/ProStep/components/Step/index.js +11 -2
- package/es/ProStep/index.js +16 -5
- package/es/ProStep/utils/index.js +5 -1
- package/es/ProStepTab/index.js +19 -8
- package/es/ProTable/components/FormatColumn/index.js +7 -2
- package/es/ProTable/components/RcTable/components/BaseTable/index.js +7 -2
- package/es/ProTable/components/RcTable/components/DraggableTable/components/DndWrapper/index.js +10 -4
- package/es/ProTable/components/RcTable/components/DraggableTable/components/DndWrapper/utils/index.js +5 -1
- package/es/ProTable/components/RcTable/components/DraggableTable/index.js +7 -2
- package/es/ProTable/components/RenderColumn/index.js +11 -2
- package/es/ProTable/components/RenderTabs/index.js +11 -2
- package/es/ProTable/components/TableResizable/index.js +13 -3
- package/es/ProTable/components/TooltipTitle/index.js +3 -5
- package/es/ProTable/hooks/useAntdTable.js +17 -6
- package/es/ProTable/index.js +16 -5
- package/es/ProTable/style/index.less +3 -0
- package/es/ProTable/utils/index.js +6 -1
- package/es/ProTabs/index.js +13 -3
- package/es/ProThemeTools/component/ProTools/index.js +11 -2
- package/es/ProThemeTools/context/ThemeContext.js +11 -2
- package/es/ProThemeTools/index.js +13 -3
- package/es/ProThemeTools/utils/index.js +5 -1
- package/es/ProTooltip/index.js +13 -3
- package/es/ProTree/components/CloseIcon.js +5 -1
- package/es/ProTree/components/List.js +7 -2
- package/es/ProTree/components/ProTree.js +16 -5
- package/es/ProTree/components/ProTreeSelect/index.js +122 -76
- package/es/ProTree/components/Tree.js +16 -5
- package/es/ProTree/index.js +5 -1
- package/es/ProTree/utils.js +8 -2
- package/es/ProTreeModal/components/Cascader.js +11 -2
- package/es/ProTreeModal/components/CloseIcon.js +5 -1
- package/es/ProTreeModal/components/List.js +6 -1
- package/es/ProTreeModal/components/SortableItem.js +5 -1
- package/es/ProTreeModal/components/Tree.js +13 -3
- package/es/ProTreeModal/components/Trigger.js +11 -2
- package/es/ProTreeModal/index.js +11 -2
- package/es/ProTreeModal/style/index.less +6 -0
- package/es/ProTreeModal/utils.js +8 -2
- package/es/ProUpload/components/ButtonRender.js +8 -3
- package/es/ProUpload/components/DragRender.d.ts +1 -0
- package/es/ProUpload/components/DragRender.js +10 -2
- package/es/ProUpload/components/DraggableUploadListItem.js +5 -1
- package/es/ProUpload/components/Example.js +11 -2
- package/es/ProUpload/components/ImageRender.js +14 -4
- package/es/ProUpload/index.js +17 -5
- package/es/ProUpload/propsType.d.ts +5 -0
- package/es/ProViewer/index.js +14 -4
- package/es/ProWaterMark/index.js +5 -1
- package/es/index.d.ts +1 -2
- package/es/index.js +1 -0
- package/es/locale/en_US.d.ts +9 -0
- package/es/locale/en_US.js +9 -0
- package/es/locale/zh_CN.d.ts +9 -0
- package/es/locale/zh_CN.js +9 -0
- package/es/style/theme/antd.less +11 -35
- package/es/utils/index.js +6 -1
- package/jest.config.js +3 -1
- package/lib/FormsProvider/index.js +2 -1
- package/lib/ProAction/index.js +20 -10
- package/lib/ProConfigProvider/index.js +29 -19
- package/lib/ProDownload/index.js +29 -17
- package/lib/ProDownload/utils.js +14 -12
- package/lib/ProDrawerForm/components/ProDrawer/index.js +27 -16
- package/lib/ProDrawerForm/components/ProModal/index.js +21 -10
- package/lib/ProDrawerForm/components/index.js +2 -2
- package/lib/ProDrawerForm/index.js +20 -9
- package/lib/ProEditLabel/components/RenderProForm.js +9 -6
- package/lib/ProEditLabel/index.js +30 -18
- package/lib/ProEditTable/components/ActionButton/index.js +14 -11
- package/lib/ProEditTable/components/RcTable/BaseTable.js +19 -9
- package/lib/ProEditTable/components/RcTable/DraggableTable.js +19 -13
- package/lib/ProEditTable/components/RcTable/index.js +2 -2
- package/lib/ProEditTable/components/RenderField/ListChangedWrapper.js +21 -11
- package/lib/ProEditTable/components/RenderField/index.js +76 -50
- package/lib/ProEditTable/components/RenderToolbar/index.js +18 -12
- package/lib/ProEditTable/components/index.js +2 -2
- package/lib/ProEditTable/index.js +33 -26
- package/lib/ProEditTable/propsType.d.ts +12 -6
- package/lib/ProEditTable/style/index.less +22 -1
- package/lib/ProEditTable/utils/config.js +20 -15
- package/lib/ProEditTable/utils/index.js +23 -19
- package/lib/ProEditTable/utils/tools.js +30 -21
- package/lib/ProEditTable/utils/useEditTableError.js +7 -3
- package/lib/ProEditTable/utils/useShouldUpdateForTable.js +17 -9
- package/lib/ProEnum/components/Group.js +8 -3
- package/lib/ProEnum/components/Tag.js +8 -3
- package/lib/ProEnum/hooks/useEnum.d.ts +8 -0
- package/lib/ProEnum/hooks/useEnum.js +76 -4
- package/lib/ProEnum/hooks/useEnumRequest.js +23 -18
- package/lib/ProEnum/hooks/useFrequentEnumRequest.js +12 -8
- package/lib/ProEnum/index.js +37 -26
- package/lib/ProEnum/utils/eventCenter.js +4 -3
- package/lib/ProEnum/utils/frequentEnum.js +6 -3
- package/lib/ProEnum/utils/index.js +3 -3
- package/lib/ProForm/components/Container.js +1 -1
- package/lib/ProForm/components/FormFooter/index.js +11 -6
- package/lib/ProForm/components/base/Checkbox/index.js +13 -7
- package/lib/ProForm/components/base/DatePicker/index.js +11 -6
- package/lib/ProForm/components/base/DatePicker/useDateLimit.js +7 -3
- package/lib/ProForm/components/base/Input/index.js +11 -6
- package/lib/ProForm/components/base/InputNumber/index.js +21 -10
- package/lib/ProForm/components/base/Radio/index.js +10 -5
- package/lib/ProForm/components/base/RangePicker/index.d.ts +7 -1
- package/lib/ProForm/components/base/RangePicker/index.js +55 -9
- package/lib/ProForm/components/base/RangePicker/useDateRange.js +7 -3
- package/lib/ProForm/components/base/Select/index.js +10 -5
- package/lib/ProForm/components/base/Switch/index.js +10 -5
- package/lib/ProForm/components/base/SwitchCheckbox/index.js +12 -6
- package/lib/ProForm/components/base/TextArea/index.js +10 -5
- package/lib/ProForm/components/base/TimePicker/index.js +10 -5
- package/lib/ProForm/components/combination/Container/index.js +11 -6
- package/lib/ProForm/components/combination/Container/style/index.less +5 -0
- package/lib/ProForm/components/combination/FormList/components/ActionButton.js +26 -19
- package/lib/ProForm/components/combination/FormList/components/BlockFields.js +3 -2
- package/lib/ProForm/components/combination/FormList/components/BlockTitle.js +1 -1
- package/lib/ProForm/components/combination/FormList/components/Empty.js +6 -5
- package/lib/ProForm/components/combination/FormList/components/LineFields.js +7 -3
- package/lib/ProForm/components/combination/FormList/components/ToolbarButton.js +20 -14
- package/lib/ProForm/components/combination/FormList/index.js +48 -10
- package/lib/ProForm/components/combination/FormList/style/index.less +1 -1
- package/lib/ProForm/components/combination/FormList/utils.d.ts +6 -0
- package/lib/ProForm/components/combination/FormList/utils.js +20 -2
- package/lib/ProForm/components/combination/Group/component/AddonWrapper/index.js +1 -1
- package/lib/ProForm/components/combination/Group/component/ComRender.d.ts +3 -0
- package/lib/ProForm/components/combination/Group/component/ComRender.js +79 -11
- package/lib/ProForm/components/combination/Group/component/FlexibleGroup.d.ts +10 -0
- package/lib/ProForm/components/combination/Group/component/FlexibleGroup.js +360 -0
- package/lib/ProForm/components/combination/Group/hooks/index.d.ts +16 -1
- package/lib/ProForm/components/combination/Group/hooks/index.js +111 -9
- package/lib/ProForm/components/combination/Group/index.d.ts +3 -4
- package/lib/ProForm/components/combination/Group/index.js +111 -27
- package/lib/ProForm/components/combination/Group/propsType.d.ts +44 -1
- package/lib/ProForm/components/combination/Group/style/index.less +425 -3
- package/lib/ProForm/components/combination/Group/utils/index.d.ts +154 -0
- package/lib/ProForm/components/combination/Group/utils/index.js +444 -0
- package/lib/ProForm/components/combination/ProCascader/index.js +20 -10
- package/lib/ProForm/components/combination/ProCascader/utils/index.js +9 -5
- package/lib/ProForm/components/combination/ProModalSelect/hooks/useRequestList.js +25 -15
- package/lib/ProForm/components/combination/ProModalSelect/index.js +53 -41
- package/lib/ProForm/components/combination/ProNumberRange/index.js +28 -16
- package/lib/ProForm/components/combination/ProNumberRange/propsType.d.ts +4 -0
- package/lib/ProForm/components/combination/ProNumberRange/style/index.less +14 -7
- package/lib/ProForm/components/combination/ProRangeLimit/index.js +29 -18
- package/lib/ProForm/components/combination/ProTimeLimit/hooks/useControlled.js +8 -3
- package/lib/ProForm/components/combination/ProTimeLimit/index.js +26 -15
- package/lib/ProForm/components/index.js +2 -2
- package/lib/ProForm/components/render/ChangedWrapper.js +16 -10
- package/lib/ProForm/components/render/ConfirmWrapper.js +19 -13
- package/lib/ProForm/components/render/CustomComponentViewWrapper.d.ts +30 -0
- package/lib/ProForm/components/render/CustomComponentViewWrapper.js +127 -0
- package/lib/ProForm/components/render/Render.js +93 -37
- package/lib/ProForm/components/render/RenderFields.js +15 -9
- package/lib/ProForm/index.js +27 -13
- package/lib/ProForm/propsType.d.ts +7 -0
- package/lib/ProForm/style/index.less +11 -2
- package/lib/ProForm/utils/index.js +12 -8
- package/lib/ProForm/utils/rulesCreator.js +8 -4
- package/lib/ProForm/utils/transformValue.js +6 -3
- package/lib/ProForm/utils/useFieldProps.js +2 -1
- package/lib/ProForm/utils/useForm.js +21 -12
- package/lib/ProForm/utils/useRules.js +1 -1
- package/lib/ProForm/utils/useShouldUpdate.js +94 -37
- package/lib/ProForm/utils/useWatch.js +8 -3
- package/lib/ProForm/utils/valueType.js +15 -6
- package/lib/ProIcon/index.js +26 -16
- package/lib/ProIcon/utils/index.js +7 -4
- package/lib/ProLayout/components/Layout/Header/index.js +1 -1
- package/lib/ProLayout/components/Layout/Icon/Icon.js +2 -1
- package/lib/ProLayout/components/Layout/Icon/index.js +1 -1
- package/lib/ProLayout/components/Layout/Menu/FoldMenu/index.js +31 -38
- package/lib/ProLayout/components/Layout/Menu/FoldMenu/style/index.less +6 -2
- package/lib/ProLayout/components/Layout/Menu/OpenMenu/index.js +55 -36
- package/lib/ProLayout/components/Layout/Menu/OpenMenu/style/index.less +3 -12
- package/lib/ProLayout/components/Layout/Menu/SideMenu/index.js +1 -1
- package/lib/ProLayout/components/Layout/Menu/index.js +1 -1
- package/lib/ProLayout/components/Layout/Notice/index.js +1 -1
- package/lib/ProLayout/components/Layout/Notice/style/index.less +4 -0
- package/lib/ProLayout/components/Layout/index.js +2 -2
- package/lib/ProLayout/components/ProCollapse/index.js +10 -6
- package/lib/ProLayout/components/ProCollapse/style/index.less +9 -9
- package/lib/ProLayout/components/ProFooter/index.js +8 -4
- package/lib/ProLayout/components/ProHeader/components/Copy/index.js +1 -1
- package/lib/ProLayout/components/ProHeader/components/ProBackBtn/index.js +1 -1
- package/lib/ProLayout/components/ProHeader/components/index.js +2 -2
- package/lib/ProLayout/components/ProHeader/index.js +22 -12
- package/lib/ProLayout/components/TabsManager/components/TabContextMenu.d.ts +7 -0
- package/lib/ProLayout/components/TabsManager/components/TabContextMenu.js +106 -0
- package/lib/ProLayout/components/TabsManager/components/TabItem.d.ts +26 -0
- package/lib/ProLayout/components/TabsManager/components/TabItem.js +67 -0
- package/lib/ProLayout/components/TabsManager/components/TabsContext.d.ts +6 -0
- package/lib/ProLayout/components/TabsManager/components/TabsContext.js +11 -0
- package/lib/ProLayout/components/TabsManager/hooks/useActiveTab.d.ts +6 -0
- package/lib/ProLayout/components/TabsManager/hooks/useActiveTab.js +20 -0
- package/lib/ProLayout/components/TabsManager/hooks/useProLayoutTabs.d.ts +18 -0
- package/lib/ProLayout/components/TabsManager/hooks/useProLayoutTabs.js +31 -0
- package/lib/ProLayout/components/TabsManager/hooks/useTabsCache.d.ts +31 -0
- package/lib/ProLayout/components/TabsManager/hooks/useTabsCache.js +103 -0
- package/lib/ProLayout/components/TabsManager/hooks/useTabsState.d.ts +5 -0
- package/lib/ProLayout/components/TabsManager/hooks/useTabsState.js +370 -0
- package/lib/ProLayout/components/TabsManager/index.d.ts +8 -0
- package/lib/ProLayout/components/TabsManager/index.js +183 -0
- package/lib/ProLayout/components/TabsManager/propTypes.d.ts +74 -0
- package/lib/ProLayout/components/TabsManager/propTypes.js +22 -0
- package/lib/ProLayout/components/TabsManager/style/index.less +179 -0
- package/lib/ProLayout/components/TabsManager/utils/index.d.ts +38 -0
- package/lib/ProLayout/components/TabsManager/utils/index.js +119 -0
- package/lib/ProLayout/components/index.js +2 -2
- package/lib/ProLayout/index.d.ts +10 -4
- package/lib/ProLayout/index.js +115 -23
- package/lib/ProLayout/propTypes.d.ts +139 -1
- package/lib/ProLayout/propTypes.js +40 -1
- package/lib/ProLayout/utils/index.js +18 -13
- package/lib/ProSelect/components/AdaptiveTooltip.js +7 -3
- package/lib/ProSelect/index.js +23 -12
- package/lib/ProSelect/utils/index.js +8 -8
- package/lib/ProStep/components/Anchor/index.js +1 -1
- package/lib/ProStep/components/Item/index.js +15 -9
- package/lib/ProStep/components/Listener/index.js +15 -9
- package/lib/ProStep/components/Step/index.js +17 -7
- package/lib/ProStep/index.js +30 -19
- package/lib/ProStep/utils/index.js +6 -3
- package/lib/ProStepTab/index.js +33 -22
- package/lib/ProTable/components/FormatColumn/index.js +22 -16
- package/lib/ProTable/components/RcTable/components/BaseTable/index.js +9 -5
- package/lib/ProTable/components/RcTable/components/DraggableTable/components/DndWrapper/index.js +22 -16
- package/lib/ProTable/components/RcTable/components/DraggableTable/components/DndWrapper/utils/index.js +8 -5
- package/lib/ProTable/components/RcTable/components/DraggableTable/index.js +11 -6
- package/lib/ProTable/components/RcTable/index.js +2 -2
- package/lib/ProTable/components/RenderColumn/index.js +17 -8
- package/lib/ProTable/components/RenderTabs/index.js +16 -7
- package/lib/ProTable/components/TableResizable/index.js +19 -9
- package/lib/ProTable/components/TooltipTitle/index.js +3 -6
- package/lib/ProTable/components/index.js +2 -2
- package/lib/ProTable/hooks/useAntdTable.js +42 -31
- package/lib/ProTable/index.js +41 -29
- package/lib/ProTable/style/index.less +3 -0
- package/lib/ProTable/utils/index.js +7 -3
- package/lib/ProTabs/components/index.js +2 -2
- package/lib/ProTabs/index.js +23 -12
- package/lib/ProThemeTools/component/ProTools/index.js +21 -11
- package/lib/ProThemeTools/component/index.js +2 -2
- package/lib/ProThemeTools/context/ThemeContext.js +20 -16
- package/lib/ProThemeTools/index.js +22 -12
- package/lib/ProThemeTools/utils/index.js +6 -3
- package/lib/ProTooltip/index.js +30 -20
- package/lib/ProTree/components/CloseIcon.js +6 -3
- package/lib/ProTree/components/List.js +10 -5
- package/lib/ProTree/components/ProTree.js +23 -12
- package/lib/ProTree/components/ProTreeSelect/index.js +141 -94
- package/lib/ProTree/components/SearchTitle.js +1 -1
- package/lib/ProTree/components/Tree.js +28 -16
- package/lib/ProTree/components/index.js +2 -2
- package/lib/ProTree/index.js +9 -5
- package/lib/ProTree/utils.js +16 -11
- package/lib/ProTreeModal/components/Cascader.js +14 -5
- package/lib/ProTreeModal/components/CloseIcon.js +6 -3
- package/lib/ProTreeModal/components/List.js +11 -7
- package/lib/ProTreeModal/components/SortableItem.js +10 -6
- package/lib/ProTreeModal/components/Tree.js +24 -13
- package/lib/ProTreeModal/components/Trigger.js +19 -9
- package/lib/ProTreeModal/components/index.js +2 -2
- package/lib/ProTreeModal/index.js +16 -6
- package/lib/ProTreeModal/style/index.less +6 -0
- package/lib/ProTreeModal/utils.js +17 -14
- package/lib/ProUpload/components/ButtonRender.js +14 -9
- package/lib/ProUpload/components/DragRender.d.ts +1 -0
- package/lib/ProUpload/components/DragRender.js +13 -5
- package/lib/ProUpload/components/DraggableUploadListItem.js +7 -3
- package/lib/ProUpload/components/Example.js +16 -6
- package/lib/ProUpload/components/FileItem.js +1 -1
- package/lib/ProUpload/components/ImageRender.js +20 -10
- package/lib/ProUpload/index.js +31 -18
- package/lib/ProUpload/propsType.d.ts +5 -0
- package/lib/ProViewer/index.js +22 -14
- package/lib/ProWaterMark/index.js +7 -3
- package/lib/index.d.ts +1 -2
- package/lib/index.js +4 -3
- package/lib/locale/en_US.d.ts +9 -0
- package/lib/locale/en_US.js +9 -0
- package/lib/locale/index.js +1 -1
- package/lib/locale/zh_CN.d.ts +9 -0
- package/lib/locale/zh_CN.js +9 -0
- package/lib/style/theme/antd.less +11 -35
- package/lib/utils/index.js +9 -4
- package/package.json +13 -16
- package/es/ProForm/components/combination/Group/utils.d.ts +0 -54
- package/es/ProForm/components/combination/Group/utils.js +0 -196
- package/es/assets/tip.svg +0 -1
- package/lib/ProForm/components/combination/Group/utils.d.ts +0 -54
- package/lib/ProForm/components/combination/Group/utils.js +0 -210
- package/lib/assets/tip.svg +0 -1
|
@@ -0,0 +1,364 @@
|
|
|
1
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
2
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
3
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
4
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
5
|
+
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
6
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
7
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
8
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
9
|
+
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
10
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : String(i); }
|
|
11
|
+
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
12
|
+
import { useState, useCallback, useEffect, useRef } from 'react';
|
|
13
|
+
import { DEFAULT_TABS_CONFIG } from "../propTypes";
|
|
14
|
+
import { useTabsCache } from "./useTabsCache";
|
|
15
|
+
import { createTabFromMenu, generateTabId, shouldOpenExternal, handleExternalOpen, checkTabLimit, getRightTabs, flattenMenuData, isLeafMenuItem } from "../utils";
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* 标签页状态管理Hook
|
|
19
|
+
*/
|
|
20
|
+
export var useTabsState = options => {
|
|
21
|
+
var _options$initialState = options.initialState,
|
|
22
|
+
initialState = _options$initialState === void 0 ? {} : _options$initialState,
|
|
23
|
+
config = options.config,
|
|
24
|
+
dataSource = options.dataSource;
|
|
25
|
+
|
|
26
|
+
// 合并默认配置
|
|
27
|
+
var finalConfig = _objectSpread(_objectSpread({}, DEFAULT_TABS_CONFIG), config);
|
|
28
|
+
|
|
29
|
+
// 初始化状态
|
|
30
|
+
var _useState = useState(() => _objectSpread({
|
|
31
|
+
tabsList: [],
|
|
32
|
+
activeKey: '',
|
|
33
|
+
activeTabInfo: undefined,
|
|
34
|
+
newTabIndex: 0,
|
|
35
|
+
activeComponent: ''
|
|
36
|
+
}, initialState)),
|
|
37
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
38
|
+
state = _useState2[0],
|
|
39
|
+
setState = _useState2[1];
|
|
40
|
+
|
|
41
|
+
// 缓存管理
|
|
42
|
+
var _useTabsCache = useTabsCache({
|
|
43
|
+
cacheKey: finalConfig.cacheKey,
|
|
44
|
+
storage: finalConfig.storage,
|
|
45
|
+
enabled: true
|
|
46
|
+
}),
|
|
47
|
+
saveToCache = _useTabsCache.saveToCache,
|
|
48
|
+
restoreFromCache = _useTabsCache.restoreFromCache,
|
|
49
|
+
clearCache = _useTabsCache.clearCache;
|
|
50
|
+
|
|
51
|
+
// 初始化标记,确保只在初始化后保存缓存
|
|
52
|
+
var _useState3 = useState(false),
|
|
53
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
54
|
+
isInitialized = _useState4[0],
|
|
55
|
+
setIsInitialized = _useState4[1];
|
|
56
|
+
|
|
57
|
+
// 从缓存恢复状态
|
|
58
|
+
useEffect(() => {
|
|
59
|
+
var cachedState = restoreFromCache();
|
|
60
|
+
if (cachedState && cachedState.tabsList && cachedState.tabsList.length > 0) {
|
|
61
|
+
// 兼容旧缓存:如果缓存中有 activeTab 但没有 activeTabInfo,进行迁移
|
|
62
|
+
var restoredState = _objectSpread({}, cachedState);
|
|
63
|
+
if ('activeTab' in restoredState && !restoredState.activeTabInfo) {
|
|
64
|
+
restoredState.activeTabInfo = restoredState.activeTab;
|
|
65
|
+
delete restoredState.activeTab;
|
|
66
|
+
}
|
|
67
|
+
setState(restoredState);
|
|
68
|
+
}
|
|
69
|
+
setIsInitialized(true);
|
|
70
|
+
}, [restoreFromCache]);
|
|
71
|
+
var lastActiveKeyRef = useRef('');
|
|
72
|
+
var shouldSkipSaveRef = useRef(false);
|
|
73
|
+
|
|
74
|
+
// 保存状态到缓存
|
|
75
|
+
useEffect(() => {
|
|
76
|
+
if (!isInitialized) return;
|
|
77
|
+
|
|
78
|
+
// 如果标记了跳过保存(清空缓存后),则跳过本次保存
|
|
79
|
+
if (shouldSkipSaveRef.current) {
|
|
80
|
+
shouldSkipSaveRef.current = false;
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
// 处理 onTabChange 调用 - 支持空状态和正常切换
|
|
85
|
+
if (finalConfig.onTabChange && lastActiveKeyRef.current !== state.activeKey) {
|
|
86
|
+
lastActiveKeyRef.current = state.activeKey;
|
|
87
|
+
if (state.activeKey) {
|
|
88
|
+
// 正常的标签页切换
|
|
89
|
+
var activeTab = state.tabsList.find(tab => tab.id === state.activeKey);
|
|
90
|
+
if (activeTab) {
|
|
91
|
+
finalConfig.onTabChange(state.activeKey, activeTab, state.tabsList);
|
|
92
|
+
}
|
|
93
|
+
} else {
|
|
94
|
+
// 空状态 - 所有标签页都被关闭
|
|
95
|
+
finalConfig.onTabChange('', undefined, state.tabsList);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
// 如果 tabsList 为空且 activeKey 为空,说明是清空状态,不保存缓存
|
|
100
|
+
if (state.tabsList.length === 0 && !state.activeKey) {
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
// 保存状态到缓存
|
|
105
|
+
saveToCache(state);
|
|
106
|
+
}, [state, saveToCache, finalConfig, isInitialized]);
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* 添加标签页
|
|
110
|
+
*/
|
|
111
|
+
var addTab = useCallback((menuItem, options) => {
|
|
112
|
+
var _ref = options || {},
|
|
113
|
+
_ref$forceNew = _ref.forceNew,
|
|
114
|
+
forceNew = _ref$forceNew === void 0 ? false : _ref$forceNew;
|
|
115
|
+
setState(prevState => {
|
|
116
|
+
// 只有最后一级菜单(叶子节点)才能添加标签页
|
|
117
|
+
if (!isLeafMenuItem(menuItem)) {
|
|
118
|
+
return prevState;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
// 检查是否需要外部跳转
|
|
122
|
+
if (shouldOpenExternal(menuItem)) {
|
|
123
|
+
handleExternalOpen(menuItem);
|
|
124
|
+
return prevState;
|
|
125
|
+
}
|
|
126
|
+
var existingIds = prevState.tabsList.map(tab => tab.id);
|
|
127
|
+
var tabId = generateTabId(menuItem, existingIds);
|
|
128
|
+
|
|
129
|
+
// 如果 forceNew = false(默认),检查是否已存在相同的标签页
|
|
130
|
+
if (!forceNew) {
|
|
131
|
+
var existingTab = prevState.tabsList.find(tab => {
|
|
132
|
+
var _tab$menuItem;
|
|
133
|
+
return ((_tab$menuItem = tab.menuItem) === null || _tab$menuItem === void 0 ? void 0 : _tab$menuItem.code) === menuItem.code || tab.url === menuItem.url;
|
|
134
|
+
});
|
|
135
|
+
if (existingTab) {
|
|
136
|
+
var _existingTab$menuItem;
|
|
137
|
+
// 如果已存在,直接切换到该标签页
|
|
138
|
+
var _newState = _objectSpread(_objectSpread({}, prevState), {}, {
|
|
139
|
+
activeKey: existingTab.id,
|
|
140
|
+
activeTabInfo: existingTab,
|
|
141
|
+
activeComponent: ((_existingTab$menuItem = existingTab.menuItem) === null || _existingTab$menuItem === void 0 ? void 0 : _existingTab$menuItem.code) || existingTab.id
|
|
142
|
+
});
|
|
143
|
+
return _newState;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
// 检查是否超出限制
|
|
148
|
+
if (checkTabLimit(prevState.tabsList, finalConfig.max)) {
|
|
149
|
+
// 达到最大值时,不添加新标签页,直接返回
|
|
150
|
+
return prevState;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
// 创建新标签页
|
|
154
|
+
var newTab = createTabFromMenu(menuItem, prevState.newTabIndex);
|
|
155
|
+
newTab.id = tabId;
|
|
156
|
+
var newState = _objectSpread(_objectSpread({}, prevState), {}, {
|
|
157
|
+
tabsList: [...prevState.tabsList, newTab],
|
|
158
|
+
activeKey: tabId,
|
|
159
|
+
activeTabInfo: newTab,
|
|
160
|
+
newTabIndex: prevState.newTabIndex + 1,
|
|
161
|
+
activeComponent: menuItem.code || tabId
|
|
162
|
+
});
|
|
163
|
+
return newState;
|
|
164
|
+
});
|
|
165
|
+
}, [finalConfig]);
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* 移除标签页
|
|
169
|
+
*/
|
|
170
|
+
var removeTab = useCallback(tabId => {
|
|
171
|
+
setState(prevState => {
|
|
172
|
+
var tabToRemove = prevState.tabsList.find(tab => tab.id === tabId);
|
|
173
|
+
if (!tabToRemove || !tabToRemove.closable) {
|
|
174
|
+
return prevState;
|
|
175
|
+
}
|
|
176
|
+
var newTabs = prevState.tabsList.filter(tab => tab.id !== tabId);
|
|
177
|
+
var newActiveKey = prevState.activeKey;
|
|
178
|
+
var newActiveTabInfo = prevState.activeTabInfo;
|
|
179
|
+
var newActiveComponent = prevState.activeComponent;
|
|
180
|
+
|
|
181
|
+
// 如果移除的是当前活跃标签页,需要选择新的活跃标签页
|
|
182
|
+
if (prevState.activeKey === tabId && newTabs.length > 0) {
|
|
183
|
+
var _newActiveTabInfo$men;
|
|
184
|
+
var currentIndex = prevState.tabsList.findIndex(tab => tab.id === tabId);
|
|
185
|
+
var newActiveIndex = Math.min(currentIndex, newTabs.length - 1);
|
|
186
|
+
newActiveTabInfo = newTabs[newActiveIndex];
|
|
187
|
+
newActiveKey = newActiveTabInfo.id;
|
|
188
|
+
newActiveComponent = ((_newActiveTabInfo$men = newActiveTabInfo.menuItem) === null || _newActiveTabInfo$men === void 0 ? void 0 : _newActiveTabInfo$men.code) || newActiveTabInfo.id;
|
|
189
|
+
} else if (prevState.activeKey === tabId) {
|
|
190
|
+
// 如果删除后没有标签页了
|
|
191
|
+
newActiveKey = '';
|
|
192
|
+
newActiveTabInfo = undefined;
|
|
193
|
+
newActiveComponent = '';
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
// 如果删除后没有标签页了,清空缓存
|
|
197
|
+
if (newTabs.length === 0) {
|
|
198
|
+
// 标记跳过下次保存,避免清空后又被重新保存
|
|
199
|
+
shouldSkipSaveRef.current = true;
|
|
200
|
+
clearCache();
|
|
201
|
+
|
|
202
|
+
// 直接调用 onTabChange,因为 useEffect 会被跳过
|
|
203
|
+
if (finalConfig.onTabChange) {
|
|
204
|
+
setTimeout(() => {
|
|
205
|
+
finalConfig.onTabChange('', undefined, []);
|
|
206
|
+
}, 0);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
return _objectSpread(_objectSpread({}, prevState), {}, {
|
|
210
|
+
tabsList: newTabs,
|
|
211
|
+
activeKey: newActiveKey,
|
|
212
|
+
activeTabInfo: newActiveTabInfo,
|
|
213
|
+
activeComponent: newActiveComponent
|
|
214
|
+
});
|
|
215
|
+
});
|
|
216
|
+
}, [clearCache, finalConfig]);
|
|
217
|
+
|
|
218
|
+
/**
|
|
219
|
+
* 切换标签页
|
|
220
|
+
*/
|
|
221
|
+
var switchTab = useCallback(tabId => {
|
|
222
|
+
setState(prevState => {
|
|
223
|
+
var _targetTab$menuItem;
|
|
224
|
+
var targetTab = prevState.tabsList.find(tab => tab.id === tabId);
|
|
225
|
+
if (!targetTab) return prevState;
|
|
226
|
+
var newState = _objectSpread(_objectSpread({}, prevState), {}, {
|
|
227
|
+
activeKey: tabId,
|
|
228
|
+
activeTabInfo: targetTab,
|
|
229
|
+
activeComponent: ((_targetTab$menuItem = targetTab.menuItem) === null || _targetTab$menuItem === void 0 ? void 0 : _targetTab$menuItem.code) || tabId
|
|
230
|
+
});
|
|
231
|
+
return newState;
|
|
232
|
+
});
|
|
233
|
+
}, []);
|
|
234
|
+
|
|
235
|
+
/**
|
|
236
|
+
* 关闭其他标签页
|
|
237
|
+
*/
|
|
238
|
+
var closeOtherTabs = useCallback(currentTabId => {
|
|
239
|
+
setState(prevState => {
|
|
240
|
+
var _currentTab$menuItem;
|
|
241
|
+
var currentTab = prevState.tabsList.find(tab => tab.id === currentTabId);
|
|
242
|
+
if (!currentTab) return prevState;
|
|
243
|
+
|
|
244
|
+
// 只保留当前标签页和不可关闭的标签页
|
|
245
|
+
var newTabs = prevState.tabsList.filter(tab => tab.id === currentTabId || !tab.closable);
|
|
246
|
+
return _objectSpread(_objectSpread({}, prevState), {}, {
|
|
247
|
+
tabsList: newTabs,
|
|
248
|
+
activeKey: currentTabId,
|
|
249
|
+
activeTabInfo: currentTab,
|
|
250
|
+
activeComponent: ((_currentTab$menuItem = currentTab.menuItem) === null || _currentTab$menuItem === void 0 ? void 0 : _currentTab$menuItem.code) || currentTabId
|
|
251
|
+
});
|
|
252
|
+
});
|
|
253
|
+
}, []);
|
|
254
|
+
|
|
255
|
+
/**
|
|
256
|
+
* 关闭右侧标签页
|
|
257
|
+
*/
|
|
258
|
+
var closeRightTabs = useCallback(currentTabId => {
|
|
259
|
+
setState(prevState => {
|
|
260
|
+
var rightTabs = getRightTabs(prevState.tabsList, currentTabId);
|
|
261
|
+
var tabsToKeep = prevState.tabsList.filter(tab => !rightTabs.includes(tab) || !tab.closable);
|
|
262
|
+
return _objectSpread(_objectSpread({}, prevState), {}, {
|
|
263
|
+
tabsList: tabsToKeep
|
|
264
|
+
});
|
|
265
|
+
});
|
|
266
|
+
}, []);
|
|
267
|
+
|
|
268
|
+
/**
|
|
269
|
+
* 关闭全部标签页
|
|
270
|
+
*/
|
|
271
|
+
var closeAllTabs = useCallback(() => {
|
|
272
|
+
setState(prevState => {
|
|
273
|
+
// 只保留不可关闭的标签页
|
|
274
|
+
var newTabs = prevState.tabsList.filter(tab => !tab.closable);
|
|
275
|
+
var newActiveKey = '';
|
|
276
|
+
var newActiveComponent = '';
|
|
277
|
+
if (newTabs.length > 0) {
|
|
278
|
+
var _firstTab$menuItem;
|
|
279
|
+
var firstTab = newTabs[0];
|
|
280
|
+
newActiveKey = firstTab.id;
|
|
281
|
+
newActiveComponent = ((_firstTab$menuItem = firstTab.menuItem) === null || _firstTab$menuItem === void 0 ? void 0 : _firstTab$menuItem.code) || firstTab.id;
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
// 关闭全部标签页时,清空缓存
|
|
285
|
+
// 标记跳过下次保存,避免清空后又被重新保存
|
|
286
|
+
shouldSkipSaveRef.current = true;
|
|
287
|
+
clearCache();
|
|
288
|
+
|
|
289
|
+
// 如果关闭后没有标签页了,直接调用 onTabChange
|
|
290
|
+
if (newTabs.length === 0 && finalConfig.onTabChange) {
|
|
291
|
+
setTimeout(() => {
|
|
292
|
+
finalConfig.onTabChange('', undefined, []);
|
|
293
|
+
}, 0);
|
|
294
|
+
}
|
|
295
|
+
return _objectSpread(_objectSpread({}, prevState), {}, {
|
|
296
|
+
tabsList: newTabs,
|
|
297
|
+
activeKey: newActiveKey,
|
|
298
|
+
activeTabInfo: undefined,
|
|
299
|
+
activeComponent: newActiveComponent
|
|
300
|
+
});
|
|
301
|
+
});
|
|
302
|
+
}, [clearCache, finalConfig]);
|
|
303
|
+
|
|
304
|
+
/**
|
|
305
|
+
* 重置状态
|
|
306
|
+
*/
|
|
307
|
+
var resetTabs = useCallback(() => {
|
|
308
|
+
setState({
|
|
309
|
+
tabsList: [],
|
|
310
|
+
activeKey: '',
|
|
311
|
+
newTabIndex: 0,
|
|
312
|
+
activeComponent: ''
|
|
313
|
+
});
|
|
314
|
+
}, []);
|
|
315
|
+
|
|
316
|
+
// 监听 URL 变化并同步 Tabs (仅在初始化和 location 变化时)
|
|
317
|
+
// 放在最后以确保可以使用 addTab 和 switchTab
|
|
318
|
+
useEffect(() => {
|
|
319
|
+
// 确保数据源存在
|
|
320
|
+
if (!dataSource || !('menus' in dataSource)) return;
|
|
321
|
+
var currentPath = window.location.pathname;
|
|
322
|
+
|
|
323
|
+
// 如果当前没有 activeKey 或者 activeKey 对应的 URL 与当前 URL 不一致
|
|
324
|
+
var activeTab = state.tabsList.find(tab => tab.id === state.activeKey);
|
|
325
|
+
|
|
326
|
+
// 如果当前已经在正确的 Tab 上,无需处理
|
|
327
|
+
if (activeTab && activeTab.url === currentPath) return;
|
|
328
|
+
|
|
329
|
+
// 在菜单中查找当前 URL 对应的菜单项
|
|
330
|
+
var flatMenus = flattenMenuData(dataSource.menus || []);
|
|
331
|
+
var targetMenu = flatMenus.find(item => item.url === currentPath);
|
|
332
|
+
if (targetMenu) {
|
|
333
|
+
// 只有最后一级菜单(叶子节点)才能添加标签页
|
|
334
|
+
if (!isLeafMenuItem(targetMenu)) {
|
|
335
|
+
return;
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
// 检查是否已在 Tabs 中
|
|
339
|
+
var existingTab = state.tabsList.find(tab => {
|
|
340
|
+
var _tab$menuItem2;
|
|
341
|
+
return ((_tab$menuItem2 = tab.menuItem) === null || _tab$menuItem2 === void 0 ? void 0 : _tab$menuItem2.code) === targetMenu.code || tab.url === targetMenu.url;
|
|
342
|
+
});
|
|
343
|
+
if (existingTab) {
|
|
344
|
+
// 如果已存在,切换到该 Tab
|
|
345
|
+
if (state.activeKey !== existingTab.id) {
|
|
346
|
+
switchTab(existingTab.id);
|
|
347
|
+
}
|
|
348
|
+
} else {
|
|
349
|
+
// 如果不存在,添加新 Tab
|
|
350
|
+
addTab(targetMenu);
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
}, [dataSource, state.tabsList, state.activeKey, addTab, switchTab]);
|
|
354
|
+
return {
|
|
355
|
+
state,
|
|
356
|
+
addTab,
|
|
357
|
+
removeTab,
|
|
358
|
+
switchTab,
|
|
359
|
+
closeOtherTabs,
|
|
360
|
+
closeRightTabs,
|
|
361
|
+
closeAllTabs,
|
|
362
|
+
resetTabs
|
|
363
|
+
};
|
|
364
|
+
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { TabsManagerProps } from './propTypes';
|
|
3
|
+
import './style/index.less';
|
|
4
|
+
/**
|
|
5
|
+
* 标签页管理器主组件
|
|
6
|
+
*/
|
|
7
|
+
declare const TabsManager: import("react").ForwardRefExoticComponent<TabsManagerProps & import("react").RefAttributes<any>>;
|
|
8
|
+
export default TabsManager;
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
2
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
3
|
+
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
4
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : String(i); }
|
|
5
|
+
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
6
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
7
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
8
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
9
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
10
|
+
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
11
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
12
|
+
import { useCallback, useMemo, forwardRef, useImperativeHandle, useState, useEffect } from 'react';
|
|
13
|
+
import { useTabsState } from "./hooks/useTabsState";
|
|
14
|
+
import { TabItemComponent } from "./components/TabItem";
|
|
15
|
+
import { TabsContext } from "./components/TabsContext";
|
|
16
|
+
import "./style/index.less";
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* 标签页管理器主组件
|
|
20
|
+
*/
|
|
21
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
22
|
+
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
23
|
+
var TabsManager = /*#__PURE__*/forwardRef((_ref, ref) => {
|
|
24
|
+
var config = _ref.config,
|
|
25
|
+
children = _ref.children,
|
|
26
|
+
dataSource = _ref.dataSource,
|
|
27
|
+
originalOnMenuClick = _ref.originalOnMenuClick;
|
|
28
|
+
// 使用标签页状态管理Hook
|
|
29
|
+
var _useTabsState = useTabsState({
|
|
30
|
+
config,
|
|
31
|
+
dataSource
|
|
32
|
+
}),
|
|
33
|
+
state = _useTabsState.state,
|
|
34
|
+
_addTab = _useTabsState.addTab,
|
|
35
|
+
removeTab = _useTabsState.removeTab,
|
|
36
|
+
switchTab = _useTabsState.switchTab,
|
|
37
|
+
closeOtherTabs = _useTabsState.closeOtherTabs,
|
|
38
|
+
closeRightTabs = _useTabsState.closeRightTabs,
|
|
39
|
+
closeAllTabs = _useTabsState.closeAllTabs;
|
|
40
|
+
|
|
41
|
+
// 记录已访问过的 Tab ID,用于懒加载
|
|
42
|
+
var _useState = useState(new Set()),
|
|
43
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
44
|
+
visitedTabIds = _useState2[0],
|
|
45
|
+
setVisitedTabIds = _useState2[1];
|
|
46
|
+
|
|
47
|
+
// 监听 activeKey 变化,更新 visitedTabIds
|
|
48
|
+
useEffect(() => {
|
|
49
|
+
if (state.activeKey) {
|
|
50
|
+
setVisitedTabIds(prev => {
|
|
51
|
+
if (prev.has(state.activeKey)) return prev;
|
|
52
|
+
var newSet = new Set(prev);
|
|
53
|
+
newSet.add(state.activeKey);
|
|
54
|
+
return newSet;
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
}, [state.activeKey]);
|
|
58
|
+
|
|
59
|
+
// 处理菜单点击 - 拦截原有的菜单点击逻辑
|
|
60
|
+
var handleMenuClick = useCallback(params => {
|
|
61
|
+
if (params.item) {
|
|
62
|
+
// 添加到标签页
|
|
63
|
+
_addTab(params.item);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// 如果有原始的菜单点击处理函数,也调用它
|
|
67
|
+
originalOnMenuClick === null || originalOnMenuClick === void 0 || originalOnMenuClick(params);
|
|
68
|
+
}, [_addTab, originalOnMenuClick]);
|
|
69
|
+
|
|
70
|
+
// 获取当前激活的标签页
|
|
71
|
+
var activeTabInfo = useMemo(() => {
|
|
72
|
+
return state.tabsList.find(tab => tab.id === state.activeKey);
|
|
73
|
+
}, [state.tabsList, state.activeKey]);
|
|
74
|
+
|
|
75
|
+
// 创建标签页实例 API
|
|
76
|
+
var tabsInstance = useMemo(() => ({
|
|
77
|
+
addTab: (params, options) => {
|
|
78
|
+
var code = params.code,
|
|
79
|
+
name = params.name,
|
|
80
|
+
extra = params.extra;
|
|
81
|
+
var menuItem = {
|
|
82
|
+
id: Date.now(),
|
|
83
|
+
// 生成临时 ID
|
|
84
|
+
code,
|
|
85
|
+
name,
|
|
86
|
+
url: `/${code}`,
|
|
87
|
+
// 生成 URL
|
|
88
|
+
extra
|
|
89
|
+
};
|
|
90
|
+
_addTab(menuItem, options);
|
|
91
|
+
},
|
|
92
|
+
removeTab,
|
|
93
|
+
getTabInfo: () => ({
|
|
94
|
+
tabsList: state.tabsList,
|
|
95
|
+
activeTabInfo: state.tabsList.find(tab => tab.id === state.activeKey),
|
|
96
|
+
activeComponent: state.activeComponent
|
|
97
|
+
})
|
|
98
|
+
}), [_addTab, removeTab, state.tabsList, state.activeKey, state.activeComponent]);
|
|
99
|
+
|
|
100
|
+
// 渲染标签页列表
|
|
101
|
+
var renderTabList = () => {
|
|
102
|
+
if (state.tabsList.length === 0) return null;
|
|
103
|
+
return /*#__PURE__*/_jsx("div", {
|
|
104
|
+
className: "pro-layout-tabs-header",
|
|
105
|
+
children: /*#__PURE__*/_jsx("div", {
|
|
106
|
+
className: "pro-layout-tab-list",
|
|
107
|
+
children: state.tabsList.map(tab => /*#__PURE__*/_jsx(TabItemComponent, {
|
|
108
|
+
tab: tab,
|
|
109
|
+
active: tab.id === state.activeKey,
|
|
110
|
+
onClick: () => switchTab(tab.id),
|
|
111
|
+
onClose: () => removeTab(tab.id),
|
|
112
|
+
onCloseOthers: () => closeOtherTabs(tab.id),
|
|
113
|
+
onCloseRight: () => closeRightTabs(tab.id),
|
|
114
|
+
onCloseAll: closeAllTabs,
|
|
115
|
+
tabsList: state.tabsList,
|
|
116
|
+
menuItems: config === null || config === void 0 ? void 0 : config.menuItems,
|
|
117
|
+
tabMenuClick: config === null || config === void 0 ? void 0 : config.tabMenuClick
|
|
118
|
+
}, tab.id))
|
|
119
|
+
})
|
|
120
|
+
});
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
// 从 config 中获取组件解析函数和空状态组件
|
|
124
|
+
var activeComponent = config === null || config === void 0 ? void 0 : config.activeComponent;
|
|
125
|
+
var emptyComponent = config === null || config === void 0 ? void 0 : config.empty;
|
|
126
|
+
|
|
127
|
+
// 渲染内容区域
|
|
128
|
+
var renderContent = () => {
|
|
129
|
+
return /*#__PURE__*/_jsxs("div", {
|
|
130
|
+
className: "pro-layout-tabs-content",
|
|
131
|
+
children: [state.tabsList.map(tab => {
|
|
132
|
+
var _tab$menuItem;
|
|
133
|
+
var isActive = tab.id === state.activeKey;
|
|
134
|
+
var hasVisited = visitedTabIds.has(tab.id);
|
|
135
|
+
|
|
136
|
+
// 如果既不是当前激活,也没有访问过,则只渲染占位符(懒加载)
|
|
137
|
+
if (!isActive && !hasVisited) {
|
|
138
|
+
return /*#__PURE__*/_jsx("div", {
|
|
139
|
+
className: "tab-pane hidden",
|
|
140
|
+
"data-testid": `tab-pane-${tab.id}`
|
|
141
|
+
}, tab.id);
|
|
142
|
+
}
|
|
143
|
+
var content = children;
|
|
144
|
+
|
|
145
|
+
// 如果提供了组件解析函数,尝试解析组件
|
|
146
|
+
if (activeComponent && (_tab$menuItem = tab.menuItem) !== null && _tab$menuItem !== void 0 && _tab$menuItem.code) {
|
|
147
|
+
var ResolvedComponent = activeComponent(tab.menuItem.code);
|
|
148
|
+
if (ResolvedComponent) {
|
|
149
|
+
// 将 extra 中的所有属性作为 props 传递给组件
|
|
150
|
+
content = /*#__PURE__*/_jsx(ResolvedComponent, _objectSpread({}, tab.menuItem.extra || {}));
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
return /*#__PURE__*/_jsx("div", {
|
|
154
|
+
className: `tab-pane ${isActive ? '' : 'hidden'}`,
|
|
155
|
+
"data-testid": `tab-pane-${tab.id}`,
|
|
156
|
+
children: content
|
|
157
|
+
}, tab.id);
|
|
158
|
+
}), state.tabsList.length === 0 && /*#__PURE__*/_jsx("div", {
|
|
159
|
+
className: "tab-pane",
|
|
160
|
+
"data-testid": "default-content",
|
|
161
|
+
children: emptyComponent || children
|
|
162
|
+
})]
|
|
163
|
+
});
|
|
164
|
+
};
|
|
165
|
+
|
|
166
|
+
// 暴露方法给父组件
|
|
167
|
+
useImperativeHandle(ref, () => ({
|
|
168
|
+
handleMenuClick
|
|
169
|
+
}), [handleMenuClick]);
|
|
170
|
+
return /*#__PURE__*/_jsx(TabsContext.Provider, {
|
|
171
|
+
value: tabsInstance,
|
|
172
|
+
children: /*#__PURE__*/_jsxs("div", {
|
|
173
|
+
className: "pro-layout-tabs",
|
|
174
|
+
"data-testid": "tabs-manager",
|
|
175
|
+
children: [renderTabList(), renderContent()]
|
|
176
|
+
})
|
|
177
|
+
});
|
|
178
|
+
});
|
|
179
|
+
TabsManager.displayName = 'TabsManager';
|
|
180
|
+
export default TabsManager;
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
import type { MenuProps } from 'antd';
|
|
3
|
+
import { TabsState, MenusType, DataSourceType, TabsConfig, AddTabOptions, TabItem } from '../../propTypes';
|
|
4
|
+
export interface TabsManagerProps {
|
|
5
|
+
/** 标签页配置 */
|
|
6
|
+
config: TabsConfig;
|
|
7
|
+
/** 子元素内容 */
|
|
8
|
+
children: ReactNode;
|
|
9
|
+
/** 菜单数据源 */
|
|
10
|
+
dataSource: DataSourceType | Partial<MenusType>;
|
|
11
|
+
/** 原始菜单点击处理 */
|
|
12
|
+
originalOnMenuClick?: (params: {
|
|
13
|
+
item: MenusType | null;
|
|
14
|
+
key: string;
|
|
15
|
+
keyPath: string[];
|
|
16
|
+
}) => void;
|
|
17
|
+
}
|
|
18
|
+
export interface TabContextMenuProps {
|
|
19
|
+
tabId: string;
|
|
20
|
+
children: React.ReactElement;
|
|
21
|
+
closable?: boolean;
|
|
22
|
+
onClose: (tabId: string) => void;
|
|
23
|
+
onCloseOthers: (tabId: string) => void;
|
|
24
|
+
onCloseRight: (tabId: string) => void;
|
|
25
|
+
onCloseAll: () => void;
|
|
26
|
+
/** 自定义菜单项,会与默认菜单项合并 */
|
|
27
|
+
menuItems?: MenuProps['items'];
|
|
28
|
+
/** 自定义菜单项点击回调 */
|
|
29
|
+
tabMenuClick?: (params: {
|
|
30
|
+
key: string;
|
|
31
|
+
tab: TabItem;
|
|
32
|
+
tabs: TabItem[];
|
|
33
|
+
}) => void;
|
|
34
|
+
/** 当前标签页信息 */
|
|
35
|
+
tab?: TabItem;
|
|
36
|
+
/** 所有标签页列表 */
|
|
37
|
+
tabs?: TabItem[];
|
|
38
|
+
}
|
|
39
|
+
export interface UseTabsStateOptions {
|
|
40
|
+
/** 初始状态 */
|
|
41
|
+
initialState?: Partial<TabsState>;
|
|
42
|
+
/** 配置 */
|
|
43
|
+
config: TabsManagerProps['config'];
|
|
44
|
+
/** 数据源 */
|
|
45
|
+
dataSource?: TabsManagerProps['dataSource'];
|
|
46
|
+
}
|
|
47
|
+
export interface UseTabsStateReturn {
|
|
48
|
+
/** 当前状态 */
|
|
49
|
+
state: TabsState;
|
|
50
|
+
/** 添加标签页 */
|
|
51
|
+
addTab: (menuItem: MenusType, options?: AddTabOptions) => void;
|
|
52
|
+
/** 移除标签页 */
|
|
53
|
+
removeTab: (tabId: string) => void;
|
|
54
|
+
/** 切换标签页 */
|
|
55
|
+
switchTab: (tabId: string) => void;
|
|
56
|
+
/** 关闭其他标签页 */
|
|
57
|
+
closeOtherTabs: (currentTabId: string) => void;
|
|
58
|
+
/** 关闭右侧标签页 */
|
|
59
|
+
closeRightTabs: (currentTabId: string) => void;
|
|
60
|
+
/** 关闭全部标签页 */
|
|
61
|
+
closeAllTabs: () => void;
|
|
62
|
+
/** 重置状态 */
|
|
63
|
+
resetTabs: () => void;
|
|
64
|
+
}
|
|
65
|
+
export interface TabsCacheManager {
|
|
66
|
+
save: (state: TabsState) => void;
|
|
67
|
+
restore: () => TabsState | null;
|
|
68
|
+
clear: () => void;
|
|
69
|
+
}
|
|
70
|
+
export declare const DEFAULT_TABS_CONFIG: {
|
|
71
|
+
max: number;
|
|
72
|
+
storage: "localStorage";
|
|
73
|
+
cacheKey: string;
|
|
74
|
+
};
|