export function useFormValidate()

in seatunnel-ui/src/components/dynamic-form/use-form-validate.ts [20:69]


export function useFormValidate(forms: Array<any>, model: any, t: any) {
  const validate: any = {}

  const setValidate = (validate: any, field: string): object => {
    const data: any = {
      required: validate.required,
      trigger: validate.trigger
    }

    if (validate.type === 'non-empty') {
      data['validator'] = (rule: FormItemRule, value: string) => {
        if (!model[field]) {
          return Error(t(validate.message))
        }
      }
    } else if (validate.type === 'union-non-empty') {
      const fields = validate.fields.splice(
        validate.fields.findIndex((f: any) => f !== field),
        1
      )
      data['validator'] = (rule: FormItemRule, value: string) => {
        const fieldsValidate = fields.map((f: string) => !!model[f])
        if (!value && fieldsValidate.includes(true)) {
          return Error(t(validate.message))
        }
      }
    } else if (validate.type === 'mutually-exclusive') {
      const fields = validate.fields.splice(
        validate.fields.findIndex((f: any) => f !== field),
        1
      )
      data['validator'] = (rule: FormItemRule, value: string) => {
        const fieldsValidate = fields.map((f: string) => !!model[f])
        if (value && fieldsValidate.indexOf(false) < 0) {
          return Error(t(validate.message))
        }
      }
    }

    return data
  }

  forms.forEach((f: any) => {
    if (!f.validate || Object.keys(f.validate).length <= 0) return

    validate[f.field] = setValidate(f.validate, f.field)
  })

  return validate
}