zyfra / Prizm

Other
46 stars 16 forks source link

[BUG] @prizm-ui/components - Нет понятных правил валидации текстовых полей #1416

Open dkshichkovskiy opened 7 months ago

dkshichkovskiy commented 7 months ago

Библиотека

Выберите нужное отметив галочку [x]

Компонент

Любое текстовое поле

Версия

3.11.0

Описание проблемы

Сейчас нет понимания, как именно должна работать валидация на текстовых полях.

Со слов нашего дизайнера должно быть следующее поведение: 1) Ошибка валидации появляется (если значение не валидно) при потере фокуса (событие blur). 2) Ошибка валидации убирается (если значение становится валидным) при вводе значение (событие input). 3) При клике на иконку сброса расфокусировка текстового поля не происходит. 4) При клике на иконку сброса ошибка валидации не появляется исходя из пунктов 1 и 3.

Под "ошибка валидации появляется/убирается" имеется в виду отображение/скрытие индикации ошибки (красная иконка в правой области контрола). Красная рамка отображается только если есть ошибка валидации и текстовое поле не в фокусе.

Сейчас пункты 1 и 2 выполняются, если указать у FormControl опцию updateOn: 'blur'. Но есть подозрение, что такое поведение было получено случайно и нет гарантии что при последующих обновлениях Prizm оно не будет изменено.

К тому же пункты 3 и 4 сейчас не выполняются. Вероятно, сделать это будет проблематично т.к. при клике на иконку сброса наверняка будет происходить событие blur на текстовом поле, а если оно будет происходить, то согласно пункту 1 будет происходить валидация.

На поведении, описанном выше, не настаиваю. Нужно любое поведение, которое будет удовлетворять команду разработки Prizm и дизайн систему, будет стабильным (неизменным в течении времени) и где-либо зафиксированным.

Ещё вопросы:

AleksandrSibiakov commented 7 months ago

updateOn определяет момент когда значение из поля ввода (HTMLInput) попадает в модель (FormControl). Возможные значения change/blur/submit, которые соответствуют событиям формы (а если точнее, то вызову соответствующих функций, полученных через методы интерфейса ControlValueAccessor - registerOnChange, registerOnTouched и ngSubmit соответственно) Правила валидации всегда ассоциированы с некоторым инстансом FormControl, именно поэтому при установке updateOn=blur выполняется правило 1 - т.к. только на blur проиходит изменение значения и появляется возможность запустить валидацию и сказать, корректно или нет введенное значение. (Кстати, странно, что при этом выполняется правило 2, т.к. до следующего blur валидация выполняться не должна). Так что зависимость на updateOn косвенно мы все таки имеем. Но, с другой стороны, правило, определяющее когда отображать или скрывать элемент индикатор - должно лежать на плечах библиотеки PRIZM. В этом плане мне импонирует реализация сделанная в Material, а именно ErrorStateMatcher (дефолтная реализация которого, кстати, совпадает с требованиями PRIZM afaik)

imonogarov commented 2 months ago

@PrizmDS просьба посмотреть

PrizmDS commented 1 month ago

Изучаем