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):
| Состояние поля | Что показывается |
|---|---|
Default | Hint-текст (подсказка, требования к формату) |
Error | Текст ошибки заменяет hint-текст |
Warning | Текст предупреждения заменяет hint-текст |
Success | Текст подтверждения или hint возвращается |
Не показывайте hint и ошибку одновременно — это разные сообщения для разных состояний.
Async-валидация
Применяется для проверок, требующих запроса к серверу: уникальность email, доступность логина и т.д.
Паттерн:
- Пользователь покидает поле (onBlur)
- Поле переходит в
loading-индикацию (Spinner в contentRight) - По результату —
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как стилистический приём — только для реальных ошибок - Не показывайте ошибку на поле, которого пользователь ещё не касался