@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.
Files changed (165) hide show
  1. package/dist/pro-components.min.js +1 -1
  2. package/es/card/components/Card/index.js +17 -3
  3. package/es/descriptions/index.d.ts +0 -2
  4. package/es/descriptions/index.js +1 -5
  5. package/es/descriptions/useFetchData.js +17 -2
  6. package/es/field/components/Cascader/index.d.ts +3 -3
  7. package/es/field/components/Cascader/index.js +0 -2
  8. package/es/field/components/Checkbox/index.d.ts +2 -2
  9. package/es/field/components/Checkbox/index.js +2 -0
  10. package/es/field/components/Code/index.js +1 -8
  11. package/es/field/components/ColorPicker/index.d.ts +2 -2
  12. package/es/field/components/DatePicker/index.d.ts +2 -2
  13. package/es/field/components/DatePicker/index.js +3 -5
  14. package/es/field/components/FromNow/index.d.ts +1 -0
  15. package/es/field/components/FromNow/index.js +2 -2
  16. package/es/field/components/Money/index.js +0 -1
  17. package/es/field/components/Progress/index.js +1 -2
  18. package/es/field/components/Radio/index.d.ts +1 -1
  19. package/es/field/components/RangePicker/index.d.ts +2 -2
  20. package/es/field/components/RangePicker/index.js +3 -11
  21. package/es/field/components/Segmented/index.d.ts +1 -1
  22. package/es/field/components/Select/LightSelect/index.d.ts +3 -1
  23. package/es/field/components/Select/LightSelect/index.js +3 -1
  24. package/es/field/components/Select/index.d.ts +2 -2
  25. package/es/field/components/Select/index.js +1 -4
  26. package/es/field/components/Switch/index.d.ts +1 -1
  27. package/es/field/components/Switch/index.js +2 -1
  28. package/es/field/components/TimePicker/index.d.ts +2 -0
  29. package/es/field/components/TimePicker/index.js +9 -8
  30. package/es/field/components/TreeSelect/index.d.ts +3 -3
  31. package/es/field/components/TreeSelect/index.js +2 -2
  32. package/es/form/BaseForm/BaseForm.js +16 -2
  33. package/es/form/BaseForm/LightWrapper/index.js +7 -1
  34. package/es/form/BaseForm/Submitter/index.js +2 -2
  35. package/es/form/components/Cascader/index.d.ts +1 -1
  36. package/es/form/components/ColorPicker/index.d.ts +1 -1
  37. package/es/form/components/DatePicker/DateTimePicker.js +1 -0
  38. package/es/form/components/DateRangePicker/DateTimeRangePicker.d.ts +1 -1
  39. package/es/form/components/DateRangePicker/DateTimeRangePicker.js +1 -3
  40. package/es/form/components/Digit/DigitRange.d.ts +2 -2
  41. package/es/form/components/Digit/index.d.ts +1 -1
  42. package/es/form/components/Field/index.d.ts +0 -1
  43. package/es/form/components/Field/index.js +3 -5
  44. package/es/form/components/FormItem/FormItemRender/index.d.ts +1 -0
  45. package/es/form/components/FormItem/Group/index.js +17 -3
  46. package/es/form/components/FormItem/index.d.ts +1 -0
  47. package/es/form/components/FormItem/index.js +16 -31
  48. package/es/form/components/FormItem/warpField.js +1 -0
  49. package/es/form/components/Money/index.d.ts +1 -1
  50. package/es/form/components/Radio/index.d.ts +2 -2
  51. package/es/form/components/Rate/index.d.ts +1 -1
  52. package/es/form/components/Slider/index.d.ts +1 -1
  53. package/es/form/components/TextArea/index.d.ts +1 -1
  54. package/es/form/helpers/grid.d.ts +7 -3
  55. package/es/form/helpers/grid.js +19 -4
  56. package/es/form/layouts/DrawerForm/index.js +16 -2
  57. package/es/form/layouts/LightFilter/index.js +7 -4
  58. package/es/form/layouts/ModalForm/index.js +17 -2
  59. package/es/form/layouts/ProForm/index.d.ts +1 -1
  60. package/es/form/layouts/QueryFilter/index.js +17 -3
  61. package/es/form/layouts/StepsForm/index.js +16 -2
  62. package/es/layout/ProLayout.js +33 -5
  63. package/es/layout/components/AppsLogoComponents/style/index.js +1 -0
  64. package/es/layout/components/SettingDrawer/index.js +33 -5
  65. package/es/layout/components/SiderMenu/BaseMenu.js +0 -2
  66. package/es/list/ListView.js +6 -3
  67. package/es/provider/index.d.ts +0 -4
  68. package/es/provider/index.js +1 -1
  69. package/es/table/Store/Provide.d.ts +0 -1
  70. package/es/table/Store/Provide.js +1 -1
  71. package/es/table/Table.js +0 -1
  72. package/es/table/typing.d.ts +0 -4
  73. package/es/table/useFetchData.js +16 -2
  74. package/es/table/utils/cellRenderToFromItem.d.ts +1 -1
  75. package/es/table/utils/columnRender.d.ts +1 -1
  76. package/es/table/utils/columnRender.js +1 -4
  77. package/es/table/utils/genProColumnToColumn.d.ts +2 -2
  78. package/es/table/utils/index.d.ts +0 -10
  79. package/es/table/utils/index.js +0 -12
  80. package/es/utils/components/FieldLabel/index.js +3 -3
  81. package/es/utils/components/FieldLabel/style.js +23 -4
  82. package/es/utils/components/FilterDropdown/index.js +1 -1
  83. package/es/utils/components/FilterDropdown/style.js +10 -0
  84. package/es/utils/pickProProps/index.js +1 -1
  85. package/es/utils/useEditableArray/index.d.ts +1 -1
  86. package/es/utils/useEditableArray/index.js +1 -1
  87. package/es/utils/useLazyKVMap.d.ts +5 -0
  88. package/es/utils/useLazyKVMap.js +28 -0
  89. package/es/utils/useMediaQuery/index.d.ts +2 -2
  90. package/es/utils/usePagination.d.ts +8 -0
  91. package/es/utils/usePagination.js +67 -0
  92. package/es/utils/useSelection.d.ts +19 -0
  93. package/es/utils/useSelection.js +86 -0
  94. package/lib/card/components/Card/index.js +16 -2
  95. package/lib/descriptions/index.d.ts +0 -2
  96. package/lib/descriptions/index.js +1 -5
  97. package/lib/descriptions/useFetchData.js +17 -2
  98. package/lib/field/components/Cascader/index.js +0 -2
  99. package/lib/field/components/Checkbox/index.js +2 -0
  100. package/lib/field/components/Code/index.js +1 -8
  101. package/lib/field/components/DatePicker/index.js +3 -5
  102. package/lib/field/components/FromNow/index.d.ts +1 -0
  103. package/lib/field/components/FromNow/index.js +2 -2
  104. package/lib/field/components/Money/index.js +0 -1
  105. package/lib/field/components/Progress/index.js +1 -2
  106. package/lib/field/components/RangePicker/index.js +3 -11
  107. package/lib/field/components/Select/LightSelect/index.d.ts +2 -0
  108. package/lib/field/components/Select/LightSelect/index.js +3 -1
  109. package/lib/field/components/Select/index.js +1 -4
  110. package/lib/field/components/Switch/index.js +2 -1
  111. package/lib/field/components/TimePicker/index.d.ts +2 -0
  112. package/lib/field/components/TimePicker/index.js +9 -8
  113. package/lib/field/components/TreeSelect/index.js +2 -2
  114. package/lib/form/BaseForm/BaseForm.js +16 -2
  115. package/lib/form/BaseForm/LightWrapper/index.js +7 -1
  116. package/lib/form/BaseForm/Submitter/index.js +2 -2
  117. package/lib/form/components/DatePicker/DateTimePicker.js +1 -0
  118. package/lib/form/components/DateRangePicker/DateTimeRangePicker.d.ts +1 -1
  119. package/lib/form/components/DateRangePicker/DateTimeRangePicker.js +1 -3
  120. package/lib/form/components/Field/index.d.ts +0 -1
  121. package/lib/form/components/Field/index.js +1 -3
  122. package/lib/form/components/FormItem/FormItemRender/index.d.ts +1 -0
  123. package/lib/form/components/FormItem/Group/index.js +16 -2
  124. package/lib/form/components/FormItem/index.d.ts +1 -0
  125. package/lib/form/components/FormItem/index.js +16 -31
  126. package/lib/form/components/FormItem/warpField.js +1 -0
  127. package/lib/form/helpers/grid.d.ts +7 -3
  128. package/lib/form/helpers/grid.js +20 -4
  129. package/lib/form/layouts/DrawerForm/index.js +16 -2
  130. package/lib/form/layouts/LightFilter/index.js +7 -4
  131. package/lib/form/layouts/ModalForm/index.js +17 -2
  132. package/lib/form/layouts/QueryFilter/index.js +16 -2
  133. package/lib/form/layouts/StepsForm/index.js +16 -2
  134. package/lib/layout/ProLayout.js +32 -4
  135. package/lib/layout/components/AppsLogoComponents/style/index.js +1 -0
  136. package/lib/layout/components/SettingDrawer/index.js +32 -4
  137. package/lib/layout/components/SiderMenu/BaseMenu.js +0 -2
  138. package/lib/list/ListView.js +7 -4
  139. package/lib/provider/index.d.ts +0 -4
  140. package/lib/provider/index.js +1 -1
  141. package/lib/table/Store/Provide.d.ts +0 -1
  142. package/lib/table/Store/Provide.js +1 -1
  143. package/lib/table/Table.js +0 -1
  144. package/lib/table/typing.d.ts +0 -4
  145. package/lib/table/useFetchData.js +16 -2
  146. package/lib/table/utils/cellRenderToFromItem.d.ts +1 -1
  147. package/lib/table/utils/columnRender.d.ts +1 -1
  148. package/lib/table/utils/columnRender.js +1 -4
  149. package/lib/table/utils/genProColumnToColumn.d.ts +2 -2
  150. package/lib/table/utils/index.d.ts +0 -10
  151. package/lib/table/utils/index.js +3 -15
  152. package/lib/utils/components/FieldLabel/index.js +3 -3
  153. package/lib/utils/components/FieldLabel/style.js +23 -4
  154. package/lib/utils/components/FilterDropdown/index.js +1 -1
  155. package/lib/utils/components/FilterDropdown/style.js +10 -0
  156. package/lib/utils/pickProProps/index.js +1 -1
  157. package/lib/utils/useEditableArray/index.d.ts +1 -1
  158. package/lib/utils/useEditableArray/index.js +2 -2
  159. package/lib/utils/useLazyKVMap.d.ts +5 -0
  160. package/lib/utils/useLazyKVMap.js +34 -0
  161. package/lib/utils/usePagination.d.ts +8 -0
  162. package/lib/utils/usePagination.js +74 -0
  163. package/lib/utils/useSelection.d.ts +19 -0
  164. package/lib/utils/useSelection.js +93 -0
  165. 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
