UNPKG

tdesign-react

Version:
361 lines (353 loc) 17 kB
/** * tdesign v1.15.1 * (c) 2025 tdesign * @license MIT */ 'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var toConsumableArray = require('../_chunks/dep-e4e1901e.js'); var defineProperty = require('../_chunks/dep-0006fcfa.js'); var slicedToArray = require('../_chunks/dep-8e4d656d.js'); var React = require('react'); var log = require('../_chunks/dep-59671c87.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-0c8c9057.js'); var merge = require('../_chunks/dep-f32c03f1.js'); var set = require('../_chunks/dep-79a54369.js'); var flattenDeep = require('../_chunks/dep-751520ce.js'); var unset = require('../_chunks/dep-bc1e6194.js'); require('../_chunks/dep-00b49251.js'); require('../_chunks/dep-667ac7af.js'); require('../_chunks/dep-69792df2.js'); require('../_chunks/dep-22b1740a.js'); require('../_chunks/dep-3398c1f2.js'); require('../_chunks/dep-64577888.js'); require('../_chunks/dep-79629634.js'); require('../_chunks/dep-25585736.js'); require('../_chunks/dep-62e73936.js'); require('../_chunks/dep-21ece627.js'); require('../_chunks/dep-25e4aa84.js'); require('../_chunks/dep-ec8d2dca.js'); require('../_chunks/dep-fc596d16.js'); require('../_chunks/dep-e1fbe1c3.js'); require('../_chunks/dep-255ceed8.js'); require('../_chunks/dep-eea2872a.js'); require('../_chunks/dep-f33c1939.js'); require('../_chunks/dep-9e5a468d.js'); require('../_chunks/dep-6283cbd9.js'); require('../_chunks/dep-4b18243f.js'); require('../_chunks/dep-71455db7.js'); require('../_chunks/dep-f26edb7b.js'); require('../_chunks/dep-bff2c990.js'); require('../_chunks/dep-31c4bc3d.js'); require('../_chunks/dep-df2b541f.js'); require('../_chunks/dep-edd366db.js'); require('../_chunks/dep-a56c4939.js'); require('../_chunks/dep-6c297e20.js'); require('../_chunks/dep-b7ad4d54.js'); require('../_chunks/dep-a2cb9299.js'); require('../_chunks/dep-f981815b.js'); require('../_chunks/dep-e57bdc8f.js'); require('../_chunks/dep-fc29b8b5.js'); require('../_chunks/dep-0ffc9d96.js'); require('../_chunks/dep-9a375a19.js'); require('../_chunks/dep-d915c90f.js'); require('../_chunks/dep-7a148045.js'); function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } var React__default = /*#__PURE__*/_interopDefaultLegacy(React); 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 key = 0; var FormList = function FormList(props) { var _useFormContext = form_FormContext.useFormContext(), formMapRef = _useFormContext.formMapRef, form = _useFormContext.form, onFormItemValueChange = _useFormContext.onFormItemValueChange, initialDataFromForm = _useFormContext.initialData, resetTypeFromContext = _useFormContext.resetType; var name = props.name, rules = props.rules, children = props.children; var initialData = props.initialData || get.get(initialDataFromForm, name) || []; var _useState = React.useState(initialData), _useState2 = slicedToArray._slicedToArray(_useState, 2), formListValue = _useState2[0], setFormListValue = _useState2[1]; var _useState3 = React.useState(function () { return initialData.map(function (data, index) { return { data: _objectSpread({}, data), key: key += 1, name: index, isListField: true }; }); }), _useState4 = slicedToArray._slicedToArray(_useState3, 2), fields = _useState4[0], setFields = _useState4[1]; var formListMapRef = React.useRef(/* @__PURE__ */new Map()); var formListRef = React.useRef(null); var fieldsTaskQueueRef = React.useRef([]); var snakeName = [].concat(name).filter(function (item) { return item !== void 0; }).toString(); var isMounted = React.useRef(false); React.useEffect(function () { return function () { isMounted.current = false; }; }, []); var operation = { add: function add(defaultValue, insertIndex) { var cloneFields = toConsumableArray._toConsumableArray(fields); var index = insertIndex !== null && insertIndex !== void 0 ? insertIndex : cloneFields.length; cloneFields.splice(index, 0, { key: key += 1, name: index, isListField: true }); cloneFields.forEach(function (field, index2) { return Object.assign(field, { name: index2 }); }); setFields(cloneFields); var nextFormListValue = toConsumableArray._toConsumableArray(formListValue); if (typeof defaultValue !== "undefined") { nextFormListValue[index] = defaultValue; setFormListValue(nextFormListValue); } set.set(form === null || form === void 0 ? void 0 : form.store, flattenDeep.flattenDeep([name, index]), nextFormListValue); var fieldValue = form_utils_index.calcFieldValue(name, nextFormListValue); requestAnimationFrame(function () { onFormItemValueChange === null || onFormItemValueChange === void 0 || onFormItemValueChange(_objectSpread({}, fieldValue)); }); }, remove: function remove(index) { var nextFields = fields.filter(function (item) { if (Array.isArray(index)) return !index.includes(item.name); return item.name !== index; }).map(function (field, i) { return _objectSpread(_objectSpread({}, field), {}, { name: i }); }); setFields(nextFields); var nextFormListValue = formListValue.filter(function (_, idx) { return idx !== index; }); setFormListValue(nextFormListValue); unset.unset(form === null || form === void 0 ? void 0 : form.store, flattenDeep.flattenDeep([name, index])); var fieldValue = form_utils_index.calcFieldValue(name, nextFormListValue); requestAnimationFrame(function () { onFormItemValueChange === null || onFormItemValueChange === void 0 || onFormItemValueChange(_objectSpread({}, fieldValue)); }); }, move: function move(from, to) { var cloneFields = toConsumableArray._toConsumableArray(fields); var fromItem = _objectSpread({}, cloneFields[from]); var toItem = _objectSpread({}, cloneFields[to]); cloneFields[to] = fromItem; cloneFields[from] = toItem; set.set(form === null || form === void 0 ? void 0 : form.store, name, []); setFields(cloneFields); } }; function setListFields(fieldData, callback, originData) { setFields(fieldData.map(function (_, index) { return { key: key += 1, name: index, isListField: true }; })); fieldsTaskQueueRef.current.push({ callback: callback, fieldData: fieldData, originData: originData }); } React.useEffect(function () { if (!name || !formMapRef) return; formMapRef.current.set(name, formListRef); return function () { formMapRef.current["delete"](name); }; }, [snakeName]); React.useEffect(function () { toConsumableArray._toConsumableArray(formListMapRef.current.values()).forEach(function (formItemRef) { if (!formItemRef.current) return; var _formItemRef$current = formItemRef.current, name2 = _formItemRef$current.name, isUpdated = _formItemRef$current.isUpdated; if (isUpdated) return; var data = get.get(formListValue, name2); formItemRef.current.setField({ value: data, status: "not" }); }); }, [formListValue]); React.useEffect(function () { var _form$getInternalHook, _form$getInternalHook2; if (!isMounted.current) { isMounted.current = true; return; } 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); Promise.resolve().then(function () { if (!fieldsTaskQueueRef.current.length) return; var currentQueue = fieldsTaskQueueRef.current.pop(); var fieldData = currentQueue.fieldData, callback = currentQueue.callback, originData = currentQueue.originData; toConsumableArray._toConsumableArray(formListMapRef.current.values()).forEach(function (formItemRef) { if (!formItemRef.current) return; var itemName = formItemRef.current.name; var data = get.get(fieldData, itemName); callback(formItemRef, data); }); if (!formMapRef || !formMapRef.current) return; toConsumableArray._toConsumableArray(formMapRef.current.values()).forEach(function (formItemRef) { if (!formItemRef.current) return; var _formItemRef$current2 = formItemRef.current, itemName = _formItemRef$current2.name, isFormList = _formItemRef$current2.isFormList; if (String(itemName) === String(name) || !isFormList) return; var data = get.get(originData, itemName); if (data) callback(formItemRef, data); }); }); }, [form, snakeName, fields, formMapRef]); React.useImperativeHandle(formListRef, function () { return { name: name, isFormList: true, getValue: function getValue() { var formListValue2 = []; toConsumableArray._toConsumableArray(formListMapRef.current.values()).forEach(function (formItemRef) { if (!formItemRef.current) return; var _formItemRef$current3 = formItemRef.current, name2 = _formItemRef$current3.name, getValue = _formItemRef$current3.getValue; var fieldValue = form_utils_index.calcFieldValue(name2, getValue()); merge.merge(formListValue2, fieldValue); }); return formListValue2; }, 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$current4, _formItemRef$current5; return formItemRef === null || formItemRef === void 0 || (_formItemRef$current4 = formItemRef.current) === null || _formItemRef$current4 === void 0 || (_formItemRef$current5 = _formItemRef$current4.validate) === null || _formItemRef$current5 === void 0 ? void 0 : _formItemRef$current5.call(_formItemRef$current4, trigger); }); return new Promise(function (resolve) { Promise.all(validates).then(function (validateResult) { validateResult.forEach(function (result) { var errorValue = Object.values(result)[0]; merge.merge(resultList, errorValue); }); var errorItems = validateResult.filter(function (item) { return Object.values(item)[0] !== true; }); if (errorItems.length) { resolve(defineProperty._defineProperty({}, snakeName, resultList)); } else { resolve(defineProperty._defineProperty({}, snakeName, true)); } }); }); }, setValue: function setValue(fieldData, originData) { setListFields(fieldData, function (formItemRef, data) { var _formItemRef$current6, _formItemRef$current7; formItemRef === null || formItemRef === void 0 || (_formItemRef$current6 = formItemRef.current) === null || _formItemRef$current6 === void 0 || (_formItemRef$current7 = _formItemRef$current6.setValue) === null || _formItemRef$current7 === void 0 || _formItemRef$current7.call(_formItemRef$current6, data); }, originData); }, setField: function setField(fieldData, originData) { var value = fieldData.value, status = fieldData.status; setListFields(value, function (formItemRef, data) { var _formItemRef$current8, _formItemRef$current9; formItemRef === null || formItemRef === void 0 || (_formItemRef$current8 = formItemRef.current) === null || _formItemRef$current8 === void 0 || (_formItemRef$current9 = _formItemRef$current8.setField) === null || _formItemRef$current9 === void 0 || _formItemRef$current9.call(_formItemRef$current8, { value: data, status: status }); }, originData); }, resetField: function resetField(type) { var resetType = type || resetTypeFromContext; if (resetType === "initial") { setFormListValue(initialData); var newFields = initialData.map(function (data, index) { return { data: _objectSpread({}, data), key: key += 1, name: index, isListField: true }; }); setFields(newFields); set.set(form === null || form === void 0 ? void 0 : form.store, flattenDeep.flattenDeep([name]), initialData); requestAnimationFrame(function () { toConsumableArray._toConsumableArray(formListMapRef.current.values()).forEach(function (formItemRef) { if (!formItemRef.current) return; var itemName = formItemRef.current.name; var itemValue = get.get(initialData, itemName); if (itemValue !== void 0) { formItemRef.current.setField({ value: itemValue, status: "not" }); } }); }); } else { toConsumableArray._toConsumableArray(formListMapRef.current.values()).forEach(function (formItemRef) { var _formItemRef$current0, _formItemRef$current1; formItemRef === null || formItemRef === void 0 || (_formItemRef$current0 = formItemRef.current) === null || _formItemRef$current0 === void 0 || (_formItemRef$current1 = _formItemRef$current0.resetField) === null || _formItemRef$current1 === void 0 || _formItemRef$current1.call(_formItemRef$current0); }); fieldsTaskQueueRef.current = []; setFormListValue([]); setFields([]); unset.unset(form === null || form === void 0 ? void 0 : form.store, flattenDeep.flattenDeep([name])); } }, setValidateMessage: function setValidateMessage(fieldData) { toConsumableArray._toConsumableArray(formListMapRef.current.values()).forEach(function (formItemRef) { var _formItemRef$current10, _formItemRef$current11; if (!formItemRef.current) return; var name2 = formItemRef.current.name; var data = get.get(fieldData, name2); formItemRef === null || formItemRef === void 0 || (_formItemRef$current10 = formItemRef.current) === null || _formItemRef$current10 === void 0 || (_formItemRef$current11 = _formItemRef$current10.setValidateMessage) === null || _formItemRef$current11 === void 0 || _formItemRef$current11.call(_formItemRef$current10, data); }); }, resetValidate: function resetValidate() { toConsumableArray._toConsumableArray(formListMapRef.current.values()).forEach(function (formItemRef) { var _formItemRef$current12, _formItemRef$current13; formItemRef === null || formItemRef === void 0 || (_formItemRef$current12 = formItemRef.current) === null || _formItemRef$current12 === void 0 || (_formItemRef$current13 = _formItemRef$current12.resetValidate) === null || _formItemRef$current13 === void 0 || _formItemRef$current13.call(_formItemRef$current12); }); } }; }); 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, rules: rules, formListMapRef: formListMapRef, initialData: initialData, form: form } }, children(fields, operation)); }; FormList.displayName = "FormList"; exports["default"] = FormList; //# sourceMappingURL=FormList.js.map