Update from Vibe Studio

This commit is contained in:
Vibe Studio
2026-01-16 02:20:32 +00:00
parent a4605e311a
commit 71de1506ca
28603 changed files with 2179459 additions and 0 deletions

View File

@@ -0,0 +1,137 @@
import type { ProFieldProps, ProFormInstanceType, ProRequestData } from '@ant-design/pro-utils';
import type { FormInstance, FormItemProps, FormProps } from 'antd';
import type dayjs from 'dayjs';
import React from 'react';
import type { SubmitterProps } from '../components';
import type { FieldProps, ProFormGridConfig, ProFormGroupProps } from '../typing';
export type CommonFormProps<T = Record<string, any>, U = Record<string, any>> = {
/**
* @name 自定义提交的配置
*
* @example 不展示提交按钮和重置按钮
* submitter={false}
* @example 修改重置按钮的样式,并且隐藏提交按钮
* submitter={{resetButtonProps: { type: 'dashed'},submitButtonProps: { style: { display: 'none', }}}}
*
* @example 修改提交按钮和重置按钮的顺序
* submitter={{ render:(props,dom)=> [...dom]}}
*
* @example 修改提交和重置按钮文字
* submitter={{ searchConfig: { submitText: '提交2',resetText: '重置2'}}}
*/
submitter?: SubmitterProps<{
form?: FormInstance<any>;
}> | false;
/**
* @name 表单结束后调用
* @description 支持异步操作,更加方便
*
* @example onFinish={async (values) => { await save(values); return true }}
*/
onFinish?: (formData: T) => Promise<boolean | void> | void;
/**
* @name 表单按钮的 loading 状态
*/
loading?: boolean;
/**
* @name 这是一个可选的属性(onLoadingChange)它接受一个名为loading的参数类型为boolean表示加载状态是否改变。
* 当loading状态发生变化时将会调用一个函数这个函数接受这个loading状态作为参数并且没有返回值(void)。
*/
onLoadingChange?: (loading: boolean) => void;
/**
* @name 获取 ProFormInstance
*
* ProFormInstance 可以用来获取当前表单的一些信息
*
* @example 获取 name 的值 formRef.current.getFieldValue("name");
* @example 获取所有的表单值 formRef.current.getFieldsValue(true);
*
* - formRef.current.nativeElement => `2.29.1+`
*/
formRef?: React.MutableRefObject<ProFormRef<T> | undefined> | React.RefObject<ProFormRef<T> | undefined>;
/**
* @name 同步结果到 url 中
* */
syncToUrl?: boolean | ((values: T, type: 'get' | 'set') => T);
/**
* @name 当 syncToUrl 为 true在页面回显示时以url上的参数为主默认为false
*/
syncToUrlAsImportant?: boolean;
/**
* @name 额外的 url 参数 中
* */
extraUrlParams?: Record<string, any>;
/**
* 同步结果到 initialValues,默认为true如果为falsereset的时将会忽略从url上获取的数据
*
* @name 是否将 url 参数写入 initialValues
*/
syncToInitialValues?: boolean;
/**
* 如果为 false,会原样保存。
*
* @default true
* @param 要不要值中的 Null 和 undefined
*/
omitNil?: boolean;
/**
* 格式化 Date 的方式,默认转化为 string
*
* @example dateFormatter="string" : Moment -> YYYY-MM-DD
* @example dateFormatter="YYYY-MM-DD HH:mm:SS" Moment -> YYYY-MM-DD HH:mm:SS
* @example dateFormatter="HH:mm:SS" Moment -> HH:mm:SS
* @example dateFormatter="number" Moment -> timestamp
* @example dateFormatter=false Moment -> Moment
* @example dateFormatter={(value)=>value.format("YYYY-MM-DD")}
*/
dateFormatter?: (string & {}) | 'string' | 'number' | ((value: dayjs.Dayjs, valueType: string) => string | number) | false;
/**
* @name 表单初始化成功比如布局label等计算完成
* @example (values)=>{ console.log(values) }
*/
onInit?: (values: T, form: ProFormInstance<any>) => void;
/**
* @name 发起网络请求的参数
*
* @example params={{productId: 1}}
* */
params?: U;
/**
* @name 发起网络请求的参数,返回值会覆盖给 initialValues
*
* @example async (params)=>{ return initialValues }
*/
request?: ProRequestData<T, U>;
/** 是否回车提交 */
isKeyPressSubmit?: boolean;
/** 用于控制form 是否相同的key高阶用法 */
formKey?: string;
/**
* @name自动选中第一项
* @description 只对有input的类型有效
*/
autoFocusFirstInput?: boolean;
/**
* @name 是否只读模式,对所有表单项生效
* @description 优先低于表单项的 readonly
*/
readonly?: boolean;
} & ProFormGridConfig;
export type BaseFormProps<T = Record<string, any>, U = Record<string, any>> = {
contentRender?: (items: React.ReactNode[], submitter: React.ReactElement<SubmitterProps> | undefined, form: FormInstance<any>) => React.ReactNode;
fieldProps?: FieldProps<unknown>;
proFieldProps?: ProFieldProps;
/** 表单初始化完成form已经存在可以进行赋值的操作了 */
onInit?: (values: T, form: ProFormInstance<any>) => void;
formItemProps?: FormItemProps;
groupProps?: ProFormGroupProps;
/** 是否回车提交 */
isKeyPressSubmit?: boolean;
/** Form 组件的类型,内部使用 */
formComponentType?: 'DrawerForm' | 'ModalForm' | 'QueryFilter';
} & Omit<FormProps, 'onFinish'> & CommonFormProps<T, U>;
type ProFormInstance<T = any> = FormInstance<T> & ProFormInstanceType<T>;
type ProFormRef<T = any> = ProFormInstanceType<T> & any;
declare function BaseForm<T = Record<string, any>, U = Record<string, any>>(props: BaseFormProps<T, U>): React.JSX.Element;
export { BaseForm };
export type { FormInstance, FormItemProps, FormProps, ProFormInstance };

View File