- onLoadingChange?.(next);
388
+ queueMicrotask(() => {
389
+ onLoadingChangeCallback(next);
390
+ });
377
391
  return next;
378
392
  });
379
- }, [onLoadingChange]);
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 | "xs" | "sm" | "md" | "lg" | "xl" | undefined;
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 | "xs" | "sm" | "md" | "lg" | "xl" | undefined;
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;
@@ -21,6 +21,7 @@ const ProFormDateTimePicker = /*#__PURE__*/React.forwardRef(({
21
21
  valueType,
22
22
  customLightMode: true
23
23
  },
24
+ fieldProps: fieldProps,
24
25
  ...rest
25
26
  });
26
27
  });
@@ -1,4 +1,4 @@
1
- import { RangePickerProps } from 'antd/lib/date-picker';
1
+ import type { RangePickerProps } from 'antd/lib/date-picker';
2
2
  import React from 'react';
3
3
  import type { ProFormFieldItemProps } from '../../typing';
4
4
  /**
@@ -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" | "placeholder" | "onChange" | "defaultValue"> & {
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 | "xs" | "sm" | "md" | "lg" | "xl" | undefined;
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 | "xs" | "sm" | "md" | "lg" | "xl" | undefined;
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, { memo, useContext, useMemo } from 'react';
1
+ import React, { useContext, useMemo } from 'react';
2
2
  import { PureProField } from "../../../field";
3
- import { isDeepEqualReact, runFunction, useRefFunction } from "../../../utils";
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?.( /*#__PURE__*/memo(BaseProFormField, (prevProps, nextProps) => {
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
- props.onCollapse?.(next);
52
+ queueMicrotask(() => {
53
+ onCollapseCallback(next);
54
+ });
41
55
  return next;
42
56
  });
