@zat-design/sisyphus-react 4.5.9 → 4.5.10-beta.2

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.
Files changed (280) hide show
  1. package/dist/index.esm.css +1 -1
  2. package/dist/less.esm.css +1 -1
  3. package/es/FormsProvider/index.js +14 -21
  4. package/es/ProAction/components/CheckModalContent/index.js +12 -26
  5. package/es/ProAction/index.js +79 -83
  6. package/es/ProAction/propsType.js +0 -1
  7. package/es/ProConfigProvider/index.js +63 -110
  8. package/es/ProConfigProvider/propsType.js +0 -1
  9. package/es/ProDownload/index.d.ts +2 -1
  10. package/es/ProDownload/index.js +74 -69
  11. package/es/ProDownload/propsType.js +0 -1
  12. package/es/ProDownload/utils.d.ts +10 -5
  13. package/es/ProDownload/utils.js +63 -95
  14. package/es/ProDrawerForm/components/ProDrawer/index.js +83 -113
  15. package/es/ProDrawerForm/components/ProModal/index.js +77 -108
  16. package/es/ProDrawerForm/components/index.js +6 -2
  17. package/es/ProDrawerForm/hooks/useConfirmClose.js +20 -39
  18. package/es/ProDrawerForm/index.js +29 -38
  19. package/es/ProDrawerForm/propsType.js +0 -1
  20. package/es/ProDrawerForm/utils/index.js +18 -36
  21. package/es/ProEditLabel/components/RenderProForm.js +45 -49
  22. package/es/ProEditLabel/index.js +126 -163
  23. package/es/ProEditLabel/propsType.js +0 -1
  24. package/es/ProEditLabel/utils/index.js +5 -8
  25. package/es/ProEditTable/components/ActionButton/index.js +111 -119
  26. package/es/ProEditTable/components/RcTable/BaseTable.js +38 -51
  27. package/es/ProEditTable/components/RcTable/DraggableTable.js +97 -129
  28. package/es/ProEditTable/components/RcTable/index.js +6 -4
  29. package/es/ProEditTable/components/RenderField/ListChangedWrapper.js +77 -95
  30. package/es/ProEditTable/components/RenderField/index.js +490 -587
  31. package/es/ProEditTable/components/RenderField/propsType.js +0 -1
  32. package/es/ProEditTable/components/RenderField/tools.js +115 -112
  33. package/es/ProEditTable/components/RenderToolbar/index.js +47 -73
  34. package/es/ProEditTable/components/Summary/index.js +38 -64
  35. package/es/ProEditTable/components/Validator/index.js +46 -46
  36. package/es/ProEditTable/components/index.js +12 -5
  37. package/es/ProEditTable/index.js +456 -378
  38. package/es/ProEditTable/propsType.js +0 -1
  39. package/es/ProEditTable/utils/config.js +60 -122
  40. package/es/ProEditTable/utils/diffOriginal.js +45 -82
  41. package/es/ProEditTable/utils/getDefaultProps.js +19 -24
  42. package/es/ProEditTable/utils/index.js +154 -235
  43. package/es/ProEditTable/utils/tools.js +149 -286
  44. package/es/ProEditTable/utils/transform.js +25 -30
  45. package/es/ProEditTable/utils/useEditTableError.js +30 -43
  46. package/es/ProEditTable/utils/useShouldUpdateForTable.js +42 -72
  47. package/es/ProEditTable/utils/validateAll.js +87 -154
  48. package/es/ProEnum/components/Group.js +38 -30
  49. package/es/ProEnum/components/Tag.js +22 -26
  50. package/es/ProEnum/hooks/useEnum.js +48 -116
  51. package/es/ProEnum/hooks/useEnumRequest.js +182 -212
  52. package/es/ProEnum/hooks/useFrequentEnumRequest.js +40 -48
  53. package/es/ProEnum/index.js +162 -172
  54. package/es/ProEnum/propsType.js +0 -1
  55. package/es/ProEnum/utils/eventCenter.js +10 -12
  56. package/es/ProEnum/utils/frequentEnum.js +35 -92
  57. package/es/ProEnum/utils/getEnum.js +32 -90
  58. package/es/ProEnum/utils/getEnumLabel.js +44 -49
  59. package/es/ProEnum/utils/index.js +93 -207
  60. package/es/ProForm/components/Container.js +13 -28
  61. package/es/ProForm/components/FormFooter/index.js +36 -44
  62. package/es/ProForm/components/FormFooter/propsType.js +0 -1
  63. package/es/ProForm/components/base/Checkbox/index.js +32 -59
  64. package/es/ProForm/components/base/DatePicker/index.js +49 -71
  65. package/es/ProForm/components/base/Input/index.js +63 -97
  66. package/es/ProForm/components/base/Input/propsType.js +0 -1
  67. package/es/ProForm/components/base/InputNumber/index.js +118 -172
  68. package/es/ProForm/components/base/Radio/index.js +39 -52
  69. package/es/ProForm/components/base/RangePicker/index.js +109 -127
  70. package/es/ProForm/components/base/RangePicker/useDateRange.js +20 -17
  71. package/es/ProForm/components/base/Select/index.js +63 -89
  72. package/es/ProForm/components/base/Switch/index.js +27 -35
  73. package/es/ProForm/components/base/SwitchCheckbox/index.js +36 -54
  74. package/es/ProForm/components/base/TextArea/index.js +30 -41
  75. package/es/ProForm/components/base/TimePicker/index.js +27 -37
  76. package/es/ProForm/components/combination/Container/index.js +37 -47
  77. package/es/ProForm/components/combination/Container/propsType.js +0 -1
  78. package/es/ProForm/components/combination/FormList/components/ActionButton.js +165 -237
  79. package/es/ProForm/components/combination/FormList/components/BlockFields.js +98 -102
  80. package/es/ProForm/components/combination/FormList/components/Empty.js +28 -55
  81. package/es/ProForm/components/combination/FormList/components/LineFields.js +57 -54
  82. package/es/ProForm/components/combination/FormList/components/ToolbarButton.js +61 -109
  83. package/es/ProForm/components/combination/FormList/index.js +151 -161
  84. package/es/ProForm/components/combination/FormList/propsType.js +0 -1
  85. package/es/ProForm/components/combination/FormList/style/index.less +6 -0
  86. package/es/ProForm/components/combination/FormList/utils.js +22 -38
  87. package/es/ProForm/components/combination/Group/component/AddonWrapper/index.js +12 -28
  88. package/es/ProForm/components/combination/Group/component/ComRender.js +50 -111
  89. package/es/ProForm/components/combination/Group/component/FlexibleGroup.js +106 -213
  90. package/es/ProForm/components/combination/Group/hooks/index.js +69 -129
  91. package/es/ProForm/components/combination/Group/index.js +87 -126
  92. package/es/ProForm/components/combination/Group/propsType.js +0 -1
  93. package/es/ProForm/components/combination/Group/utils/index.js +124 -239
  94. package/es/ProForm/components/combination/ProCascader/index.js +156 -199
  95. package/es/ProForm/components/combination/ProCascader/propsType.js +0 -1
  96. package/es/ProForm/components/combination/ProCascader/utils/index.js +12 -21
  97. package/es/ProForm/components/combination/ProModalSelect/hooks/useRequestList.js +72 -70
  98. package/es/ProForm/components/combination/ProModalSelect/index.js +309 -347
  99. package/es/ProForm/components/combination/ProModalSelect/propsType.js +0 -1
  100. package/es/ProForm/components/combination/ProModalSelect/utils/index.js +32 -39
  101. package/es/ProForm/components/combination/ProNumberRange/index.js +100 -156
  102. package/es/ProForm/components/combination/ProNumberRange/propsType.js +0 -1
  103. package/es/ProForm/components/combination/ProRangeLimit/index.js +104 -115
  104. package/es/ProForm/components/combination/ProRangeLimit/propsType.js +0 -1
  105. package/es/ProForm/components/combination/ProTimeLimit/hooks/useControlled.js +16 -16
  106. package/es/ProForm/components/combination/ProTimeLimit/index.js +75 -109
  107. package/es/ProForm/components/index.js +56 -34
  108. package/es/ProForm/components/render/ChangedWrapper.js +85 -94
  109. package/es/ProForm/components/render/ConfirmWrapper.js +27 -39
  110. package/es/ProForm/components/render/CustomComponentViewWrapper.js +65 -82
  111. package/es/ProForm/components/render/Render.js +223 -329
  112. package/es/ProForm/components/render/RenderFields.js +76 -113
  113. package/es/ProForm/components/render/propsType.js +0 -1
  114. package/es/ProForm/hooks/useControlled.js +8 -10
  115. package/es/ProForm/hooks/useDeepCompareMemo.js +11 -11
  116. package/es/ProForm/hooks/useFieldProps.js +8 -4
  117. package/es/ProForm/hooks/useForm.js +50 -110
  118. package/es/ProForm/hooks/useRules.js +17 -33
  119. package/es/ProForm/hooks/useShouldUpdate.js +77 -152
  120. package/es/ProForm/hooks/useWatch.js +62 -134
  121. package/es/ProForm/index.js +157 -194
  122. package/es/ProForm/propsType.js +15 -7
  123. package/es/ProForm/utils/buildFormItemProps.js +51 -58
  124. package/es/ProForm/utils/diffOriginal.js +43 -73
  125. package/es/ProForm/utils/getDefaultProps.js +18 -24
  126. package/es/ProForm/utils/index.js +160 -235
  127. package/es/ProForm/utils/processDependencies.js +21 -60
  128. package/es/ProForm/utils/reactiveValues.js +20 -34
  129. package/es/ProForm/utils/rulesCreator.js +42 -40
  130. package/es/ProForm/utils/transformNames.js +10 -13
  131. package/es/ProForm/utils/transformValue.js +16 -29
  132. package/es/ProForm/utils/valueType.js +96 -178
  133. package/es/ProIcon/config/index.js +340 -274
  134. package/es/ProIcon/index.js +135 -209
  135. package/es/ProIcon/propsTypes.js +0 -1
  136. package/es/ProIcon/utils/index.js +24 -39
  137. package/es/ProLayout/components/Layout/Header/index.js +108 -141
  138. package/es/ProLayout/components/Layout/Menu/FoldMenu/index.js +134 -190
  139. package/es/ProLayout/components/Layout/Menu/OpenMenu/index.js +113 -139
  140. package/es/ProLayout/components/Layout/Menu/OpenMenu/propsType.js +0 -1
  141. package/es/ProLayout/components/Layout/Menu/SideMenu/index.js +23 -31
  142. package/es/ProLayout/components/Layout/Menu/index.js +92 -89
  143. package/es/ProLayout/components/Layout/Notice/index.js +13 -27
  144. package/es/ProLayout/components/Layout/index.js +8 -3
  145. package/es/ProLayout/components/ProCollapse/PropTypes.js +0 -1
  146. package/es/ProLayout/components/ProCollapse/index.js +89 -111
  147. package/es/ProLayout/components/ProFooter/PropTypes.js +0 -1
  148. package/es/ProLayout/components/ProFooter/index.js +27 -24
  149. package/es/ProLayout/components/ProHeader/PropTypes.js +0 -1
  150. package/es/ProLayout/components/ProHeader/components/Copy/index.js +23 -21
  151. package/es/ProLayout/components/ProHeader/components/Describe/index.js +67 -84
  152. package/es/ProLayout/components/ProHeader/components/ProBackBtn/index.js +18 -21
  153. package/es/ProLayout/components/ProHeader/components/ProBackBtn/propsType.js +0 -1
  154. package/es/ProLayout/components/ProHeader/components/index.js +6 -2
  155. package/es/ProLayout/components/ProHeader/index.js +216 -356
  156. package/es/ProLayout/components/ProHeader/utils/index.js +19 -26
  157. package/es/ProLayout/components/TabsManager/components/TabContextMenu.js +92 -85
  158. package/es/ProLayout/components/TabsManager/components/TabItem.js +53 -63
  159. package/es/ProLayout/components/TabsManager/components/TabsContext.js +5 -5
  160. package/es/ProLayout/components/TabsManager/components/TabsHeader.js +42 -52
  161. package/es/ProLayout/components/TabsManager/hooks/useActiveTab.js +8 -9
  162. package/es/ProLayout/components/TabsManager/hooks/useIframeRoute.js +19 -32
  163. package/es/ProLayout/components/TabsManager/hooks/useProLayoutTabs.js +6 -20
  164. package/es/ProLayout/components/TabsManager/hooks/useTabsCache.js +25 -42
  165. package/es/ProLayout/components/TabsManager/hooks/useTabsState.js +320 -350
  166. package/es/ProLayout/components/TabsManager/hooks/useTabsUrlSync.d.ts +19 -0
  167. package/es/ProLayout/components/TabsManager/hooks/useTabsUrlSync.js +332 -0
  168. package/es/ProLayout/components/TabsManager/index.js +407 -351
  169. package/es/ProLayout/components/TabsManager/propTypes.d.ts +4 -0
  170. package/es/ProLayout/components/TabsManager/propTypes.js +7 -15
  171. package/es/ProLayout/components/TabsManager/style/index.less +1 -1
  172. package/es/ProLayout/components/TabsManager/utils/historyObserver.d.ts +7 -0
  173. package/es/ProLayout/components/TabsManager/utils/historyObserver.js +65 -0
  174. package/es/ProLayout/components/TabsManager/utils/index.d.ts +15 -2
  175. package/es/ProLayout/components/TabsManager/utils/index.js +156 -159
  176. package/es/ProLayout/components/index.js +8 -3
  177. package/es/ProLayout/index.js +173 -228
  178. package/es/ProLayout/propTypes.d.ts +28 -1
  179. package/es/ProLayout/propTypes.js +12 -52
  180. package/es/ProLayout/utils/index.js +48 -128
  181. package/es/ProSelect/components/AdaptiveTooltip.js +26 -25
  182. package/es/ProSelect/index.js +187 -223
  183. package/es/ProSelect/propsType.js +0 -1
  184. package/es/ProSelect/style/index.less +13 -0
  185. package/es/ProSelect/utils/index.js +100 -146
  186. package/es/ProStep/components/Anchor/index.js +71 -82
  187. package/es/ProStep/components/Item/index.js +49 -56
  188. package/es/ProStep/components/LazyLoad/index.js +23 -29
  189. package/es/ProStep/components/Listener/index.js +20 -33
  190. package/es/ProStep/components/Step/index.js +31 -38
  191. package/es/ProStep/constants.js +4 -1
  192. package/es/ProStep/index.js +166 -153
  193. package/es/ProStep/propsType.js +0 -1
  194. package/es/ProStep/style/index.less +1 -1
  195. package/es/ProStep/utils/index.js +29 -55
  196. package/es/ProStepTab/index.js +83 -138
  197. package/es/ProStepTab/propsType.js +0 -1
  198. package/es/ProTable/components/EditableCell/EditIcon.js +10 -14
  199. package/es/ProTable/components/EditableCell/index.js +37 -71
  200. package/es/ProTable/components/EditableCell/propsType.js +0 -1
  201. package/es/ProTable/components/FormatColumn/index.js +209 -340
  202. package/es/ProTable/components/FormatColumn/propsType.js +0 -1
  203. package/es/ProTable/components/RcTable/components/BaseTable/index.js +35 -39
  204. package/es/ProTable/components/RcTable/components/DraggableTable/components/DndWrapper/index.js +80 -107
  205. package/es/ProTable/components/RcTable/components/DraggableTable/components/DndWrapper/utils/index.js +54 -48
  206. package/es/ProTable/components/RcTable/components/DraggableTable/components/DndWrapper/utils/propsType.js +0 -1
  207. package/es/ProTable/components/RcTable/components/DraggableTable/index.js +47 -54
  208. package/es/ProTable/components/RcTable/index.js +6 -4
  209. package/es/ProTable/components/RenderColumn/index.js +158 -186
  210. package/es/ProTable/components/RenderEmptyText/index.js +12 -21
  211. package/es/ProTable/components/RenderFooter/index.js +15 -15
  212. package/es/ProTable/components/RenderSummary/index.js +33 -50
  213. package/es/ProTable/components/RenderTableHeader/index.js +44 -46
  214. package/es/ProTable/components/RenderTabs/index.js +47 -51
  215. package/es/ProTable/components/TableResizable/index.js +56 -72
  216. package/es/ProTable/components/TooltipTitle/index.js +13 -21
  217. package/es/ProTable/components/index.js +16 -36
  218. package/es/ProTable/hooks/useAntdTable.js +191 -224
  219. package/es/ProTable/index.js +232 -249
  220. package/es/ProTable/propsType.js +0 -1
  221. package/es/ProTable/utils/columnStorage.js +63 -88
  222. package/es/ProTable/utils/index.js +57 -90
  223. package/es/ProTabs/components/Card/index.js +20 -48
  224. package/es/ProTabs/components/index.js +4 -1
  225. package/es/ProTabs/index.js +41 -58
  226. package/es/ProTabs/propType.js +0 -1
  227. package/es/ProThemeTools/component/ProTools/index.js +106 -158
  228. package/es/ProThemeTools/component/index.js +4 -1
  229. package/es/ProThemeTools/context/ThemeContext.js +67 -146
  230. package/es/ProThemeTools/index.js +103 -156
  231. package/es/ProThemeTools/propsType.js +0 -1
  232. package/es/ProThemeTools/utils/index.js +60 -109
  233. package/es/ProTooltip/index.js +132 -168
  234. package/es/ProTooltip/propsType.js +0 -1
  235. package/es/ProTree/components/AdaptiveTooltip.js +15 -17
  236. package/es/ProTree/components/CloseIcon.js +18 -26
  237. package/es/ProTree/components/List.js +28 -47
  238. package/es/ProTree/components/ProTree.js +152 -211
  239. package/es/ProTree/components/ProTreeSelect/index.js +255 -459
  240. package/es/ProTree/components/ProTreeSelect/propsType.js +0 -1
  241. package/es/ProTree/components/SearchTitle.js +23 -42
  242. package/es/ProTree/components/Tree.js +147 -195
  243. package/es/ProTree/components/index.js +10 -5
  244. package/es/ProTree/index.js +12 -16
  245. package/es/ProTree/propsType.js +0 -1
  246. package/es/ProTree/utils.js +46 -118
  247. package/es/ProTreeModal/components/Cascader.js +56 -64
  248. package/es/ProTreeModal/components/CloseIcon.js +18 -26
  249. package/es/ProTreeModal/components/List.js +114 -180
  250. package/es/ProTreeModal/components/SearchTitle.js +15 -18
  251. package/es/ProTreeModal/components/SortableItem.js +29 -58
  252. package/es/ProTreeModal/components/Tree.js +99 -113
  253. package/es/ProTreeModal/components/Trigger.js +87 -121
  254. package/es/ProTreeModal/components/index.js +14 -6
  255. package/es/ProTreeModal/index.js +397 -438
  256. package/es/ProTreeModal/propsType.js +0 -1
  257. package/es/ProTreeModal/utils.js +52 -95
  258. package/es/ProUpload/components/ButtonRender.js +44 -54
  259. package/es/ProUpload/components/DragRender.js +94 -148
  260. package/es/ProUpload/components/DraggableUploadListItem.js +12 -25
  261. package/es/ProUpload/components/Example.js +27 -31
  262. package/es/ProUpload/components/FileItem.js +69 -163
  263. package/es/ProUpload/components/ImageRender.js +134 -170
  264. package/es/ProUpload/index.js +68 -100
  265. package/es/ProUpload/propsType.js +0 -1
  266. package/es/ProUpload/uitls.js +8 -4
  267. package/es/ProUtils/utils/index.js +17 -13
  268. package/es/ProViewer/index.js +154 -175
  269. package/es/ProViewer/propsType.js +0 -5
  270. package/es/ProWaterMark/index.js +9 -16
  271. package/es/ProWaterMark/propsType.js +0 -1
  272. package/es/hooks/useDraggableRow.js +25 -53
  273. package/es/index.js +57 -77
  274. package/es/locale/en_US.js +153 -142
  275. package/es/locale/index.js +23 -36
  276. package/es/locale/zh_CN.js +145 -142
  277. package/es/tokens.js +84 -83
  278. package/es/utils/index.js +24 -51
  279. package/package.json +4 -2
  280. package/es/ProConfigProvider/demo/locale.js +0 -58