@@ -0,0 +1,578 @@
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.BaseForm = BaseForm;
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _objectSpread4 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
var _regeneratorRuntime2 = _interopRequireDefault(require("@babel/runtime/helpers/regeneratorRuntime"));
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
var _proProvider = require("@ant-design/pro-provider");
var _proUtils = require("@ant-design/pro-utils");
var _useParams = require("@umijs/use-params");
var _antd = require("antd");
var _classnames = _interopRequireDefault(require("classnames"));
var _omit = _interopRequireDefault(require("rc-util/lib/omit"));
var _get = _interopRequireDefault(require("rc-util/lib/utils/get"));
var _set = _interopRequireDefault(require("rc-util/lib/utils/set"));
var _warning = require("rc-util/lib/warning");
var _react = _interopRequireWildcard(require("react"));
var _FieldContext = _interopRequireDefault(require("../FieldContext"));
var _components = require("../components");
var _List = require("../components/List");
var _helpers = require("../helpers");
var _EditOrReadOnlyContext = require("./EditOrReadOnlyContext");
var _jsxRuntime = require("react/jsx-runtime");
var _excluded = ["children", "contentRender", "submitter", "fieldProps", "formItemProps", "groupProps", "transformKey", "formRef", "onInit", "form", "loading", "formComponentType", "extraUrlParams", "syncToUrl", "onUrlSearchChange", "onReset", "omitNil", "isKeyPressSubmit", "autoFocusFirstInput", "grid", "rowProps", "colProps"],
_excluded2 = ["extraUrlParams", "syncToUrl", "isKeyPressSubmit", "syncToUrlAsImportant", "syncToInitialValues", "children", "contentRender", "submitter", "fieldProps", "proFieldProps", "formItemProps", "groupProps", "dateFormatter", "formRef", "onInit", "form", "formComponentType", "onReset", "grid", "rowProps", "colProps", "omitNil", "request", "params", "initialValues", "formKey", "readonly", "onLoadingChange", "loading"];
/* eslint-disable react-hooks/exhaustive-deps */
var genParams = function genParams(syncUrl, params, type) {
if (syncUrl === true) {
return params;
}
return (0, _proUtils.runFunction)(syncUrl, params, type);
};
/**
* It takes a name path and converts it to an array.
* @param {NamePath} name - The name of the form.
* @returns string[]
*
* a-> [a]
* [a] -> [a]
*/
var covertFormName = function covertFormName(name) {
if (!name) return name;
if (Array.isArray(name)) return name;
return [name];
};
function BaseFormComponents(props) {
var _ConfigProvider$useCo;
var children = props.children,
contentRender = props.contentRender,
submitter = props.submitter,
fieldProps = props.fieldProps,
formItemProps = props.formItemProps,
groupProps = props.groupProps,
transformKey = props.transformKey,
propsFormRef = props.formRef,
onInit = props.onInit,
form = props.form,
loading = props.loading,
formComponentType = props.formComponentType,
_props$extraUrlParams = props.extraUrlParams,
extraUrlParams = _props$extraUrlParams === void 0 ? {} : _props$extraUrlParams,
syncToUrl = props.syncToUrl,
onUrlSearchChange = props.onUrlSearchChange,
_onReset = props.onReset,
_props$omitNil = props.omitNil,
omitNil = _props$omitNil === void 0 ? true : _props$omitNil,
isKeyPressSubmit = props.isKeyPressSubmit,
_props$autoFocusFirst = props.autoFocusFirstInput,
autoFocusFirstInput = _props$autoFocusFirst === void 0 ? true : _props$autoFocusFirst,
grid = props.grid,
rowProps = props.rowProps,
colProps = props.colProps,
rest = (0, _objectWithoutProperties2.default)(props, _excluded);
/**
* 获取 form 实例
*/
var formInstance = _antd.Form.useFormInstance();
var _ref = (_antd.ConfigProvider === null || _antd.ConfigProvider === void 0 || (_ConfigProvider$useCo = _antd.ConfigProvider.useConfig) === null || _ConfigProvider$useCo === void 0 ? void 0 : _ConfigProvider$useCo.call(_antd.ConfigProvider)) || {
componentSize: 'middle'
},
componentSize = _ref.componentSize;
/** 同步 url 上的参数 */
var formRef = (0, _react.useRef)(form || formInstance);
/**
* 获取布局
*/
var _useGridHelpers = (0, _helpers.useGridHelpers)({
grid: grid,
rowProps: rowProps
}),
RowWrapper = _useGridHelpers.RowWrapper;
var getFormInstance = (0, _proUtils.useRefFunction)(function () {
return formInstance;
});
var formatValues = (0, _react.useMemo)(function () {
return {
/**
* 获取被 ProForm 格式化后的所有数据
* @param allData boolean
* @returns T
*
* @example getFieldsFormatValue(true) ->返回所有数据,即使没有被 form 托管的
*/
getFieldsFormatValue: function getFieldsFormatValue(allData) {
var _getFormInstance;
return transformKey((_getFormInstance = getFormInstance()) === null || _getFormInstance === void 0 ? void 0 : _getFormInstance.getFieldsValue(allData), omitNil);
},
/**
* 获取被 ProForm 格式化后的单个数据
* @param nameList (string|number)[]
* @returns T
*
* @example {a:{b:value}} -> getFieldFormatValue(['a', 'b']) -> value
*/
/** 获取格式化之后的单个数据 */
getFieldFormatValue: function getFieldFormatValue() {
var _getFormInstance2;
var paramsNameList = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
var nameList = covertFormName(paramsNameList);
if (!nameList) throw new Error('nameList is require');
var value = (_getFormInstance2 = getFormInstance()) === null || _getFormInstance2 === void 0 ? void 0 : _getFormInstance2.getFieldValue(nameList);
var obj = nameList ? (0, _set.default)({}, nameList, value) : value;
//transformKey会将keys重新和nameList拼接所以这里要将nameList的首个元素弹出
var newNameList = (0, _toConsumableArray2.default)(nameList);
newNameList.shift();
return (0, _get.default)(transformKey(obj, omitNil, newNameList), nameList);
},
/**
* 获取被 ProForm 格式化后的单个数据, 包含他的 name
* @param nameList (string|number)[]
* @returns T
*
* @example {a:{b:value}} -> getFieldFormatValueObject(['a', 'b']) -> {a:{b:value}}
*/
/** 获取格式化之后的单个数据 */
getFieldFormatValueObject: function getFieldFormatValueObject(paramsNameList) {
var _getFormInstance3;
var nameList = covertFormName(paramsNameList);
var value = (_getFormInstance3 = getFormInstance()) === null || _getFormInstance3 === void 0 ? void 0 : _getFormInstance3.getFieldValue(nameList);
var obj = nameList ? (0, _set.default)({}, nameList, value) : value;
return transformKey(obj, omitNil, nameList);
},
/**
/**
*验字段后返回格式化之后的所有数据
* @param nameList (string|number)[]
* @returns T
*
* @example validateFieldsReturnFormatValue -> {a:{b:value}}
*/
validateFieldsReturnFormatValue: function () {
var _validateFieldsReturnFormatValue = (0, _asyncToGenerator2.default)( /*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee(nameList) {
var _getFormInstance4;
var values, transformedKey;
return (0, _regeneratorRuntime2.default)().wrap(function _callee$(_context) {
while (1) switch (_context.prev = _context.next) {
case 0:
if (!(!Array.isArray(nameList) && nameList)) {
_context.next = 2;
break;
}
throw new Error('nameList must be array');
case 2:
_context.next = 4;
return (_getFormInstance4 = getFormInstance()) === null || _getFormInstance4 === void 0 ? void 0 : _getFormInstance4.validateFields(nameList);
case 4:
values = _context.sent;
transformedKey = transformKey(values, omitNil);
return _context.abrupt("return", transformedKey ? transformedKey : {});
case 7:
case "end":
return _context.stop();
}
}, _callee);
}));
function validateFieldsReturnFormatValue(_x) {
return _validateFieldsReturnFormatValue.apply(this, arguments);
}
return validateFieldsReturnFormatValue;
}()
};
}, [omitNil, transformKey]);
var items = (0, _react.useMemo)(function () {
return _react.default.Children.toArray(children).map(function (item, index) {
if (index === 0 && /*#__PURE__*/_react.default.isValidElement(item) && autoFocusFirstInput) {
return /*#__PURE__*/_react.default.cloneElement(item, (0, _objectSpread4.default)((0, _objectSpread4.default)({}, item.props), {}, {
autoFocus: autoFocusFirstInput
}));
}
return item;
});
}, [autoFocusFirstInput, children]);
/** 计算 props 的对象 */
var submitterProps = (0, _react.useMemo)(function () {
return typeof submitter === 'boolean' || !submitter ? {} : submitter;
}, [submitter]);
/** 渲染提交按钮与重置按钮 */
var submitterNode = (0, _react.useMemo)(function () {
if (submitter === false) return undefined;
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.Submitter, (0, _objectSpread4.default)((0, _objectSpread4.default)({}, submitterProps), {}, {
onReset: function onReset() {
var _formRef$current, _submitterProps$onRes;
var finalValues = transformKey((_formRef$current = formRef.current) === null || _formRef$current === void 0 ? void 0 : _formRef$current.getFieldsValue(), omitNil);
submitterProps === null || submitterProps === void 0 || (_submitterProps$onRes = submitterProps.onReset) === null || _submitterProps$onRes === void 0 || _submitterProps$onRes.call(submitterProps, finalValues);
_onReset === null || _onReset === void 0 || _onReset(finalValues);
// 如果 syncToUrl清空一下数据
if (syncToUrl) {
var _formRef$current2;
// 把没有的值设置为未定义可以删掉 url 的参数
var params = Object.keys(transformKey((_formRef$current2 = formRef.current) === null || _formRef$current2 === void 0 ? void 0 : _formRef$current2.getFieldsValue(), false)).reduce(function (pre, next) {
return (0, _objectSpread4.default)((0, _objectSpread4.default)({}, pre), {}, (0, _defineProperty2.default)({}, next, finalValues[next] || undefined));
}, extraUrlParams);
/** 在同步到 url 上时对参数进行转化 */
onUrlSearchChange(genParams(syncToUrl, params || {}, 'set'));
}
},
submitButtonProps: (0, _objectSpread4.default)({
loading: loading
}, submitterProps.submitButtonProps)
}), "submitter");
}, [submitter, submitterProps, loading, transformKey, omitNil, _onReset, syncToUrl, extraUrlParams, onUrlSearchChange]);
var content = (0, _react.useMemo)(function () {
var wrapItems = grid ? /*#__PURE__*/(0, _jsxRuntime.jsx)(RowWrapper, {
children: items
}) : items;
if (contentRender) {
return contentRender(wrapItems, submitterNode, formRef.current);
}
return wrapItems;
}, [grid, RowWrapper, items, contentRender, submitterNode]);
var preInitialValues = (0, _proUtils.usePrevious)(props.initialValues);
// 提示一个 initialValues ,问的人实在是太多了
(0, _react.useEffect)(function () {
if (syncToUrl || !props.initialValues || !preInitialValues || rest.request) return;
var isEqual = (0, _proUtils.isDeepEqualReact)(props.initialValues, preInitialValues);
(0, _warning.noteOnce)(isEqual, "initialValues \u53EA\u5728 form \u521D\u59CB\u5316\u65F6\u751F\u6548\uFF0C\u5982\u679C\u4F60\u9700\u8981\u5F02\u6B65\u52A0\u8F7D\u63A8\u8350\u4F7F\u7528 request\uFF0C\u6216\u8005 initialValues ? <Form/> : null ");
(0, _warning.noteOnce)(isEqual, "The initialValues only take effect when the form is initialized, if you need to load asynchronously recommended request, or the initialValues ? <Form/> : null ");
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [props.initialValues]);
// 初始化给一个默认的 form
(0, _react.useImperativeHandle)(propsFormRef, function () {
return (0, _objectSpread4.default)((0, _objectSpread4.default)({}, formRef.current), formatValues);
}, [formatValues, formRef.current]);
(0, _react.useEffect)(function () {
var _formRef$current3, _formRef$current3$get;
var finalValues = transformKey((_formRef$current3 = formRef.current) === null || _formRef$current3 === void 0 || (_formRef$current3$get = _formRef$current3.getFieldsValue) === null || _formRef$current3$get === void 0 ? void 0 : _formRef$current3$get.call(_formRef$current3, true), omitNil);
onInit === null || onInit === void 0 || onInit(finalValues, (0, _objectSpread4.default)((0, _objectSpread4.default)({}, formRef.current), formatValues));
}, []);
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_proUtils.ProFormContext.Provider, {
value: (0, _objectSpread4.default)((0, _objectSpread4.default)({}, formatValues), {}, {
formRef: formRef
}),
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_antd.ConfigProvider, {
componentSize: rest.size || componentSize,
children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_helpers.GridContext.Provider, {
value: {
grid: grid,
colProps: colProps
},
children: [rest.component !== false && /*#__PURE__*/(0, _jsxRuntime.jsx)("input", {
type: "text",
style: {
display: 'none'
}
}), content]
})
})
});
}
/** 自动的formKey 防止重复 */
var requestFormCacheId = 0;
function BaseForm(props) {
var _props$extraUrlParams2 = props.extraUrlParams,
extraUrlParams = _props$extraUrlParams2 === void 0 ? {} : _props$extraUrlParams2,
syncToUrl = props.syncToUrl,
isKeyPressSubmit = props.isKeyPressSubmit,
_props$syncToUrlAsImp = props.syncToUrlAsImportant,
syncToUrlAsImportant = _props$syncToUrlAsImp === void 0 ? false : _props$syncToUrlAsImp,
_props$syncToInitialV = props.syncToInitialValues,
syncToInitialValues = _props$syncToInitialV === void 0 ? true : _props$syncToInitialV,
children = props.children,
contentRender = props.contentRender,
submitter = props.submitter,
fieldProps = props.fieldProps,
proFieldProps = props.proFieldProps,
formItemProps = props.formItemProps,
groupProps = props.groupProps,
_props$dateFormatter = props.dateFormatter,
dateFormatter = _props$dateFormatter === void 0 ? 'string' : _props$dateFormatter,
propsFormRef = props.formRef,
onInit = props.onInit,
form = props.form,
formComponentType = props.formComponentType,
onReset = props.onReset,
grid = props.grid,
rowProps = props.rowProps,
colProps = props.colProps,
_props$omitNil2 = props.omitNil,
omitNil = _props$omitNil2 === void 0 ? true : _props$omitNil2,
request = props.request,
params = props.params,
initialValues = props.initialValues,
_props$formKey = props.formKey,
formKey = _props$formKey === void 0 ? requestFormCacheId : _props$formKey,
readonly = props.readonly,
onLoadingChange = props.onLoadingChange,
propsLoading = props.loading,
propRest = (0, _objectWithoutProperties2.default)(props, _excluded2);
var formRef = (0, _react.useRef)({});
var _useMountMergeState = (0, _proUtils.useMountMergeState)(false, {
onChange: onLoadingChange,
value: propsLoading
}),
_useMountMergeState2 = (0, _slicedToArray2.default)(_useMountMergeState, 2),
loading = _useMountMergeState2[0],
setLoading = _useMountMergeState2[1];
var _useUrlSearchParams = (0, _useParams.useUrlSearchParams)({}, {
disabled: !syncToUrl
}),
_useUrlSearchParams2 = (0, _slicedToArray2.default)(_useUrlSearchParams, 2),
urlSearch = _useUrlSearchParams2[0],
setUrlSearch = _useUrlSearchParams2[1];
var curFormKey = (0, _react.useRef)((0, _proUtils.nanoid)());
(0, _react.useEffect)(function () {
requestFormCacheId += 0;
}, []);
var _useFetchData = (0, _proUtils.useFetchData)({
request: request,
params: params,
proFieldKey: formKey
}),
_useFetchData2 = (0, _slicedToArray2.default)(_useFetchData, 1),
initialData = _useFetchData2[0];
var _useContext = (0, _react.useContext)(_antd.ConfigProvider.ConfigContext),
getPrefixCls = _useContext.getPrefixCls;
var prefixCls = getPrefixCls('pro-form');
// css
var _useStyle = (0, _proUtils.useStyle)('ProForm', function (token) {
return (0, _defineProperty2.default)({}, ".".concat(prefixCls), (0, _defineProperty2.default)({}, "> div:not(".concat(token.proComponentsCls, "-form-light-filter)"), {
'.pro-field': {
maxWidth: '100%',
'@media screen and (max-width: 575px)': {
// 减少了 form 的 padding
maxWidth: 'calc(93vw - 48px)'
},
// 适用于短数字,短文本或者选项
'&-xs': {
width: 104
},
'&-s': {
width: 216
},
// 适用于较短字段录入、如姓名、电话、ID 等。
'&-sm': {
width: 216
},
'&-m': {
width: 328
},
// 标准宽度,适用于大部分字段长度
'&-md': {
width: 328
},
'&-l': {
width: 440
},
// 适用于较长字段录入,如长网址、标签组、文件路径等。
'&-lg': {
width: 440
},
// 适用于长文本录入,如长链接、描述、备注等,通常搭配自适应多行输入框或定高文本域使用。
'&-xl': {
width: 552
}
}
}));
}),
wrapSSR = _useStyle.wrapSSR,
hashId = _useStyle.hashId;
// 如果为 false不需要触发设置进去
var _useState = (0, _react.useState)(function () {
if (!syncToUrl) {
return {};
}
return genParams(syncToUrl, urlSearch, 'get');
}),
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
urlParamsMergeInitialValues = _useState2[0],
setUrlParamsMergeInitialValues = _useState2[1];
/** 保存 transformKeyRef用于对表单key transform */
var transformKeyRef = (0, _react.useRef)({});
var fieldsValueType = (0, _react.useRef)({});
/** 使用 callback 的类型 */
var transformKey = (0, _proUtils.useRefFunction)(function (values, paramsOmitNil, parentKey) {
return (0, _proUtils.transformKeySubmitValue)((0, _proUtils.conversionMomentValue)(values, dateFormatter, fieldsValueType.current, paramsOmitNil, parentKey), transformKeyRef.current, paramsOmitNil);
});
(0, _react.useEffect)(function () {
if (syncToInitialValues) return;
setUrlParamsMergeInitialValues({});
}, [syncToInitialValues]);
var getGenParams = (0, _proUtils.useRefFunction)(function () {
return (0, _objectSpread4.default)((0, _objectSpread4.default)({}, urlSearch), extraUrlParams);
});
(0, _react.useEffect)(function () {
if (!syncToUrl) return;
setUrlSearch(genParams(syncToUrl, getGenParams(), 'set'));
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [extraUrlParams, getGenParams, syncToUrl]);
var getPopupContainer = (0, _react.useMemo)(function () {
if (typeof window === 'undefined') return undefined;
// 如果在 drawerForm 和 modalForm 里就渲染dom到父节点里
// modalForm 可能高度太小不适合
if (formComponentType && ['DrawerForm'].includes(formComponentType)) {
return function (e) {
return e.parentNode || document.body;
};
}
return undefined;
}, [formComponentType]);
var onFinish = (0, _proUtils.useRefFunction)( /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee2() {
var _formRef$current4, _formRef$current4$get, finalValues, response, _formRef$current5, _formRef$current5$get, syncToUrlParams;
return (0, _regeneratorRuntime2.default)().wrap(function _callee2$(_context2) {
while (1) switch (_context2.prev = _context2.next) {
case 0:
if (propRest.onFinish) {
_context2.next = 2;
break;
}
return _context2.abrupt("return");
case 2:
if (!loading) {
_context2.next = 4;
break;
}
return _context2.abrupt("return");
case 4:
_context2.prev = 4;
finalValues = formRef === null || formRef === void 0 || (_formRef$current4 = formRef.current) === null || _formRef$current4 === void 0 || (_formRef$current4$get = _formRef$current4.getFieldsFormatValue) === null || _formRef$current4$get === void 0 ? void 0 : _formRef$current4$get.call(_formRef$current4);
response = propRest.onFinish(finalValues);
if (response instanceof Promise) {
setLoading(true);
}
_context2.next = 10;
return response;
case 10:
if (syncToUrl) {
// 把没有的值设置为未定义可以删掉 url 的参数
syncToUrlParams = Object.keys(formRef === null || formRef === void 0 || (_formRef$current5 = formRef.current) === null || _formRef$current5 === void 0 || (_formRef$current5$get = _formRef$current5.getFieldsFormatValue) === null || _formRef$current5$get === void 0 ? void 0 : _formRef$current5$get.call(_formRef$current5, undefined, false)).reduce(function (pre, next) {
var _finalValues$next;
return (0, _objectSpread4.default)((0, _objectSpread4.default)({}, pre), {}, (0, _defineProperty2.default)({}, next, (_finalValues$next = finalValues[next]) !== null && _finalValues$next !== void 0 ? _finalValues$next : undefined));
}, extraUrlParams); // fix #3547: 当原先在url中存在的字段被删除时应该将 params 中的该字段设置为 undefined,以便触发url同步删除
Object.keys(urlSearch).forEach(function (key) {
if (syncToUrlParams[key] !== false && syncToUrlParams[key] !== 0 && !syncToUrlParams[key]) {
syncToUrlParams[key] = undefined;
}
});
/** 在同步到 url 上时对参数进行转化 */
setUrlSearch(genParams(syncToUrl, syncToUrlParams, 'set'));
}
setLoading(false);
_context2.next = 18;
break;
case 14:
_context2.prev = 14;
_context2.t0 = _context2["catch"](4);
console.log(_context2.t0);
setLoading(false);
case 18:
case "end":
return _context2.stop();
}
}, _callee2, null, [[4, 14]]);
})));
// 初始化给一个默认的 form
(0, _react.useImperativeHandle)(propsFormRef, function () {
return formRef.current;
}, [!initialData]);
if (!initialData && props.request) {
return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
style: {
paddingTop: 50,
paddingBottom: 50,
textAlign: 'center'
},
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_antd.Spin, {})
});
}
return wrapSSR( /*#__PURE__*/(0, _jsxRuntime.jsx)(_EditOrReadOnlyContext.EditOrReadOnlyContext.Provider, {
value: {
mode: props.readonly ? 'read' : 'edit'
},
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_proProvider.ProConfigProvider, {
needDeps: true,
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_FieldContext.default.Provider, {
value: {
formRef: formRef,
fieldProps: fieldProps,
proFieldProps: proFieldProps,
formItemProps: formItemProps,
groupProps: groupProps,
formComponentType: formComponentType,
getPopupContainer: getPopupContainer,
formKey: curFormKey.current,
setFieldValueType: function setFieldValueType(name, _ref4) {
var _ref4$valueType = _ref4.valueType,
valueType = _ref4$valueType === void 0 ? 'text' : _ref4$valueType,
dateFormat = _ref4.dateFormat,
transform = _ref4.transform;
if (!Array.isArray(name)) return;
transformKeyRef.current = (0, _set.default)(transformKeyRef.current, name, transform);
fieldsValueType.current = (0, _set.default)(fieldsValueType.current, name, {
valueType: valueType,
dateFormat: dateFormat
});
}
},
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_List.FormListContext.Provider, {
value: {},
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_antd.Form, (0, _objectSpread4.default)((0, _objectSpread4.default)({
onKeyPress: function onKeyPress(event) {
if (!isKeyPressSubmit) return;
if (event.key === 'Enter') {
var _formRef$current6;
(_formRef$current6 = formRef.current) === null || _formRef$current6 === void 0 || _formRef$current6.submit();
}
},
autoComplete: "off",
form: form
}, (0, _omit.default)(propRest, ['ref', 'labelWidth', 'autoFocusFirstInput'])), {}, {
ref: function ref(instance) {
if (!formRef.current) return;
formRef.current.nativeElement = instance === null || instance === void 0 ? void 0 : instance.nativeElement;
}
// 组合 urlSearch 和 initialValues
,
initialValues: syncToUrlAsImportant ? (0, _objectSpread4.default)((0, _objectSpread4.default)((0, _objectSpread4.default)({}, initialValues), initialData), urlParamsMergeInitialValues) : (0, _objectSpread4.default)((0, _objectSpread4.default)((0, _objectSpread4.default)({}, urlParamsMergeInitialValues), initialValues), initialData),
onValuesChange: function onValuesChange(changedValues, values) {
var _propRest$onValuesCha;
propRest === null || propRest === void 0 || (_propRest$onValuesCha = propRest.onValuesChange) === null || _propRest$onValuesCha === void 0 || _propRest$onValuesCha.call(propRest, transformKey(changedValues, !!omitNil), transformKey(values, !!omitNil));
},
className: (0, _classnames.default)(props.className, prefixCls, hashId),
onFinish: onFinish,
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(BaseFormComponents, (0, _objectSpread4.default)((0, _objectSpread4.default)({
transformKey: transformKey,
autoComplete: "off",
loading: loading,
onUrlSearchChange: setUrlSearch
}, props), {}, {
formRef: formRef,
initialValues: (0, _objectSpread4.default)((0, _objectSpread4.default)({}, initialValues), initialData)
}))
}))
})
})
})
}));
}

