-
Notifications
You must be signed in to change notification settings - Fork 184
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(Cell): add auto scroll for draggable mode #5833
feat(Cell): add auto scroll for draggable mode #5833
Conversation
size-limit report 📦
|
This pull request is automatically built and testable in CodeSandbox. To see build info of the built libraries, click here or the icon next to each commit SHA. Latest deployment of this branch, based on commit 0e30d8f:
|
e2e tests |
👀 Docs deployed
Commit 0e30d8f |
Codecov ReportAttention:
Additional details and impacted files@@ Coverage Diff @@
## master #5833 +/- ##
==========================================
- Coverage 79.38% 79.00% -0.39%
==========================================
Files 306 311 +5
Lines 9631 9903 +272
Branches 3261 3314 +53
==========================================
+ Hits 7646 7824 +178
- Misses 1985 2079 +94
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Sentry. |
e8c6fda
to
7efd20d
Compare
7efd20d
to
b6ffed0
Compare
b6ffed0
to
9c6d6de
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Потрясающая работа! 👏 👏 👏
Работает прекрасно! Очень непростая задача, как по мне!
Сделано классно! 🔥🔥🔥 Спасибо за тесты 💯
Единственное, что стоит внимательнее посмотреть, это факт того, что иногда тригерится несколько recalculation style
в коде, отвечающем за сдвиг элементов при драге. От того, что для определения необходимости сдвига мы читаем размеры и позицию элементов, потом меняем стили, а затем снова читаем размеры того же или уже других элементов и снова устанавливаем стили.
В идеале мы должны сначала все значения прочитать, а потом уже сразу для всех элементов поменять стили, иначе браузеру, для того, чтобы в очередной раз прочитать размеры элемента после изменения стилей приходится пересчитывать геометрию, чтоб понять затронули ли последние изменения элемент и предоставить актуальные размеры.
Возможно, что это nitpick и не стоит тратить время, потому что результаты и так хорошие, в большинстве вызовом dramove recalculation style
вызывается один раз, но мне сложно представить как это будет в более сложном реальном примере.
9c6d6de
to
beb3d9b
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Попадали тесты
packages/vkui/src/components/HorizontalScroll/HorizontalScroll.tsx
Outdated
Show resolved
Hide resolved
- Импортиурем файл с утилитами - Добавляем запуск для конткретных движков
b8645c4
to
1744156
Compare
1744156
to
9d0aacb
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
👍
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Потрясающая работа 👏 👏 👏
Спасибо!
* tech: extend e2e test infra - Импортиурем файл с утилитами - Добавляем запуск для конткретных движков * feat(Cell): add auto scroll for draggable mode * fix(review): reword checkIfElementIsInsideYEdgesOfViewport args * fix(review): refactor useDraggable * chore: add tests * chore: add comments with references * refactor: revert now() moving to lib/date * review: mv condition for icon to var * review: extend dom.test.ts
- caused by #5833 Удаляем проверку на OUTBOX_OFFSET, т.к. из-за неё нельзя включить автоскролл при уводе элемента за область видимости.
- caused by #5833 Удаляем проверку на OUTBOX_OFFSET, т.к. из-за неё нельзя включить автоскролл при уводе элемента за область видимости.
- caused by #5833 Удаляем проверку на OUTBOX_OFFSET, т.к. из-за неё нельзя включить автоскролл при уводе элемента за область видимости.
Описание
onDragMove
и очищаю приonDragEnd
;position: fixed
(как в библиотеке https://github.com/hello-pangea/dnd). Если задаватьposition: absolute
или оставить толькоtranslateY
, то при перетаскивании элемента к нижнему краю, увеличиваетсяscrollHeight
.scrollTop
до и после к смещениюclientY
, который мы запоминаем вlastClientYRef
.Кейсы
Кейс 1
Элементом со скроллом является
window
.Пример на dekstop
global-scroll-desktop.mov
Пример в mobile
global-scroll-mobile.mov
Кейс 2
Элементом со скроллом является НЕ
window
.Пример на dekstop
local-scroll-desktop.mov
Пример в mobile
local-scroll-mobile.mov
Ограничения
Изменения
ListContext
, т.к. перенёс установкуtransition
иpointer-events
в JS код.@vkontakte/vkui-floating-ui
.useDraggable
и его зависимости в папакуhooks/
и переименовал вuseDraggableDomApi
, т.к., чтобы не делать брейкинг чендж, на текущий момент проще было сделать через DOM API, вместо React Way.packages/vkui/jest.setup.js
полифилюDOMRect
. Также туда перенёсmathMedia
.packages/vkui/src/testing/utils.ts
создал помощники дляrequestAnimationFrame
(waitRAF
иrequestAnimationFrameMock
).