-
Notifications
You must be signed in to change notification settings - Fork 130
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat(ValidationContextWrapper): add virtualized wrapper #3578
base: next
Are you sure you want to change the base?
Conversation
Я расширил пример в документации, добавив реальных инпутов, разные виды валидации и форму без виртуализации для сравнения. Он доступен по ссылке. На созвоне мы пришли к важному заключению, что все виды и сценарии валидации должны работать в виртуальном списке точно так же, как и без него. В текущем поведении есть отличия в виртуальном списке:
Такого не должно быть и это стоит устранить в любом случае. Далее опишу предложения для идеального решения. Они могут отпасть в ходе решения проблем выше, или наоборот, стать более актуальными. Поэтому, их можно рассмотреть во вторую очередь.
|
Заметил еще проблему, которую точно нужно решить, это фокус на поле с ошибкой по сабмиту. Сейчас в листе он не происходит. Думаю, нужно каким-то образом научиться находить нужный ValidationWrapper и вызывать метод focus у него, т.к. в нем есть нужная дополнительная логика. Проблему с динамическим переключением типа валидации и перемонтированием элементов внутри листа, которую еще обсуждали, предлагаю пока тоже отложить. |
Проблема
Валидации работают только с элементами, смонтированными в dom-дерево. Если есть данные, что невалидны по правилам валидации, но их не существует - форма будет считаться валидной. Проблемы появляются с отрисовкой больших списков. Если использовать виртуализацию, то неотрисованные данные не отвалидируются и данные, потенциально, сохранятся с ошибкой.
Решение
ValidationBuilder при создании сразу валидирует данные по правилам, переданным в него. У ValidationContainer\ValidationWrapper нет доступа явного к билдеру. Идея состоит в том, что мы передаем явно массив node, используемых для отрисовки строк\таблиц и читаем вглубь через ValidationReader до первого состояния error\warning и возвращаем индекс строки. Специальный кмопонент ValidationWrapperVirtualizedInternal при валидации передает этот индекс и сохраняет знание о том, что внутри него какой-то элемент невалиден.
Чек-лист перед запросом ревью
Добавлены тесты на все изменения
⬜ unit-тесты для логики
⬜ скриншоты для верстки и кросс-браузерности
✅ нерелевантно
Добавлена (обновлена) документация
✅ styleguidist для пропов и примеров использования компонентов
⬜ jsdoc для утилит и хелперов
⬜ комментарии для неочевидных мест в коде
⬜ прочие инструкции (
README.md
,contributing.md
и др.)⬜ нерелевантно
Изменения корректно типизированы
⬜ без использования
any
(см. PR2856
)✅ нерелевантно
Прочее
⬜ все тесты и линтеры на CI проходят
✅ в коде нет лишних изменений
⬜ заголовок PR кратко и доступно отражает суть изменений (он попадет в changelog)