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(View): Fix shadow on iOS swipe back #5804

Merged
merged 7 commits into from
Sep 29, 2023

Conversation

mendrew
Copy link
Contributor

@mendrew mendrew commented Sep 14, 2023

closes: #5194

  • Unit-тесты - особо нечего тестить
  • e2e-тесты - особо нечего тестить
  • Дизайн-ревью
  • Уточнить подходящее значение цвета для overlay при свайпбэке (сейчас rgba(0, 0, 0, 0.1)) Так и оставим, потому что в нативном приложении это делает Apple по умолчанию, точный цвет не получить, а текущий самый близкий.
  • Убедиться, что View использует div для затемнения корректно и при тех же условиях, что и в Panel. (например, в Panel было условие Platform.iOS)
  • Таббар не должен затемняться, если он при свайпбэке остаётся. Это реализуется путём использования Epic с таббаром. При переключении между View внутри Epic таббар как раз остаётся и затемнение на него не попадает.

Описание

Добавляем затемнение при swipeBack на iOS на появляющейся панели, при этом убираем тень сбоку у текущей панели.

Изменения

  • во View добавлен div, отвечающий за затемнение панели, рендерящейся внутри View.
    • такой же div, используемый для затемнения панели при переходах между панелями был удалён из Panel, потому что теперь мы используем его во View.
      Удалил, так как мы всё равно стили для него задавали во View, а теперь мы должны иметь доступ к нему напрямую для того, чтобы высчитать и присвоить значение opacity при swipeBack.
  • затемнение сделано через div рендерящийся только для при swipeBack только для следующей панели.
    • Изначально он имеет частично прозрачный фон, после чего во время swipeBack мы высчитываем opacity для всего div относительно того, на сколько сдвинута основная панель.
    • Если пользователь внезапно отпускает панель, но по результатам swipeBack мы либо устанавливаем opacity в 0 (если swipeBack удачный) либо в 1 (если swipeBack отменён или не дотянут до половины экрана).
    • При этом начинают работать стили и transition opacity чтобы затемнение при появление/исчезновени панели было плавным а не резким.
  • переписаны селекторы стилей затемнения панели при Transition переходах, чтобы использовался локальный div внутри View, а не тот что был определён в Panel.

Видео

SwipeBack.inside.Epic.mov

@github-actions
Copy link
Contributor

github-actions bot commented Sep 14, 2023

size-limit report 📦

Path Size
JS 317.25 KB (+0.01% 🔺)
JS (gzip) 96.78 KB (-0.01% 🔽)
JS (brotli) 80.11 KB (+0.05% 🔺)
JS import Div (tree shaking) 2.95 KB (0%)
CSS 277.61 KB (+0.15% 🔺)
CSS (gzip) 36.14 KB (+0.04% 🔺)
CSS (brotli) 28.66 KB (+0.21% 🔺)

@codesandbox-ci
Copy link

codesandbox-ci bot commented Sep 14, 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 d396506:

Sandbox Source
VKUI TypeScript Configuration

@github-actions
Copy link
Contributor

github-actions bot commented Sep 14, 2023

e2e tests

Playwright Report

@github-actions
Copy link
Contributor

github-actions bot commented Sep 14, 2023

👀 Docs deployed

Commit d396506

@codecov
Copy link

codecov bot commented Sep 14, 2023

Codecov Report

Attention: 1 lines in your changes are missing coverage. Please review.

Comparison is base (de2126d) 80.87% compared to head (d396506) 81.75%.
Report is 23 commits behind head on master.

Additional details and impacted files
@@            Coverage Diff             @@
##           master    #5804      +/-   ##
==========================================
+ Coverage   80.87%   81.75%   +0.87%     
==========================================
  Files         300      300              
  Lines        9166     9502     +336     
  Branches     3122     3328     +206     
==========================================
+ Hits         7413     7768     +355     
+ Misses       1753     1734      -19     
Flag Coverage Δ
unittests 81.75% <95.83%> (+0.87%) ⬆️

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

Files Coverage Δ
packages/vkui/src/components/Panel/Panel.tsx 100.00% <ø> (ø)
packages/vkui/src/components/View/View.tsx 94.20% <95.83%> (+1.37%) ⬆️

... and 12 files with indirect coverage changes

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

