{"version":3,"file":"form.mjs","sources":["../../src/form/form.tsx"],"sourcesContent":["import { computed, defineComponent, provide, reactive, ref, toRefs } from 'vue';\nimport isEmpty from 'lodash/isEmpty';\nimport isBoolean from 'lodash/isBoolean';\nimport isArray from 'lodash/isArray';\nimport isFunction from 'lodash/isFunction';\nimport { requestSubmit } from '../utils/dom';\nimport { FormItemValidateResult, getFormItemClassName } from './form-item';\nimport {\n  Data,\n  FormResetParams,\n  FormValidateMessage,\n  FormValidateParams,\n  FormValidateResult,\n  TdFormProps,\n  ValidateResultList,\n} from './type';\nimport props from './props';\nimport { FormInjectionKey, FormItemContext, useCLASSNAMES } from './const';\nimport { FormResetEvent, FormSubmitEvent } from '../common';\n\nimport { FormDisabledProvider } from './hooks';\nimport { usePrefixClass, useTNodeJSX } from '../hooks';\n\ntype Result = FormValidateResult<TdFormProps['data']>;\n\nexport default defineComponent({\n  name: 'XForm',\n\n  props: { ...props },\n\n  setup(props, { expose }) {\n    const renderContent = useTNodeJSX();\n    const { disabled } = toRefs(props);\n    provide<FormDisabledProvider>('formDisabled', {\n      disabled,\n    });\n\n    const formRef = ref<HTMLFormElement>(null);\n    const children = ref<FormItemContext[]>([]);\n\n    const { showErrorMessage, labelWidth, labelAlign, data, colon, requiredMark, rules, errorMessage, resetType } =\n      toRefs(props);\n    provide(\n      FormInjectionKey,\n      reactive({\n        showErrorMessage,\n        labelWidth,\n        labelAlign,\n        data,\n        colon,\n        requiredMark,\n        rules,\n        errorMessage,\n        resetType,\n        children,\n        renderContent,\n      }),\n    );\n\n    const COMPONENT_NAME = usePrefixClass('form');\n    const CLASS_NAMES = useCLASSNAMES();\n    const formClass = computed(() => [\n      CLASS_NAMES.value.form,\n      { [`${COMPONENT_NAME.value}-inline`]: props.layout === 'inline' },\n    ]);\n\n    const FORM_ITEM_CLASS_PREFIX = usePrefixClass('form-item__');\n\n    const getFirstError = (result: Result) => {\n      if (isBoolean(result)) return '';\n      const [firstKey] = Object.keys(result);\n      if (props.scrollToFirstError) {\n        const tmpClassName = getFormItemClassName(FORM_ITEM_CLASS_PREFIX.value, firstKey);\n        scrollTo(`.${tmpClassName}`);\n      }\n      const resArr = result[firstKey] as ValidateResultList;\n      if (!isArray(resArr)) return '';\n      return resArr.filter((item) => !item.result)[0].message;\n    };\n    // 校验不通过时，滚动到第一个错误表单\n    const scrollTo = (selector: string) => {\n      const [dom] = formRef.value.getElementsByClassName(selector);\n      const behavior = props.scrollToFirstError;\n      if (behavior) {\n        dom && dom.scrollIntoView({ behavior });\n      }\n    };\n\n    const needValidate = (name: string | number, fields: string[] | undefined) => {\n      if (!fields || !isArray(fields)) return true;\n      return fields.indexOf(`${name}`) !== -1;\n    };\n    const formatValidateResult = <T extends Data>(validateResultList: FormItemValidateResult<T>[]) => {\n      const result = validateResultList.reduce((r, err) => Object.assign(r || {}, err), {});\n      Object.keys(result).forEach((key) => {\n        if (result[key] === true) {\n          delete result[key];\n        }\n      });\n      return isEmpty(result) ? true : result;\n    };\n    const validate = async (param?: FormValidateParams): Promise<Result> => {\n      const { fields, trigger = 'all', showErrorMessage } = param || {};\n      const list = children.value\n        .filter((child) => isFunction(child.validate) && needValidate(String(child.name), fields))\n        .map((child) => child.validate(trigger, showErrorMessage));\n      const arr = await Promise.all(list);\n      const result = formatValidateResult(arr);\n      const firstError = getFirstError(result);\n      props.onValidate?.({\n        validateResult: result,\n        firstError,\n      });\n      return result;\n    };\n    const validateOnly = async (params?: Omit<FormValidateParams, 'showErrorMessage'>) => {\n      const { fields, trigger = 'all' } = params || {};\n      const list = children.value\n        .filter((child) => isFunction(child.validateOnly) && needValidate(String(child.name), fields))\n        .map((child) => child.validateOnly(trigger));\n      const arr = await Promise.all(list);\n      return formatValidateResult(arr);\n    };\n    const submitParams = ref<Pick<FormValidateParams, 'showErrorMessage'>>();\n    const onSubmit = (e?: FormSubmitEvent) => {\n      if (props.preventSubmitDefault && e) {\n        e.preventDefault();\n        e.stopPropagation();\n      }\n      validate(submitParams.value).then((r) => {\n        props.onSubmit?.({ validateResult: r, firstError: getFirstError(r), e });\n      });\n      submitParams.value = undefined;\n    };\n    const submit = async (params?: Pick<FormValidateParams, 'showErrorMessage'>) => {\n      submitParams.value = params;\n      requestSubmit(formRef.value);\n    };\n\n    const resetParams = ref<FormResetParams<Data>>();\n    const onReset = (e?: FormResetEvent) => {\n      if (props.preventSubmitDefault && e) {\n        e.preventDefault();\n        e.stopPropagation();\n      }\n      children.value\n        .filter(\n          (child) =>\n            isFunction(child.resetField) && needValidate(String(child.name), resetParams.value?.fields as string[]),\n        )\n        .forEach((child) => child.resetField(resetParams.value?.type));\n      resetParams.value = undefined;\n      props.onReset?.({ e });\n    };\n    const reset = <FormData extends Data>(params?: FormResetParams<FormData>) => {\n      (resetParams.value as any) = params;\n      formRef.value.reset();\n    };\n\n    const clearValidate = (fields?: Array<string>) => {\n      children.value.forEach((child) => {\n        if (isFunction(child.resetHandler) && needValidate(String(child.name), fields)) {\n          child.resetHandler();\n        }\n      });\n    };\n    const setValidateMessage = (validateMessage: FormValidateMessage<FormData>) => {\n      const keys = Object.keys(validateMessage);\n      if (!keys.length) return;\n      const list = children.value\n        .filter((child) => isFunction(child.setValidateMessage) && keys.includes(`${child.name}`))\n        .map((child) => child.setValidateMessage(validateMessage[child.name]));\n      Promise.all(list);\n    };\n\n    expose({ validate, submit, reset, clearValidate, setValidateMessage, validateOnly });\n\n    return () => (\n      <form ref={formRef} class={formClass.value} onSubmit={(e) => onSubmit(e)} onReset={(e) => onReset(e)}>\n        {renderContent('default')}\n      </form>\n    );\n  },\n});\n"],"names":["name","props","setup","disabled","provide","showErrorMessage","labelWidth","labelAlign","data","colon","requiredMark","rules","errorMessage","resetType","children","renderContent","isBoolean","firstKey","scrollTo","isArray","dom","behavior","isEmpty","_regeneratorRuntime","_ref4","_context","result","firstError","validateResult","_context2","e","submitParams","requestSubmit","resetParams","formRef","isFunction","Promise","expose","validate","submit","reset","clearValidate","setValidateMessage","validateOnly","_createVNode"],"mappings":"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"}