View File

@@ -0,0 +1,4 @@
import React from 'react';
export declare const EditOrReadOnlyContext: React.Context<{
mode: 'edit' | 'read' | 'update';
}>;

View File

@@ -0,0 +1,11 @@
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.EditOrReadOnlyContext = void 0;
var _react = _interopRequireDefault(require("react"));
var EditOrReadOnlyContext = exports.EditOrReadOnlyContext = /*#__PURE__*/_react.default.createContext({
mode: 'edit'
});

View File

@@ -0,0 +1,34 @@
import type { TooltipPlacement } from 'antd/lib/tooltip';
import React from 'react';
import type { LightFilterFooterRender } from '../../typing';
export type SizeType = 'small' | 'middle' | 'large' | undefined;
export type LightWrapperProps = {
label?: React.ReactNode;
disabled?: boolean;
placeholder?: React.ReactNode;
size?: SizeType;
value?: any;
onChange?: (value?: any) => void;
onBlur?: (value?: any) => void;
style?: React.CSSProperties;
className?: string;
children?: React.ReactNode;
valuePropName?: string;
customLightMode?: boolean;
light?: boolean;
/**
* @name 自定义label的值
*
* @example <caption>自定义数组的转化</caption>
* labelFormatter={(value) =>value.join('-')} }
*/
labelFormatter?: (value: any) => React.ReactNode;
bordered?: boolean;
otherFieldProps?: any;
valueType?: string;
allowClear?: boolean;
footerRender?: LightFilterFooterRender;
placement?: TooltipPlacement;
};
declare const LightWrapper: React.ForwardRefRenderFunction<any, LightWrapperProps>;
export { LightWrapper };

