@ant-design/pro-components 3.1.1-1 → 3.1.3-0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/pro-components.min.js +1 -1
- package/es/card/components/Card/index.js +17 -3
- package/es/descriptions/index.d.ts +0 -2
- package/es/descriptions/index.js +1 -5
- package/es/descriptions/useFetchData.js +17 -2
- package/es/field/components/Cascader/index.d.ts +3 -3
- package/es/field/components/Cascader/index.js +0 -2
- package/es/field/components/Checkbox/index.d.ts +2 -2
- package/es/field/components/Checkbox/index.js +2 -0
- package/es/field/components/Code/index.js +1 -8
- package/es/field/components/ColorPicker/index.d.ts +2 -2
- package/es/field/components/DatePicker/index.d.ts +2 -2
- package/es/field/components/DatePicker/index.js +3 -5
- package/es/field/components/FromNow/index.d.ts +1 -0
- package/es/field/components/FromNow/index.js +2 -2
- package/es/field/components/Money/index.js +0 -1
- package/es/field/components/Progress/index.js +1 -2
- package/es/field/components/Radio/index.d.ts +1 -1
- package/es/field/components/RangePicker/index.d.ts +2 -2
- package/es/field/components/RangePicker/index.js +3 -11
- package/es/field/components/Segmented/index.d.ts +1 -1
- package/es/field/components/Select/LightSelect/index.d.ts +3 -1
- package/es/field/components/Select/LightSelect/index.js +3 -1
- package/es/field/components/Select/index.d.ts +2 -2
- package/es/field/components/Select/index.js +1 -4
- package/es/field/components/Switch/index.d.ts +1 -1
- package/es/field/components/Switch/index.js +2 -1
- package/es/field/components/TimePicker/index.d.ts +2 -0
- package/es/field/components/TimePicker/index.js +9 -8
- package/es/field/components/TreeSelect/index.d.ts +3 -3
- package/es/field/components/TreeSelect/index.js +2 -2
- package/es/form/BaseForm/BaseForm.js +16 -2
- package/es/form/BaseForm/LightWrapper/index.js +7 -1
- package/es/form/BaseForm/Submitter/index.js +2 -2
- package/es/form/components/Cascader/index.d.ts +1 -1
- package/es/form/components/ColorPicker/index.d.ts +1 -1
- package/es/form/components/DatePicker/DateTimePicker.js +1 -0
- package/es/form/components/DateRangePicker/DateTimeRangePicker.d.ts +1 -1
- package/es/form/components/DateRangePicker/DateTimeRangePicker.js +1 -3
- package/es/form/components/Digit/DigitRange.d.ts +2 -2
- package/es/form/components/Digit/index.d.ts +1 -1
- package/es/form/components/Field/index.d.ts +0 -1
- package/es/form/components/Field/index.js +3 -5
- package/es/form/components/FormItem/FormItemRender/index.d.ts +1 -0
- package/es/form/components/FormItem/Group/index.js +17 -3
- package/es/form/components/FormItem/index.d.ts +1 -0
- package/es/form/components/FormItem/index.js +16 -31
- package/es/form/components/FormItem/warpField.js +1 -0
- package/es/form/components/Money/index.d.ts +1 -1
- package/es/form/components/Radio/index.d.ts +2 -2
- package/es/form/components/Rate/index.d.ts +1 -1
- package/es/form/components/Slider/index.d.ts +1 -1
- package/es/form/components/TextArea/index.d.ts +1 -1
- package/es/form/helpers/grid.d.ts +7 -3
- package/es/form/helpers/grid.js +19 -4
- package/es/form/layouts/DrawerForm/index.js +16 -2
- package/es/form/layouts/LightFilter/index.js +7 -4
- package/es/form/layouts/ModalForm/index.js +17 -2
- package/es/form/layouts/ProForm/index.d.ts +1 -1
- package/es/form/layouts/QueryFilter/index.js +17 -3
- package/es/form/layouts/StepsForm/index.js +16 -2
- package/es/layout/ProLayout.js +33 -5
- package/es/layout/components/AppsLogoComponents/style/index.js +1 -0
- package/es/layout/components/SettingDrawer/index.js +33 -5
- package/es/layout/components/SiderMenu/BaseMenu.js +0 -2
- package/es/list/ListView.js +6 -3
- package/es/provider/index.d.ts +0 -4
- package/es/provider/index.js +1 -1
- package/es/table/Store/Provide.d.ts +0 -1
- package/es/table/Store/Provide.js +1 -1
- package/es/table/Table.js +0 -1
- package/es/table/typing.d.ts +0 -4
- package/es/table/useFetchData.js +16 -2
- package/es/table/utils/cellRenderToFromItem.d.ts +1 -1
- package/es/table/utils/columnRender.d.ts +1 -1
- package/es/table/utils/columnRender.js +1 -4
- package/es/table/utils/genProColumnToColumn.d.ts +2 -2
- package/es/table/utils/index.d.ts +0 -10
- package/es/table/utils/index.js +0 -12
- package/es/utils/components/FieldLabel/index.js +3 -3
- package/es/utils/components/FieldLabel/style.js +23 -4
- package/es/utils/components/FilterDropdown/index.js +1 -1
- package/es/utils/components/FilterDropdown/style.js +10 -0
- package/es/utils/pickProProps/index.js +1 -1
- package/es/utils/useEditableArray/index.d.ts +1 -1
- package/es/utils/useEditableArray/index.js +1 -1
- package/es/utils/useLazyKVMap.d.ts +5 -0
- package/es/utils/useLazyKVMap.js +28 -0
- package/es/utils/useMediaQuery/index.d.ts +2 -2
- package/es/utils/usePagination.d.ts +8 -0
- package/es/utils/usePagination.js +67 -0
- package/es/utils/useSelection.d.ts +19 -0
- package/es/utils/useSelection.js +86 -0
- package/lib/card/components/Card/index.js +16 -2
- package/lib/descriptions/index.d.ts +0 -2
- package/lib/descriptions/index.js +1 -5
- package/lib/descriptions/useFetchData.js +17 -2
- package/lib/field/components/Cascader/index.js +0 -2
- package/lib/field/components/Checkbox/index.js +2 -0
- package/lib/field/components/Code/index.js +1 -8
- package/lib/field/components/DatePicker/index.js +3 -5
- package/lib/field/components/FromNow/index.d.ts +1 -0
- package/lib/field/components/FromNow/index.js +2 -2
- package/lib/field/components/Money/index.js +0 -1
- package/lib/field/components/Progress/index.js +1 -2
- package/lib/field/components/RangePicker/index.js +3 -11
- package/lib/field/components/Select/LightSelect/index.d.ts +2 -0
- package/lib/field/components/Select/LightSelect/index.js +3 -1
- package/lib/field/components/Select/index.js +1 -4
- package/lib/field/components/Switch/index.js +2 -1
- package/lib/field/components/TimePicker/index.d.ts +2 -0
- package/lib/field/components/TimePicker/index.js +9 -8
- package/lib/field/components/TreeSelect/index.js +2 -2
- package/lib/form/BaseForm/BaseForm.js +16 -2
- package/lib/form/BaseForm/LightWrapper/index.js +7 -1
- package/lib/form/BaseForm/Submitter/index.js +2 -2
- package/lib/form/components/DatePicker/DateTimePicker.js +1 -0
- package/lib/form/components/DateRangePicker/DateTimeRangePicker.d.ts +1 -1
- package/lib/form/components/DateRangePicker/DateTimeRangePicker.js +1 -3
- package/lib/form/components/Field/index.d.ts +0 -1
- package/lib/form/components/Field/index.js +1 -3
- package/lib/form/components/FormItem/FormItemRender/index.d.ts +1 -0
- package/lib/form/components/FormItem/Group/index.js +16 -2
- package/lib/form/components/FormItem/index.d.ts +1 -0
- package/lib/form/components/FormItem/index.js +16 -31
- package/lib/form/components/FormItem/warpField.js +1 -0
- package/lib/form/helpers/grid.d.ts +7 -3
- package/lib/form/helpers/grid.js +20 -4
- package/lib/form/layouts/DrawerForm/index.js +16 -2
- package/lib/form/layouts/LightFilter/index.js +7 -4
- package/lib/form/layouts/ModalForm/index.js +17 -2
- package/lib/form/layouts/QueryFilter/index.js +16 -2
- package/lib/form/layouts/StepsForm/index.js +16 -2
- package/lib/layout/ProLayout.js +32 -4
- package/lib/layout/components/AppsLogoComponents/style/index.js +1 -0
- package/lib/layout/components/SettingDrawer/index.js +32 -4
- package/lib/layout/components/SiderMenu/BaseMenu.js +0 -2
- package/lib/list/ListView.js +7 -4
- package/lib/provider/index.d.ts +0 -4
- package/lib/provider/index.js +1 -1
- package/lib/table/Store/Provide.d.ts +0 -1
- package/lib/table/Store/Provide.js +1 -1
- package/lib/table/Table.js +0 -1
- package/lib/table/typing.d.ts +0 -4
- package/lib/table/useFetchData.js +16 -2
- package/lib/table/utils/cellRenderToFromItem.d.ts +1 -1
- package/lib/table/utils/columnRender.d.ts +1 -1
- package/lib/table/utils/columnRender.js +1 -4
- package/lib/table/utils/genProColumnToColumn.d.ts +2 -2
- package/lib/table/utils/index.d.ts +0 -10
- package/lib/table/utils/index.js +3 -15
- package/lib/utils/components/FieldLabel/index.js +3 -3
- package/lib/utils/components/FieldLabel/style.js +23 -4
- package/lib/utils/components/FilterDropdown/index.js +1 -1
- package/lib/utils/components/FilterDropdown/style.js +10 -0
- package/lib/utils/pickProProps/index.js +1 -1
- package/lib/utils/useEditableArray/index.d.ts +1 -1
- package/lib/utils/useEditableArray/index.js +2 -2
- package/lib/utils/useLazyKVMap.d.ts +5 -0
- package/lib/utils/useLazyKVMap.js +34 -0
- package/lib/utils/usePagination.d.ts +8 -0
- package/lib/utils/usePagination.js +74 -0
- package/lib/utils/useSelection.d.ts +19 -0
- package/lib/utils/useSelection.js +93 -0
- package/package.json +2 -1
|
@@ -370,13 +370,27 @@ export function BaseForm(props) {
|
|
|
370
370
|
} = props;
|
|
371
371
|
const formRef = useRef({});
|
|
372
372
|
const [loading, setLoadingInner] = useControlledState(false, propsLoading);
|
|
373
|
+
|
|
374
|
+
/**
|
|
375
|
+
* 使用 useRefFunction 包装回调,确保引用稳定
|
|
376
|
+
*/
|
|
377
|
+
const onLoadingChangeCallback = useRefFunction(l => {
|
|
378
|
+
onLoadingChange?.(l);
|
|
379
|
+
});
|
|
380
|
+
|
|
381
|
+
/**
|
|
382
|
+
* 包装 setLoading,使用 queueMicrotask 延迟回调调用
|
|
383
|
+
* 避免在渲染阶段调用外部回调导致的 React 警告
|
|
384
|
+
*/
|
|
373
385
|
const setLoading = useCallback(updater => {
|
|
374
386
|
setLoadingInner(prev => {
|
|
375
387
|
const next = typeof updater === 'function' ? updater(prev) : updater;
|
|
376
|
-
|
|
388
|
+
queueMicrotask(() => {
|
|
389
|
+
onLoadingChangeCallback(next);
|
|
390
|
+
});
|
|
377
391
|
return next;
|
|
378
392
|
});
|
|
379
|
-
}, [
|
|
393
|
+
}, [onLoadingChangeCallback]);
|
|
380
394
|
const [urlSearch, setUrlSearch] = useUrlSearchParams({}, {
|
|
381
395
|
disabled: !syncToUrl
|
|
382
396
|
});
|
|
@@ -94,7 +94,13 @@ const LightWrapper = props => {
|
|
|
94
94
|
onChange: e => {
|
|
95
95
|
setTempValue(e?.target ? e.target.value : e);
|
|
96
96
|
},
|
|
97
|
-
...children.props
|
|
97
|
+
...children.props,
|
|
98
|
+
// light 模式下由外层 FilterDropdown 统一描边,内层 Select/TreeSelect/DatePicker 等统一使用 borderless,各 Field 组件无需再根据 light 判断
|
|
99
|
+
variant: 'borderless',
|
|
100
|
+
fieldProps: {
|
|
101
|
+
...children.props?.fieldProps,
|
|
102
|
+
variant: 'borderless'
|
|
103
|
+
}
|
|
98
104
|
})
|
|
99
105
|
})
|
|
100
106
|
}));
|
|
@@ -45,7 +45,7 @@ const Submitter = props => {
|
|
|
45
45
|
const dom = [];
|
|
46
46
|
if (resetButtonProps !== false) {
|
|
47
47
|
dom.push( /*#__PURE__*/_createElement(Button, {
|
|
48
|
-
...omit(resetButtonProps ?? {}, ['preventDefault']),
|
|
48
|
+
...omit(resetButtonProps ?? {}, ['preventDefault', 'fieldProps']),
|
|
49
49
|
key: "rest",
|
|
50
50
|
onClick: e => {
|
|
51
51
|
if (!resetButtonProps?.preventDefault) reset();
|
|
@@ -56,7 +56,7 @@ const Submitter = props => {
|
|
|
56
56
|
if (submitButtonProps !== false) {
|
|
57
57
|
dom.push( /*#__PURE__*/_createElement(Button, {
|
|
58
58
|
type: "primary",
|
|
59
|
-
...omit(submitButtonProps || {}, ['preventDefault']),
|
|
59
|
+
...omit(submitButtonProps || {}, ['preventDefault', 'fieldProps']),
|
|
60
60
|
key: "submit",
|
|
61
61
|
onClick: e => {
|
|
62
62
|
if (!submitButtonProps?.preventDefault) submit();
|
|
@@ -8,7 +8,7 @@ declare const _default: React.ForwardRefExoticComponent<{
|
|
|
8
8
|
emptyText?: React.ReactNode;
|
|
9
9
|
cacheForSwr?: boolean | undefined;
|
|
10
10
|
disabled?: boolean | undefined;
|
|
11
|
-
width?: number | "
|
|
11
|
+
width?: number | "xl" | "lg" | "md" | "sm" | "xs" | undefined;
|
|
12
12
|
proFieldProps?: import("src/utils").ProFieldProps | undefined;
|
|
13
13
|
footerRender?: import("../../typing").LightFilterFooterRender | undefined;
|
|
14
14
|
children?: any;
|
|
@@ -16,7 +16,7 @@ declare const _default: React.ForwardRefExoticComponent<{
|
|
|
16
16
|
emptyText?: React.ReactNode;
|
|
17
17
|
cacheForSwr?: boolean | undefined;
|
|
18
18
|
disabled?: boolean | undefined;
|
|
19
|
-
width?: number | "
|
|
19
|
+
width?: number | "xl" | "lg" | "md" | "sm" | "xs" | undefined;
|
|
20
20
|
proFieldProps?: import("src/utils").ProFieldProps | undefined;
|
|
21
21
|
footerRender?: import("../../typing").LightFilterFooterRender | undefined;
|
|
22
22
|
children?: any;
|
|
@@ -16,9 +16,7 @@ export const ProFormDateTimeRangePicker = /*#__PURE__*/React.forwardRef(({
|
|
|
16
16
|
}, ref) => {
|
|
17
17
|
return /*#__PURE__*/_jsx(BaseDateRanger, {
|
|
18
18
|
ref: ref,
|
|
19
|
-
fieldProps:
|
|
20
|
-
...fieldProps
|
|
21
|
-
},
|
|
19
|
+
fieldProps: fieldProps,
|
|
22
20
|
valueType: valueType,
|
|
23
21
|
proFieldProps: proFieldProps,
|
|
24
22
|
fieldConfig: {
|
|
@@ -13,7 +13,7 @@ export type ProFormDigitRangeProps = ProFormFieldItemProps<RangeInputNumberProps
|
|
|
13
13
|
separatorWidth?: number;
|
|
14
14
|
};
|
|
15
15
|
declare const ForwardRefProFormDigit: React.ForwardRefExoticComponent<{
|
|
16
|
-
fieldProps?: Partial<import("../../typing").FieldProps<any> & Omit<InputNumberProps<number>, "value" | "
|
|
16
|
+
fieldProps?: Partial<import("../../typing").FieldProps<any> & Omit<InputNumberProps<number>, "value" | "defaultValue" | "onChange" | "placeholder"> & {
|
|
17
17
|
value?: ValuePair | undefined;
|
|
18
18
|
defaultValue?: ValuePair | undefined;
|
|
19
19
|
onChange?: ((value?: ValuePair) => void) | undefined;
|
|
@@ -23,7 +23,7 @@ declare const ForwardRefProFormDigit: React.ForwardRefExoticComponent<{
|
|
|
23
23
|
emptyText?: React.ReactNode;
|
|
24
24
|
cacheForSwr?: boolean | undefined;
|
|
25
25
|
disabled?: boolean | undefined;
|
|
26
|
-
width?: number | "
|
|
26
|
+
width?: number | "xl" | "lg" | "md" | "sm" | "xs" | undefined;
|
|
27
27
|
proFieldProps?: import("src/utils").ProFieldProps | undefined;
|
|
28
28
|
footerRender?: import("../../typing").LightFilterFooterRender | undefined;
|
|
29
29
|
children?: any;
|
|
@@ -12,7 +12,7 @@ declare const ForwardRefProFormDigit: React.ForwardRefExoticComponent<{
|
|
|
12
12
|
emptyText?: React.ReactNode;
|
|
13
13
|
cacheForSwr?: boolean | undefined;
|
|
14
14
|
disabled?: boolean | undefined;
|
|
15
|
-
width?: number | "
|
|
15
|
+
width?: number | "xl" | "lg" | "md" | "sm" | "xs" | undefined;
|
|
16
16
|
proFieldProps?: import("src/utils").ProFieldProps | undefined;
|
|
17
17
|
footerRender?: import("../../typing").LightFilterFooterRender | undefined;
|
|
18
18
|
children?: any;
|
|
@@ -5,7 +5,6 @@ export type ProFormFieldProps<T = any, FiledProps = Record<string, any>> = ProSc
|
|
|
5
5
|
mode?: 'edit' | 'read' | 'update';
|
|
6
6
|
isDefaultDom?: boolean;
|
|
7
7
|
ref?: any;
|
|
8
|
-
plain?: boolean;
|
|
9
8
|
text?: any;
|
|
10
9
|
getFieldProps?: () => Record<string, any>;
|
|
11
10
|
getFormItemProps?: () => Record<string, any>;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import React, {
|
|
1
|
+
import React, { useContext, useMemo } from 'react';
|
|
2
2
|
import { PureProField } from "../../../field";
|
|
3
|
-
import {
|
|
3
|
+
import { runFunction, useRefFunction } from "../../../utils";
|
|
4
4
|
import { EditOrReadOnlyContext } from "../../BaseForm/EditOrReadOnlyContext";
|
|
5
5
|
import warpField from "../FormItem/warpField";
|
|
6
6
|
import { Fragment as _Fragment } from "react/jsx-runtime";
|
|
@@ -86,7 +86,5 @@ const BaseProFormField = props => {
|
|
|
86
86
|
params: propsParams
|
|
87
87
|
});
|
|
88
88
|
};
|
|
89
|
-
const ProFormField = warpField?.(
|
|
90
|
-
return isDeepEqualReact(nextProps, prevProps, ['onChange', 'onBlur']);
|
|
91
|
-
}));
|
|
89
|
+
const ProFormField = warpField?.(BaseProFormField);
|
|
92
90
|
export default ProFormField;
|
|
@@ -130,6 +130,7 @@ export declare const ProFormItemRender: React.FC<Omit<import("antd").FormItemPro
|
|
|
130
130
|
dataFormat?: string | undefined;
|
|
131
131
|
lightProps?: import("src/form").LightWrapperProps | undefined;
|
|
132
132
|
proFormFieldKey?: any;
|
|
133
|
+
fieldProps?: Record<string, any> | undefined;
|
|
133
134
|
} & {
|
|
134
135
|
addonBefore?: React.ReactNode;
|
|
135
136
|
addonAfter?: React.ReactNode;
|
|
@@ -3,7 +3,7 @@ import { useControlledState } from '@rc-component/util';
|
|
|
3
3
|
import { ConfigProvider, Space } from 'antd';
|
|
4
4
|
import { clsx } from 'clsx';
|
|
5
5
|
import React, { useCallback, useContext, useMemo } from 'react';
|
|
6
|
-
import { LabelIconTip } from "../../../../utils";
|
|
6
|
+
import { LabelIconTip, useRefFunction } from "../../../../utils";
|
|
7
7
|
import FieldContext from "../../../FieldContext";
|
|
8
8
|
import { useGridHelpers } from "../../../helpers/grid";
|
|
9
9
|
import { useStyle } from "./style";
|
|
@@ -34,13 +34,27 @@ const Group = /*#__PURE__*/React.forwardRef((props, ref) => {
|
|
|
34
34
|
...props
|
|
35
35
|
};
|
|
36
36
|
const [collapsed, setCollapsedInner] = useControlledState(() => defaultCollapsed || false, props.collapsed);
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* 使用 useRefFunction 包装回调,确保引用稳定
|
|
40
|
+
*/
|
|
41
|
+
const onCollapseCallback = useRefFunction(c => {
|
|
42
|
+
props.onCollapse?.(c);
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* 使用 queueMicrotask 延迟回调调用,避免在渲染阶段调用外部回调导致的 React 警告
|
|
47
|
+
* "Cannot update a component while rendering a different component"
|
|
48
|
+
*/
|
|
37
49
|
const setCollapsed = useCallback(updater => {
|
|
38
50
|
setCollapsedInner(prev => {
|
|
39
51
|
const next = typeof updater === 'function' ? updater(prev) : updater;
|
|
40
|
-
|
|
52
|
+
queueMicrotask(() => {
|
|
53
|
+
onCollapseCallback(next);
|
|
54
|
+
});
|
|
41
55
|
return next;
|
|
42
56
|
});
|
|
43
|
-
}, [
|
|
57
|
+
}, [onCollapseCallback]);
|
|
44
58
|
const {
|
|
45
59
|
getPrefixCls
|
|
46
60
|
} = useContext(ConfigProvider.ConfigContext);
|
|
@@ -56,6 +56,7 @@ export type ProFormItemProps = FormItemProps & {
|
|
|
56
56
|
dataFormat?: string;
|
|
57
57
|
lightProps?: LightWrapperProps;
|
|
58
58
|
proFormFieldKey?: any;
|
|
59
|
+
fieldProps?: Record<string, any>;
|
|
59
60
|
} & WarpFormItemProps;
|
|
60
61
|
declare const ProFormItem: React.FC<ProFormItemProps>;
|
|
61
62
|
export { FormItemProvide };
|
|
@@ -76,12 +76,23 @@ const WithValueFomFiledProps = formFieldProps => {
|
|
|
76
76
|
if (! /*#__PURE__*/React.isValidElement(filedChildren)) return /*#__PURE__*/_jsx(_Fragment, {
|
|
77
77
|
children: filedChildren
|
|
78
78
|
});
|
|
79
|
+
|
|
80
|
+
// restProps 可能来自 LightWrapper 的 cloneElement(light 模式下传入 variant/fieldProps),需保留以覆盖 filedChildren.props,避免内层控件线框双线
|
|
81
|
+
const variantFromRest = restProps.variant;
|
|
82
|
+
const fieldPropsFromRest = restProps.fieldProps;
|
|
79
83
|
return /*#__PURE__*/React.cloneElement(filedChildren, omitUndefined({
|
|
80
84
|
...restProps,
|
|
81
85
|
[valuePropName]: formFieldProps[valuePropName],
|
|
82
86
|
...filedChildren.props,
|
|
83
87
|
onChange: finalChange,
|
|
84
|
-
fieldProps
|
|
88
|
+
fieldProps: {
|
|
89
|
+
...filedChildren.props?.fieldProps,
|
|
90
|
+
...fieldPropsFromRest,
|
|
91
|
+
...fieldProps
|
|
92
|
+
},
|
|
93
|
+
...(variantFromRest !== undefined && {
|
|
94
|
+
variant: variantFromRest
|
|
95
|
+
}),
|
|
85
96
|
onBlur: isProFormComponent && !isValidElementForFiledChildren && onBlur
|
|
86
97
|
}));
|
|
87
98
|
};
|
|
@@ -115,36 +126,8 @@ const WarpFormItem = ({
|
|
|
115
126
|
if (!addonAfter && !addonBefore) {
|
|
116
127
|
return /*#__PURE__*/_jsx(Form.Item, {
|
|
117
128
|
...props,
|
|
118
|
-
//help={typeof help !== 'function' ? help : undefined}
|
|
119
129
|
valuePropName: valuePropName,
|
|
120
|
-
getValueProps: getValuePropsFunc
|
|
121
|
-
// @ts-ignore
|
|
122
|
-
// _internalItemRender={{
|
|
123
|
-
// mark: 'pro_table_render',
|
|
124
|
-
// render: (
|
|
125
|
-
// inputProps: FormItemProps & {
|
|
126
|
-
// errors: React.ReactNode[];
|
|
127
|
-
// warnings: React.ReactNode[];
|
|
128
|
-
// },
|
|
129
|
-
// doms: {
|
|
130
|
-
// input: JSX.Element;
|
|
131
|
-
// errorList: JSX.Element;
|
|
132
|
-
// extra: JSX.Element;
|
|
133
|
-
// },
|
|
134
|
-
// ) => (
|
|
135
|
-
// <>
|
|
136
|
-
// {doms.input}
|
|
137
|
-
// {typeof help === 'function'
|
|
138
|
-
// ? help({
|
|
139
|
-
// errors: inputProps.errors,
|
|
140
|
-
// warnings: inputProps.warnings,
|
|
141
|
-
// })
|
|
142
|
-
// : doms.errorList}
|
|
143
|
-
// {doms.extra}
|
|
144
|
-
// </>
|
|
145
|
-
// ),
|
|
146
|
-
// }}
|
|
147
|
-
,
|
|
130
|
+
getValueProps: getValuePropsFunc,
|
|
148
131
|
children: children
|
|
149
132
|
});
|
|
150
133
|
}
|
|
@@ -210,6 +193,7 @@ const ProFormItem = props => {
|
|
|
210
193
|
ignoreFormItem,
|
|
211
194
|
lightProps,
|
|
212
195
|
children: unusedChildren,
|
|
196
|
+
fieldProps,
|
|
213
197
|
...rest
|
|
214
198
|
} = props;
|
|
215
199
|
const formListField = useContext(FormListContext);
|
|
@@ -263,8 +247,9 @@ const ProFormItem = props => {
|
|
|
263
247
|
valuePropName: props.valuePropName,
|
|
264
248
|
children: props.children
|
|
265
249
|
}, rest.proFormFieldKey || rest.name?.toString());
|
|
250
|
+
const lightPropsForWrapper = omitUndefined(lightProps || {});
|
|
266
251
|
const lightDom = noLightFormItem ? children : /*#__PURE__*/_createElement(LightWrapper, {
|
|
267
|
-
...
|
|
252
|
+
...lightPropsForWrapper,
|
|
268
253
|
key: rest.proFormFieldKey || rest.name?.toString(),
|
|
269
254
|
size: size
|
|
270
255
|
}, children);
|
|
@@ -225,6 +225,7 @@ export function warpField(Field, config) {
|
|
|
225
225
|
convertValue: convertValue,
|
|
226
226
|
lightProps: omitUndefined({
|
|
227
227
|
...fieldProps,
|
|
228
|
+
variant: rest.variant ?? fieldProps?.variant,
|
|
228
229
|
valueType,
|
|
229
230
|
bordered,
|
|
230
231
|
allowClear: field?.props?.allowClear ?? allowClear,
|
|
@@ -16,7 +16,7 @@ declare const _default: React.ForwardRefExoticComponent<{
|
|
|
16
16
|
emptyText?: React.ReactNode;
|
|
17
17
|
cacheForSwr?: boolean | undefined;
|
|
18
18
|
disabled?: boolean | undefined;
|
|
19
|
-
width?: number | "
|
|
19
|
+
width?: number | "xl" | "lg" | "md" | "sm" | "xs" | undefined;
|
|
20
20
|
proFieldProps?: import("src/utils").ProFieldProps | undefined;
|
|
21
21
|
footerRender?: import("../../typing").LightFilterFooterRender | undefined;
|
|
22
22
|
children?: any;
|
|
@@ -15,7 +15,7 @@ declare const ProFormRadio: React.ComponentClass<{
|
|
|
15
15
|
emptyText?: React.ReactNode;
|
|
16
16
|
cacheForSwr?: boolean | undefined;
|
|
17
17
|
disabled?: boolean | undefined;
|
|
18
|
-
width?: number | "
|
|
18
|
+
width?: number | "xl" | "lg" | "md" | "sm" | "xs" | undefined;
|
|
19
19
|
proFieldProps?: import("src/utils/typing").ProFieldProps | undefined;
|
|
20
20
|
footerRender?: import("../../typing").LightFilterFooterRender | undefined;
|
|
21
21
|
children?: any;
|
|
@@ -29,7 +29,7 @@ declare const ProFormRadio: React.ComponentClass<{
|
|
|
29
29
|
emptyText?: React.ReactNode;
|
|
30
30
|
cacheForSwr?: boolean | undefined;
|
|
31
31
|
disabled?: boolean | undefined;
|
|
32
|
-
width?: number | "
|
|
32
|
+
width?: number | "xl" | "lg" | "md" | "sm" | "xs" | undefined;
|
|
33
33
|
proFieldProps?: import("src/utils/typing").ProFieldProps | undefined;
|
|
34
34
|
footerRender?: import("../../typing").LightFilterFooterRender | undefined;
|
|
35
35
|
children?: any;
|
|
@@ -7,7 +7,7 @@ declare const _default: React.ForwardRefExoticComponent<{
|
|
|
7
7
|
emptyText?: React.ReactNode;
|
|
8
8
|
cacheForSwr?: boolean | undefined;
|
|
9
9
|
disabled?: boolean | undefined;
|
|
10
|
-
width?: number | "
|
|
10
|
+
width?: number | "xl" | "lg" | "md" | "sm" | "xs" | undefined;
|
|
11
11
|
proFieldProps?: import("src/utils").ProFieldProps | undefined;
|
|
12
12
|
footerRender?: import("../../typing").LightFilterFooterRender | undefined;
|
|
13
13
|
children?: any;
|
|
@@ -22,7 +22,7 @@ declare const ProFormSlider: React.ForwardRefExoticComponent<{
|
|
|
22
22
|
emptyText?: React.ReactNode;
|
|
23
23
|
cacheForSwr?: boolean | undefined;
|
|
24
24
|
disabled?: boolean | undefined;
|
|
25
|
-
width?: number | "
|
|
25
|
+
width?: number | "xl" | "lg" | "md" | "sm" | "xs" | undefined;
|
|
26
26
|
proFieldProps?: import("src/utils").ProFieldProps | undefined;
|
|
27
27
|
footerRender?: import("../../typing").LightFilterFooterRender | undefined;
|
|
28
28
|
children?: any;
|
|
@@ -8,7 +8,7 @@ declare const _default: React.ForwardRefExoticComponent<{
|
|
|
8
8
|
emptyText?: React.ReactNode;
|
|
9
9
|
cacheForSwr?: boolean | undefined;
|
|
10
10
|
disabled?: boolean | undefined;
|
|
11
|
-
width?: number | "
|
|
11
|
+
width?: number | "xl" | "lg" | "md" | "sm" | "xs" | undefined;
|
|
12
12
|
proFieldProps?: import("src/utils").ProFieldProps | undefined;
|
|
13
13
|
footerRender?: import("../../typing").LightFilterFooterRender | undefined;
|
|
14
14
|
children?: any;
|
|
@@ -1,13 +1,17 @@
|
|
|
1
|
-
/// <reference types="react" />
|
|
2
1
|
import type { ColProps, RowProps } from 'antd';
|
|
2
|
+
import React from 'react';
|
|
3
3
|
import type { ProFormGridConfig } from '../typing';
|
|
4
|
-
export declare const GridContext:
|
|
4
|
+
export declare const GridContext: React.Context<ProFormGridConfig>;
|
|
5
5
|
interface CommonProps {
|
|
6
6
|
Wrapper?: React.FC<any>;
|
|
7
7
|
}
|
|
8
|
+
interface ColWrapperProps extends ColProps, CommonProps {
|
|
9
|
+
variant?: string;
|
|
10
|
+
fieldProps?: Record<string, any>;
|
|
11
|
+
}
|
|
8
12
|
export interface GridHelpers {
|
|
9
13
|
RowWrapper: React.FC<RowProps & CommonProps>;
|
|
10
|
-
ColWrapper: React.FC<
|
|
14
|
+
ColWrapper: React.FC<ColWrapperProps>;
|
|
11
15
|
grid: boolean;
|
|
12
16
|
}
|
|
13
17
|
export declare const gridHelpers: (config: ProFormGridConfig & CommonProps) => GridHelpers;
|
package/es/form/helpers/grid.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Col, Row } from 'antd';
|
|
2
|
-
import { createContext, useContext, useMemo } from 'react';
|
|
2
|
+
import React, { createContext, useContext, useMemo } from 'react';
|
|
3
3
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
4
4
|
export const GridContext = /*#__PURE__*/createContext({
|
|
5
5
|
grid: false,
|
|
@@ -32,6 +32,8 @@ export const gridHelpers = ({
|
|
|
32
32
|
ColWrapper({
|
|
33
33
|
children,
|
|
34
34
|
Wrapper,
|
|
35
|
+
variant,
|
|
36
|
+
fieldProps,
|
|
35
37
|
...rest
|
|
36
38
|
} = {}) {
|
|
37
39
|
const props = useMemo(() => {
|
|
@@ -49,14 +51,27 @@ export const gridHelpers = ({
|
|
|
49
51
|
}
|
|
50
52
|
return originProps;
|
|
51
53
|
}, [rest]);
|
|
54
|
+
|
|
55
|
+
// LightFilter clone 传入的 variant/fieldProps 需透传给 ProFormItem,否则 lightProps 无 variant
|
|
56
|
+
const childrenWithProps = (variant !== undefined || fieldProps !== undefined) && React.Children.count(children) === 1 && /*#__PURE__*/React.isValidElement(children) ? /*#__PURE__*/React.cloneElement(children, {
|
|
57
|
+
...(variant !== undefined && {
|
|
58
|
+
variant
|
|
59
|
+
}),
|
|
60
|
+
...(fieldProps && {
|
|
61
|
+
fieldProps: {
|
|
62
|
+
...children?.props?.fieldProps,
|
|
63
|
+
...fieldProps
|
|
64
|
+
}
|
|
65
|
+
})
|
|
66
|
+
}) : children;
|
|
52
67
|
if (!grid) {
|
|
53
68
|
return Wrapper ? /*#__PURE__*/_jsx(Wrapper, {
|
|
54
|
-
children:
|
|
55
|
-
}) :
|
|
69
|
+
children: childrenWithProps
|
|
70
|
+
}) : childrenWithProps;
|
|
56
71
|
}
|
|
57
72
|
return /*#__PURE__*/_jsx(Col, {
|
|
58
73
|
...props,
|
|
59
|
-
children:
|
|
74
|
+
children: childrenWithProps
|
|
60
75
|
});
|
|
61
76
|
}
|
|
62
77
|
});
|
|
@@ -59,13 +59,27 @@ function DrawerForm({
|
|
|
59
59
|
const [resizableDrawer, setResizableDrawer] = useState(false);
|
|
60
60
|
const [drawerWidth, setDrawerWidth] = useState(width ? width : resize ? resizeInfo?.minWidth : 800);
|
|
61
61
|
const [open, setOpenInner] = useControlledState(!!propsOpen, propsOpen);
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* 使用 useRefFunction 包装回调,确保引用稳定
|
|
65
|
+
*/
|
|
66
|
+
const onOpenChangeCallback = useRefFunction(o => {
|
|
67
|
+
onOpenChange?.(o);
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* 使用 queueMicrotask 延迟回调调用,避免在渲染阶段调用外部回调导致的 React 警告
|
|
72
|
+
* "Cannot update a component while rendering a different component"
|
|
73
|
+
*/
|
|
62
74
|
const setOpen = useCallback(updater => {
|
|
63
75
|
setOpenInner(prev => {
|
|
64
76
|
const next = typeof updater === 'function' ? updater(prev) : updater;
|
|
65
|
-
|
|
77
|
+
queueMicrotask(() => {
|
|
78
|
+
onOpenChangeCallback(next);
|
|
79
|
+
});
|
|
66
80
|
return next;
|
|
67
81
|
});
|
|
68
|
-
}, [
|
|
82
|
+
}, [onOpenChangeCallback]);
|
|
69
83
|
const footerRef = useRef(null);
|
|
70
84
|
const footerDomRef = useCallback(element => {
|
|
71
85
|
if (footerRef.current === null && element) {
|
|
@@ -22,7 +22,7 @@ const LightFilterContainer = props => {
|
|
|
22
22
|
collapse,
|
|
23
23
|
collapseLabel,
|
|
24
24
|
onValuesChange,
|
|
25
|
-
variant,
|
|
25
|
+
variant = 'borderless',
|
|
26
26
|
values,
|
|
27
27
|
footerRender,
|
|
28
28
|
placement,
|
|
@@ -77,6 +77,7 @@ const LightFilterContainer = props => {
|
|
|
77
77
|
});
|
|
78
78
|
}
|
|
79
79
|
return /*#__PURE__*/_jsx(FieldLabel, {
|
|
80
|
+
variant: variant,
|
|
80
81
|
size: size,
|
|
81
82
|
label: intl.getMessage('form.lightFilter.more', '更多筛选')
|
|
82
83
|
});
|
|
@@ -103,7 +104,8 @@ const LightFilterContainer = props => {
|
|
|
103
104
|
children: /*#__PURE__*/React.cloneElement(child, {
|
|
104
105
|
fieldProps: {
|
|
105
106
|
...child.props.fieldProps,
|
|
106
|
-
placement: newPlacement
|
|
107
|
+
placement: newPlacement,
|
|
108
|
+
variant: 'borderless'
|
|
107
109
|
},
|
|
108
110
|
// proFieldProps 会直接作为 ProField 的 props 传递过去
|
|
109
111
|
proFieldProps: {
|
|
@@ -172,7 +174,8 @@ const LightFilterContainer = props => {
|
|
|
172
174
|
children: /*#__PURE__*/React.cloneElement(child, {
|
|
173
175
|
fieldProps: {
|
|
174
176
|
...newFieldProps,
|
|
175
|
-
placement: newPlacement
|
|
177
|
+
placement: newPlacement,
|
|
178
|
+
variant
|
|
176
179
|
}
|
|
177
180
|
})
|
|
178
181
|
}, key);
|
|
@@ -223,7 +226,7 @@ function LightFilter(props) {
|
|
|
223
226
|
return item;
|
|
224
227
|
}),
|
|
225
228
|
size: size,
|
|
226
|
-
variant: variant,
|
|
229
|
+
variant: variant || 'borderless',
|
|
227
230
|
collapse: collapse,
|
|
228
231
|
collapseLabel: collapseLabel,
|
|
229
232
|
placement: placement,
|
|
@@ -3,6 +3,7 @@ import { ConfigProvider, Modal } from 'antd';
|
|
|
3
3
|
import { merge } from 'lodash-es';
|
|
4
4
|
import React, { useCallback, useContext, useEffect, useImperativeHandle, useMemo, useRef, useState } from 'react';
|
|
5
5
|
import { createPortal } from 'react-dom';
|
|
6
|
+
import { useRefFunction } from "../../../utils";
|
|
6
7
|
import { BaseForm } from "../../BaseForm";
|
|
7
8
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
8
9
|
import { Fragment as _Fragment } from "react/jsx-runtime";
|
|
@@ -29,13 +30,27 @@ function ModalForm({
|
|
|
29
30
|
const [, forceUpdate] = useState([]);
|
|
30
31
|
const [loading, setLoading] = useState(false);
|
|
31
32
|
const [open, setOpenInner] = useControlledState(false, propsOpen);
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* 使用 useRefFunction 包装回调,确保引用稳定
|
|
36
|
+
*/
|
|
37
|
+
const onOpenChangeCallback = useRefFunction(o => {
|
|
38
|
+
onOpenChange?.(o);
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* 使用 queueMicrotask 延迟回调调用,避免在渲染阶段调用外部回调导致的 React 警告
|
|
43
|
+
* "Cannot update a component while rendering a different component"
|
|
44
|
+
*/
|
|
32
45
|
const setOpen = useCallback(updater => {
|
|
33
46
|
setOpenInner(prev => {
|
|
34
47
|
const next = typeof updater === 'function' ? updater(prev) : updater;
|
|
35
|
-
|
|
48
|
+
queueMicrotask(() => {
|
|
49
|
+
onOpenChangeCallback(next);
|
|
50
|
+
});
|
|
36
51
|
return next;
|
|
37
52
|
});
|
|
38
|
-
}, [
|
|
53
|
+
}, [onOpenChangeCallback]);
|
|
39
54
|
const footerRef = useRef(null);
|
|
40
55
|
const footerDomRef = useCallback(element => {
|
|
41
56
|
if (footerRef.current === null && element) {
|
|
@@ -14,7 +14,7 @@ declare namespace ProForm {
|
|
|
14
14
|
var Provider: React.FC<import("antd/es/form/context").FormProviderProps>;
|
|
15
15
|
var useFormInstance: typeof import("antd/es/form/hooks/useFormInstance").default;
|
|
16
16
|
var EditOrReadOnlyContext: React.Context<{
|
|
17
|
-
mode: "update" | "
|
|
17
|
+
mode: "update" | "read" | "edit";
|
|
18
18
|
}>;
|
|
19
19
|
}
|
|
20
20
|
export { ProForm };
|
|
@@ -5,7 +5,7 @@ import { Col, ConfigProvider, Form, Row } from 'antd';
|
|
|
5
5
|
import { clsx } from 'clsx';
|
|
6
6
|
import React, { useCallback, useContext, useMemo, useState } from 'react';
|
|
7
7
|
import { ProProvider, useIntl } from "../../../provider";
|
|
8
|
-
import { isBrowser } from "../../../utils";
|
|
8
|
+
import { isBrowser, useRefFunction } from "../../../utils";
|
|
9
9
|
import { BaseForm } from "../../BaseForm";
|
|
10
10
|
import Actions from "./Actions";
|
|
11
11
|
import { useStyle } from "./style";
|
|
@@ -79,13 +79,27 @@ const QueryFilterContent = props => {
|
|
|
79
79
|
const resetText = props.resetText || intl.getMessage('tableForm.reset', '重置');
|
|
80
80
|
const searchText = props.searchText || intl.getMessage('tableForm.search', '搜索');
|
|
81
81
|
const [collapsed, setCollapsedInner] = useControlledState(() => props.defaultCollapsed && !!props.submitter, props.collapsed);
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* 使用 useRefFunction 包装回调,确保引用稳定
|
|
85
|
+
*/
|
|
86
|
+
const onCollapseCallback = useRefFunction(c => {
|
|
87
|
+
props.onCollapse?.(c);
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* 使用 queueMicrotask 延迟回调调用,避免在渲染阶段调用外部回调导致的 React 警告
|
|
92
|
+
* "Cannot update a component while rendering a different component"
|
|
93
|
+
*/
|
|
82
94
|
const setCollapsed = useCallback(updater => {
|
|
83
95
|
setCollapsedInner(prev => {
|
|
84
96
|
const next = typeof updater === 'function' ? updater(prev) : updater;
|
|
85
|
-
|
|
97
|
+
queueMicrotask(() => {
|
|
98
|
+
onCollapseCallback(next);
|
|
99
|
+
});
|
|
86
100
|
return next;
|
|
87
101
|
});
|
|
88
|
-
}, [
|
|
102
|
+
}, [onCollapseCallback]);
|
|
89
103
|
const {
|
|
90
104
|
optionRender,
|
|
91
105
|
collapseRender,
|
|
@@ -118,13 +118,27 @@ function StepsForm(props) {
|
|
|
118
118
|
* 受控的方式来操作表单
|
|
119
119
|
*/
|
|
120
120
|
const [step, setStepInner] = useControlledState(0, props.current);
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* 使用 useRefFunction 包装回调,确保引用稳定
|
|
124
|
+
*/
|
|
125
|
+
const onCurrentChangeCallback = useRefFunction(current => {
|
|
126
|
+
props.onCurrentChange?.(current);
|
|
127
|
+
});
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* 使用 queueMicrotask 延迟回调调用,避免在渲染阶段调用外部回调导致的 React 警告
|
|
131
|
+
* "Cannot update a component while rendering a different component"
|
|
132
|
+
*/
|
|
121
133
|
const setStep = useCallback(updater => {
|
|
122
134
|
setStepInner(prev => {
|
|
123
135
|
const next = typeof updater === 'function' ? updater(prev) : updater;
|
|
124
|
-
|
|
136
|
+
queueMicrotask(() => {
|
|
137
|
+
onCurrentChangeCallback(next);
|
|
138
|
+
});
|
|
125
139
|
return next;
|
|
126
140
|
});
|
|
127
|
-
}, [
|
|
141
|
+
}, [onCurrentChangeCallback]);
|
|
128
142
|
const layoutRender = useMemo(() => {
|
|
129
143
|
return StepsLayoutStrategy[stepsProps?.direction || 'horizontal'];
|
|
130
144
|
}, [stepsProps?.direction]);
|