zyfra / Prizm

Other
46 stars 16 forks source link

[BUG] @prizm-ui/components - PrizmInputNumberComponent странное срабатывание валидатора required #1689

Open AntonGrekov opened 6 months ago

AntonGrekov commented 6 months ago

Библиотека

Компонент

PrizmInputNumberComponent

Версия

NodeJS:

➜ node --version
$ node -v
v16.14.2

Dependencies:

➜ npm ls @angular/core
+-- @angular/animations@16.2.12
| `-- @angular/core@16.2.12 deduped
+-- @angular/cdk@16.2.12
| `-- @angular/core@16.2.12 deduped
+-- @angular/common@16.2.12
| `-- @angular/core@16.2.12 deduped
+-- @angular/compiler@16.2.12
| `-- @angular/core@16.2.12 deduped
+-- @angular/core@16.2.12
+-- @angular/forms@16.2.12
| `-- @angular/core@16.2.12 deduped
+-- @angular/platform-browser-dynamic@16.2.12
| `-- @angular/core@16.2.12 deduped
+-- @angular/platform-browser@16.2.12
| `-- @angular/core@16.2.12 deduped
+-- @angular/router@16.2.12
| `-- @angular/core@16.2.12 deduped
+-- @ng-web-apis/common@3.0.6
| `-- @angular/core@16.2.12 deduped
+-- @ng-web-apis/intersection-observer@3.1.6
| `-- @angular/core@16.2.12 deduped
+-- @ng-web-apis/resize-observer@3.0.6
| `-- @angular/core@16.2.12 deduped
+-- @ngx-translate/core@15.0.0
| `-- @angular/core@16.2.12 deduped
+-- @ngx-translate/http-loader@8.0.0
| `-- @angular/core@16.2.12 deduped
+-- @prizm-ui/components@3.12.0
| `-- @angular/core@16.2.12 deduped
+-- @prizm-ui/core@3.12.0
| `-- @angular/core@16.2.12 deduped
+-- @prizm-ui/helpers@3.12.0
| `-- @angular/core@16.2.12 deduped
+-- @prizm-ui/i18n@3.12.0
| `-- @angular/core@16.2.12 deduped
+-- @prizm-ui/icons@3.12.0
| `-- @angular/core@16.2.12 deduped
+-- @prizm-ui/theme@3.12.0
| `-- @angular/core@16.2.12 deduped
+-- angular-split@16.2.1
| `-- @angular/core@16.2.12 deduped
+-- ngx-mask@16.2.6
| `-- @angular/core@16.2.12 deduped
+-- ngx-quill@22.1.0
| `-- @angular/core@16.2.12 deduped
`-- single-spa-angular@9.0.1
  `-- @angular/core@16.2.12 deduped

Проект в котором используется Prizm

IDP

Скрин / Видео проблемы

изображение

Воспроизведение проблемы

Воспроизводится в стори буке на инпуте с валидатором required. Нужно ввести значение превышающее 310 символов. На 311 символе сработает валидатор required, словно не введено никакое значение.

AntonGrekov commented 6 months ago

@alexhawkins94 А так же еще замечено что можно вводить такого формата "число": изображение

или такого: -24234234234234123123123 (длиной 310 символов). В обоих случая срабатывает валидатор required

alexhawkins94 commented 6 months ago

@AntonGrekov c 310 символами вроде срабатывает какое-то технологическое ограничение, мы такое сами тоже находили но глубоко еще не изучали. посмотрим спасибо

про число с минусом тоже знаем

imonogarov commented 6 months ago

@PrizmDS необходимо уточнить способ обработки ошибки возникающей при вводе некорректного числа (кол-во символов превышает допустимое)

PrizmDS commented 6 months ago

Есть 2 варианта валидации.

На горячую: Если с полем взаимодействуют впервые, то валидация происходит после применения ввода. Далее валидация происходит сразу при взаимодействии с полем. По запросу: Валидация происходит после нажатия на кнопку "сохранить"

Приоритетность проверки такая:

  1. Первым проверяется корректность данных (введенного числа). Содержит ли оно допустимые символы. Представлено ли в нужном формате. Если число в неверном формате, то смысла считать кол-во символов -- нет. Возможно, добавить маску
  2. После проверяется кол-во символов. В случае с длинными числами, которые заполняются пользователем, рекомендуется сразу отображать каунтер введенных символов. В случае превышения max -- выдавать ошибку. Ни в коем случае не блокировать ввод
  3. Обязательное поле. Его валидация всегда происходит только при потере фокуса.
PrizmDS commented 6 months ago

Ситуация про валидацию повторяется

https://github.com/zyfra/Prizm/issues/1693

ickisIckis commented 3 weeks ago

Есть 2 варианта валидации.

На горячую: Если с полем взаимодействуют впервые, то валидация происходит после применения ввода. Далее валидация происходит сразу при взаимодействии с полем. По запросу: Валидация происходит после нажатия на кнопку "сохранить"

Приоритетность проверки такая:

  1. Первым проверяется корректность данных (введенного числа). Содержит ли оно допустимые символы. Представлено ли в нужном формате. Если число в неверном формате, то смысла считать кол-во символов -- нет. Возможно, добавить маску
  2. После проверяется кол-во символов. В случае с длинными числами, которые заполняются пользователем, рекомендуется сразу отображать каунтер введенных символов. В случае превышения max -- выдавать ошибку. Ни в коем случае не блокировать ввод
  3. Обязательное поле. Его валидация всегда происходит только при потере фокуса.

@PrizmDS, наверное, это стоит вынести в гитбук

PrizmDS commented 3 weeks ago

В гитбуке это описание есть. https://prizmds.gitbook.io/documentation/guidelines/validation