xdesign-vue-next
Version:
XDesign Component for vue-next
1 lines • 14.2 kB
Source Map (JSON)
{"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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"}