@mendrew mendrew force-pushed the mendrew/5194/fix/View/add-shadow-with-swipe-back branch 2 times, most recently from 2e8f82c to cdbe87d Compare September 18, 2023 15:06
Use both for transition between panels and for swipe back
In case we swipe back from Panel with Tabbar to
Panel with Tabbar.
In other cases Tabbar will be affected by overlay
Firstly if we do it too early the overlay that
still has transition will cover the tabbar.
Secondly, yes, we can set state to false
when transition finished, but we don't really need it.
We use this state value only during the swiping back logic.
And every time user starts the transition we set it's value again.
As we use it only on that platform
@mendrew mendrew force-pushed the mendrew/5194/fix/View/add-shadow-with-swipe-back branch from 229db1f to ff54d10 Compare September 19, 2023 10:49
We don't need it as Tabbar is probably will be used
inside Epic and tabbar will always be on top of panel overlay
@mendrew mendrew marked this pull request as ready for review September 26, 2023 10:11
@mendrew mendrew requested a review from a team as a code owner September 26, 2023 10:11
@mendrew mendrew requested a review from Zaycevq September 26, 2023 10:12
Copy link

@Zaycevq Zaycevq 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 added the v5 Автоматизация: PR продублируется в ветку v5 label Sep 28, 2023
@BlackySoul
Copy link
Contributor

Кажется, что-то пошло не так в примере в доке 🤔

2023-09-28.22.09.33.mov

@mendrew
Copy link
Contributor Author

mendrew commented Sep 28, 2023

Кажется, что-то пошло не так в примере в доке 🤔
2023-09-28.22.09.33.mov

А в каком браузере ты смотришь? По какой ссылке?
Я такого эффекта не вижу при тех же параметрах. 🤔

@SevereCloud
Copy link
Contributor

Кажется, что-то пошло не так в примере в доке

Фикс тут:

@mendrew
Copy link
Contributor Author

mendrew commented Sep 28, 2023

Кажется, что-то пошло не так в примере в доке

Фикс тут:

* [fix(Panel): background color layout=card #5888](https://github.com/VKCOM/VKUI/pull/5888)

@BlackySoul действительно, не связано с этим PR воспроизводится на мастере и фиксится в fix(Panel): background color layout=card #5888

А я не видел, потому что у нас очень выборочно проставлено управление layout пропом в доке.
Чтобы увидеть надо либо в примере прописать

```jsx {"props": {"showLayoutSelect": true}}

Либо выставить в true

@mendrew mendrew merged commit eee9d31 into master Sep 29, 2023
44 checks passed
@mendrew mendrew deleted the mendrew/5194/fix/View/add-shadow-with-swipe-back branch September 29, 2023 09:10
vkcom-publisher pushed a commit that referenced this pull request Sep 29, 2023
Добавляем затемнение при swipeBack на iOS на появляющейся панели, при этом убираем тень сбоку у текущей панели.

* Изменения
- во `View` добавлен `div`, отвечающий за затемнение панели, рендерящейся внутри `View`.
  - такой же div, используемый для затемнения панели при переходах между панелями был удалён из Panel, потому что теперь мы используем его во `View`.
Удалил, так как мы всё равно стили для него задавали во `View`, а теперь мы должны иметь доступ к нему напрямую для того, чтобы высчитать и присвоить значение `opacity` при `swipeBack`.
- затемнение сделано через div рендерящийся только для при `swipeBack` только для следующей панели.
  - Изначально он имеет частично прозрачный фон, после чего во время swipeBack мы высчитываем opacity для всего div относительно того, на сколько сдвинута основная панель.
  - Если пользователь внезапно отпускает панель, но по результатам swipeBack мы либо устанавливаем opacity в 0 (если swipeBack удачный) либо в 1 (если swipeBack отменён или не дотянут до половины экрана).
  - При этом начинают работать стили и transition opacity чтобы затемнение при появление/исчезновени панели было плавным а не резким.
- переписаны селекторы стилей затемнения панели при `Transition` переходах, чтобы использовался локальный div внутри `View`, а не тот что был определён в `Panel`.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
v5 Автоматизация: PR продублируется в ветку v5
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[Bug][View] При свайпбеке нет тени (WebView, iOS)
5 participants