View File

@@ -0,0 +1,118 @@
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.LightWrapper = void 0;
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _objectSpread3 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
var _proUtils = require("@ant-design/pro-utils");
var _antd = require("antd");
var _classnames = _interopRequireDefault(require("classnames"));
var _react = _interopRequireWildcard(require("react"));
var _style = require("./style");
var _jsxRuntime = require("react/jsx-runtime");
var _excluded = ["label", "size", "disabled", "onChange", "className", "style", "children", "valuePropName", "placeholder", "labelFormatter", "bordered", "footerRender", "allowClear", "otherFieldProps", "valueType", "placement"];
var LightWrapper = exports.LightWrapper = function LightWrapper(props) {
var label = props.label,
size = props.size,
disabled = props.disabled,
propsOnChange = props.onChange,
className = props.className,
style = props.style,
children = props.children,
valuePropName = props.valuePropName,
placeholder = props.placeholder,
labelFormatter = props.labelFormatter,
bordered = props.bordered,
footerRender = props.footerRender,
allowClear = props.allowClear,
otherFieldProps = props.otherFieldProps,
valueType = props.valueType,
placement = props.placement,
rest = (0, _objectWithoutProperties2.default)(props, _excluded);
var _useContext = (0, _react.useContext)(_antd.ConfigProvider.ConfigContext),
getPrefixCls = _useContext.getPrefixCls;
var prefixCls = getPrefixCls('pro-field-light-wrapper');
var _useStyle = (0, _style.useStyle)(prefixCls),
wrapSSR = _useStyle.wrapSSR,
hashId = _useStyle.hashId;
var _useState = (0, _react.useState)(props[valuePropName]),
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
tempValue = _useState2[0],
setTempValue = _useState2[1];
var _useMountMergeState = (0, _proUtils.useMountMergeState)(false),
_useMountMergeState2 = (0, _slicedToArray2.default)(_useMountMergeState, 2),
open = _useMountMergeState2[0],
setOpen = _useMountMergeState2[1];
var onChange = function onChange() {
var _otherFieldProps$onCh;
for (var _len = arguments.length, restParams = new Array(_len), _key = 0; _key < _len; _key++) {
restParams[_key] = arguments[_key];
}
otherFieldProps === null || otherFieldProps === void 0 || (_otherFieldProps$onCh = otherFieldProps.onChange) === null || _otherFieldProps$onCh === void 0 || _otherFieldProps$onCh.call.apply(_otherFieldProps$onCh, [otherFieldProps].concat(restParams));
propsOnChange === null || propsOnChange === void 0 || propsOnChange.apply(void 0, restParams);
};
var labelValue = props[valuePropName];
/** DateRange的转化dayjs 的 toString 有点不好用 */
var labelValueText = (0, _react.useMemo)(function () {
var _valueType$toLowerCas;
if (!labelValue) return labelValue;
if (valueType !== null && valueType !== void 0 && (_valueType$toLowerCas = valueType.toLowerCase()) !== null && _valueType$toLowerCas !== void 0 && _valueType$toLowerCas.endsWith('range') && valueType !== 'digitRange' && !labelFormatter) {
return (0, _proUtils.dateArrayFormatter)(labelValue, _proUtils.dateFormatterMap[valueType] || 'YYYY-MM-DD');
}
if (Array.isArray(labelValue)) return labelValue.map(function (item) {
if ((0, _typeof2.default)(item) === 'object' && item.label && item.value) {
return item.label;
}
return item;
});
return labelValue;
}, [labelValue, valueType, labelFormatter]);
return wrapSSR( /*#__PURE__*/(0, _jsxRuntime.jsx)(_proUtils.FilterDropdown, {
disabled: disabled,
open: open,
onOpenChange: setOpen,
placement: placement,
label: /*#__PURE__*/(0, _jsxRuntime.jsx)(_proUtils.FieldLabel, {
ellipsis: true,
size: size,
onClear: function onClear() {
onChange === null || onChange === void 0 || onChange();
setTempValue(null);
},
bordered: bordered,
style: style,
className: className,
label: label,
placeholder: placeholder,
value: labelValueText,
disabled: disabled,
formatter: labelFormatter,
allowClear: allowClear
}),
footer: {
onClear: function onClear() {
return setTempValue(null);
},
onConfirm: function onConfirm() {
onChange === null || onChange === void 0 || onChange(tempValue);
setOpen(false);
}
},
footerRender: footerRender,
children: /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
className: (0, _classnames.default)("".concat(prefixCls, "-container"), hashId, className),
style: style,
children: /*#__PURE__*/_react.default.cloneElement(children, (0, _objectSpread3.default)((0, _objectSpread3.default)({}, rest), {}, (0, _defineProperty2.default)((0, _defineProperty2.default)({}, valuePropName, tempValue), "onChange", function onChange(e) {
setTempValue(e !== null && e !== void 0 && e.target ? e.target.value : e);
}), children.props))
})
}));
};

