Files
2026-01-16 02:20:32 +00:00

129 lines
5.4 KiB
JavaScript

import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
var _excluded = ["children", "value", "valuePropName", "onChange", "fieldProps", "space", "type", "transform", "convertValue", "lightProps"],
_excluded2 = ["children", "space", "valuePropName"];
import { runFunction, useRefFunction } from '@ant-design/pro-utils';
import { Input, Space } from 'antd';
import toArray from "rc-util/es/Children/toArray";
import React, { useCallback, useImperativeHandle, useMemo } from 'react';
import { createField } from "../../BaseForm/createField";
import { useGridHelpers } from "../../helpers";
import { jsx as _jsx } from "react/jsx-runtime";
var FieldSetType = {
space: Space,
group: Input.Group
};
export function defaultGetValueFromEvent(valuePropName) {
var event = arguments.length <= 1 ? undefined : arguments[1];
if (event && event.target && valuePropName in event.target) {
// @ts-ignore
return event.target[valuePropName];
}
return event;
}
var FieldSet = function FieldSet(props) {
var children = props.children,
_props$value = props.value,
value = _props$value === void 0 ? [] : _props$value,
valuePropName = props.valuePropName,
onChange = props.onChange,
fieldProps = props.fieldProps,
space = props.space,
_props$type = props.type,
type = _props$type === void 0 ? 'space' : _props$type,
transform = props.transform,
convertValue = props.convertValue,
lightProps = props.lightProps,
rest = _objectWithoutProperties(props, _excluded);
/**
* 使用方法的引用防止闭包
*
* @param fileValue
* @param index
*/
var fieldSetOnChange = useRefFunction(function (fileValue, index) {
var _fieldProps$onChange;
var newValues = _toConsumableArray(value);
newValues[index] = defaultGetValueFromEvent(valuePropName || 'value', fileValue);
onChange === null || onChange === void 0 || onChange(newValues);
fieldProps === null || fieldProps === void 0 || (_fieldProps$onChange = fieldProps.onChange) === null || _fieldProps$onChange === void 0 || _fieldProps$onChange.call(fieldProps, newValues);
});
var itemIndex = -1;
var list = toArray(runFunction(children, value, props)).map(function (item) {
if ( /*#__PURE__*/React.isValidElement(item)) {
var _item$type, _item$props, _item$props2;
itemIndex += 1;
var index = itemIndex;
var isProFromItem =
// @ts-ignore
(item === null || item === void 0 || (_item$type = item.type) === null || _item$type === void 0 ? void 0 : _item$type.displayName) === 'ProFormComponent' || (item === null || item === void 0 || (_item$props = item.props) === null || _item$props === void 0 ? void 0 : _item$props.readonly);
var forkProps = isProFromItem ? _objectSpread(_objectSpread({
key: index,
ignoreFormItem: true
}, item.props || {}), {}, {
// 如果不是我们自定义的组件 fieldProps 无法识别
fieldProps: _objectSpread(_objectSpread({}, item === null || item === void 0 || (_item$props2 = item.props) === null || _item$props2 === void 0 ? void 0 : _item$props2.fieldProps), {}, {
onChange: function onChange() {
fieldSetOnChange(arguments.length <= 0 ? undefined : arguments[0], index);
}
}),
value: value === null || value === void 0 ? void 0 : value[index],
onChange: undefined
}) : _objectSpread(_objectSpread({
key: index
}, item.props || {}), {}, {
value: value === null || value === void 0 ? void 0 : value[index],
onChange: function onChange(itemValue) {
var _props$onChange, _props;
fieldSetOnChange(itemValue, index);
(_props$onChange = (_props = item.props).onChange) === null || _props$onChange === void 0 || _props$onChange.call(_props, itemValue);
}
});
return /*#__PURE__*/React.cloneElement(item, forkProps);
}
return item;
});
var Components = FieldSetType[type];
var _useGridHelpers = useGridHelpers(rest),
RowWrapper = _useGridHelpers.RowWrapper;
/** Input.Group 需要配置 compact */
var typeProps = useMemo(function () {
return _objectSpread({}, type === 'group' ? {
compact: true
} : {});
}, [type]);
var Wrapper = useCallback(function (_ref) {
var dom = _ref.children;
return /*#__PURE__*/_jsx(Components, _objectSpread(_objectSpread(_objectSpread({}, typeProps), space), {}, {
align: "start",
wrap: true,
children: dom
}));
}, [Components, space, typeProps]);
return /*#__PURE__*/_jsx(RowWrapper, {
Wrapper: Wrapper,
children: list
});
};
var BaseProFormFieldSet = /*#__PURE__*/React.forwardRef(function (_ref2, ref) {
var children = _ref2.children,
space = _ref2.space,
valuePropName = _ref2.valuePropName,
rest = _objectWithoutProperties(_ref2, _excluded2);
useImperativeHandle(ref, function () {
return {};
});
return /*#__PURE__*/_jsx(FieldSet, _objectSpread(_objectSpread(_objectSpread({
space: space,
valuePropName: valuePropName
}, rest.fieldProps), {}, {
// 把 fieldProps 里的重置掉
onChange: undefined
}, rest), {}, {
children: children
}));
});
var ProFormFieldSet = createField(BaseProFormFieldSet);
export default ProFormFieldSet;