UNPKG

tdesign-react

Version:
363 lines (354 loc) 16.2 kB
/** * tdesign v1.16.6 * (c) 2026 tdesign * @license MIT */ 'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var _typeof = require('../_chunks/dep-90a93885.js'); var toConsumableArray = require('../_chunks/dep-33be2db8.js'); var defineProperty = require('../_chunks/dep-1f6c39e3.js'); var slicedToArray = require('../_chunks/dep-3281986a.js'); var React = require('react'); var log = require('../_chunks/dep-ed99b2c6.js'); var form_FormContext = require('./FormContext.js'); var form_hooks_useForm = require('./hooks/useForm.js'); var form_utils_index = require('./utils/index.js'); var get = require('../_chunks/dep-d1f369bc.js'); var cloneDeep = require('../_chunks/dep-400d026f.js'); var set = require('../_chunks/dep-a285940d.js'); var merge = require('../_chunks/dep-e691746e.js'); var isEqual = require('../_chunks/dep-a96a03f6.js'); var unset = require('../_chunks/dep-c3eb8b25.js'); var isArray = require('../_chunks/dep-a8d5081a.js'); require('../_chunks/dep-ef5bfcf1.js'); require('../_chunks/dep-989c8b4a.js'); require('../_chunks/dep-54373955.js'); require('../_chunks/dep-5eada4cb.js'); require('../_chunks/dep-33b166a8.js'); require('../_chunks/dep-80f72db2.js'); require('../_chunks/dep-adec3cbe.js'); require('../_chunks/dep-4748ebeb.js'); require('../_chunks/dep-615c149d.js'); require('../_chunks/dep-0173c82c.js'); require('../_chunks/dep-8663a5c9.js'); require('../_chunks/dep-50349518.js'); require('../_chunks/dep-8c9795f9.js'); require('../_chunks/dep-723e29d6.js'); require('../_chunks/dep-0bd8b970.js'); require('../_chunks/dep-d7d7df54.js'); require('../_chunks/dep-1f8c969d.js'); require('../_chunks/dep-c9025587.js'); require('../_chunks/dep-d24b94bc.js'); require('../_chunks/dep-081faea2.js'); require('../_chunks/dep-9d3b1a05.js'); require('../_chunks/dep-403f5edf.js'); require('../_chunks/dep-6478e7e3.js'); require('../_chunks/dep-73ef2133.js'); require('../_chunks/dep-cae1e5aa.js'); require('../_chunks/dep-0b97e212.js'); require('../_chunks/dep-0652d2a6.js'); require('../_chunks/dep-91b467dd.js'); require('../_chunks/dep-18ca5cd9.js'); require('../_chunks/dep-3facd669.js'); require('../_chunks/dep-7809b92f.js'); require('../_chunks/dep-1a7ce20e.js'); require('../_chunks/dep-116af952.js'); require('../_chunks/dep-f6a777ad.js'); require('../_chunks/dep-ff301423.js'); require('../_chunks/dep-e0d43c80.js'); require('../_chunks/dep-18c47660.js'); require('../_chunks/dep-9721faba.js'); require('../_chunks/dep-1c011250.js'); require('../_chunks/dep-cb9114ad.js'); function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } var React__default = /*#__PURE__*/_interopDefaultLegacy(React); /** * Casts `value` as an array if it's not one. * * @static * @memberOf _ * @since 4.4.0 * @category Lang * @param {*} value The value to inspect. * @returns {Array} Returns the cast array. * @example * * _.castArray(1); * // => [1] * * _.castArray({ 'a': 1 }); * // => [{ 'a': 1 }] * * _.castArray('abc'); * // => ['abc'] * * _.castArray(null); * // => [null] * * _.castArray(undefined); * // => [undefined] * * _.castArray(); * // => [] * * var array = [1, 2, 3]; * console.log(_.castArray(array) === array); * // => true */ function castArray() { if (!arguments.length) { return []; } var value = arguments[0]; return isArray.isArray(value) ? value : [value]; } function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { defineProperty._defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } var globalKey = 0; var FormList = function FormList(props) { var name = props.name, rules = props.rules, children = props.children; var _useFormContext = form_FormContext.useFormContext(), formMapRef = _useFormContext.formMapRef, form = _useFormContext.form, onFormItemValueChange = _useFormContext.onFormItemValueChange, initialDataFromForm = _useFormContext.initialData, resetTypeFromContext = _useFormContext.resetType; var _useFormListContext = form_FormContext.useFormListContext(), parentFullPath = _useFormListContext.fullPath, parentInitialData = _useFormListContext.initialData; var fullPath = form_utils_index.concatName(parentFullPath, name); var initialData = React.useMemo(function () { var propsInitialData; if (props.initialData) { propsInitialData = props.initialData; } else if (parentFullPath && parentInitialData) { var relativePath = fullPath.slice(form_utils_index.convertNameToArray(parentFullPath).length); propsInitialData = get.get(parentInitialData, relativePath); } else { propsInitialData = get.get(initialDataFromForm, fullPath); } return cloneDeep.cloneDeep(propsInitialData || []); }, [props.initialData, fullPath, parentFullPath, parentInitialData, initialDataFromForm]); var _useState = React.useState(function () { return get.get(form === null || form === void 0 ? void 0 : form.store, fullPath) || initialData; }), _useState2 = slicedToArray._slicedToArray(_useState, 2), formListValue = _useState2[0], setFormListValue = _useState2[1]; var _useState3 = React.useState(function () { return formListValue.map(function (data, index) { return { data: _objectSpread({}, data), key: globalKey += 1, name: index, isListField: true }; }); }), _useState4 = slicedToArray._slicedToArray(_useState3, 2), fields = _useState4[0], setFields = _useState4[1]; var formListRef = React.useRef(null); var formListMapRef = React.useRef(/* @__PURE__ */new Map()); var snakeName = [].concat(name).filter(function (item) { return item !== void 0; }).toString(); var updateFormList = function updateFormList(newFields, newFormListValue) { setFields(newFields); setFormListValue(newFormListValue); set.set(form === null || form === void 0 ? void 0 : form.store, fullPath, newFormListValue); var changeValue = form_utils_index.calcFieldValue(fullPath, newFormListValue); onFormItemValueChange === null || onFormItemValueChange === void 0 || onFormItemValueChange(changeValue); }; var operation = { add: function add(defaultValue, insertIndex) { var newFields = toConsumableArray._toConsumableArray(fields); var index = insertIndex !== null && insertIndex !== void 0 ? insertIndex : newFields.length; newFields.splice(index, 0, { key: globalKey += 1, name: index, isListField: true }); newFields.forEach(function (field, index2) { return Object.assign(field, { name: index2 }); }); var newFormListValue = toConsumableArray._toConsumableArray(formListValue); newFormListValue.splice(index, 0, cloneDeep.cloneDeep(defaultValue)); updateFormList(newFields, newFormListValue); }, remove: function remove(index) { var indices = castArray(index); var newFields = toConsumableArray._toConsumableArray(fields).filter(function (f) { return !indices.includes(f.name); }).map(function (field, i) { return _objectSpread(_objectSpread({}, field), {}, { name: i }); }); var newFormListValue = toConsumableArray._toConsumableArray(formListValue).filter(function (_, i) { return !indices.includes(i); }); unset.unset(form === null || form === void 0 ? void 0 : form.store, fullPath); updateFormList(newFields, newFormListValue); }, move: function move(from, to) { var newFields = toConsumableArray._toConsumableArray(fields); var newFormListValue = toConsumableArray._toConsumableArray(formListValue); form_utils_index.swap(newFields, from, to); form_utils_index.swap(newFormListValue, from, to); newFields[from].name = from; newFields[to].name = to; updateFormList(newFields, newFormListValue); } }; function setListFields(fieldData, callback) { if (isEqual.isEqual(formListValue, fieldData)) return; var newFields = fieldData.map(function (_, index) { var currField = fields[index]; var oldItem = formListValue[index]; var newItem = fieldData[index]; var noChange = currField && isEqual.isEqual(oldItem, newItem); return { key: noChange ? currField.key : globalKey += 1, name: index, isListField: true }; }); Array.from(formListMapRef.current.values()).forEach(function (formItemRef) { if (!formItemRef.current) return; var childName = formItemRef.current.name; var data = get.get(fieldData, childName); if (data !== void 0) callback(formItemRef, data); }); updateFormList(newFields, fieldData); } React.useEffect(function () { if (!name || !formMapRef) return; formMapRef.current.set(fullPath, formListRef); set.set(form === null || form === void 0 ? void 0 : form.store, fullPath, formListValue); return function () { formMapRef.current["delete"](fullPath); }; }, [snakeName]); React.useEffect(function () { var _form$getInternalHook, _form$getInternalHook2; form === null || form === void 0 || (_form$getInternalHook = form.getInternalHooks) === null || _form$getInternalHook === void 0 || (_form$getInternalHook = _form$getInternalHook.call(form, form_hooks_useForm.HOOK_MARK)) === null || _form$getInternalHook === void 0 || (_form$getInternalHook2 = _form$getInternalHook.notifyWatch) === null || _form$getInternalHook2 === void 0 || _form$getInternalHook2.call(_form$getInternalHook, name); }, [form, snakeName, fields]); React.useImperativeHandle(formListRef, function () { return { name: name, fullPath: fullPath, value: formListValue, initialData: initialData, isFormList: true, formListMapRef: formListMapRef, getValue: function getValue() { return get.get(form === null || form === void 0 ? void 0 : form.store, fullPath); }, validate: function validate() { var trigger = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "all"; var resultList = []; var validates = toConsumableArray._toConsumableArray(formListMapRef.current.values()).map(function (formItemRef) { var _formItemRef$current, _formItemRef$current$; return formItemRef === null || formItemRef === void 0 || (_formItemRef$current = formItemRef.current) === null || _formItemRef$current === void 0 || (_formItemRef$current$ = _formItemRef$current.validate) === null || _formItemRef$current$ === void 0 ? void 0 : _formItemRef$current$.call(_formItemRef$current, trigger); }); return new Promise(function (resolve) { Promise.all(validates).then(function (validateResult) { validateResult.forEach(function (result) { if (_typeof._typeof(result) !== "object") return; var errorValue = Object.values(result)[0]; merge.merge(resultList, errorValue); }); var errorItems = validateResult.filter(function (item) { if (_typeof._typeof(item) !== "object") return; return Object.values(item)[0] !== true; }); if (errorItems.length) { resolve(defineProperty._defineProperty({}, snakeName, resultList)); } else { resolve(defineProperty._defineProperty({}, snakeName, true)); } }); }); }, setValue: function setValue(fieldData) { setListFields(fieldData, function (formItemRef, data) { var _formItemRef$current2, _formItemRef$current3; formItemRef === null || formItemRef === void 0 || (_formItemRef$current2 = formItemRef.current) === null || _formItemRef$current2 === void 0 || (_formItemRef$current3 = _formItemRef$current2.setValue) === null || _formItemRef$current3 === void 0 || _formItemRef$current3.call(_formItemRef$current2, data); }); }, setField: function setField(fieldData) { var value = fieldData.value, status = fieldData.status; var currentValue = get.get(form === null || form === void 0 ? void 0 : form.store, fullPath) || []; if (isEqual.isEqual(currentValue, value)) return; setListFields(value, function (formItemRef, data) { var _formItemRef$current4, _formItemRef$current5; formItemRef === null || formItemRef === void 0 || (_formItemRef$current4 = formItemRef.current) === null || _formItemRef$current4 === void 0 || (_formItemRef$current5 = _formItemRef$current4.setField) === null || _formItemRef$current5 === void 0 || _formItemRef$current5.call(_formItemRef$current4, { value: data, status: status }); }); }, resetField: function resetField(type) { var resetType = type || resetTypeFromContext; if (resetType === "initial") { var currentData = get.get(form === null || form === void 0 ? void 0 : form.store, fullPath); if (isEqual.isEqual(currentData, initialData)) return; setFormListValue(initialData); var newFields = initialData === null || initialData === void 0 ? void 0 : initialData.map(function (data, index) { return { data: _objectSpread({}, data), key: globalKey += 1, name: index, isListField: true }; }); setFields(newFields); set.set(form === null || form === void 0 ? void 0 : form.store, fullPath, initialData); } else { setFormListValue([]); setFields([]); unset.unset(form === null || form === void 0 ? void 0 : form.store, fullPath); } }, setValidateMessage: function setValidateMessage(fieldData) { toConsumableArray._toConsumableArray(formListMapRef.current.values()).forEach(function (formItemRef) { var _formItemRef$current6, _formItemRef$current7; if (!formItemRef.current) return; var name2 = formItemRef.current.name; var data = get.get(fieldData, name2); formItemRef === null || formItemRef === void 0 || (_formItemRef$current6 = formItemRef.current) === null || _formItemRef$current6 === void 0 || (_formItemRef$current7 = _formItemRef$current6.setValidateMessage) === null || _formItemRef$current7 === void 0 || _formItemRef$current7.call(_formItemRef$current6, data); }); }, resetValidate: function resetValidate() { toConsumableArray._toConsumableArray(formListMapRef.current.values()).forEach(function (formItemRef) { var _formItemRef$current8, _formItemRef$current9; formItemRef === null || formItemRef === void 0 || (_formItemRef$current8 = formItemRef.current) === null || _formItemRef$current8 === void 0 || (_formItemRef$current9 = _formItemRef$current8.resetValidate) === null || _formItemRef$current9 === void 0 || _formItemRef$current9.call(_formItemRef$current8); }); } }; }); if (typeof children !== "function") { log.log.error("Form", "FormList's children must be a function!"); return null; } return /* @__PURE__ */React__default["default"].createElement(form_FormContext.FormListContext.Provider, { value: { name: name, fullPath: fullPath, rules: rules, formListMapRef: formListMapRef, initialData: initialData, form: form } }, children(fields, operation)); }; FormList.displayName = "FormList"; exports["default"] = FormList; //# sourceMappingURL=FormList.js.map