{"version":3,"file":"form-item.vue2.mjs","sources":["../../../../../../packages/components/form/src/form-item.vue"],"sourcesContent":["<script lang=\"ts\">\n  import {\n    computed,\n    defineComponent,\n    provide,\n    inject,\n    reactive,\n    ref,\n    nextTick,\n    onMounted,\n    onBeforeUnmount\n  } from 'vue'\n  import type { StyleValue, CSSProperties } from 'vue'\n\n  import type { RuleItem } from 'async-validator'\n  import AsyncValidator from 'async-validator'\n  import { getComponentNamespace, getNamespace } from '../../../utils/global-config'\n\n  import { getProp, setProp, deepClone, addUnit } from '../../../shared/utils'\n  import { isString, isFunction } from '../../../utils/is'\n  import { formItemProps } from './form-item'\n  import type { FormItemValidateState } from './form-item'\n\n  import { formItemContextKey, formContextKey } from './constants'\n\n  import { registerCustomValidator } from './validators/index'\n\n  import type { FormValidateFailure, FormItemContext, FormItemRule } from './types'\n\n  export default defineComponent({\n    name: getComponentNamespace('FormItem'),\n    props: formItemProps,\n    setup(props, { slots }) {\n      const ns = getNamespace('form-item')\n\n      // 合并验证规则 form上的rules和form-item上的验证规则合并\n      const normalizedRules = computed(() => {\n        const { required } = props\n        const rules: FormItemRule[] = []\n        if (props.rules) {\n          rules.push(...(props.rules as []))\n        }\n\n        const formRules = formContext?.rules\n\n        if (formRules && props.prop) {\n          const field = props.prop as string\n          const _rules = formRules[field] as []\n          if (_rules) {\n            rules.push(..._rules)\n          }\n        }\n        // required优先取 form-item上的数据\n        // 如果form表单上rules里面有required字段 如果form-item上也有required字段 会合并required字段到rules上 required取值为form-item上的值\n        // 如果form表单上rules里面没有required字段 增加一条验证规则 required false\n        if (required !== undefined) {\n          const requiredRules = rules\n            .map((rule, i) => [rule, i] as const)\n            .filter(([rule]) => Object.keys(rule).includes('required'))\n          if (requiredRules.length > 0) {\n            for (const [rule, i] of requiredRules) {\n              if (rule.required === required) continue\n              rules[i] = { ...rule, required }\n            }\n          } else {\n            rules.push({ required })\n          }\n        }\n        // 内置正则校验器\n        registerCustomValidator(rules)\n\n        return rules\n      })\n      const validateEnabled = computed(() => normalizedRules.value.length > 0)\n\n      const getFilteredRule = (trigger: string) => {\n        const rules = normalizedRules.value\n        return rules\n          .filter((rule) => {\n            // 如果当前没有触发行为 则表明在form里面调用验证器的时候当前规则全部都要验证\n            if (!rule.trigger || !trigger) return true\n            // rule [change,..] 'change'\n            if (Array.isArray(rule.trigger)) {\n              return rule.trigger.includes(trigger)\n            } else {\n              return rule.trigger === trigger\n            }\n          })\n          .map(({ ...rule }): RuleItem => rule as RuleItem)\n      }\n      const validateState = ref<FormItemValidateState>('')\n\n      const validateMessage = ref('')\n\n      const formItemRef = ref<HTMLDivElement>()\n\n      const isRequired = computed(() => normalizedRules.value.some((rule) => rule.required))\n\n      // cls\n      const forItemCls = computed(() => [\n        ns,\n        isRequired.value && 'is-required',\n        validateState.value === 'error' && 'is-error',\n        validateState.value === 'success' && 'is-success',\n        validateState.value === 'validating' && 'is-validating'\n      ])\n\n      const contentCls = computed<StyleValue>(() => [`${ns}__content`])\n\n      const formContext = inject(formContextKey, undefined)\n      const parentFormItemContext = inject(formItemContextKey, undefined)\n\n      // 是否是嵌套表单\n      const isNested = !!parentFormItemContext\n\n      // style\n      const labelStyle = computed<CSSProperties>(() => {\n        if (formContext?.labelPosition === 'top') {\n          return {}\n        }\n        const style: CSSProperties = {\n          width: addUnit(props?.labelWidth || formContext?.labelWidth) || 0\n        }\n        return style\n      })\n      const contentStyle = computed<CSSProperties>(() => {\n        if (formContext?.labelPosition === 'top') {\n          return {}\n        }\n        if (formContext?.inline) {\n          return {}\n        }\n        // 嵌套form-item不展示label\n        if (!props.label && !props.labelWidth && isNested) {\n          return {}\n        }\n\n        const labelWidth = addUnit(props?.labelWidth || formContext?.labelWidth)\n        if (labelWidth || slots.label) {\n          return { marginLeft: labelWidth }\n        }\n        return {}\n      })\n\n      // 是否显示label\n      const hasLabel = computed<boolean>(() => {\n        return !!(props.label || slots.label)\n      })\n\n      let initialValue: any\n\n      const fieldValue = computed(() => {\n        return getProp(formContext?.model, props.prop as string, '')\n      })\n\n      const currentLabel = computed(() => props.label || '')\n\n      const setValidationState = (state: FormItemValidateState) => {\n        validateState.value = state\n      }\n\n      const shouldShowError = computed(\n        () =>\n          props.showMessage && (formContext?.showMessage ?? true) && validateState.value === 'error'\n      )\n\n      // 表单验证失败\n      const onValidationFailed = (error: FormValidateFailure) => {\n        const { errors, fields } = error\n        if (!errors || !fields) {\n          console.error(error)\n        }\n        setValidationState('error')\n        validateMessage.value = errors ? errors?.[0]?.message ?? `${props.prop}是必填项` : ''\n\n        formContext?.emit('validate', props.prop!, false, validateMessage.value)\n      }\n\n      // 表单验证成功\n      const onValidationSucceeded = () => {\n        setValidationState('success')\n        formContext?.emit('validate', props.prop!, true, '')\n      }\n\n      const propString = computed(() => {\n        if (!props.prop) return ''\n        return isString(props.prop) ? props.prop : props.prop.join('.')\n      })\n\n      // 执行验证器\n      const doValidate = async (rules: RuleItem[]): Promise<boolean> => {\n        const modelName = propString.value\n        // 创建校验对象\n        const validator = new AsyncValidator({\n          [modelName]: rules\n        })\n        return validator\n          .validate({ [modelName]: fieldValue.value }, { firstFields: true })\n          .then(() => {\n            onValidationSucceeded()\n            return true as const\n          })\n          .catch((err: FormValidateFailure) => {\n            onValidationFailed(err as FormValidateFailure)\n            return Promise.reject(err)\n          })\n      }\n\n      // 组件的验证器对象 子组件可直接调用此方法来触发验证器\n      const validate: FormItemContext['validate'] = async (trigger, callback) => {\n        if (isResettingField || !props.prop) {\n          return false\n        }\n        const hasCallback = isFunction(callback)\n        if (!validateEnabled.value) {\n          callback?.(false)\n          return false\n        }\n\n        const rules = getFilteredRule(trigger)\n\n        if (rules.length === 0) {\n          callback?.(true)\n          return true\n        }\n        // 异步验证时候这个需要加上loading\n        setValidationState('validating')\n\n        return doValidate(rules)\n          .then(() => {\n            callback?.(true)\n            return true as const\n          })\n          .catch((err: FormValidateFailure) => {\n            const { fields } = err\n            callback?.(false, fields)\n            return hasCallback ? false : Promise.reject(fields)\n          })\n      }\n\n      let isResettingField = false\n\n      const clearValidate: FormItemContext['clearValidate'] = () => {\n        setValidationState('')\n        validateMessage.value = ''\n        isResettingField = false\n      }\n\n      const resetField: FormItemContext['resetField'] = async () => {\n        const model = formContext?.model\n        if (!model || !props.prop) return\n        // 恢复初始值\n        setProp(model, props.prop, deepClone(initialValue))\n        isResettingField = true\n        await nextTick()\n        clearValidate()\n        isResettingField = false\n      }\n\n      // 向下面的input组件 注入FormItemContext 主要是验证器 validate 对象\n      const context = reactive({\n        $el: formItemRef,\n        prop: props.prop,\n        validateState,\n        validate,\n        resetField,\n        clearValidate\n      })\n      provide(formItemContextKey, context as any)\n\n      onBeforeUnmount(() => {\n        formContext?.removeField(context as any)\n      })\n\n      onMounted(() => {\n        // 将所有的form-item验证器保存到form上，方便后面在form里面直接循环验证\n        if (props.prop) {\n          formContext?.addField(context as any)\n          initialValue = deepClone(fieldValue.value)\n        }\n      })\n\n      return {\n        forItemCls,\n        contentCls,\n        currentLabel,\n        hasLabel,\n        shouldShowError,\n        labelStyle,\n        contentStyle,\n        formItemRef,\n        validateMessage,\n        validateState,\n\n        validate,\n        clearValidate,\n        resetField\n      }\n    },\n    expose: ['validateMessage', 'validateState', 'validate', 'clearValidate', 'resetField']\n  })\n</script>\n\n<template>\n  <div ref=\"formItemRef\" :class=\"forItemCls\">\n    <div v-if=\"hasLabel\" class=\"bn-form-item__label\" :style=\"labelStyle\">\n      <slot name=\"label\">\n        {{ currentLabel }}\n      </slot>\n    </div>\n\n    <div :class=\"contentCls\" :style=\"contentStyle\">\n      <slot></slot>\n      <transition name=\"form-blink\">\n        <slot v-if=\"shouldShowError\" name=\"error\" :error=\"validateMessage\">\n          <div class=\"bn-form-item__error\">\n            {{ validateMessage }}\n          </div>\n        </slot>\n      </transition>\n    </div>\n  </div>\n</template>\n"],"names":[],"mappings":"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"}