VKUI icon indicating copy to clipboard operation
VKUI copied to clipboard

fix(ImageBaseOverlay): fix nested Tappable

Open BlackySoul opened this issue 8 months ago • 5 comments

  • close #7001

  • [x] Unit-тесты
  • [x] Документация фичи (?)

Описание

by design вложенные Tappable ресетят hover/active-состояние верхнеуровневого Tappable, чтобы поддержать следующее поведение (актуально только для 2-х уровневой вложенности, это оке?):

https://github.com/VKCOM/VKUI/assets/7431217/8ee0028c-8a1c-4404-96ca-8cfd6aa7add3

В случае с ImageBaseOverlay такое поведение нежелательно.

Изменения

Добавила DisableClickableLockStateContext для отключения такого поведения (~принимаю в пожертвование лучшее название~). Сначала думала сделать это через проп на Tappable, но, кажется, что DX такого решения будет сомнительный. Например, в случае с ImageBaseOverlay мы точно знаем, что дефолтное поведение не нужно, но будем заставлять пользователя в каждую кнопку прокидывать проп 🤔

Изменения v2

В текущей версии компонента некорректно передавать в overlay интерактивные элементы, потому что получается кнопка в кнопке.

В новой реализации убрала использование Tappable - кажется, это не breaking change, потому что мы никакие пропы, специфичные для Tappable не прокидывали - по сути он нам нужен только для hover-эффекта (остальное мы либо отключаем, либо не можем отключить, но оно мешает - например, меняется вид поинтера). В итоге получился интерактивный и неинтерактивный компоненты, принимаем решение, какой из них рисовать, на основе нового пропа nonInteractive - в таске предлагали завязываться на onClick, но такое мы не можем провернуть - потому что сейчас поведение по-умолчанию - если onClick не передан, то мы подставляем noop и hover-эффект работает из коробки (кому-то можем сломать это поведение).

BlackySoul avatar Jun 10 '24 18:06 BlackySoul