-
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
[BREAKING CHANGE] feat: SSR, AppRoot: get rid of body classes mutations #7739
base: master
Are you sure you want to change the base?
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. |
e2e tests
|
👀 Docs deployed
Commit d7e603c |
Codecov ReportAttention: Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## master #7739 +/- ##
==========================================
- Coverage 95.17% 95.13% -0.04%
==========================================
Files 376 377 +1
Lines 11041 11027 -14
Branches 3664 3661 -3
==========================================
- Hits 10508 10491 -17
- Misses 533 536 +3
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Sentry. |
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.
Как всегда, шикарная работа 👏 👏 👏
Отметил несколько моментов, но на первый взгляд то, что нужно 👍
Также:
- нужно ребейзнуть
master
– тамAppearance
сталColorScheme
; - нужно в доке Stylegude тоже указать
vkui
иvkui__root
классы в HTML; - нужно будет сразу глянуть почему скриншоты поплыли и не нужно ли из-за ошибок в них всё переделывать
84d05ce
to
91f7915
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.
Reuse AppRoot styles in AppRootPortal to share same tokens
We don't need to use it on portals as modals will disappear
Simplify logic of helper functions like shouldUsePortal resolvePortalContainer
As it creates unnesessary rerender and can't work with creation of portalRoot dom element on demand
To avoid rendering modal/popout in SplitLayout during SSR and after hydration
We keep render ModalRoot in the SplitLayout container right after content, but now we use portal for it. It means now, that users can put ModalRoot anywhere in the app, they are not limited by SplitLayout modal prop Styles from PopoutRoot about modal fixed layout and z-index are moved directly to ModalRoot AppPortalWrapper from SplitLayout
In full mode we render Modal/Popout right after content In other modes we render Modal/Popout as a child of the body
Components like Alert/ScreenSpinner/ActionSheet and ModalRootDesktop
Props stays, but unused. Will remove later
Instead of in-app-after-content
d95c854
to
d7e603c
Compare
Описание
Убираем мутацию body из AppRoot.
В том числе избавляемся от добавления в body
portalRoot
при первом рендере.Изменения
AppRoot
больше не выставляет самостоятельно классы.vkui
наhtml
теге и.vkui__root
на точке монтированияVKUI
.Вместо этого предлагается выставлять эти теги пользователю самостоятельно, либо применить стили, подобные которым мы теперь используем в
.vkui
и.vkui__root
. В основном они нужны для того, чтобы уbody
убрать браузерные отступы и сделать так, чтобыVKUI
занимало всё пространство контейнера.VKUI/packages/vkui/src/styles/common.css
Lines 1 to 17 in 84d05ce
VKUI
, которые раньше вешались на body теперь вешаются на контейнерAppRoot
. Так какAppRoot
это точка входа вVKUI
приложение, то такой подход приемлем.Чтобы компоненты, рендерящиеся через порталы вне
DOM
дереваAppRoot
, тоже имели доступ к токенам и стилямAppRoot
был создан компонентAppRootStyleContainer
. Он используется как вAppRoot
, так и как обертка для порталов, в компонентеAppRootPortal
.AppRootStyleContainer
через контекст знает какой сейчас режим (mode
), какойappearance
, поэтому в модалках и других плавающих элементах всегда будет применена верная цветовая схема и токены.usePortal
свойством.portalRoot
контейнер для модалок в режимеembedded
, лежащий как последний дочерний элементbody
, больше не создается при первом рендере. Он создаётся вbody
только если модалку или поповер надо отрендерить, и продолжает жить вDOM
покаAppRoot
не размонтируется. Используется как точка монтирования всем модалками и поповерами, если надо отредерить что-то внеDOM
дереваAppRoot
.full
. Они теперь всегда рендеряться по умолчанию через портал в специальный контейнер внутриSplitLayout
, после основного контента. Рендер через портал позволяет избавится от ещё одно появляющегося при первом рендере DOM элемента, если необходимо использовать модалки.popout
иmodal
изSplitLayout
.Так как модалки и попауты (
Alert
,ScreenSpinner
,ActionSheet
) рендеряться через портал в то же место что и раньше, то надобность в явной передачеModalRoot
иpopout
вSplitLayout
отпадает.Это позволяет избавить пользователей от необходимости обязательно передавать
ModalRoot
вSplitLayout
и держать стейт переключения модалок на уровнеSplitLayout
.Теперь
ModalRoot
можно объявить в любой части приложения, как иAlert
,ScreenSpinner
иActionSheet
.Также можно иметь несколько
ModalRoot
если требудется по смыслу разделить модалки.usePortal
для рендеринга через портал в SplitLayout за контентом.Release notes