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

feat(Root/View): Add a hook to know animation transition direction #5567

Merged

Conversation

mendrew
Copy link
Contributor

@mendrew mendrew commented Aug 3, 2023

resolves: #4981

Описание

Требуется предоставить хук, чтобы дать возможность определять панель была отрисована с анимацией перехода вперёд или назад. Удобно для загрузки данных при переходе вперёд и выгрузке данных из кэша при переходе назад.
useNavDirection().

Переход можно осуществить как с одного View на другой внутри одного Root, так и с одного Panel на другой внутри одного View.

Компоненты Root и View хранят в себе состояние (isBack) с помощью которого можно определить анимацию перехода.

Для решения задачи был создан отдельный контекст NavTransitionDirectionContext в провайдер которого передается значение isBack. В провайдер обернут каждый View внутри Root и каждый Panel внутри View.

Одним из требований было исключить ненужный ре-рендеринг компонента, использующего этот хук. Значение direction, возвращаемое хуком useNavDirection(), должно быть известно при маунте компонента в панели и не меняться после этого.
Для этого значение isBack запоминается один раз при инициализации стейта при маунте провайдера Panel/View и передается дальше уже без изменений. Хук берёт ближайшее значение из контекста NavTransitionDirectionContext
и анализирует.

Изменения

  • обернул каждый View и Panel в контекст провайдер NavTransitionDirectionProvider и передаю isBack.
  • внутри NavTransitionDirectionProvider для передачи isBack анализирую значение из родительского контекста, если есть, и дочернего. Родительский контекст чаще всего это значение из Root, а дочерний это значение из View.
    Наиболее приоритетно значение из View, но если оно undefined, то это значит, что переход был осуществлён между View внутри Root, а не Panel внутри View.
  • внутри NavTransitionDirectionProvider значение isBack запоминается один раз при маунте и уже не меняется, специально чтобы исключить ре-рендеринг без надобности в компонентах использующик хук и контекст.
  • перестал сбрасывать isBack в undefined после окончания перехода, потому что это не имеет смысла, мы никак этот факт не используем, а также мешает предоставлению значения через контекст (можно было бы это и обойти, но код бы усложнился без надобности).
  • Дублирую тесты из View.test.tsx в ViewInfinite. Потому что из-за пары изменений в файле компонета codecov стал падать, потому что покрытие тестами уменьшелось. Альтернативный вариант, чтобы не дублировать код э то исключить из code coverage ViewInfinite, так как он влияет на покрыте тестами, а сам компонент тестируется внутри View.test.tsx.
    Такой вариант мне больше нравится, но также так можно упустить и не применить во ViewInfinite те же изменения, что могут быть сделаны и покрыты тестами во View. Так себе аргумент, правда.
    /* istanbul ignore file */
    // ignore test coverage for this file because we test it inside the View.test.tsx
  • обновил документацию, чтобы рассказать про useNavDirection()
  • проверил что хук работает как с анимациями, так и без. А также при свайпе в iOS.

@codesandbox-ci
Copy link

codesandbox-ci bot commented Aug 3, 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 676cd7b:

Sandbox Source
VKUI TypeScript Configuration

@github-actions
Copy link
Contributor

github-actions bot commented Aug 3, 2023

👀 Docs deployed

Commit 676cd7b

@github-actions
Copy link
Contributor

github-actions bot commented Aug 3, 2023

size-limit report 📦

Path Size
JS 314.24 KB (+0.14% 🔺)
JS (gzip) 91.98 KB (+0.14% 🔺)
JS (brotli) 76.22 KB (+0.12% 🔺)
JS import Div (tree shaking) 2.97 KB (0%)
CSS 276.34 KB (0%)
CSS (gzip) 36.06 KB (0%)
CSS (brotli) 28.61 KB (0%)

@codecov
Copy link

codecov bot commented Aug 3, 2023

Codecov Report

Patch coverage: 100.00% and project coverage change: +0.09% 🎉

Comparison is base (250b33f) 81.83% compared to head (676cd7b) 81.93%.
Report is 12 commits behind head on master.

Additional details and impacted files
@@            Coverage Diff             @@
##           master    #5567      +/-   ##
==========================================
+ Coverage   81.83%   81.93%   +0.09%     
==========================================
  Files         289      290       +1     
  Lines        9655     9686      +31     
  Branches     3073     3080       +7     
==========================================
+ Hits         7901     7936      +35     
+ Misses       1754     1750       -4     
Flag Coverage Δ
unittests 81.93% <100.00%> (+0.09%) ⬆️

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

Files Changed Coverage Δ
...DirectionContext/NavTransitionDirectionContext.tsx 100.00% <100.00%> (ø)
packages/vkui/src/components/Root/Root.tsx 97.29% <100.00%> (+0.03%) ⬆️
packages/vkui/src/components/View/View.tsx 92.98% <100.00%> (+0.45%) ⬆️
packages/vkui/src/components/View/ViewInfinite.tsx 91.27% <100.00%> (+0.06%) ⬆️

... and 2 files with indirect coverage changes

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

@github-actions
Copy link
Contributor

github-actions bot commented Aug 3, 2023

e2e tests

Playwright Report

@mendrew mendrew force-pushed the mendrew/feat/View/hook-to-know-animation-transition-direction branch from f4b9a93 to fdae6c1 Compare August 4, 2023 09:30
@mendrew mendrew marked this pull request as ready for review August 4, 2023 13:08
@mendrew mendrew requested a review from a team as a code owner August 4, 2023 13:08
@mendrew mendrew marked this pull request as draft August 7, 2023 16:05
@mendrew mendrew force-pushed the mendrew/feat/View/hook-to-know-animation-transition-direction branch from a5e3e92 to 46c07b0 Compare August 8, 2023 09:31
@mendrew mendrew marked this pull request as ready for review August 8, 2023 16:50
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.

Класс 🔥 🚀

одну опечаточку увидел :)

packages/vkui/src/components/View/Readme.md Outdated Show resolved Hide resolved
@mendrew mendrew force-pushed the mendrew/feat/View/hook-to-know-animation-transition-direction branch from 94b301c to 2094e38 Compare August 10, 2023 14:55
inomdzhon
inomdzhon previously approved these changes Aug 10, 2023
@mendrew mendrew force-pushed the mendrew/feat/View/hook-to-know-animation-transition-direction branch from 2094e38 to 6f29126 Compare August 15, 2023 13:58
@inomdzhon inomdzhon merged commit f3b7a69 into master Aug 16, 2023
22 checks passed
@inomdzhon inomdzhon deleted the mendrew/feat/View/hook-to-know-animation-transition-direction branch August 16, 2023 07:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
3 participants