tav-ui
Version:
208 lines (203 loc) • 6.69 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
var vue = require('vue');
var lodashEs = require('lodash-es');
var basic = require('../../../../utils/basic2.js');
var dateUtil = require('../../../../utils/dateUtil2.js');
var is = require('../../../../utils/is2.js');
var log = require('../../../../utils/log2.js');
var helper = require('../helper2.js');
function useFormEvents({
emit,
getProps,
formModel,
getSchema,
defaultValueRef,
formElRef,
schemaRef,
handleFormValues
}) {
async function resetFields() {
const { resetFunc, submitOnReset } = vue.unref(getProps);
resetFunc && is.isFunction(resetFunc) && await resetFunc();
const formEl = vue.unref(formElRef);
if (!formEl)
return;
Object.keys(formModel).forEach((key) => {
formModel[key] = defaultValueRef.value[key];
});
clearValidate();
emit("reset", vue.toRaw(formModel));
submitOnReset && handleSubmit();
}
async function setFieldsValue(values, useValidate = true) {
const fields = vue.unref(getSchema).map((item) => item.field).filter(Boolean);
const validKeys = [];
Object.keys(values).forEach((key) => {
const schema = vue.unref(getSchema).find((item) => item.field === key);
let value = values[key];
const hasKey = Reflect.has(values, key);
value = helper.handleInputNumberValue(schema?.component, value);
if (hasKey && fields.includes(key)) {
if (itemIsDateType(key)) {
if (Array.isArray(value)) {
formModel[key] = value;
} else {
const { componentProps } = schema || {};
let _props = componentProps;
if (typeof componentProps === "function")
_props = _props({ formModel });
formModel[key] = value ? _props?.valueFormat ? value : dateUtil.dateUtil(value) : null;
}
} else {
formModel[key] = value;
}
validKeys.push(key);
}
});
useValidate && validateFields(validKeys).catch((_) => {
});
}
async function removeSchemaByFiled(fields) {
const schemaList = lodashEs.cloneDeep(vue.unref(getSchema));
if (!fields)
return;
let fieldList = is.isString(fields) ? [fields] : fields;
if (is.isString(fields))
fieldList = [fields];
for (const field of fieldList)
_removeSchemaByFiled(field, schemaList);
schemaRef.value = schemaList;
}
function _removeSchemaByFiled(field, schemaList) {
if (is.isString(field)) {
const index = schemaList.findIndex((schema) => schema.field === field);
if (index !== -1) {
delete formModel[field];
schemaList.splice(index, 1);
}
}
}
async function appendSchemaByField(schema, prefixField, first = false) {
const schemaList = lodashEs.cloneDeep(vue.unref(getSchema));
const index = schemaList.findIndex((schema2) => schema2.field === prefixField);
if (!prefixField || index === -1 || first) {
first ? schemaList.unshift(schema) : schemaList.push(schema);
schemaRef.value = schemaList;
return;
}
if (index !== -1)
schemaList.splice(index + 1, 0, schema);
schemaRef.value = schemaList;
}
async function resetSchema(data) {
let updateData = [];
if (is.isObject(data))
updateData.push(data);
if (is.isArray(data))
updateData = [...data];
const hasField = updateData.every((item) => item.component === "Divider" || item.component === "FormTitle" || Reflect.has(item, "field") && item.field);
if (!hasField) {
log.error("All children of the form Schema array that need to be updated must contain the `field` field");
return;
}
schemaRef.value = updateData;
}
async function updateSchema(data) {
let updateData = [];
if (is.isObject(data)) {
updateData.push(data);
}
if (is.isArray(data)) {
updateData = [...data];
}
const hasField = updateData.every((item) => item.component === "Divider" || item.component === "FormTitle" || Reflect.has(item, "field") && item.field);
if (!hasField) {
log.error("All children of the form Schema array that need to be updated must contain the `field` field");
return;
}
const schema = vue.unref(getSchema);
updateData.forEach((item) => {
const findResult = schema.find((val) => val.field === item.field);
if (findResult) {
const newSchema = basic.deepMerge(findResult, item);
schema.push(newSchema);
} else {
schema.push(item);
}
});
schemaRef.value = lodashEs.uniqBy(schema, "field");
}
function transFormFieldsValue(values) {
for (let i = 0; i < vue.unref(getSchema).length; i++) {
const item = vue.unref(getSchema)[i];
if (item.component === "InputNumber" && !is.isNullOrUnDef(values[item.field])) {
values[item.field] = Number(values[item.field]);
}
}
return values;
}
function getFieldsValue() {
const formEl = vue.unref(formElRef);
if (!formEl)
return {};
const res = handleFormValues(vue.toRaw(vue.unref(formModel)));
return transFormFieldsValue(res);
}
function itemIsDateType(key) {
return vue.unref(getSchema).some((item) => {
return item.field === key ? helper.dateItemType.includes(item.component) : false;
});
}
async function validateFields(nameList) {
return vue.unref(formElRef)?.validateFields(nameList);
}
async function validate(nameList) {
try {
const res = await vue.unref(formElRef)?.validate(nameList);
return transFormFieldsValue(res);
} catch (error2) {
return Promise.reject(error2);
}
}
async function clearValidate(name) {
await vue.unref(formElRef)?.clearValidate(name);
}
async function scrollToField(name, options) {
await vue.unref(formElRef)?.scrollToField(name, options);
}
async function handleSubmit(e) {
e && e.preventDefault();
const { submitFunc } = vue.unref(getProps);
if (submitFunc && is.isFunction(submitFunc)) {
await submitFunc();
return;
}
const formEl = vue.unref(formElRef);
if (!formEl)
return;
try {
const values = await validate();
const res = handleFormValues(values);
emit("submit", res);
} catch (error2) {
throw new Error(error2);
}
}
return {
handleSubmit,
clearValidate,
validate,
validateFields,
getFieldsValue,
updateSchema,
resetSchema,
appendSchemaByField,
removeSchemaByFiled,
resetFields,
setFieldsValue,
scrollToField
};
}
exports.useFormEvents = useFormEvents;
//# sourceMappingURL=useFormEvents2.js.map