tdesign-react
Version:
TDesign Component for React
363 lines (354 loc) • 16.2 kB
JavaScript
/**
* tdesign v1.16.6
* (c) 2026 tdesign
* @license MIT
*/
;
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