123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 |
- import { defineComponent, computed, watch, provide, reactive, toRefs, openBlock, createElementBlock, normalizeClass, unref, renderSlot } from 'vue';
- import '../../../utils/index.mjs';
- import '../../../tokens/index.mjs';
- import '../../../hooks/index.mjs';
- import { formProps, formEmits } from './form.mjs';
- import { filterFields, useFormLabelWidth } from './utils.mjs';
- import _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs';
- import { useSize } from '../../../hooks/use-common-props/index.mjs';
- import { useNamespace } from '../../../hooks/use-namespace/index.mjs';
- import { debugWarn } from '../../../utils/error.mjs';
- import { isFunction } from '@vue/shared';
- import { formContextKey } from '../../../tokens/form.mjs';
- const COMPONENT_NAME = "ElForm";
- const __default__ = defineComponent({
- name: COMPONENT_NAME
- });
- const _sfc_main = /* @__PURE__ */ defineComponent({
- ...__default__,
- props: formProps,
- emits: formEmits,
- setup(__props, { expose, emit }) {
- const props = __props;
- const fields = [];
- const formSize = useSize();
- const ns = useNamespace("form");
- const formClasses = computed(() => {
- const { labelPosition, inline } = props;
- return [
- ns.b(),
- ns.m(formSize.value || "default"),
- {
- [ns.m(`label-${labelPosition}`)]: labelPosition,
- [ns.m("inline")]: inline
- }
- ];
- });
- const addField = (field) => {
- fields.push(field);
- };
- const removeField = (field) => {
- if (field.prop) {
- fields.splice(fields.indexOf(field), 1);
- }
- };
- const resetFields = (properties = []) => {
- if (!props.model) {
- debugWarn(COMPONENT_NAME, "model is required for resetFields to work.");
- return;
- }
- filterFields(fields, properties).forEach((field) => field.resetField());
- };
- const clearValidate = (props2 = []) => {
- filterFields(fields, props2).forEach((field) => field.clearValidate());
- };
- const isValidatable = computed(() => {
- const hasModel = !!props.model;
- if (!hasModel) {
- debugWarn(COMPONENT_NAME, "model is required for validate to work.");
- }
- return hasModel;
- });
- const obtainValidateFields = (props2) => {
- if (fields.length === 0)
- return [];
- const filteredFields = filterFields(fields, props2);
- if (!filteredFields.length) {
- debugWarn(COMPONENT_NAME, "please pass correct props!");
- return [];
- }
- return filteredFields;
- };
- const validate = async (callback) => validateField(void 0, callback);
- const doValidateField = async (props2 = []) => {
- if (!isValidatable.value)
- return false;
- const fields2 = obtainValidateFields(props2);
- if (fields2.length === 0)
- return true;
- let validationErrors = {};
- for (const field of fields2) {
- try {
- await field.validate("");
- } catch (fields3) {
- validationErrors = {
- ...validationErrors,
- ...fields3
- };
- }
- }
- if (Object.keys(validationErrors).length === 0)
- return true;
- return Promise.reject(validationErrors);
- };
- const validateField = async (modelProps = [], callback) => {
- const shouldThrow = !isFunction(callback);
- try {
- const result = await doValidateField(modelProps);
- if (result === true) {
- callback == null ? void 0 : callback(result);
- }
- return result;
- } catch (e) {
- if (e instanceof Error)
- throw e;
- const invalidFields = e;
- if (props.scrollToError) {
- scrollToField(Object.keys(invalidFields)[0]);
- }
- callback == null ? void 0 : callback(false, invalidFields);
- return shouldThrow && Promise.reject(invalidFields);
- }
- };
- const scrollToField = (prop) => {
- var _a;
- const field = filterFields(fields, prop)[0];
- if (field) {
- (_a = field.$el) == null ? void 0 : _a.scrollIntoView();
- }
- };
- watch(() => props.rules, () => {
- if (props.validateOnRuleChange) {
- validate().catch((err) => debugWarn(err));
- }
- }, { deep: true });
- provide(formContextKey, reactive({
- ...toRefs(props),
- emit,
- resetFields,
- clearValidate,
- validateField,
- addField,
- removeField,
- ...useFormLabelWidth()
- }));
- expose({
- validate,
- validateField,
- resetFields,
- clearValidate,
- scrollToField
- });
- return (_ctx, _cache) => {
- return openBlock(), createElementBlock("form", {
- class: normalizeClass(unref(formClasses))
- }, [
- renderSlot(_ctx.$slots, "default")
- ], 2);
- };
- }
- });
- var Form = /* @__PURE__ */ _export_sfc(_sfc_main, [["__file", "/home/runner/work/element-plus/element-plus/packages/components/form/src/form.vue"]]);
- export { Form as default };
- //# sourceMappingURL=form2.mjs.map
|