taro-uno-ui 0.9.0 → 1.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 +21 -0
- package/dist/js/{index-DffLRSro.js → index-CDFsvu80.js} +15369 -10741
- package/dist/js/index-CDFsvu80.js.map +1 -0
- package/dist/js/index-DFdcksbe.js.map +1 -1
- package/dist/js/index-DXRIkWX1.js.map +1 -1
- package/dist/js/{index-6NJ3A1Dn.js → index-JffnTUrv.js} +15430 -10801
- package/dist/js/index-JffnTUrv.js.map +1 -0
- package/dist/utils/http/request.d.ts +280 -0
- package/package.json +14 -10
- package/src/components/basic/Button/Button.tsx +53 -13
- package/src/components/basic/Button/Button.types.ts +45 -9
- package/src/components/basic/Divider/Divider.tsx +60 -29
- package/src/components/basic/Icon/Icon.data.ts +474 -0
- package/src/components/basic/Icon/Icon.test.tsx +2 -2
- package/src/components/basic/Icon/Icon.tsx +48 -35
- package/src/components/basic/Icon/IconManager.ts +229 -0
- package/src/components/basic/Text/Text.styles.ts +3 -3
- package/src/components/basic/Text/Text.types.ts +14 -4
- package/src/components/basic/Typography/Typography.styles.ts +10 -9
- package/src/components/basic/Typography/Typography.tsx +15 -13
- package/src/components/basic/Typography/Typography.types.ts +41 -41
- package/src/components/basic/Typography/index.tsx +1 -1
- package/src/components/basic/Video/Video.styles.ts +777 -0
- package/src/components/basic/Video/Video.test.tsx +490 -0
- package/src/components/basic/Video/Video.tsx +1468 -0
- package/src/components/basic/Video/Video.types.ts +500 -0
- package/src/components/basic/Video/index.tsx +26 -0
- package/src/components/basic/index.tsx +13 -15
- package/src/components/common/ErrorBoundary.tsx +1 -1
- package/src/components/common/LazyComponent.tsx +9 -8
- package/src/components/common/SecurityProvider.tsx +2 -14
- package/src/components/common/ThemeProvider.tsx +43 -56
- package/src/components/common/VirtualList.tsx +187 -205
- package/src/components/common/index.tsx +25 -0
- package/src/components/display/Avatar/Avatar.styles.ts +1 -1
- package/src/components/display/Avatar/Avatar.tsx +6 -19
- package/src/components/display/Avatar/Avatar.types.ts +1 -1
- package/src/components/display/Avatar/index.ts +1 -1
- package/src/components/display/Badge/Badge.tsx +3 -16
- package/src/components/display/Badge/Badge.types.ts +1 -1
- package/src/components/display/Badge/index.ts +1 -1
- package/src/components/display/Calendar/Calendar.styles.ts +36 -36
- package/src/components/display/Calendar/Calendar.test.tsx +27 -15
- package/src/components/display/Calendar/Calendar.tsx +56 -35
- package/src/components/display/Calendar/Calendar.types.ts +1 -1
- package/src/components/display/Calendar/index.ts +1 -1
- package/src/components/display/Card/Card.styles.ts +2 -2
- package/src/components/display/Card/Card.test.tsx +6 -4
- package/src/components/display/Card/Card.tsx +1 -1
- package/src/components/display/Card/Card.types.ts +4 -4
- package/src/components/display/Card/index.ts +1 -1
- package/src/components/display/Carousel/Carousel.styles.ts +31 -31
- package/src/components/display/Carousel/Carousel.tsx +34 -39
- package/src/components/display/Carousel/Carousel.types.ts +1 -1
- package/src/components/display/Carousel/index.ts +1 -1
- package/src/components/display/List/List.styles.ts +3 -3
- package/src/components/display/List/List.tsx +0 -1
- package/src/components/display/List/index.ts +1 -1
- package/src/components/display/Rate/Rate.styles.ts +5 -17
- package/src/components/display/Rate/Rate.tsx +6 -14
- package/src/components/display/Rate/Rate.types.ts +4 -3
- package/src/components/display/Rate/index.ts +3 -11
- package/src/components/display/Table/Table.test.tsx +2 -0
- package/src/components/display/Table/Table.tsx +3 -7
- package/src/components/display/Table/Table.types.ts +3 -2
- package/src/components/display/Tag/Tag.styles.ts +31 -31
- package/src/components/display/Tag/Tag.tsx +9 -26
- package/src/components/display/Tag/Tag.types.ts +1 -1
- package/src/components/display/Tag/index.ts +1 -1
- package/src/components/display/Timeline/Timeline.styles.ts +32 -32
- package/src/components/display/Timeline/Timeline.tsx +23 -42
- package/src/components/display/Timeline/Timeline.types.ts +1 -1
- package/src/components/display/Timeline/index.ts +1 -1
- package/src/components/display/index.tsx +33 -29
- package/src/components/feedback/Loading/Loading.tsx +6 -1
- package/src/components/feedback/Loading/index.ts +2 -5
- package/src/components/feedback/Message/Message.styles.ts +3 -3
- package/src/components/feedback/Message/index.ts +2 -5
- package/src/components/feedback/Modal/Modal.styles.ts +1 -1
- package/src/components/feedback/Modal/Modal.tsx +9 -31
- package/src/components/feedback/Modal/Modal.types.ts +12 -2
- package/src/components/feedback/Notification/Notification.styles.ts +49 -39
- package/src/components/feedback/Notification/Notification.test.tsx +1 -1
- package/src/components/feedback/Notification/Notification.tsx +97 -120
- package/src/components/feedback/Notification/Notification.types.ts +11 -8
- package/src/components/feedback/Notification/NotificationManager.tsx +135 -106
- package/src/components/feedback/Notification/index.ts +10 -3
- package/src/components/feedback/Notification/index.tsx +16 -26
- package/src/components/feedback/Progress/Progress.styles.ts +23 -14
- package/src/components/feedback/Progress/Progress.tsx +93 -113
- package/src/components/feedback/Progress/Progress.types.ts +1 -1
- package/src/components/feedback/Progress/index.ts +1 -1
- package/src/components/feedback/Progress/utils/animation.ts +12 -23
- package/src/components/feedback/Progress/utils/index.ts +2 -2
- package/src/components/feedback/Progress/utils/progress-calculator.ts +14 -32
- package/src/components/feedback/Result/Result.styles.ts +29 -29
- package/src/components/feedback/Result/Result.tsx +8 -20
- package/src/components/feedback/Result/Result.types.ts +7 -7
- package/src/components/feedback/Result/index.tsx +1 -1
- package/src/components/feedback/Toast/Toast.styles.ts +1 -1
- package/src/components/feedback/Toast/Toast.tsx +25 -13
- package/src/components/feedback/Tooltip/Tooltip.examples.tsx +21 -44
- package/src/components/feedback/Tooltip/Tooltip.styles.ts +16 -22
- package/src/components/feedback/Tooltip/Tooltip.test.tsx +1 -1
- package/src/components/feedback/Tooltip/Tooltip.tsx +65 -46
- package/src/components/feedback/Tooltip/Tooltip.types.ts +14 -20
- package/src/components/feedback/Tooltip/index.ts +1 -1
- package/src/components/feedback/Tooltip/index.tsx +12 -24
- package/src/components/feedback/index.tsx +54 -42
- package/src/components/form/Cascader/Cascader.styles.ts +2 -2
- package/src/components/form/Cascader/Cascader.tsx +84 -88
- package/src/components/form/Cascader/Cascader.types.ts +49 -50
- package/src/components/form/Cascader/hooks/useCascaderFieldNames.ts +11 -8
- package/src/components/form/Cascader/hooks/useCascaderOptions.ts +73 -55
- package/src/components/form/Cascader/hooks/useCascaderState.ts +31 -25
- package/src/components/form/Cascader/index.ts +1 -1
- package/src/components/form/Cascader/utils/formatDisplayValue.ts +4 -4
- package/src/components/form/Checkbox/Checkbox.styles.ts +83 -84
- package/src/components/form/Checkbox/Checkbox.tsx +2 -9
- package/src/components/form/Checkbox/CheckboxGroup.tsx +7 -7
- package/src/components/form/DatePicker/DatePicker.test.tsx +1 -1
- package/src/components/form/DatePicker/DatePicker.tsx +91 -75
- package/src/components/form/DatePicker/DatePicker.types.ts +4 -1
- package/src/components/form/Form/Form.tsx +66 -504
- package/src/components/form/Form/Form.types.ts +16 -1
- package/src/components/form/Form/useFormLogic.ts +497 -0
- package/src/components/form/Input/Input.styles.ts +8 -1
- package/src/components/form/Input/Input.tsx +55 -291
- package/src/components/form/Input/Input.types.ts +13 -1
- package/src/components/form/Input/useInputLogic.test.ts +82 -0
- package/src/components/form/Input/useInputLogic.ts +260 -0
- package/src/components/form/InputNumber/InputNumber.styles.ts +76 -25
- package/src/components/form/InputNumber/InputNumber.tsx +53 -21
- package/src/components/form/InputNumber/InputNumber.types.ts +21 -3
- package/src/components/form/InputNumber/components/InputNumberClearButton.tsx +3 -11
- package/src/components/form/InputNumber/components/InputNumberControls.tsx +3 -12
- package/src/components/form/InputNumber/hooks/index.ts +1 -1
- package/src/components/form/InputNumber/hooks/useInputNumberState.ts +7 -9
- package/src/components/form/InputNumber/hooks/useInputNumberValidation.ts +18 -17
- package/src/components/form/InputNumber/index.ts +7 -7
- package/src/components/form/Radio/Radio.styles.ts +1 -8
- package/src/components/form/Radio/Radio.tsx +3 -9
- package/src/components/form/Radio/Radio.types.ts +5 -1
- package/src/components/form/Select/Select.styles.ts +5 -1
- package/src/components/form/Select/Select.tsx +15 -15
- package/src/components/form/Select/Select.types.ts +2 -1
- package/src/components/form/Slider/Slider.styles.ts +13 -13
- package/src/components/form/Slider/Slider.tsx +19 -33
- package/src/components/form/Slider/Slider.types.ts +14 -12
- package/src/components/form/Slider/index.tsx +2 -9
- package/src/components/form/Switch/Switch.styles.ts +1 -7
- package/src/components/form/Switch/Switch.tsx +7 -13
- package/src/components/form/Textarea/Textarea.styles.ts +4 -4
- package/src/components/form/Textarea/Textarea.tsx +7 -1
- package/src/components/form/Textarea/Textarea.types.ts +4 -1
- package/src/components/form/TimePicker/TimePicker.styles.ts +8 -12
- package/src/components/form/TimePicker/TimePicker.tsx +122 -100
- package/src/components/form/TimePicker/TimePicker.types.ts +2 -2
- package/src/components/form/TimePicker/index.ts +1 -1
- package/src/components/form/Transfer/Transfer.styles.ts +3 -15
- package/src/components/form/Transfer/Transfer.tsx +146 -134
- package/src/components/form/Transfer/Transfer.types.ts +34 -26
- package/src/components/form/Transfer/components/TransferItem.tsx +55 -62
- package/src/components/form/Transfer/components/TransferList.tsx +212 -199
- package/src/components/form/Transfer/components/TransferOperations.tsx +52 -55
- package/src/components/form/Transfer/components/TransferPagination.tsx +115 -111
- package/src/components/form/Transfer/components/TransferSearch.tsx +52 -55
- package/src/components/form/Transfer/hooks/useTransferData.ts +91 -81
- package/src/components/form/Transfer/hooks/useTransferState.ts +22 -16
- package/src/components/form/Transfer/index.ts +2 -8
- package/src/components/form/Upload/Upload.styles.ts +21 -21
- package/src/components/form/Upload/Upload.tsx +189 -142
- package/src/components/form/Upload/Upload.types.ts +31 -31
- package/src/components/form/Upload/index.tsx +1 -1
- package/src/components/form/index.tsx +60 -29
- package/src/components/index.tsx +0 -1
- package/src/components/layout/Affix/Affix.styles.ts +16 -11
- package/src/components/layout/Affix/Affix.tsx +67 -75
- package/src/components/layout/Affix/Affix.types.ts +18 -18
- package/src/components/layout/Affix/index.tsx +1 -1
- package/src/components/layout/Col/Col.styles.ts +17 -17
- package/src/components/layout/Col/Col.test.tsx +7 -5
- package/src/components/layout/Col/Col.tsx +3 -21
- package/src/components/layout/Col/Col.types.ts +1 -1
- package/src/components/layout/Container/Container.styles.ts +3 -1
- package/src/components/layout/Container/Container.tsx +2 -11
- package/src/components/layout/Grid/Grid.tsx +3 -53
- package/src/components/layout/Layout/Content.tsx +24 -32
- package/src/components/layout/Layout/Footer.tsx +24 -32
- package/src/components/layout/Layout/Header.tsx +24 -32
- package/src/components/layout/Layout/Layout.styles.ts +17 -17
- package/src/components/layout/Layout/Layout.tsx +14 -25
- package/src/components/layout/Layout/Layout.types.ts +29 -29
- package/src/components/layout/Layout/Sider.tsx +44 -56
- package/src/components/layout/Layout/index.tsx +16 -2
- package/src/components/layout/Row/Row.tsx +15 -43
- package/src/components/layout/Space/Space.tsx +3 -11
- package/src/components/layout/Space/Space.types.ts +1 -1
- package/src/components/layout/index.tsx +29 -19
- package/src/components/navigation/Menu/Menu.constants.ts +69 -0
- package/src/components/navigation/Menu/Menu.stories.tsx +107 -0
- package/src/components/navigation/Menu/Menu.styles.ts +25 -37
- package/src/components/navigation/Menu/Menu.tsx +8 -11
- package/src/components/navigation/Menu/Menu.types.ts +2 -2
- package/src/components/navigation/Menu/Menu.utils.ts +17 -17
- package/src/components/navigation/Menu/MenuItem.tsx +9 -11
- package/src/components/navigation/Menu/SubMenu.tsx +8 -6
- package/src/components/navigation/Menu/index.tsx +4 -69
- package/src/components/navigation/NavBar/NavBar.styles.ts +1 -1
- package/src/components/navigation/NavBar/NavBar.tsx +7 -10
- package/src/components/navigation/NavBar/NavBar.types.ts +3 -3
- package/src/components/navigation/NavBar/index.tsx +1 -1
- package/src/components/navigation/Pagination/Pagination.test.tsx +2 -3
- package/src/components/navigation/Pagination/Pagination.tsx +3 -3
- package/src/components/navigation/Pagination/Pagination.types.ts +3 -2
- package/src/components/navigation/Pagination/index.ts +9 -3
- package/src/components/navigation/Steps/Step.tsx +24 -44
- package/src/components/navigation/Steps/Steps.styles.ts +28 -13
- package/src/components/navigation/Steps/Steps.test.tsx +2 -0
- package/src/components/navigation/Steps/Steps.tsx +88 -89
- package/src/components/navigation/Steps/Steps.types.ts +30 -30
- package/src/components/navigation/Steps/index.tsx +1 -1
- package/src/components/navigation/Tabs/Tabs.test.tsx +3 -2
- package/src/components/navigation/Tabs/Tabs.types.ts +4 -3
- package/src/components/navigation/index.tsx +21 -16
- package/src/constants/index.ts +1 -1
- package/src/hooks/index.ts +52 -102
- package/src/hooks/types.ts +4 -5
- package/src/hooks/useAsync.ts +46 -47
- package/src/hooks/useClickOutside.ts +52 -0
- package/src/hooks/useCounter.ts +87 -0
- package/src/hooks/useDebounce.ts +150 -0
- package/src/hooks/useDeepCompareEffect.ts +88 -0
- package/src/hooks/useEventListener.ts +77 -0
- package/src/hooks/useMediaQuery.ts +75 -0
- package/src/hooks/useMutation.ts +233 -0
- package/src/hooks/usePerformance.ts +1 -64
- package/src/hooks/usePlatform.ts +3 -1
- package/src/hooks/usePrevious.ts +25 -0
- package/src/hooks/useRequest.ts +12 -7
- package/src/hooks/useStateManagement.ts +1 -1
- package/src/hooks/useStorage.ts +169 -0
- package/src/hooks/useStyle.ts +8 -2
- package/src/hooks/useToggle.ts +54 -0
- package/src/index.ts +34 -9
- package/src/theme/ThemeProvider.tsx +3 -7
- package/src/theme/ThemeProvider.types.ts +1 -1
- package/src/theme/defaults.ts +1 -1
- package/src/theme/design-system.ts +2 -2
- package/src/theme/design-tokens.ts +85 -99
- package/src/theme/generated/dark-theme.scss +1 -1
- package/src/theme/generated/tokens.scss +82 -18
- package/src/theme/index.ts +8 -29
- package/src/theme/responsive.tsx +36 -34
- package/src/theme/styles.ts +1 -1
- package/src/theme/useThemeUtils.ts +43 -43
- package/src/theme/utils.ts +32 -32
- package/src/theme/variables.ts +70 -51
- package/src/types/accessibility.ts +36 -37
- package/src/types/button.ts +25 -27
- package/src/types/component-props.ts +6 -1
- package/src/types/glob.d.ts +4 -0
- package/src/types/index.ts +2 -2
- package/src/types/standardized-components.ts +9 -3
- package/src/types/utils.ts +13 -23
- package/src/utils/__tests__/responsiveUtils.test.ts +5 -4
- package/src/utils/abort-controller.ts +48 -0
- package/src/utils/cache.ts +2 -6
- package/src/utils/createNamespace.ts +4 -4
- package/src/utils/environment.ts +26 -6
- package/src/utils/error-handler.ts +2 -2
- package/src/utils/errorLogger.ts +16 -20
- package/src/utils/formatUtils.ts +38 -70
- package/src/utils/http/error-codes.ts +314 -0
- package/src/utils/http/http-client.test.ts +63 -0
- package/src/utils/{network → http}/http-client.ts +45 -35
- package/src/utils/http/request-cache.ts +127 -0
- package/src/utils/http/request.ts +954 -0
- package/src/utils/http/taro-adapter.test.ts +74 -0
- package/src/utils/http/taro-adapter.ts +24 -0
- package/src/utils/http/types.ts +414 -0
- package/src/utils/http/web-adapter.ts +33 -0
- package/src/utils/index.ts +5 -8
- package/src/utils/inputValidator.ts +17 -14
- package/src/utils/performance/performance.ts +60 -71
- package/src/utils/responsiveUtils.ts +7 -16
- package/src/utils/rtl-support.ts +29 -19
- package/src/utils/security/api-security.ts +47 -39
- package/src/utils/securityHeaders.ts +61 -67
- package/src/utils/typeHelpers.ts +10 -10
- package/src/utils/types/dataProcessing.ts +93 -92
- package/src/utils/types/typeHelpers.ts +31 -21
- package/src/utils/xssProtection.ts +96 -48
- package/dist/js/index-6NJ3A1Dn.js.map +0 -1
- package/dist/js/index-DffLRSro.js.map +0 -1
- package/src/components/form/Input/Input.enhanced.tsx +0 -732
- package/src/components/navigation/Menu/__tests__/Menu.test.tsx +0 -687
- package/src/components/navigation/Tree/Tree.styles.ts +0 -553
- package/src/components/navigation/Tree/Tree.test.basic.tsx +0 -7
- package/src/components/navigation/Tree/Tree.test.functional.tsx +0 -496
- package/src/components/navigation/Tree/Tree.test.import.check.tsx +0 -6
- package/src/components/navigation/Tree/Tree.test.import.tsx +0 -6
- package/src/components/navigation/Tree/Tree.test.minimal.tsx +0 -5
- package/src/components/navigation/Tree/Tree.test.simple.tsx +0 -30
- package/src/components/navigation/Tree/Tree.test.tsx +0 -908
- package/src/components/navigation/Tree/Tree.test.working.tsx +0 -673
- package/src/components/navigation/Tree/Tree.tsx +0 -600
- package/src/components/navigation/Tree/Tree.types.ts +0 -909
- package/src/components/navigation/Tree/Tree.utils.ts +0 -452
- package/src/components/navigation/Tree/index.ts +0 -33
- package/src/components/navigation/Tree/index.tsx +0 -23
- package/src/utils/network/http-client.test.ts +0 -18
|
@@ -61,14 +61,14 @@ export const CascaderComponent = forwardRef<CascaderRef, CascaderProps>((props,
|
|
|
61
61
|
|
|
62
62
|
const inputRef = useRef<HTMLInputElement>(null);
|
|
63
63
|
const fields = useCascaderFieldNames(fieldNames);
|
|
64
|
-
const {
|
|
65
|
-
findOptionPath,
|
|
66
|
-
getOptionValue,
|
|
67
|
-
getOptionLabel,
|
|
68
|
-
hasChildren,
|
|
69
|
-
isOptionDisabled,
|
|
64
|
+
const {
|
|
65
|
+
findOptionPath,
|
|
66
|
+
getOptionValue,
|
|
67
|
+
getOptionLabel,
|
|
68
|
+
hasChildren,
|
|
69
|
+
isOptionDisabled,
|
|
70
70
|
isOptionLeaf,
|
|
71
|
-
filterOptions: filterOptionsUtil
|
|
71
|
+
filterOptions: filterOptionsUtil,
|
|
72
72
|
} = useCascaderOptions(options, fieldNames);
|
|
73
73
|
|
|
74
74
|
const state = useCascaderState(options, props as CascaderProps);
|
|
@@ -117,7 +117,7 @@ export const CascaderComponent = forwardRef<CascaderRef, CascaderProps>((props,
|
|
|
117
117
|
setFilteredOptions([]);
|
|
118
118
|
}
|
|
119
119
|
},
|
|
120
|
-
[showSearch, filterOptionsUtil, onSearch, setSearchValue]
|
|
120
|
+
[showSearch, filterOptionsUtil, onSearch, setSearchValue],
|
|
121
121
|
);
|
|
122
122
|
|
|
123
123
|
// 处理选项点击
|
|
@@ -176,7 +176,7 @@ export const CascaderComponent = forwardRef<CascaderRef, CascaderProps>((props,
|
|
|
176
176
|
isOptionDisabled,
|
|
177
177
|
isOptionLeaf,
|
|
178
178
|
hasChildren,
|
|
179
|
-
]
|
|
179
|
+
],
|
|
180
180
|
);
|
|
181
181
|
|
|
182
182
|
// 处理清除
|
|
@@ -186,7 +186,7 @@ export const CascaderComponent = forwardRef<CascaderRef, CascaderProps>((props,
|
|
|
186
186
|
clearAll();
|
|
187
187
|
onClear?.();
|
|
188
188
|
},
|
|
189
|
-
[clearAll, onClear]
|
|
189
|
+
[clearAll, onClear],
|
|
190
190
|
);
|
|
191
191
|
|
|
192
192
|
// 处理聚焦
|
|
@@ -198,7 +198,7 @@ export const CascaderComponent = forwardRef<CascaderRef, CascaderProps>((props,
|
|
|
198
198
|
setOpen(true);
|
|
199
199
|
onFocus?.(event);
|
|
200
200
|
},
|
|
201
|
-
[internalDisabled, internalReadonly, setOpen, onFocus]
|
|
201
|
+
[internalDisabled, internalReadonly, setOpen, onFocus],
|
|
202
202
|
);
|
|
203
203
|
|
|
204
204
|
// 处理失焦
|
|
@@ -207,7 +207,7 @@ export const CascaderComponent = forwardRef<CascaderRef, CascaderProps>((props,
|
|
|
207
207
|
setFocused(false);
|
|
208
208
|
onBlur?.(event);
|
|
209
209
|
},
|
|
210
|
-
[onBlur]
|
|
210
|
+
[onBlur],
|
|
211
211
|
);
|
|
212
212
|
|
|
213
213
|
// 处理下拉框显示状态变化
|
|
@@ -216,7 +216,7 @@ export const CascaderComponent = forwardRef<CascaderRef, CascaderProps>((props,
|
|
|
216
216
|
if (internalDisabled || internalReadonly) return;
|
|
217
217
|
setOpen(visible);
|
|
218
218
|
},
|
|
219
|
-
[internalDisabled, internalReadonly, setOpen]
|
|
219
|
+
[internalDisabled, internalReadonly, setOpen],
|
|
220
220
|
);
|
|
221
221
|
|
|
222
222
|
// 渲染菜单项
|
|
@@ -225,7 +225,7 @@ export const CascaderComponent = forwardRef<CascaderRef, CascaderProps>((props,
|
|
|
225
225
|
const optionValue = getOptionValue(option);
|
|
226
226
|
const optionLabel = getOptionLabel(option);
|
|
227
227
|
const isSelected = selectedOptions[level] && getOptionValue(selectedOptions[level]!) === optionValue;
|
|
228
|
-
const isExpanded = expandedValues.some(value => value === optionValue);
|
|
228
|
+
const isExpanded = expandedValues.some((value) => value === optionValue);
|
|
229
229
|
const optionHasChildren = hasChildren(option);
|
|
230
230
|
|
|
231
231
|
const itemStyle = {
|
|
@@ -239,19 +239,19 @@ export const CascaderComponent = forwardRef<CascaderRef, CascaderProps>((props,
|
|
|
239
239
|
style={itemStyle}
|
|
240
240
|
className={option.className}
|
|
241
241
|
onClick={() => handleOptionClick(option, level)}
|
|
242
|
-
|
|
242
|
+
>
|
|
243
243
|
<Text>{optionRender ? optionRender(option, level) : optionLabel}</Text>
|
|
244
244
|
{optionHasChildren && (
|
|
245
|
-
<Text
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
245
|
+
<Text
|
|
246
|
+
style={{
|
|
247
|
+
...CascaderStyles['getMenuItemExpandIconStyle'](),
|
|
248
|
+
...(isExpanded ? CascaderStyles['getMenuItemExpandIconRotatedStyle']() : {}),
|
|
249
|
+
}}
|
|
250
|
+
>
|
|
249
251
|
▶
|
|
250
252
|
</Text>
|
|
251
253
|
)}
|
|
252
|
-
{option.loading && (
|
|
253
|
-
<Text style={CascaderStyles['getLoadingIconStyle']()}>⏳</Text>
|
|
254
|
-
)}
|
|
254
|
+
{option.loading && <Text style={CascaderStyles['getLoadingIconStyle']()}>⏳</Text>}
|
|
255
255
|
</View>
|
|
256
256
|
);
|
|
257
257
|
},
|
|
@@ -267,7 +267,7 @@ export const CascaderComponent = forwardRef<CascaderRef, CascaderProps>((props,
|
|
|
267
267
|
getOptionLabel,
|
|
268
268
|
hasChildren,
|
|
269
269
|
isOptionDisabled,
|
|
270
|
-
]
|
|
270
|
+
],
|
|
271
271
|
);
|
|
272
272
|
|
|
273
273
|
// 渲染菜单列
|
|
@@ -280,7 +280,7 @@ export const CascaderComponent = forwardRef<CascaderRef, CascaderProps>((props,
|
|
|
280
280
|
|
|
281
281
|
return (
|
|
282
282
|
<View key={level} style={columnStyle}>
|
|
283
|
-
{columnOptions.map(option => renderMenuItem(option, level))}
|
|
283
|
+
{columnOptions.map((option) => renderMenuItem(option, level))}
|
|
284
284
|
{columnOptions.length === 0 && (
|
|
285
285
|
<View style={CascaderStyles['getEmptyStyle']()}>
|
|
286
286
|
<Text>无数据</Text>
|
|
@@ -289,7 +289,7 @@ export const CascaderComponent = forwardRef<CascaderRef, CascaderProps>((props,
|
|
|
289
289
|
</View>
|
|
290
290
|
);
|
|
291
291
|
},
|
|
292
|
-
[expandedValues.length, renderMenuItem]
|
|
292
|
+
[expandedValues.length, renderMenuItem],
|
|
293
293
|
);
|
|
294
294
|
|
|
295
295
|
// 渲染菜单
|
|
@@ -305,16 +305,14 @@ export const CascaderComponent = forwardRef<CascaderRef, CascaderProps>((props,
|
|
|
305
305
|
columns.push(currentOptions);
|
|
306
306
|
}
|
|
307
307
|
|
|
308
|
-
|
|
308
|
+
if (i < expandedValues.length) {
|
|
309
309
|
const levelValue = expandedValues[i];
|
|
310
310
|
if (levelValue && levelValue.length > 0) {
|
|
311
311
|
const optionValue = levelValue[levelValue.length - 1];
|
|
312
|
-
const nextOption = currentOptions.find(
|
|
313
|
-
(opt
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
}
|
|
317
|
-
);
|
|
312
|
+
const nextOption = currentOptions.find((opt: CascaderOption) => {
|
|
313
|
+
const currentValue = getOptionValue(opt);
|
|
314
|
+
return currentValue.length > 0 && currentValue[0] === optionValue;
|
|
315
|
+
});
|
|
318
316
|
|
|
319
317
|
if (nextOption && hasChildren(nextOption)) {
|
|
320
318
|
currentOptions = nextOption[fields.children as keyof typeof nextOption] as CascaderOption[];
|
|
@@ -329,10 +327,12 @@ export const CascaderComponent = forwardRef<CascaderRef, CascaderProps>((props,
|
|
|
329
327
|
}
|
|
330
328
|
}
|
|
331
329
|
|
|
332
|
-
const menuContent = dropdownRender ?
|
|
333
|
-
|
|
334
|
-
{
|
|
335
|
-
|
|
330
|
+
const menuContent = dropdownRender ? (
|
|
331
|
+
dropdownRender(
|
|
332
|
+
<View style={{ display: 'flex' }}>
|
|
333
|
+
{columns.map((columnOptions, level) => renderMenuColumn(columnOptions, level))}
|
|
334
|
+
</View>,
|
|
335
|
+
)
|
|
336
336
|
) : (
|
|
337
337
|
<View style={{ display: 'flex' }}>
|
|
338
338
|
{columns.map((columnOptions, level) => renderMenuColumn(columnOptions, level))}
|
|
@@ -361,13 +361,9 @@ export const CascaderComponent = forwardRef<CascaderRef, CascaderProps>((props,
|
|
|
361
361
|
<View style={CascaderStyles['getPathStyle']()}>
|
|
362
362
|
{selectedOptions.map((option, index) => (
|
|
363
363
|
<React.Fragment key={index}>
|
|
364
|
-
<Text style={CascaderStyles['getPathItemStyle']()}>
|
|
365
|
-
{String(getOptionLabel(option))}
|
|
366
|
-
</Text>
|
|
364
|
+
<Text style={CascaderStyles['getPathItemStyle']()}>{String(getOptionLabel(option))}</Text>
|
|
367
365
|
{index < selectedOptions.length - 1 && (
|
|
368
|
-
<Text style={CascaderStyles['getPathSeparatorStyle']()}>
|
|
369
|
-
{pathSeparator}
|
|
370
|
-
</Text>
|
|
366
|
+
<Text style={CascaderStyles['getPathSeparatorStyle']()}>{pathSeparator}</Text>
|
|
371
367
|
)}
|
|
372
368
|
</React.Fragment>
|
|
373
369
|
))}
|
|
@@ -399,8 +395,8 @@ export const CascaderComponent = forwardRef<CascaderRef, CascaderProps>((props,
|
|
|
399
395
|
const formatDisplayValue = useCallback(() => {
|
|
400
396
|
if (!selectedOptions.length) return '';
|
|
401
397
|
|
|
402
|
-
const labels = selectedOptions.map(option => String(getOptionLabel(option)));
|
|
403
|
-
|
|
398
|
+
const labels = selectedOptions.map((option) => String(getOptionLabel(option)));
|
|
399
|
+
|
|
404
400
|
if (displayRender) {
|
|
405
401
|
return displayRender(labels, selectedOptions);
|
|
406
402
|
}
|
|
@@ -471,7 +467,7 @@ export const CascaderComponent = forwardRef<CascaderRef, CascaderProps>((props,
|
|
|
471
467
|
setExpandedValues,
|
|
472
468
|
setSearchValue,
|
|
473
469
|
reset,
|
|
474
|
-
]
|
|
470
|
+
],
|
|
475
471
|
);
|
|
476
472
|
|
|
477
473
|
// 生成输入框样式
|
|
@@ -486,35 +482,44 @@ export const CascaderComponent = forwardRef<CascaderRef, CascaderProps>((props,
|
|
|
486
482
|
}, [size, internalDisabled, focused, style]);
|
|
487
483
|
|
|
488
484
|
// 生成容器样式
|
|
489
|
-
const containerStyle = useMemo(
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
485
|
+
const containerStyle = useMemo(
|
|
486
|
+
() => ({
|
|
487
|
+
...CascaderStyles['getStyle']({
|
|
488
|
+
size,
|
|
489
|
+
variant,
|
|
490
|
+
status,
|
|
491
|
+
disabled: internalDisabled,
|
|
492
|
+
readonly: internalReadonly,
|
|
493
|
+
loading,
|
|
494
|
+
style: {},
|
|
495
|
+
}),
|
|
496
|
+
...style,
|
|
498
497
|
}),
|
|
499
|
-
|
|
500
|
-
|
|
498
|
+
[size, variant, status, internalDisabled, internalReadonly, loading, style],
|
|
499
|
+
);
|
|
501
500
|
|
|
502
501
|
// 生成输入框包装器样式
|
|
503
|
-
const inputWrapperStyle = useMemo(
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
502
|
+
const inputWrapperStyle = useMemo(
|
|
503
|
+
() => ({
|
|
504
|
+
position: 'relative' as const,
|
|
505
|
+
display: 'flex' as const,
|
|
506
|
+
alignItems: 'center' as const,
|
|
507
|
+
...CascaderStyles['getSizeStyle'](size),
|
|
508
|
+
}),
|
|
509
|
+
[size],
|
|
510
|
+
);
|
|
509
511
|
|
|
510
512
|
// 无障碍状态
|
|
511
|
-
const finalAccessibilityState = useMemo(
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
513
|
+
const finalAccessibilityState = useMemo(
|
|
514
|
+
() => ({
|
|
515
|
+
disabled: internalDisabled,
|
|
516
|
+
readonly: internalReadonly,
|
|
517
|
+
expanded: open,
|
|
518
|
+
busy: loading,
|
|
519
|
+
...accessibilityState,
|
|
520
|
+
}),
|
|
521
|
+
[internalDisabled, internalReadonly, open, loading, accessibilityState],
|
|
522
|
+
);
|
|
518
523
|
|
|
519
524
|
return (
|
|
520
525
|
<View
|
|
@@ -534,11 +539,7 @@ export const CascaderComponent = forwardRef<CascaderRef, CascaderProps>((props,
|
|
|
534
539
|
{...restProps}
|
|
535
540
|
>
|
|
536
541
|
<View style={inputWrapperStyle}>
|
|
537
|
-
{prefix &&
|
|
538
|
-
<View style={{ position: 'absolute', left: '12px', zIndex: 1 }}>
|
|
539
|
-
{prefix}
|
|
540
|
-
</View>
|
|
541
|
-
)}
|
|
542
|
+
{prefix && <View style={{ position: 'absolute', left: '12px', zIndex: 1 }}>{prefix}</View>}
|
|
542
543
|
|
|
543
544
|
<Input
|
|
544
545
|
ref={inputRef}
|
|
@@ -552,23 +553,18 @@ export const CascaderComponent = forwardRef<CascaderRef, CascaderProps>((props,
|
|
|
552
553
|
/>
|
|
553
554
|
|
|
554
555
|
{allowClear && value && (
|
|
555
|
-
<View
|
|
556
|
-
style={CascaderStyles['getClearStyle']()}
|
|
557
|
-
onClick={handleClear}
|
|
558
|
-
>
|
|
556
|
+
<View style={CascaderStyles['getClearStyle']()} onClick={handleClear}>
|
|
559
557
|
<Text>{clearIcon || '×'}</Text>
|
|
560
558
|
</View>
|
|
561
559
|
)}
|
|
562
560
|
|
|
563
|
-
<View
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
) :
|
|
570
|
-
<Text>{suffixIcon || '▼'}</Text>
|
|
571
|
-
)}
|
|
561
|
+
<View
|
|
562
|
+
style={{
|
|
563
|
+
...CascaderStyles['getSuffixStyle'](),
|
|
564
|
+
...(open ? CascaderStyles['getSuffixExpandedStyle']() : {}),
|
|
565
|
+
}}
|
|
566
|
+
>
|
|
567
|
+
{loading ? <Text style={CascaderStyles['getLoadingIconStyle']()}>⏳</Text> : <Text>{suffixIcon || '▼'}</Text>}
|
|
572
568
|
</View>
|
|
573
569
|
</View>
|
|
574
570
|
|
|
@@ -582,4 +578,4 @@ CascaderComponent.displayName = 'Cascader';
|
|
|
582
578
|
|
|
583
579
|
/** 导出级联选择器组件 */
|
|
584
580
|
export const Cascader = CascaderComponent;
|
|
585
|
-
export default Cascader;
|
|
581
|
+
export default Cascader;
|
|
@@ -262,13 +262,29 @@ export interface CascaderConfig {
|
|
|
262
262
|
/** 级联选择器工具函数接口 */
|
|
263
263
|
export interface CascaderUtils {
|
|
264
264
|
/** 查找选项路径 */
|
|
265
|
-
findOptionPath: (
|
|
265
|
+
findOptionPath: (
|
|
266
|
+
_options: CascaderOption[],
|
|
267
|
+
value: CascaderValue,
|
|
268
|
+
fieldNames?: CascaderProps['fieldNames'],
|
|
269
|
+
) => CascaderOption[];
|
|
266
270
|
/** 过滤选项 */
|
|
267
|
-
filterOptions: (
|
|
271
|
+
filterOptions: (
|
|
272
|
+
_options: CascaderOption[],
|
|
273
|
+
inputValue: string,
|
|
274
|
+
filterOption?: CascaderProps['filterOption'],
|
|
275
|
+
) => CascaderOption[];
|
|
268
276
|
/** 格式化显示值 */
|
|
269
|
-
formatDisplayValue: (
|
|
277
|
+
formatDisplayValue: (
|
|
278
|
+
_labels: ReactNode[],
|
|
279
|
+
selectedOptions: CascaderOption[],
|
|
280
|
+
config?: { showPath?: boolean; pathSeparator?: string },
|
|
281
|
+
) => ReactNode;
|
|
270
282
|
/** 验证值 */
|
|
271
|
-
validateValue: (
|
|
283
|
+
validateValue: (
|
|
284
|
+
_value: CascaderValue,
|
|
285
|
+
options: CascaderOption[],
|
|
286
|
+
fieldNames?: CascaderProps['fieldNames'],
|
|
287
|
+
) => boolean;
|
|
272
288
|
/** 展平选项 */
|
|
273
289
|
flattenOptions: (_options: CascaderOption[], fieldNames?: CascaderProps['fieldNames']) => CascaderOption[];
|
|
274
290
|
/** 生成选项树 */
|
|
@@ -376,7 +392,11 @@ export interface CascaderStyles {
|
|
|
376
392
|
/** 获取动画关键帧 */
|
|
377
393
|
getAnimations: () => Record<string, CSSProperties>;
|
|
378
394
|
/** 格式化显示值 */
|
|
379
|
-
formatDisplayValue: (
|
|
395
|
+
formatDisplayValue: (
|
|
396
|
+
_labels: ReactNode[],
|
|
397
|
+
selectedOptions: CascaderOption[],
|
|
398
|
+
config?: { showPath?: boolean; pathSeparator?: string },
|
|
399
|
+
) => ReactNode;
|
|
380
400
|
/** 获取完整样式 */
|
|
381
401
|
getStyle: (_config: {
|
|
382
402
|
size?: CascaderSize;
|
|
@@ -405,30 +425,27 @@ export class CascaderTools {
|
|
|
405
425
|
static findOptionPath(
|
|
406
426
|
options: CascaderOption[],
|
|
407
427
|
value: CascaderValue,
|
|
408
|
-
fieldNames: CascaderProps['fieldNames'] = {}
|
|
428
|
+
fieldNames: CascaderProps['fieldNames'] = {},
|
|
409
429
|
): CascaderOption[] {
|
|
410
|
-
const {
|
|
411
|
-
value: valueKey = 'value',
|
|
412
|
-
children: childrenKey = 'children',
|
|
413
|
-
} = fieldNames;
|
|
430
|
+
const { value: valueKey = 'value', children: childrenKey = 'children' } = fieldNames;
|
|
414
431
|
|
|
415
432
|
const findPath = (
|
|
416
433
|
currentOptions: CascaderOption[],
|
|
417
434
|
targetValue: CascaderValue,
|
|
418
|
-
path: CascaderOption[] = []
|
|
435
|
+
path: CascaderOption[] = [],
|
|
419
436
|
): CascaderOption[] | null => {
|
|
420
437
|
for (const option of currentOptions) {
|
|
421
438
|
const currentPath = [...path, option];
|
|
422
|
-
|
|
439
|
+
|
|
423
440
|
if (option[valueKey as keyof typeof option] === targetValue[targetValue.length - 1]) {
|
|
424
441
|
return currentPath;
|
|
425
442
|
}
|
|
426
|
-
|
|
443
|
+
|
|
427
444
|
if (option[childrenKey as keyof typeof option]) {
|
|
428
445
|
const found = findPath(
|
|
429
446
|
option[childrenKey as keyof typeof option] as CascaderOption[],
|
|
430
447
|
targetValue,
|
|
431
|
-
currentPath
|
|
448
|
+
currentPath,
|
|
432
449
|
);
|
|
433
450
|
if (found) return found;
|
|
434
451
|
}
|
|
@@ -443,17 +460,14 @@ export class CascaderTools {
|
|
|
443
460
|
static filterOptions(
|
|
444
461
|
options: CascaderOption[],
|
|
445
462
|
inputValue: string,
|
|
446
|
-
filterOption?: CascaderProps['filterOption']
|
|
463
|
+
filterOption?: CascaderProps['filterOption'],
|
|
447
464
|
): CascaderOption[] {
|
|
448
465
|
const filtered: CascaderOption[] = [];
|
|
449
|
-
|
|
450
|
-
const filter = (
|
|
451
|
-
currentOptions: CascaderOption[],
|
|
452
|
-
path: CascaderOption[] = []
|
|
453
|
-
) => {
|
|
466
|
+
|
|
467
|
+
const filter = (currentOptions: CascaderOption[], path: CascaderOption[] = []) => {
|
|
454
468
|
for (const option of currentOptions) {
|
|
455
469
|
const currentPath = [...path, option];
|
|
456
|
-
|
|
470
|
+
|
|
457
471
|
if (filterOption) {
|
|
458
472
|
if (filterOption(inputValue, option, currentPath)) {
|
|
459
473
|
filtered.push(option);
|
|
@@ -461,12 +475,12 @@ export class CascaderTools {
|
|
|
461
475
|
} else {
|
|
462
476
|
const label = String(option.label).toLowerCase();
|
|
463
477
|
const search = inputValue.toLowerCase();
|
|
464
|
-
|
|
478
|
+
|
|
465
479
|
if (label.includes(search)) {
|
|
466
480
|
filtered.push(option);
|
|
467
481
|
}
|
|
468
482
|
}
|
|
469
|
-
|
|
483
|
+
|
|
470
484
|
if (option.children) {
|
|
471
485
|
filter(option.children, currentPath);
|
|
472
486
|
}
|
|
@@ -481,14 +495,14 @@ export class CascaderTools {
|
|
|
481
495
|
static formatDisplayValue(
|
|
482
496
|
labels: ReactNode[],
|
|
483
497
|
_selectedOptions: CascaderOption[],
|
|
484
|
-
config: { showPath?: boolean; pathSeparator?: string } = {}
|
|
498
|
+
config: { showPath?: boolean; pathSeparator?: string } = {},
|
|
485
499
|
): ReactNode {
|
|
486
500
|
const { showPath = false, pathSeparator = ' / ' } = config;
|
|
487
|
-
|
|
501
|
+
|
|
488
502
|
if (!showPath || labels.length === 0) {
|
|
489
503
|
return labels[labels.length - 1] || '';
|
|
490
504
|
}
|
|
491
|
-
|
|
505
|
+
|
|
492
506
|
return labels.join(pathSeparator);
|
|
493
507
|
}
|
|
494
508
|
|
|
@@ -496,20 +510,15 @@ export class CascaderTools {
|
|
|
496
510
|
static validateValue(
|
|
497
511
|
value: CascaderValue,
|
|
498
512
|
options: CascaderOption[],
|
|
499
|
-
fieldNames: CascaderProps['fieldNames'] = {}
|
|
513
|
+
fieldNames: CascaderProps['fieldNames'] = {},
|
|
500
514
|
): boolean {
|
|
501
515
|
const path = this.findOptionPath(options, value, fieldNames);
|
|
502
516
|
return path.length > 0;
|
|
503
517
|
}
|
|
504
518
|
|
|
505
519
|
/** 展平选项 */
|
|
506
|
-
static flattenOptions(
|
|
507
|
-
|
|
508
|
-
fieldNames: CascaderProps['fieldNames'] = {}
|
|
509
|
-
): CascaderOption[] {
|
|
510
|
-
const {
|
|
511
|
-
children: childrenKey = 'children',
|
|
512
|
-
} = fieldNames;
|
|
520
|
+
static flattenOptions(options: CascaderOption[], fieldNames: CascaderProps['fieldNames'] = {}): CascaderOption[] {
|
|
521
|
+
const { children: childrenKey = 'children' } = fieldNames;
|
|
513
522
|
|
|
514
523
|
const flatten = (currentOptions: CascaderOption[]): CascaderOption[] => {
|
|
515
524
|
return currentOptions.reduce<CascaderOption[]>((acc, option) => {
|
|
@@ -527,20 +536,15 @@ export class CascaderTools {
|
|
|
527
536
|
/** 生成选项树 */
|
|
528
537
|
static generateOptionTree(
|
|
529
538
|
options: CascaderOption[],
|
|
530
|
-
_fieldNames: CascaderProps['fieldNames'] = {}
|
|
539
|
+
_fieldNames: CascaderProps['fieldNames'] = {},
|
|
531
540
|
): CascaderOption[] {
|
|
532
541
|
// 这里可以实现更复杂的树生成逻辑
|
|
533
542
|
return options;
|
|
534
543
|
}
|
|
535
544
|
|
|
536
545
|
/** 获取叶子节点 */
|
|
537
|
-
static getLeafOptions(
|
|
538
|
-
|
|
539
|
-
fieldNames: CascaderProps['fieldNames'] = {}
|
|
540
|
-
): CascaderOption[] {
|
|
541
|
-
const {
|
|
542
|
-
children: childrenKey = 'children',
|
|
543
|
-
} = fieldNames;
|
|
546
|
+
static getLeafOptions(options: CascaderOption[], fieldNames: CascaderProps['fieldNames'] = {}): CascaderOption[] {
|
|
547
|
+
const { children: childrenKey = 'children' } = fieldNames;
|
|
544
548
|
|
|
545
549
|
const getLeaves = (currentOptions: CascaderOption[]): CascaderOption[] => {
|
|
546
550
|
return currentOptions.reduce<CascaderOption[]>((acc, option) => {
|
|
@@ -557,13 +561,8 @@ export class CascaderTools {
|
|
|
557
561
|
}
|
|
558
562
|
|
|
559
563
|
/** 获取禁用选项 */
|
|
560
|
-
static getDisabledOptions(
|
|
561
|
-
|
|
562
|
-
fieldNames: CascaderProps['fieldNames'] = {}
|
|
563
|
-
): CascaderOption[] {
|
|
564
|
-
const {
|
|
565
|
-
children: childrenKey = 'children',
|
|
566
|
-
} = fieldNames;
|
|
564
|
+
static getDisabledOptions(options: CascaderOption[], fieldNames: CascaderProps['fieldNames'] = {}): CascaderOption[] {
|
|
565
|
+
const { children: childrenKey = 'children' } = fieldNames;
|
|
567
566
|
|
|
568
567
|
const getDisabled = (currentOptions: CascaderOption[]): CascaderOption[] => {
|
|
569
568
|
return currentOptions.reduce<CascaderOption[]>((acc, option) => {
|
|
@@ -579,4 +578,4 @@ export class CascaderTools {
|
|
|
579
578
|
|
|
580
579
|
return getDisabled(options);
|
|
581
580
|
}
|
|
582
|
-
}
|
|
581
|
+
}
|
|
@@ -6,11 +6,14 @@ import type { CascaderProps } from '../Cascader.types';
|
|
|
6
6
|
* 提供类型安全的字段名称映射
|
|
7
7
|
*/
|
|
8
8
|
export function useCascaderFieldNames(fieldNames?: CascaderProps['fieldNames']) {
|
|
9
|
-
return useMemo(
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
}
|
|
9
|
+
return useMemo(
|
|
10
|
+
() => ({
|
|
11
|
+
value: fieldNames?.value || 'value',
|
|
12
|
+
label: fieldNames?.label || 'label',
|
|
13
|
+
children: fieldNames?.children || 'children',
|
|
14
|
+
disabled: fieldNames?.disabled || 'disabled',
|
|
15
|
+
isLeaf: fieldNames?.isLeaf || 'isLeaf',
|
|
16
|
+
}),
|
|
17
|
+
[fieldNames],
|
|
18
|
+
);
|
|
19
|
+
}
|