Skip to content
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

fix(ModalPage): ограничить область контента с помощью bottom-inset #5715

Conversation

mendrew
Copy link
Contributor

@mendrew mendrew commented Aug 29, 2023

fixes: #5604

Описание

В iOS при наличии bottom-inset скролл заходил в область bottom-inset.
Сам контент не был перекрыт bottom-inset потому что мы компенсировали и поднимали контент с помощью ::after с высотой равной значению bottom-inset.
Но скролл контента заходил в область bottom-inset потому что ::after был частью контента.

Изменения

  • компенсаци bottom-inset вынесена из области контента на уровень ModalPage__content-wrap, за счёт чего контент вместе с областью скролла поднимается на высоту bottom-inset, таким образом скролл заканчивается до bottom-inset.
    Для этого псевдо элемент был убран из ModalPage__content-in и заменён на div ModalPage__bottom-inset вунтри ModalPage__content-wrap.

  • в ModalState.refs был добавлен новый ref bottomInset. Сделано это для того, что можно было получить высоту ModalPage__bottom-inset, а значит значение переменной var(--vkui_internal--safe_area_inset_bottom).
    Значение bottom-inset нужно для того, чтобы корректно анимировать появление ModalPage в режиме dynamicHeight.

Дело в том, что ModalPage во время анимации появления выезжает ровно на высоту контента ModalPage. То есть при наличии bottom-offset, без псевдо-элемента внутри ModalPage__content-wrap, ModalPage появится таким образом, что bottom-offset перекроет нижнюю часть контента ModalPage.
Чтобы такого не было надо поднять ModalPage на высоту контента + bottom-inset.

Можно было и не добавлять bottomInset ref и достучаться до нужно элемента через contentElement ref, но это делает код хрупким и очень не явным зависимость ModalPage от ModalPage__bottom-inset при расчёте translateY.

Хотелось именно связать место расположения ModalPage__bottom-inset и его роль в подсчёте translateY.

Видео

Тут bottom-inset = 50px и визуализирован с помощью дива с position: fixed;

2023-08-29.14.06.28.mov

Added new ref specially for bottom-inset to be able to get the
inset value by getting height of the element.

Use the bottom-inset value in content height during transition
calculation to make sure we move modal up not only by the height of the
content, but also by the height of the bottom-inset otherwise modal
content might be hidden by the bottom-inset.

Use this ref for new div element inside content-wrap.
Div element we need not only to use in calculation but also to limit
content scroll to make sure scroll visually ended before the
bottom-inset.
This reverts commit b0a36a0266b2c5cef6dea23e10c6d6a5432cc88a.
@codesandbox-ci
Copy link

codesandbox-ci bot commented Aug 29, 2023

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 56bd22f:

Sandbox Source
VKUI TypeScript Configuration

@github-actions
Copy link
Contributor

github-actions bot commented Aug 29, 2023

size-limit report 📦

Path Size
JS 316.29 KB (+0.07% 🔺)
JS (gzip) 93.18 KB (+0.07% 🔺)
JS (brotli) 76.97 KB (+0.01% 🔺)
JS import Div (tree shaking) 3.04 KB (0%)
CSS 275.79 KB (-0.01% 🔽)
CSS (gzip) 36.01 KB (+0.02% 🔺)
CSS (brotli) 28.57 KB (+0.06% 🔺)

@github-actions
Copy link
Contributor

github-actions bot commented Aug 29, 2023

e2e tests

Playwright Report

@github-actions
Copy link
Contributor

github-actions bot commented Aug 29, 2023

👀 Docs deployed

Commit 56bd22f

@codecov
Copy link

codecov bot commented Aug 29, 2023

Codecov Report

Patch coverage: 100.00% and no project coverage change.

Comparison is base (38a57c6) 81.93% compared to head (56bd22f) 81.93%.

Additional details and impacted files
@@           Coverage Diff           @@
##           master    #5715   +/-   ##
=======================================
  Coverage   81.93%   81.93%           
=======================================
  Files         296      296           
  Lines        9780     9783    +3     
  Branches     3102     3103    +1     
=======================================
+ Hits         8013     8016    +3     
  Misses       1767     1767           
Flag Coverage Δ
unittests 81.93% <100.00%> (+<0.01%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

Files Changed Coverage Δ
...ckages/vkui/src/components/ModalPage/ModalPage.tsx 98.07% <ø> (ø)
...ckages/vkui/src/components/ModalRoot/ModalRoot.tsx 51.96% <100.00%> (+0.25%) ⬆️
...vkui/src/components/ModalRoot/ModalRootContext.tsx 85.71% <100.00%> (+0.71%) ⬆️

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

@mendrew mendrew marked this pull request as ready for review August 29, 2023 11:11
@mendrew mendrew requested a review from a team as a code owner August 29, 2023 11:11
Copy link
Contributor

@inomdzhon inomdzhon left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤝

@mendrew mendrew force-pushed the mendrew/fix/5604/update-modal-page-scroll-with-ios-env-bottom-inset branch from 29334f5 to 56bd22f Compare August 30, 2023 08:32
@mendrew mendrew requested a review from inomdzhon August 30, 2023 08:41
@mendrew mendrew merged commit 4062ea2 into master Aug 31, 2023
@mendrew mendrew deleted the mendrew/fix/5604/update-modal-page-scroll-with-ios-env-bottom-inset branch August 31, 2023 08:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[Bug]: Скролл ModalPage заходит под ios env botom inset
3 participants