[Bug]: Не изменяется sizeY в AdaptivityProvider для модалки при переходе в эмулятор
Pavel1711 opened this issue · 6 comments
Описание
Если открыть модальное окно со switch и gallery на пк, затем включить эмулятор(либо наоборот), то галерея не будет листаться и switch будет отображаться с сохраненной версией при загрузке.
Версия
6.1.0
В каких браузерах воспроизводится проблема?
No response
Шаги воспроизведения
No response
Ожидаемое поведение
Галерея листается, Switch в соответствии с платформой
Скриншоты
Пример с воспроизведением
@Pavel1711 Привет, а можешь, пожалуйста, поколдовать над настройками доступа к codesandbox, а то при переходе по ссылке пишет, что Sandbox not found
?
@Pavel1711 Привет, а можешь, пожалуйста, поколдовать над настройками доступа к codesandbox, а то при переходе по ссылке пишет, что
Sandbox not found
?
Сейчас должно быть доступно
@Pavel1711 Привет, а можешь, пожалуйста, поколдовать над настройками доступа к codesandbox, а то при переходе по ссылке пишет, что
Sandbox not found
?Сейчас должно быть доступно
Спасибо, есть доступ!
Немножно поисследовал.
По поводу Gallery. Gallery перестаёт работать потому что внутри для реализации скролла мы испльзуем компонент Touch, который завязыватся на либо touch
события, либо на mouse
события по такому условию:
VKUI/packages/vkui/src/lib/touch/functions.ts
Lines 26 to 40 in fde0fa0
При этом в DevTools
, если эмулировать touch (Mobile)
устройство и перезагрузить страницу, то 'ontouchstart' in window
вернёт true
, в то время как если перевеcти эмуляцию в Desktop
, то 'ontouchstart' in window
так и будет возвращать true
. Обратная ситуация точно такая же, если перезагрузить приложение в Desktop
режиме, то 'ontouchstart' in window
будет false
, в mobile
режиме также будет false
. А это значит, что логика Touch элемента сломается и мы повесим обработчики, которые не соответствуют событиям, отправляемым в режиме эмуляции.
Как вариант тут можно было бы подписаться на все события, но это сильно усложнит и без того сложную реализацию. Ради режима DevTools я бы не стал трогать её пока что. Хотя здорово, что заметили такую особенность. Нас сильно ещё подводит окружение в эмуляторе, которое всё же не так гибко меняется как хотелось бы.
Не думаю, что мы в ближайшее время поменяем поведение Touch, я бы советовал перезагружать приложение при включении режима эмуляции устройства ввода.
Со Switch
немного иная ситуация, тут внешний вид зависит от platform
. И если поменять userAgent
, то platform
, который вычисляется в ConfigProvider
изменён не будет, потому что вычисляется только один раз. Мы делаем это намеренно, так как не ожидаем, что платформа может динамически поменяется.
Тут как вариант, на resize
, вместе с определением mobile пересчитать platform
и отправить результат в ConfigProvider
. Использовать нашу функцию platform
тут не вариант, к сожалению, потому что она мемоизируется внутри. Можно воспользоваться функцией detectIOS
из @vkontakte/vkjs
и отправлять в platform
либо ios
либо android
.
А вот по поводу изменения sizeY
- он всё же меняется и меняется правильно, просто внешний вид Switch больше зависит от platform
.
Что ты об этом думаешь?