43
- }, [props.onCollapse]);
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
- ...lightProps,
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 | "xs" | "sm" | "md" | "lg" | "xl" | undefined;
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 | "xs" | "sm" | "md" | "lg" | "xl" | undefined;
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 | "xs" | "sm" | "md" | "lg" | "xl" | undefined;
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 | "xs" | "sm" | "md" | "lg" | "xl" | undefined;
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 | "xs" | "sm" | "md" | "lg" | "xl" | undefined;
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 | "xs" | "sm" | "md" | "lg" | "xl" | undefined;
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: import("react").Context<ProFormGridConfig>;
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<ColProps & CommonProps>;
14
+ ColWrapper: React.FC<ColWrapperProps>;
11
15
  grid: boolean;
12
16
  }
13
17
  export declare const gridHelpers: (config: ProFormGridConfig & CommonProps) => GridHelpers;
@@ -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: children
55
- }) : children;
69
+ children: childrenWithProps
70
+ }) : childrenWithProps;
56
71
  }
57
72
  return /*#__PURE__*/_jsx(Col, {
58
73
  ...props,
59
- children: 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
- onOpenChange?.(next);
77
+ queueMicrotask(() => {
78
+ onOpenChangeCallback(next);
79
+ });
66
80
  return next;
67
81
  });
68
- }, [onOpenChange]);
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
- onOpenChange?.(next);
48
+ queueMicrotask(() => {
49
+ onOpenChangeCallback(next);
50
+ });
36
51
  return next;
37
52
  });
38
- }, [onOpenChange]);
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" | "edit" | "read";
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
- props.onCollapse?.(next);
97
+ queueMicrotask(() => {
98
+ onCollapseCallback(next);
99
+ });
86
100
  return next;
87
101
  });
88
- }, [props.onCollapse]);
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
- props.onCurrentChange?.(next);
136
+ queueMicrotask(() => {
137
+ onCurrentChangeCallback(next);
138
+ });
125
139
  return next;
126
140
  });
127
- }, [props.onCurrentChange]);
141
+ }, [onCurrentChangeCallback]);
128
142
  const layoutRender = useMemo(() => {
129
143
  return StepsLayoutStrategy[stepsProps?.direction || 'horizontal'];
130
144
  }, [stepsProps?.direction]);