-
Notifications
You must be signed in to change notification settings - Fork 186
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
feat(Root/View): Add a hook to know animation transition direction #5567
Conversation
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:
|
👀 Docs deployedCommit 676cd7b |
size-limit report 📦
|
Codecov ReportPatch coverage:
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
Flags with carried forward coverage won't be shown. Click here to find out more.
☔ View full report in Codecov by Sentry. |
e2e tests |
f4b9a93
to
fdae6c1
Compare
packages/vkui/src/components/NavTransitionContext/NavTransitionContext.tsx
Outdated
Show resolved
Hide resolved
a5e3e92
to
46c07b0
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.
Класс 🔥 🚀
одну опечаточку увидел :)
94b301c
to
2094e38
Compare
packages/vkui/src/components/NavTransitionDirectionContext/NavTransitionDirectionContext.tsx
Show resolved
Hide resolved
Calculating transition direction might be not required at all But might be useful if we need to figure out when to fetch data. Though, transitionDirection value is available after entering is completed.
Update Root Readme to show the work of the hook
Compared to `undefined` which is epxlicitely say that direction is undefined.
Tests are moved to NavTransitionDirectionProvider folder
We have not re-render now, so, no reasons for it if useEffect depends only on direction which is available on mount.
Because we test it inside the View.test.tsx Otherwise we would need to duplicate test suites in ViewInfinite.test.tsx
Even though both components must to pass the same checks they are different and codcoverage cannot understand if we have tests for ViewInfinite in a View.test.tsx file
Fix typo
2094e38
to
6f29126
Compare
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 coverageViewInfinite
, так как он влияет на покрыте тестами, а сам компонент тестируется внутриView.test.tsx
.Такой вариант мне больше нравится, но также так можно упустить и не применить во
ViewInfinite
те же изменения, что могут быть сделаны и покрыты тестами воView
. Так себе аргумент, правда.VKUI/packages/vkui/src/components/View/ViewInfinite.tsx
Lines 1 to 2 in 60c686f
useNavDirection()