Validation Model

Правила валидации полей ввода в SDDS.

См. также: states.md — состояния Error/Warning/Success, interaction-model.md — модель взаимодействия, accessibility.md — aria-invalid, aria-required.

Когда показывать валидацию

  • После взаимодействия — пользователь покинул поле (onBlur)
  • При попытке отправки — пользователь нажал Submit
  • В реальном времени — только для форматных ограничений (например, максимальная длина)

Не показывайте ошибку на пустом нетронутом поле.

Состояния валидации (View)

ViewОписаниеКогда
DefaultНейтральное состояниеПоле не тронуто или введённые данные корректны
ErrorОшибка — данные невалидныПосле взаимодействия, если данные не соответствуют требованиям
WarningПредупреждениеДанные допустимы, но могут вызвать проблемы
SuccessУспешная валидацияПосле успешной проверки, если визуальное подтверждение важно

Уровни валидации

Валидация происходит на двух уровнях:

УровеньГдеКогда
ПолеView=Error + hint-текст под полемonBlur или при submit
ФормаSummary-блок в начале / конце формыПри submit, если несколько полей невалидны

Используйте field-level валидацию как основной механизм. Form-level summary добавляйте только когда полей с ошибками больше трёх — пользователь иначе не видит всех проблем сразу.

Hint и текст ошибки

Поле может иметь hint-текст в нейтральном состоянии и сообщение об ошибке в состоянии Error. Это одна и та же область (HintPlacement):

Состояние поляЧто показывается
DefaultHint-текст (подсказка, требования к формату)
ErrorТекст ошибки заменяет hint-текст
WarningТекст предупреждения заменяет hint-текст
SuccessТекст подтверждения или hint возвращается

Не показывайте hint и ошибку одновременно — это разные сообщения для разных состояний.

Async-валидация

Применяется для проверок, требующих запроса к серверу: уникальность email, доступность логина и т.д.

Паттерн:

  1. Пользователь покидает поле (onBlur)
  2. Поле переходит в loading-индикацию (Spinner в contentRight)
  3. По результату — View=Error или View=Success

Правила:

  • Не блокируйте submit во время проверки — покажите loading и отложите отправку
  • Если запрос не успел завершиться до submit — выполните его синхронно
  • Кэшируйте результат: не повторяйте запрос при повторном blur с тем же значением

Обязательные и необязательные поля

Required и Optional — взаимодополняющие маркеры. Используйте тот, которых в форме меньше:

СитуацияРешение
Большинство полей обязательныОтмечайте только необязательные через Optional=True
Большинство полей необязательныОтмечайте только обязательные через Required=True
Все поля обязательныДостаточно текста "Все поля обязательны" — маркер на каждом избыточен

Required=True — визуальный маркер, не триггер валидации. Ошибку "поле обязательно" показывает View=Error при submit.

  • RequiredPlacement=Left/Right/None — позиция маркера относительно лейбла

Правила

  • Всегда предоставляйте текст с объяснением ошибки (через HintPlacement) — не только цвет
  • Error блокирует отправку формы; Warning — нет
  • Показывайте только одно сообщение за раз (самое важное)
  • Success используйте только там, где визуальное подтверждение критично
  • Не используйте View=Error как стилистический приём — только для реальных ошибок
  • Не показывайте ошибку на поле, которого пользователь ещё не касался
Нашли расхождение документации и библиотеки — напишите команде.Сообщить о расхождении