UNPKG

tav-ui

Version:
208 lines (203 loc) 6.69 kB
'use strict'; 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