View File

@@ -0,0 +1,9 @@
/// <reference types="react" />
import type { ProAliasToken } from '@ant-design/pro-provider';
export interface ProToken extends ProAliasToken {
componentCls: string;
}
export declare function useStyle(prefixCls: string): {
wrapSSR: (node: import("react").ReactElement<any, string | import("react").JSXElementConstructor<any>>) => import("react").JSX.Element;
hashId: string;
};

View File

@@ -0,0 +1,26 @@
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.useStyle = useStyle;
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _proProvider = require("@ant-design/pro-provider");
var genProStyle = function genProStyle(token) {
return (0, _defineProperty2.default)((0, _defineProperty2.default)({}, "".concat(token.componentCls, "-collapse-label"), {
paddingInline: 1,
paddingBlock: 1
}), "".concat(token.componentCls, "-container"), (0, _defineProperty2.default)({}, "".concat(token.antCls, "-form-item"), {
marginBlockEnd: 0
}));
};
function useStyle(prefixCls) {
return (0, _proProvider.useStyle)('LightWrapper', function (token) {
var proToken = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, token), {}, {
componentCls: ".".concat(prefixCls)
});
return [genProStyle(proToken)];
});
}

View File

@@ -0,0 +1,20 @@
import React from 'react';
import type { ExtendsProps, ProFormFieldItemProps, ProFormItemCreateConfig } from '../typing';
export declare const TYPE: unique symbol;
type ProFormComponent<P, Extends> = React.ComponentType<P & Extends>;
/**
* 处理fieldProps和formItemProps为function时传进来的方法
* 目前只在SchemaForm时可能会有
*/
type FunctionFieldProps = {
getFormItemProps?: () => Record<string, any>;
getFieldProps?: () => Record<string, any>;
};
/**
* 这个方法的主要作用是帮助 Field 增加 FormItem 同时也会处理 lightFilter
*
* @param Field
* @param config
*/
declare function createField<P extends ProFormFieldItemProps = any>(Field: React.ComponentType<P> | React.ForwardRefExoticComponent<P>, config?: ProFormItemCreateConfig): ProFormComponent<P, ExtendsProps & FunctionFieldProps>;
export { createField };