@@ -0,0 +1,19 @@
1
+ import type { TabsConfig, TabsState } from '../../../propTypes';
2
+ import type { TabsManagerProps, UseTabsStateReturn } from '../propTypes';
3
+ interface UseTabsUrlSyncOptions {
4
+ config: TabsConfig;
5
+ dataSource: TabsManagerProps['dataSource'];
6
+ state: TabsState;
7
+ isInitialized: boolean;
8
+ addTab: UseTabsStateReturn['addTab'];
9
+ switchTab: UseTabsStateReturn['switchTab'];
10
+ updateTabUrl: UseTabsStateReturn['updateTabUrl'];
11
+ rollbackTabActivation: UseTabsStateReturn['rollbackTabActivation'];
12
+ interactionSequence: number;
13
+ }
14
+ /**
15
+ * 维护浏览器 location 与活动页签 URL 的双向同步。
16
+ * 未开启 config.urlSync 时不安装任何 History 监听或写入逻辑。
17
+ */
18
+ export declare const useTabsUrlSync: ({ config, dataSource, state, isInitialized, addTab, switchTab, updateTabUrl, rollbackTabActivation, interactionSequence, }: UseTabsUrlSyncOptions) => void;
19
+ export {};
@@ -0,0 +1,332 @@
1
+ import { createContext, useContext, useEffect, useRef, useState } from "react";
2
+ import * as ReactRouterDom from "react-router-dom";
3
+ import {
4
+ canOpenAsTab,
5
+ flattenMenuData,
6
+ getCurrentTabUrl,
7
+ getMenuRoute,
8
+ getTabUrlPathname,
9
+ normalizeTabUrl
10
+ } from "../utils";
11
+ import {
12
+ subscribeHistoryLocation
13
+ } from "../utils/historyObserver";
14
+ const getOptionalRouterContext = (exportName) => {
15
+ const descriptor = Object.getOwnPropertyDescriptor(ReactRouterDom, exportName);
16
+ return descriptor ? Reflect.get(ReactRouterDom, exportName) : void 0;
17
+ };
18
+ const OptionalNavigationContext = getOptionalRouterContext("UNSAFE_NavigationContext") || createContext(null);
19
+ const OptionalDataRouterContext = getOptionalRouterContext("UNSAFE_DataRouterContext") || createContext(null);
20
+ const getDataRouterUrl = (url, basename) => {
21
+ if (!basename || basename === "/")
22
+ return url;
23
+ const pathname = getTabUrlPathname(url);
24
+ if (!pathname)
25
+ return url;
26
+ const normalizedBasename = `/${basename.replace(/^\/+|\/+$/g, "")}`;
27
+ const lowerPathname = pathname.toLowerCase();
28
+ const lowerBasename = normalizedBasename.toLowerCase();
29
+ const suffix = url.slice(pathname.length);
30
+ if (lowerPathname === lowerBasename)
31
+ return `/${suffix}`;
32
+ if (lowerPathname.startsWith(`${lowerBasename}/`)) {
33
+ return `${pathname.slice(normalizedBasename.length)}${suffix}`;
34
+ }
35
+ return url;
36
+ };
37
+ const isCurrentDataRouterNavigation = (currentUrl, dataRouterContext) => {
38
+ var _a, _b;
39
+ const navigationLocation = (_b = (_a = dataRouterContext == null ? void 0 : dataRouterContext.router.state) == null ? void 0 : _a.navigation) == null ? void 0 : _b.location;
40
+ if (!navigationLocation)
41
+ return false;
42
+ const navigationUrl = `${navigationLocation.pathname}${navigationLocation.search ?? ""}${navigationLocation.hash ?? ""}`;
43
+ return navigationUrl === currentUrl || navigationUrl === getDataRouterUrl(currentUrl, dataRouterContext == null ? void 0 : dataRouterContext.basename);
44
+ };
45
+ const isSameOrNestedPath = (basePathname, currentPathname) => {
46
+ if (!basePathname || !currentPathname)
47
+ return false;
48
+ const normalizedBase = basePathname === "/" ? "/" : basePathname.replace(/\/$/, "");
49
+ return currentPathname === normalizedBase || normalizedBase !== "/" && currentPathname.startsWith(`${normalizedBase}/`);
50
+ };
51
+ const getSourceMenus = (dataSource) => {
52
+ if (!dataSource || !("menus" in dataSource) || !Array.isArray(dataSource.menus))
53
+ return [];
54
+ return flattenMenuData(dataSource.menus);
55
+ };
56
+ const createPushHistoryState = (currentState) => {
57
+ if (!currentState || typeof currentState !== "object" || Array.isArray(currentState)) {
58
+ return currentState;
59
+ }
60
+ const nextState = { ...currentState };
61
+ const currentIndex = nextState.idx;
62
+ const currentKey = nextState.key;
63
+ const isReactRouterState = "usr" in nextState && typeof currentIndex === "number" && typeof currentKey === "string";
64
+ if (isReactRouterState) {
65
+ nextState.idx = currentIndex + 1;
66
+ nextState.key = `${Date.now().toString(36)}${Math.random().toString(36).slice(2, 8)}`;
67
+ }
68
+ return nextState;
69
+ };
70
+ const getRouterLocationState = (currentState) => {
71
+ if (!currentState || typeof currentState !== "object" || Array.isArray(currentState)) {
72
+ return currentState;
73
+ }
74
+ const state = currentState;
75
+ if (typeof state.idx !== "number")
76
+ return currentState;
77
+ return "usr" in state ? state.usr : null;
78
+ };
79
+ const useTabsUrlSync = ({
80
+ config,
81
+ dataSource,
82
+ state,
83
+ isInitialized,
84
+ addTab,
85
+ switchTab,
86
+ updateTabUrl,
87
+ rollbackTabActivation,
88
+ interactionSequence
89
+ }) => {
90
+ const navigationContext = useContext(OptionalNavigationContext);
91
+ const dataRouterContext = useContext(OptionalDataRouterContext);
92
+ const navigator = navigationContext == null ? void 0 : navigationContext.navigator;
93
+ const enabled = config.urlSync === true || typeof config.urlSync === "object" && config.urlSync !== null;
94
+ const historyMode = typeof config.urlSync === "object" ? config.urlSync.history || "replace" : "replace";
95
+ const bootstrappedRef = useRef(false);
96
+ const writingUrlRef = useRef(false);
97
+ const preserveUrlInteractionRef = useRef(null);
98
+ const locationSequenceRef = useRef(0);
99
+ const handledLocationSequenceRef = useRef(void 0);
100
+ const committedActiveKeyRef = useRef(state.activeKey);
101
+ const committedTabIdsRef = useRef(new Set(state.tabsList.map((tab) => tab.id)));
102
+ const navigationAttemptRef = useRef(0);
103
+ const pendingDataNavigationRef = useRef(false);
104
+ const pendingDataNavigationUrlRef = useRef(null);
105
+ const ignoredHistoryUrlRef = useRef(null);
106
+ const [locationChange, setLocationChange] = useState(() => ({
107
+ url: typeof window === "undefined" ? "" : getCurrentTabUrl(),
108
+ source: "initial",
109
+ sequence: 0
110
+ }));
111
+ useEffect(() => {
112
+ if (!enabled || typeof window === "undefined")
113
+ return void 0;
114
+ return subscribeHistoryLocation((source) => {
115
+ if (writingUrlRef.current)
116
+ return;
117
+ const currentUrl = getCurrentTabUrl();
118
+ if (ignoredHistoryUrlRef.current === currentUrl) {
119
+ ignoredHistoryUrlRef.current = null;
120
+ return;
121
+ }
122
+ const pendingDataNavigation = pendingDataNavigationRef.current;
123
+ const pendingDataNavigationUrl = pendingDataNavigationUrlRef.current;
124
+ const isPendingDataNavigationCommit = pendingDataNavigation && (pendingDataNavigationUrl === currentUrl || isCurrentDataRouterNavigation(currentUrl, dataRouterContext));
125
+ if (!isPendingDataNavigationCommit) {
126
+ navigationAttemptRef.current += 1;
127
+ }
128
+ pendingDataNavigationRef.current = false;
129
+ pendingDataNavigationUrlRef.current = isPendingDataNavigationCommit ? currentUrl : null;
130
+ if (pendingDataNavigation && !isPendingDataNavigationCommit && dataRouterContext) {
131
+ ignoredHistoryUrlRef.current = currentUrl;
132
+ const cancellation = dataRouterContext.router.navigate(
133
+ getDataRouterUrl(currentUrl, dataRouterContext.basename),
134
+ {
135
+ replace: true,
136
+ state: getRouterLocationState(window.history.state)
137
+ }
138
+ );
139
+ void cancellation.finally(() => {
140
+ if (ignoredHistoryUrlRef.current === currentUrl) {
141
+ ignoredHistoryUrlRef.current = null;
142
+ }
143
+ });
144
+ }
145
+ preserveUrlInteractionRef.current = null;
146
+ locationSequenceRef.current += 1;
147
+ setLocationChange({
148
+ url: currentUrl,
149
+ source,
150
+ sequence: locationSequenceRef.current
151
+ });
152
+ });
153
+ }, [enabled, dataRouterContext]);
154
+ useEffect(() => {
155
+ var _a, _b;
156
+ if (!enabled || !isInitialized || typeof window === "undefined")
157
+ return;
158
+ const currentUrl = normalizeTabUrl(locationChange.url);
159
+ if (!currentUrl)
160
+ return;
161
+ if (handledLocationSequenceRef.current === locationChange.sequence)
162
+ return;
163
+ const exactTab = state.tabsList.find((tab) => normalizeTabUrl(tab.url) === currentUrl);
164
+ if (exactTab) {
165
+ handledLocationSequenceRef.current = locationChange.sequence;
166
+ bootstrappedRef.current = true;
167
+ preserveUrlInteractionRef.current = null;
168
+ if (state.activeKey !== exactTab.id) {
169
+ switchTab(exactTab.id);
170
+ }
171
+ return;
172
+ }
173
+ const currentPathname = getTabUrlPathname(currentUrl);
174
+ const sourceMenus = getSourceMenus(dataSource);
175
+ const activeTab = state.tabsList.find((tab) => tab.id === state.activeKey);
176
+ const activeCode = ((_a = activeTab == null ? void 0 : activeTab.menuItem) == null ? void 0 : _a.code) || (activeTab == null ? void 0 : activeTab.code);
177
+ const activeSourceMenu = activeCode ? sourceMenus.find((item) => item.code === activeCode) : void 0;
178
+ const activeMenuItem = activeSourceMenu || (activeTab == null ? void 0 : activeTab.menuItem);
179
+ const activeBasePathname = activeMenuItem ? getTabUrlPathname(getMenuRoute(activeMenuItem)) : getTabUrlPathname(activeTab == null ? void 0 : activeTab.url);
180
+ const targetMenu = (_b = sourceMenus.map((item) => ({
181
+ item,
182
+ pathname: getTabUrlPathname(getMenuRoute(item))
183
+ })).filter(
184
+ (entry) => !!entry.pathname && isSameOrNestedPath(entry.pathname, currentPathname)
185
+ ).sort((left, right) => right.pathname.length - left.pathname.length)[0]) == null ? void 0 : _b.item;
186
+ const targetBelongsToActiveMenu = !targetMenu || !!activeCode && targetMenu.code === activeCode;
187
+ if (activeTab && locationChange.source !== "initial" && targetBelongsToActiveMenu && isSameOrNestedPath(activeBasePathname, currentPathname)) {
188
+ handledLocationSequenceRef.current = locationChange.sequence;
189
+ bootstrappedRef.current = true;
190
+ preserveUrlInteractionRef.current = null;
191
+ updateTabUrl(activeTab.id, currentUrl);
192
+ return;
193
+ }
194
+ if (targetMenu && canOpenAsTab(targetMenu)) {
195
+ handledLocationSequenceRef.current = locationChange.sequence;
196
+ bootstrappedRef.current = true;
197
+ preserveUrlInteractionRef.current = interactionSequence;
198
+ addTab({ ...targetMenu, url: currentUrl, redirectUrl: void 0 });
199
+ return;
200
+ }
201
+ if (!bootstrappedRef.current) {
202
+ bootstrappedRef.current = true;
203
+ preserveUrlInteractionRef.current = interactionSequence;
204
+ return;
205
+ }
206
+ if (activeTab && locationChange.source !== "initial") {
207
+ handledLocationSequenceRef.current = locationChange.sequence;
208
+ preserveUrlInteractionRef.current = null;
209
+ navigationAttemptRef.current += 1;
210
+ updateTabUrl(activeTab.id, currentUrl);
211
+ return;
212
+ }
213
+ if (locationChange.source !== "initial") {
214
+ handledLocationSequenceRef.current = locationChange.sequence;
215
+ }
216
+ }, [
217
+ enabled,
218
+ isInitialized,
219
+ locationChange,
220
+ state.tabsList,
221
+ state.activeKey,
222
+ dataSource,
223
+ addTab,
224
+ switchTab,
225
+ updateTabUrl,
226
+ interactionSequence
227
+ ]);
228
+ useEffect(() => {
229
+ if (!enabled || !isInitialized || !bootstrappedRef.current || typeof window === "undefined") {
230
+ return;
231
+ }
232
+ const activeTab = state.tabsList.find((tab) => tab.id === state.activeKey);
233
+ const targetUrl = normalizeTabUrl(activeTab == null ? void 0 : activeTab.url);
234
+ const commitActiveTab = () => {
235
+ committedActiveKeyRef.current = state.activeKey;
236
+ committedTabIdsRef.current = new Set(state.tabsList.map((tab) => tab.id));
237
+ };
238
+ if (preserveUrlInteractionRef.current !== null) {
239
+ if (preserveUrlInteractionRef.current === interactionSequence) {
240
+ if (targetUrl === getCurrentTabUrl()) {
241
+ preserveUrlInteractionRef.current = null;
242
+ }
243
+ commitActiveTab();
244
+ return;
245
+ }
246
+ preserveUrlInteractionRef.current = null;
247
+ }
248
+ if (!targetUrl || targetUrl === getCurrentTabUrl()) {
249
+ const pendingNavigation = pendingDataNavigationRef.current;
250
+ navigationAttemptRef.current += 1;
251
+ pendingDataNavigationRef.current = false;
252
+ pendingDataNavigationUrlRef.current = null;
253
+ if (pendingNavigation && dataRouterContext) {
254
+ const cancellationUrl = getCurrentTabUrl();
255
+ ignoredHistoryUrlRef.current = cancellationUrl;
256
+ const cancellation = dataRouterContext.router.navigate(
257
+ getDataRouterUrl(cancellationUrl, dataRouterContext.basename),
258
+ {
259
+ replace: true,
260
+ state: getRouterLocationState(window.history.state)
261
+ }
262
+ );
263
+ void cancellation.finally(() => {
264
+ if (ignoredHistoryUrlRef.current === cancellationUrl) {
265
+ ignoredHistoryUrlRef.current = null;
266
+ }
267
+ });
268
+ }
269
+ commitActiveTab();
270
+ return;
271
+ }
272
+ handledLocationSequenceRef.current = locationChange.sequence;
273
+ const previousActiveKey = committedActiveKeyRef.current;
274
+ const attemptedActiveKey = state.activeKey;
275
+ const removeAttemptedTab = !committedTabIdsRef.current.has(attemptedActiveKey);
276
+ const navigationAttempt = navigationAttemptRef.current + 1;
277
+ navigationAttemptRef.current = navigationAttempt;
278
+ writingUrlRef.current = true;
279
+ try {
280
+ const routerState = getRouterLocationState(window.history.state);
281
+ if (dataRouterContext) {
282
+ const settleNavigation = () => {
283
+ if (navigationAttemptRef.current !== navigationAttempt)
284
+ return;
285
+ const committedDataNavigationUrl = pendingDataNavigationUrlRef.current;
286
+ pendingDataNavigationRef.current = false;
287
+ pendingDataNavigationUrlRef.current = null;
288
+ const currentUrl = getCurrentTabUrl();
289
+ if (targetUrl === currentUrl || committedDataNavigationUrl === currentUrl) {
290
+ commitActiveTab();
291
+ return;
292
+ }
293
+ rollbackTabActivation(previousActiveKey, attemptedActiveKey, removeAttemptedTab);
294
+ };
295
+ pendingDataNavigationRef.current = true;
296
+ pendingDataNavigationUrlRef.current = targetUrl;
297
+ void dataRouterContext.router.navigate(getDataRouterUrl(targetUrl, dataRouterContext.basename), {
298
+ replace: historyMode === "replace",
299
+ state: routerState
300
+ }).then(settleNavigation);
301
+ } else if (navigator) {
302
+ if (historyMode === "push") {
303
+ navigator.push(targetUrl, routerState);
304
+ } else {
305
+ navigator.replace(targetUrl, routerState);
306
+ }
307
+ commitActiveTab();
308
+ } else if (historyMode === "push") {
309
+ window.history.pushState(createPushHistoryState(window.history.state), "", targetUrl);
310
+ commitActiveTab();
311
+ } else {
312
+ window.history.replaceState(window.history.state, "", targetUrl);
313
+ commitActiveTab();
314
+ }
315
+ } finally {
316
+ writingUrlRef.current = false;
317
+ }
318
+ }, [
319
+ enabled,
320
+ historyMode,
321
+ isInitialized,
322
+ state.tabsList,
323
+ state.activeKey,
324
+ interactionSequence,
325
+ navigator,
326
+ dataRouterContext,
327
+ rollbackTabActivation
328
+ ]);
329
+ };
330
+ export {
331
+ useTabsUrlSync
332
+ };