{"version":3,"file":"useForm.cjs","sources":["../../../../../../packages/components/form/src/useForm.ts"],"sourcesContent":["import type { ValidateMessages } from '@antdv/locale';\nimport type { ValidateStatus } from '@antdv/types';\nimport type { Ref } from 'vue';\nimport type { Callbacks, RuleError } from './interface';\nimport { cloneDeep, debounce, intersection, isEqual, omit } from 'lodash-es';\nimport {\n  nextTick,\n  reactive,\n  ref,\n  shallowRef,\n  toRaw,\n  unref,\n  watch,\n} from 'vue';\nimport { allPromiseFinish } from './utils/asyncUtil';\nimport { defaultValidateMessages } from './utils/messages';\nimport { validateRules } from './utils/validateUtil';\n\ninterface DebounceSettings {\n  leading?: boolean\n\n  wait?: number\n\n  trailing?: boolean\n}\n\nfunction getIsRequired(rules: any[]) {\n  let isRequired = false;\n  if (rules && rules.length) {\n    rules.every((rule: { required: any }) => {\n      if (rule.required) {\n        isRequired = true;\n        return false;\n      }\n      return true;\n    });\n  }\n  return isRequired;\n}\n\nfunction toArray(value: string | string[]) {\n  if (value === undefined || value === null)\n    return [];\n\n  return Array.isArray(value) ? value : [value];\n}\n\nexport interface Props {\n  [key: string]: any\n}\n\nexport interface validateOptions {\n  validateFirst?: boolean\n  validateMessages?: ValidateMessages\n  trigger?: 'change' | 'blur' | string | string[]\n}\n\ntype namesType = string | string[];\nexport interface ValidateInfo {\n  autoLink?: boolean\n  required?: boolean\n  validateStatus?: ValidateStatus\n  help?: any\n}\n\nexport interface validateInfos {\n  [key: string]: ValidateInfo\n}\n\nfunction getPropByPath(obj: Props, path: string, strict: boolean) {\n  let tempObj = obj;\n  path = path.replace(/\\[(\\w+)\\]/g, '.$1');\n  path = path.replace(/^\\./, '');\n\n  const keyArr = path.split('.');\n  let i = 0;\n  for (let len = keyArr.length; i < len - 1; ++i) {\n    if (!tempObj && !strict) break;\n    const key = keyArr[i];\n    if (key in tempObj) {\n      tempObj = tempObj[key];\n    } else {\n      if (strict)\n        throw new Error('please transfer a valid name path to validate!');\n\n      break;\n    }\n  }\n  return {\n    o: tempObj,\n    k: keyArr[i],\n    v: tempObj ? tempObj[keyArr[i]] : null,\n    isValid: tempObj && keyArr[i] in tempObj,\n  };\n}\n\nfunction useForm(\n  modelRef: Props | Ref<Props>,\n  rulesRef: Props | Ref<Props> = ref({}),\n  options?: {\n    immediate?: boolean\n    deep?: boolean\n    validateOnRuleChange?: boolean\n    debounce?: DebounceSettings\n    onValidate?: Callbacks['onValidate']\n  },\n): {\n    modelRef: Props | Ref<Props>\n    rulesRef: Props | Ref<Props>\n    initialModel: Props\n    validateInfos: validateInfos\n    resetFields: (newValues?: Props) => void\n    validate: <T = any>(names?: namesType, option?: validateOptions) => Promise<T>\n\n    /** This is an internal usage. Do not use in your prod */\n    validateField: (\n      name: string,\n      value: any,\n      rules: Array<Record<string, unknown>>,\n      option?: validateOptions,\n    ) => Promise<RuleError[]>\n    mergeValidateInfo: (items: ValidateInfo | ValidateInfo[]) => ValidateInfo\n    clearValidate: (names?: namesType) => void\n  } {\n  const initialModel = cloneDeep(unref(modelRef));\n  const validateInfos = reactive<validateInfos>({});\n\n  const rulesKeys = shallowRef([]);\n\n  const resetFields = (newValues: Props) => {\n    Object.assign(unref(modelRef), {\n      ...cloneDeep(initialModel),\n      ...newValues,\n    });\n    nextTick(() => {\n      Object.keys(validateInfos).forEach((key) => {\n        validateInfos[key] = {\n          autoLink: false,\n          required: getIsRequired(unref(rulesRef)[key]),\n        };\n      });\n    });\n  };\n  const filterRules = (rules = [], trigger: string[]) => {\n    if (!trigger.length) {\n      return rules;\n    } else {\n      return rules.filter((rule) => {\n        const triggerList = toArray(rule.trigger || 'change');\n        return intersection(triggerList, trigger).length;\n      });\n    }\n  };\n\n  let lastValidatePromise = null;\n\n  const validateField = (\n    name: string,\n    value: any,\n    rules: Array<Record<string, unknown>>,\n    option: validateOptions = {},\n  ): Promise<RuleError[]> => {\n    const promise = validateRules(\n      [name],\n      value,\n      rules,\n      {\n        validateMessages: defaultValidateMessages,\n        ...option,\n      },\n      !!option.validateFirst,\n    );\n    if (!validateInfos[name])\n      return promise.catch((e: any) => e);\n\n    validateInfos[name].validateStatus = 'validating';\n    promise\n      .catch((e: any) => e)\n      .then((results: RuleError[] = []) => {\n        if (validateInfos[name].validateStatus === 'validating') {\n          const res = results.filter(result => result && result.errors.length);\n          validateInfos[name].validateStatus = res.length ? 'error' : 'success';\n          validateInfos[name].help = res.length ? res.map(r => r.errors) : null;\n          options?.onValidate?.(\n            name,\n            !res.length,\n            res.length ? toRaw(validateInfos[name].help[0]) : null,\n          );\n        }\n      });\n    return promise;\n  };\n\n  const validateFields = (names: string[], option: validateOptions = {}, strict: boolean) => {\n    // Collect result in promise list\n    const promiseList: Array<Promise<{\n      name: string\n      errors: string[]\n    }>> = [];\n    const values = {};\n    for (let i = 0; i < names.length; i++) {\n      const name = names[i];\n      const prop = getPropByPath(unref(modelRef), name, strict);\n      if (!prop.isValid) continue;\n      values[name] = prop.v;\n      const rules = filterRules(unref(rulesRef)[name], toArray(option && option.trigger));\n      if (rules.length) {\n        promiseList.push(\n          validateField(name, prop.v, rules, option || {})\n            .then(() => ({\n              name,\n              errors: [],\n              warnings: [],\n            }))\n            .catch((ruleErrors: RuleError[]) => {\n              const mergedErrors: string[] = [];\n              const mergedWarnings: string[] = [];\n\n              ruleErrors.forEach(({ rule: { warningOnly }, errors }) => {\n                if (warningOnly)\n                  mergedWarnings.push(...errors);\n                else\n                  mergedErrors.push(...errors);\n              });\n\n              if (mergedErrors.length) {\n                return Promise.reject({\n                  name,\n                  errors: mergedErrors,\n                  warnings: mergedWarnings,\n                });\n              }\n\n              return {\n                name,\n                errors: mergedErrors,\n                warnings: mergedWarnings,\n              };\n            }),\n        );\n      }\n    }\n\n    const summaryPromise = allPromiseFinish(promiseList);\n    lastValidatePromise = summaryPromise;\n\n    const returnPromise = summaryPromise\n      .then(() => {\n        if (lastValidatePromise === summaryPromise)\n          return Promise.resolve(values);\n\n        return Promise.reject([]);\n      })\n      .catch((results: any[]) => {\n        const errorList = results.filter(\n          (result: { errors: string | any[] }) => result && result.errors.length,\n        );\n        return errorList.length\n          ? Promise.reject({\n              values,\n              errorFields: errorList,\n              outOfDate: lastValidatePromise !== summaryPromise,\n            })\n          : Promise.resolve(values);\n      });\n\n    // Do not throw in console\n    returnPromise.catch((e: any) => e);\n\n    return returnPromise;\n  };\n\n  const validate = (names?: namesType, option?: validateOptions): Promise<any> => {\n    let keys = [];\n    let strict = true;\n    if (!names) {\n      strict = false;\n      keys = rulesKeys.value;\n    } else if (Array.isArray(names)) {\n      keys = names;\n    } else {\n      keys = [names];\n    }\n    const promises = validateFields(keys, option || {}, strict);\n    // Do not throw in console\n    promises.catch((e: any) => e);\n    return promises;\n  };\n\n  const clearValidate = (names?: namesType) => {\n    let keys = [];\n    if (!names)\n      keys = rulesKeys.value;\n    else if (Array.isArray(names))\n      keys = names;\n    else\n      keys = [names];\n\n    keys.forEach((key) => {\n      validateInfos[key]\n        && Object.assign(validateInfos[key], {\n          validateStatus: '',\n          help: null,\n        });\n    });\n  };\n\n  const mergeValidateInfo = (items: ValidateInfo[] | ValidateInfo) => {\n    const info = { autoLink: false } as ValidateInfo;\n    const help = [];\n    const infos = Array.isArray(items) ? items : [items];\n    for (let i = 0; i < infos.length; i++) {\n      const arg = infos[i] as ValidateInfo;\n      if (arg?.validateStatus === 'error') {\n        info.validateStatus = 'error';\n        arg.help && help.push(arg.help);\n      }\n      info.required = info.required || arg?.required;\n    }\n    info.help = help;\n    return info;\n  };\n  let oldModel = initialModel;\n  let isFirstTime = true;\n  const modelFn = (model: { [x: string]: any }) => {\n    const names = [];\n    rulesKeys.value.forEach((key) => {\n      const prop = getPropByPath(model, key, false);\n      const oldProp = getPropByPath(oldModel, key, false);\n      const isFirstValidation = isFirstTime && options?.immediate && prop.isValid;\n\n      if (isFirstValidation || !isEqual(prop.v, oldProp.v))\n        names.push(key);\n    });\n    validate(names, { trigger: 'change' });\n    isFirstTime = false;\n    oldModel = cloneDeep(toRaw(model));\n  };\n\n  const debounceOptions = options?.debounce;\n\n  let first = true;\n  watch(\n    rulesRef,\n    () => {\n      rulesKeys.value = rulesRef ? Object.keys(unref(rulesRef)) : [];\n      if (!first && options && options.validateOnRuleChange)\n        validate();\n\n      first = false;\n    },\n    { deep: true, immediate: true },\n  );\n\n  watch(\n    rulesKeys,\n    () => {\n      const newValidateInfos = {};\n      rulesKeys.value.forEach((key) => {\n        newValidateInfos[key] = Object.assign({}, validateInfos[key], {\n          autoLink: false,\n          required: getIsRequired(unref(rulesRef)[key]),\n        });\n        delete validateInfos[key];\n      });\n      for (const key in validateInfos) {\n        if (Object.prototype.hasOwnProperty.call(validateInfos, key))\n          delete validateInfos[key];\n      }\n      Object.assign(validateInfos, newValidateInfos);\n    },\n    { immediate: true },\n  );\n  watch(\n    modelRef,\n    debounceOptions && debounceOptions.wait\n      ? debounce(modelFn, debounceOptions.wait, omit(debounceOptions, ['wait']))\n      : modelFn,\n    { immediate: options && !!options.immediate, deep: true },\n  );\n\n  return {\n    modelRef,\n    rulesRef,\n    initialModel,\n    validateInfos,\n    resetFields,\n    validate,\n    validateField,\n    mergeValidateInfo,\n    clearValidate,\n  };\n}\n\nexport default useForm;\n"],"names":["ref","cloneDeep","unref","reactive","shallowRef","nextTick","intersection","validateRules","defaultValidateMessages","toRaw","allPromiseFinish","isEqual","watch","debounce","omit"],"mappings":"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"}