View File

@@ -0,0 +1,267 @@
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.TYPE = void 0;
exports.createField = createField;
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
var _proUtils = require("@ant-design/pro-utils");
var _classnames2 = _interopRequireDefault(require("classnames"));
var _rcFieldForm = require("rc-field-form");
var _warning = require("rc-util/lib/warning");
var _react = _interopRequireWildcard(require("react"));
var _FieldContext = _interopRequireDefault(require("../FieldContext"));
var _components = require("../components");
var _helpers = require("../helpers");
var _jsxRuntime = require("react/jsx-runtime");
var _excluded = ["valueType", "customLightMode", "lightFilterLabelFormatter", "valuePropName", "ignoreWidth", "defaultProps"],
_excluded2 = ["label", "tooltip", "placeholder", "width", "bordered", "messageVariables", "ignoreFormItem", "transform", "convertValue", "readonly", "allowClear", "colSize", "getFormItemProps", "getFieldProps", "filedConfig", "cacheForSwr", "proFieldProps"];
var TYPE = exports.TYPE = Symbol('ProFormComponent');
var WIDTH_SIZE_ENUM = {
// 适用于短数字,短文本或者选项
xs: 104,
s: 216,
// 适用于较短字段录入、如姓名、电话、ID 等。
sm: 216,
m: 328,
// 标准宽度,适用于大部分字段长度。
md: 328,
l: 440,
// 适用于较长字段录入,如长网址、标签组、文件路径等。
lg: 440,
// 适用于长文本录入,如长链接、描述、备注等,通常搭配自适应多行输入框或定高文本域使用。
xl: 552
};
var ignoreWidthValueType = ['switch', 'radioButton', 'radio', 'rate'];
/**
* 处理fieldProps和formItemProps为function时传进来的方法
* 目前只在SchemaForm时可能会有
*/
/**
* 这个方法的主要作用是帮助 Field 增加 FormItem 同时也会处理 lightFilter
*
* @param Field
* @param config
*/
function createField(Field, config) {
// 标记是否是 ProForm 的组件
// @ts-ignore
// eslint-disable-next-line no-param-reassign
Field.displayName = 'ProFormComponent';
var FieldWithContext = function FieldWithContext(props) {
var _props$filedConfig$co = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, props === null || props === void 0 ? void 0 : props.filedConfig), config),
tmpValueType = _props$filedConfig$co.valueType,
customLightMode = _props$filedConfig$co.customLightMode,
lightFilterLabelFormatter = _props$filedConfig$co.lightFilterLabelFormatter,
_props$filedConfig$co2 = _props$filedConfig$co.valuePropName,
valuePropName = _props$filedConfig$co2 === void 0 ? 'value' : _props$filedConfig$co2,
ignoreWidth = _props$filedConfig$co.ignoreWidth,
defaultProps = _props$filedConfig$co.defaultProps,
defaultFormItemProps = (0, _objectWithoutProperties2.default)(_props$filedConfig$co, _excluded);
var _defaultProps$props = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, defaultProps), props),
label = _defaultProps$props.label,
tooltip = _defaultProps$props.tooltip,
placeholder = _defaultProps$props.placeholder,
width = _defaultProps$props.width,
bordered = _defaultProps$props.bordered,
messageVariables = _defaultProps$props.messageVariables,
ignoreFormItem = _defaultProps$props.ignoreFormItem,
transform = _defaultProps$props.transform,
convertValue = _defaultProps$props.convertValue,
readonly = _defaultProps$props.readonly,
allowClear = _defaultProps$props.allowClear,
colSize = _defaultProps$props.colSize,
getFormItemProps = _defaultProps$props.getFormItemProps,
getFieldProps = _defaultProps$props.getFieldProps,
filedConfig = _defaultProps$props.filedConfig,
cacheForSwr = _defaultProps$props.cacheForSwr,
proFieldProps = _defaultProps$props.proFieldProps,
rest = (0, _objectWithoutProperties2.default)(_defaultProps$props, _excluded2);
var valueType = tmpValueType || rest.valueType;
// 有些 valueType 不需要宽度
var isIgnoreWidth = (0, _react.useMemo)(function () {
return ignoreWidth || ignoreWidthValueType.includes(valueType);
}, [ignoreWidth, valueType]);
var _useState = (0, _react.useState)(),
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
forceUpdate = _useState2[1];
// onChange触发fieldProps,formItemProps重新执行
var _useState3 = (0, _react.useState)(),
_useState4 = (0, _slicedToArray2.default)(_useState3, 2),
onlyChange = _useState4[0],
forceUpdateByOnChange = _useState4[1];
/**
* 从 context 中拿到的值
*/
var contextValue = _react.default.useContext(_FieldContext.default);
/**
* dependenciesValues change to trigger re-execute of getFieldProps and getFormItemProps
*/
var changedProps = (0, _proUtils.useDeepCompareMemo)(function () {
return {
formItemProps: getFormItemProps === null || getFormItemProps === void 0 ? void 0 : getFormItemProps(),
fieldProps: getFieldProps === null || getFieldProps === void 0 ? void 0 : getFieldProps()
};
},
// eslint-disable-next-line react-hooks/exhaustive-deps
[getFieldProps, getFormItemProps, rest.dependenciesValues, onlyChange]);
var fieldProps = (0, _proUtils.useDeepCompareMemo)(function () {
var newFieldProps = (0, _objectSpread2.default)((0, _objectSpread2.default)((0, _objectSpread2.default)((0, _objectSpread2.default)({}, ignoreFormItem ? (0, _proUtils.omitUndefined)({
value: rest.value
}) : {}), {}, {
placeholder: placeholder,
disabled: props.disabled
}, contextValue.fieldProps), changedProps.fieldProps), rest.fieldProps);
newFieldProps.style = (0, _proUtils.omitUndefined)(newFieldProps === null || newFieldProps === void 0 ? void 0 : newFieldProps.style);
return newFieldProps;
}, [ignoreFormItem, rest.value, rest.fieldProps, placeholder, props.disabled, contextValue.fieldProps, changedProps.fieldProps]);
// restFormItemProps is user props pass to Form.Item
var restFormItemProps = (0, _proUtils.pickProFormItemProps)(rest);
var formItemProps = (0, _proUtils.useDeepCompareMemo)(function () {
return (0, _objectSpread2.default)((0, _objectSpread2.default)((0, _objectSpread2.default)((0, _objectSpread2.default)({}, contextValue.formItemProps), restFormItemProps), changedProps.formItemProps), rest.formItemProps);
}, [changedProps.formItemProps, contextValue.formItemProps, rest.formItemProps, restFormItemProps]);
var otherProps = (0, _proUtils.useDeepCompareMemo)(function () {
return (0, _objectSpread2.default)((0, _objectSpread2.default)({
messageVariables: messageVariables
}, defaultFormItemProps), formItemProps);
}, [defaultFormItemProps, formItemProps, messageVariables]);
(0, _warning.noteOnce)(
// eslint-disable-next-line @typescript-eslint/dot-notation
!rest['defaultValue'], '请不要在 Form 中使用 defaultXXX。如果需要默认值请使用 initialValues 和 initialValue。');
var _useContext = (0, _react.useContext)(_rcFieldForm.FieldContext),
prefixName = _useContext.prefixName;
var proFieldKey = (0, _proUtils.useDeepCompareMemo)(function () {
var _contextValue$formKey;
var name = otherProps === null || otherProps === void 0 ? void 0 : otherProps.name;
if (Array.isArray(name)) name = name.join('_');
if (Array.isArray(prefixName) && name) name = "".concat(prefixName.join('.'), ".").concat(name);
var key = name && "form-".concat((_contextValue$formKey = contextValue.formKey) !== null && _contextValue$formKey !== void 0 ? _contextValue$formKey : '', "-field-").concat(name);
return key;
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [(0, _proUtils.stringify)(otherProps === null || otherProps === void 0 ? void 0 : otherProps.name), prefixName, contextValue.formKey]);
var onChange = (0, _proUtils.useRefFunction)(function () {
var _fieldProps$onChange;
if (getFormItemProps || getFieldProps) {
forceUpdateByOnChange([]);
} else if (rest.renderFormItem) {
forceUpdate([]);
}
for (var _len = arguments.length, restParams = new Array(_len), _key = 0; _key < _len; _key++) {
restParams[_key] = arguments[_key];
}
fieldProps === null || fieldProps === void 0 || (_fieldProps$onChange = fieldProps.onChange) === null || _fieldProps$onChange === void 0 || _fieldProps$onChange.call.apply(_fieldProps$onChange, [fieldProps].concat(restParams));
});
var style = (0, _proUtils.useDeepCompareMemo)(function () {
var newStyle = (0, _objectSpread2.default)({
width: width && !WIDTH_SIZE_ENUM[width] ? width : contextValue.grid ? '100%' : undefined
}, fieldProps === null || fieldProps === void 0 ? void 0 : fieldProps.style);
if (isIgnoreWidth) Reflect.deleteProperty(newStyle, 'width');
return (0, _proUtils.omitUndefined)(newStyle);
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [(0, _proUtils.stringify)(fieldProps === null || fieldProps === void 0 ? void 0 : fieldProps.style), contextValue.grid, isIgnoreWidth, width]);
var className = (0, _proUtils.useDeepCompareMemo)(function () {
var isSizeEnum = width && WIDTH_SIZE_ENUM[width];
return (0, _classnames2.default)(fieldProps === null || fieldProps === void 0 ? void 0 : fieldProps.className, (0, _defineProperty2.default)({
'pro-field': isSizeEnum
}, "pro-field-".concat(width), isSizeEnum && !isIgnoreWidth)) || undefined;
}, [width, fieldProps === null || fieldProps === void 0 ? void 0 : fieldProps.className, isIgnoreWidth]);
var fieldProFieldProps = (0, _proUtils.useDeepCompareMemo)(function () {
return (0, _proUtils.omitUndefined)((0, _objectSpread2.default)((0, _objectSpread2.default)({}, contextValue.proFieldProps), {}, {
mode: rest === null || rest === void 0 ? void 0 : rest.mode,
readonly: readonly,
params: rest.params,
proFieldKey: proFieldKey,
cacheForSwr: cacheForSwr
}, proFieldProps));
}, [contextValue.proFieldProps, rest === null || rest === void 0 ? void 0 : rest.mode, rest.params, readonly, proFieldKey, cacheForSwr, proFieldProps]);
var fieldFieldProps = (0, _proUtils.useDeepCompareMemo)(function () {
return (0, _objectSpread2.default)((0, _objectSpread2.default)({
onChange: onChange,
allowClear: allowClear
}, fieldProps), {}, {
style: style,
className: className
});
}, [allowClear, className, onChange, fieldProps, style]);
var field = (0, _proUtils.useDeepCompareMemo)(function () {
return /*#__PURE__*/(0, _jsxRuntime.jsx)(Field
// @ts-ignore
, (0, _objectSpread2.default)((0, _objectSpread2.default)({}, rest), {}, {
fieldProps: fieldFieldProps,
proFieldProps: fieldProFieldProps,
ref: props === null || props === void 0 ? void 0 : props.fieldRef
}), props.proFormFieldKey || props.name);
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [fieldProFieldProps, fieldFieldProps, rest]);
// 使用useMemo包裹避免不必要的re-render
var formItem = (0, _proUtils.useDeepCompareMemo)(function () {
var _otherProps$name, _field$props$allowCle, _field$props, _field$props2;
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.ProFormItem
// 全局的提供一个 tip 功能,可以减少代码量
// 轻量模式下不通过 FormItem 显示 label
, (0, _objectSpread2.default)((0, _objectSpread2.default)({
label: label && (proFieldProps === null || proFieldProps === void 0 ? void 0 : proFieldProps.light) !== true ? label : undefined,
tooltip: (proFieldProps === null || proFieldProps === void 0 ? void 0 : proFieldProps.light) !== true && tooltip,
valuePropName: valuePropName
// @ts-ignore
}, otherProps), {}, {
ignoreFormItem: ignoreFormItem,
transform: transform,
dataFormat: fieldProps === null || fieldProps === void 0 ? void 0 : fieldProps.format,
valueType: valueType,
messageVariables: (0, _objectSpread2.default)({
label: label || ''
}, otherProps === null || otherProps === void 0 ? void 0 : otherProps.messageVariables),
convertValue: convertValue,
lightProps: (0, _proUtils.omitUndefined)((0, _objectSpread2.default)((0, _objectSpread2.default)((0, _objectSpread2.default)({}, fieldProps), {}, {
valueType: valueType,
bordered: bordered,
allowClear: (_field$props$allowCle = field === null || field === void 0 || (_field$props = field.props) === null || _field$props === void 0 ? void 0 : _field$props.allowClear) !== null && _field$props$allowCle !== void 0 ? _field$props$allowCle : allowClear,
light: proFieldProps === null || proFieldProps === void 0 ? void 0 : proFieldProps.light,
label: label,
customLightMode: customLightMode,
labelFormatter: lightFilterLabelFormatter,
valuePropName: valuePropName,
footerRender: field === null || field === void 0 || (_field$props2 = field.props) === null || _field$props2 === void 0 ? void 0 : _field$props2.footerRender
}, rest.lightProps), otherProps.lightProps)),
children: field
}), props.proFormFieldKey || ((_otherProps$name = otherProps.name) === null || _otherProps$name === void 0 ? void 0 : _otherProps$name.toString()));
}, [label, proFieldProps === null || proFieldProps === void 0 ? void 0 : proFieldProps.light, tooltip, valuePropName, props.proFormFieldKey, otherProps, ignoreFormItem, transform, fieldProps, valueType, convertValue, bordered, field, allowClear, customLightMode, lightFilterLabelFormatter, rest.lightProps]);
var _useGridHelpers = (0, _helpers.useGridHelpers)(rest),
ColWrapper = _useGridHelpers.ColWrapper;
return /*#__PURE__*/(0, _jsxRuntime.jsx)(ColWrapper, {
children: formItem
});
};
var DependencyWrapper = function DependencyWrapper(props) {
var dependencies = props.dependencies;
return dependencies ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.ProFormDependency, {
name: dependencies,
originDependencies: props === null || props === void 0 ? void 0 : props.originDependencies,
children: function children(values) {
return /*#__PURE__*/(0, _jsxRuntime.jsx)(FieldWithContext, (0, _objectSpread2.default)({
dependenciesValues: values,
dependencies: dependencies
}, props));
}
}) : /*#__PURE__*/(0, _jsxRuntime.jsx)(FieldWithContext, (0, _objectSpread2.default)({
dependencies: dependencies
}, props));
};
return DependencyWrapper;
}

View File

@@ -0,0 +1,3 @@
export * from './BaseForm';
export * from './createField';
export * from './LightWrapper';

View File

@@ -0,0 +1,38 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
var _BaseForm = require("./BaseForm");
Object.keys(_BaseForm).forEach(function (key) {
if (key === "default" || key === "__esModule") return;
if (key in exports && exports[key] === _BaseForm[key]) return;
Object.defineProperty(exports, key, {
enumerable: true,
get: function get() {
return _BaseForm[key];
}
});
});
var _createField = require("./createField");
Object.keys(_createField).forEach(function (key) {
if (key === "default" || key === "__esModule") return;
if (key in exports && exports[key] === _createField[key]) return;
Object.defineProperty(exports, key, {
enumerable: true,
get: function get() {
return _createField[key];
}
});
});
var _LightWrapper = require("./LightWrapper");
Object.keys(_LightWrapper).forEach(function (key) {
if (key === "default" || key === "__esModule") return;
if (key in exports && exports[key] === _LightWrapper[key]) return;
Object.defineProperty(exports, key, {
enumerable: true,
get: function get() {
return _LightWrapper[key];
}
});
});