Справка

Валидация

Облачный Pyrus
Безоблачный Pyrus

Скрипты позволяют проверять корректность заполнения и показывать произвольные ошибки валидации полей формы. Основные примеры сценариев использования:

  • Проверить корректность данных в нескольких полях сразу;
  • Проверить заполнение одного из нескольких полей;
  • Корректировать бизнес-процесс, позволяя сохранять форму, но блокируя переход на следующий этап;
  • Гибко проверить отсутствие дубликатов задачи через реестр.

Для валидации поля необходимо подписаться на изменение необходимых полей формы через onChange и вызвать одну из функций валидации: validate или validateAsync.

interface form {
  onChange(
    fieldNames: string[],
    executeOnLoad: boolean = false
  ): ChangeHandler
}

interface ChangeHandler {
  validate(
    fieldName: string,
    validateFunc: (state: FormState) =>
      {
        errorMessage: string
        canApprove?: boolean,
        canSave?: boolean,
        canReject?: boolean
      } | undefined
  )

  validateAsync(
    fieldName: string,
    validateFunc: (state: FormState) =>
      Promise<{
        errorMessage: string,
        canApprove?: boolean,
        canSave?: boolean,
        canReject?: boolean
      } | undefined>
  )
}

В метод validate передается 2 параметра:

  • fieldName — название или код поля, около которого требуется показать ошибку;
  • validateFunc — функция-обработчик, принимающая на вход объект состояния формы и возвращающая результат: объект ошибки либо пустое значение (undefined / null), если ошибки нет.

Объект ошибки включает следующие поля:

  • errorMessage — обязательное текстовое поле, текст из которого будет отображаться как ошибка валидации;
  • canSave — необязательное поле типа boolean. Если передано true, то разрешено сохранение формы;
  • canApprove — необязательное поле типа boolean. Если передано true, то разрешено утверждение этапа;
  • canReject — необязательное поле типа boolean. Если передано true, то разрешен тип «Против» согласования этапа.

Метод validateAsync отличается тем, что функция-обработчик validateFunc должна вернуть не результат, а Promise (обещание) с результатом. Применяется в том случае, если для валидации полей используются дополнительно загружаемые данные.

Пример простого скрипта, который проверяет, что заполнено хотя бы одно из двух полей:

form
  .onChange(['Эл. почта', 'Телефон'], true)
  .validate('Эл. почта', state => {
    const [phone, email] = state.changes;

    if (!phone.text && !email.text)
        return {
            errorMessage: 'Заполните электронную почту или телефон'
        };
  });

Функция проверки будет вызываться при изменении любого из полей («Эл. почта» или «Телефон») и при открытии формы. Текст ошибки будет отображаться под полем «Эл. почта»:

Готовые варианты скриптов для валидации полей можно посмотреть в статье Примеры скриптов.

Была ли эта статья полезной?