element-plus
Version:
A Component Library for Vue 3
1 lines • 10.9 kB
Source Map (JSON)
{"version":3,"file":"form2.mjs","sources":["../../../../../../packages/components/form/src/form.vue"],"sourcesContent":["<template>\n <form ref=\"formRef\" :class=\"formClasses\">\n <slot />\n </form>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, provide, reactive, ref, toRefs, watch } from 'vue'\nimport { debugWarn, isFunction } from '@element-plus/utils'\nimport { useNamespace } from '@element-plus/hooks'\nimport { useFormSize } from './hooks'\nimport { formContextKey } from './constants'\nimport { formEmits, formProps } from './form'\nimport { filterFields, useFormLabelWidth } from './utils'\n\nimport type { ValidateFieldsError } from 'async-validator'\nimport type { Arrayable } from '@element-plus/utils'\nimport type {\n FormContext,\n FormItemContext,\n FormValidateCallback,\n FormValidationResult,\n} from './types'\nimport type { FormItemProp } from './form-item'\n\nconst COMPONENT_NAME = 'ElForm'\ndefineOptions({\n name: COMPONENT_NAME,\n})\nconst props = defineProps(formProps)\nconst emit = defineEmits(formEmits)\n\nconst formRef = ref<HTMLElement>()\nconst fields = reactive<FormItemContext[]>([])\n\nconst formSize = useFormSize()\nconst ns = useNamespace('form')\nconst formClasses = computed(() => {\n const { labelPosition, inline } = props\n return [\n ns.b(),\n ns.m(formSize.value || 'default'),\n {\n [ns.m(`label-${labelPosition}`)]: labelPosition,\n [ns.m('inline')]: inline,\n },\n ]\n})\n\nconst getField: FormContext['getField'] = (prop) => {\n return filterFields(fields, [prop])[0]\n}\n\nconst addField: FormContext['addField'] = (field) => {\n fields.push(field)\n}\n\nconst removeField: FormContext['removeField'] = (field) => {\n if (field.prop) {\n fields.splice(fields.indexOf(field), 1)\n }\n}\n\nconst resetFields: FormContext['resetFields'] = (properties = []) => {\n if (!props.model) {\n debugWarn(COMPONENT_NAME, 'model is required for resetFields to work.')\n return\n }\n filterFields(fields, properties).forEach((field) => field.resetField())\n}\n\nconst clearValidate: FormContext['clearValidate'] = (props = []) => {\n filterFields(fields, props).forEach((field) => field.clearValidate())\n}\n\nconst isValidatable = computed(() => {\n const hasModel = !!props.model\n if (!hasModel) {\n debugWarn(COMPONENT_NAME, 'model is required for validate to work.')\n }\n return hasModel\n})\n\nconst obtainValidateFields = (props: Arrayable<FormItemProp>) => {\n if (fields.length === 0) return []\n\n const filteredFields = filterFields(fields, props)\n if (!filteredFields.length) {\n debugWarn(COMPONENT_NAME, 'please pass correct props!')\n return []\n }\n return filteredFields\n}\n\nconst validate = async (\n callback?: FormValidateCallback\n): FormValidationResult => validateField(undefined, callback)\n\nconst doValidateField = async (\n props: Arrayable<FormItemProp> = []\n): Promise<boolean> => {\n if (!isValidatable.value) return false\n\n const fields = obtainValidateFields(props)\n if (fields.length === 0) return true\n\n let validationErrors: ValidateFieldsError = {}\n for (const field of fields) {\n try {\n await field.validate('')\n if (field.validateState === 'error' && !field.error) field.resetField()\n } catch (fields) {\n validationErrors = {\n ...validationErrors,\n ...(fields as ValidateFieldsError),\n }\n }\n }\n\n if (Object.keys(validationErrors).length === 0) return true\n return Promise.reject(validationErrors)\n}\n\nconst validateField: FormContext['validateField'] = async (\n modelProps = [],\n callback\n) => {\n let result = false\n const shouldThrow = !isFunction(callback)\n try {\n result = await doValidateField(modelProps)\n // When result is false meaning that the fields are not validatable\n if (result === true) {\n await callback?.(result)\n }\n return result\n } catch (e) {\n if (e instanceof Error) throw e\n\n const invalidFields = e as ValidateFieldsError\n\n if (props.scrollToError) {\n // form-item may be dynamically rendered based on the judgment conditions, and the order in invalidFields is uncertain.\n // Therefore, the first form field with an error is determined by directly looking for the rendered element.\n if (formRef.value) {\n const formItem = formRef.value.querySelector(`.${ns.b()}-item.is-error`)\n formItem?.scrollIntoView(props.scrollIntoViewOptions)\n }\n }\n !result && (await callback?.(false, invalidFields))\n return shouldThrow && Promise.reject(invalidFields)\n }\n}\n\nconst scrollToField = (prop: FormItemProp) => {\n const field = getField(prop)\n if (field) {\n field.$el?.scrollIntoView(props.scrollIntoViewOptions)\n }\n}\n\nwatch(\n () => props.rules,\n () => {\n if (props.validateOnRuleChange) {\n validate().catch((err) => debugWarn(err))\n }\n },\n { deep: true, flush: 'post' }\n)\n\nprovide(\n formContextKey,\n reactive({\n ...toRefs(props),\n emit,\n\n resetFields,\n clearValidate,\n validateField,\n getField,\n addField,\n removeField,\n\n ...useFormLabelWidth(),\n })\n)\n\ndefineExpose({\n /**\n * @description Validate the whole form. Receives a callback or returns `Promise`.\n */\n validate,\n /**\n * @description Validate specified fields.\n */\n validateField,\n /**\n * @description Reset specified fields and remove validation result.\n */\n resetFields,\n /**\n * @description Clear validation message for specified fields.\n */\n clearValidate,\n /**\n * @description Scroll to the specified fields.\n */\n scrollToField,\n /**\n * @description Get a field context.\n */\n getField,\n /**\n * @description All fields context.\n */\n fields,\n})\n</script>\n"],"names":["props","fields","_openBlock","_createElementBlock","_normalizeClass","_renderSlot"],"mappings":"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"}