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

[experiment] PanelHeader render slots with observable props #6910

Closed
wants to merge 5 commits into from

Conversation

inomdzhon
Copy link
Contributor

@inomdzhon inomdzhon commented May 13, 2024


Описание

Набросал логику рендера PanelHeader, который внутри SplitCol, в PanelHeader из <SplitLayout header={...} />.

В react/observable реализован мини mobx-react-lite.

Вкратце логика такая:

  1. В SplitLayout создаём контекст, который создаёт "двусвязный" список cols (обзервбл объект) и headers.
  2. Каждый SplitCol регистрируем в cols и создаём под id этого SplitCol обзервбл объект (ex, headers[splitCold] = useObservableProps({})).
  3. В PanelHeader, который внутри SplitCol работает как прокси для PanelHeader в <SplitLayout header={...} />.
  4. PanelHeader в <SplitLayout header={...} /> рендерит все доступные headers.

Не учтено

  • На адаптиве левый PanelHeader из SplitCol должен прятаться.
  • Между PanelHeader нет такого же отступа как между SplitCol.
  • Не правил прилипание левого SplitCol – нужно выставить top на значение offsetTop, чтобы учитывалась высота шапки.

Демо

Видео

2024-05-14.14.19.37.mov

Примечание

  • Можно было бы создать компоненты, например, PanelHeaderSlots, PanelHeaderSlots.Start и PanelHeaderSlots.End, чтобы вынести логику и нормально типизровать пропсы, но стоит ещё поресёчить тему рефактора SplitLayout + SplitCol + PanelHeader, а то сейчас выглядит всё сложно.

  • С position: sticky для PanelHeader есть вот такой баг

    Баг

    2024-05-14.14.28.42.mov

    чтобы его поправить, нужно сделать применять паттерн Holy Grail для макета и сделать главный контент скроллируемым.

@inomdzhon inomdzhon requested a review from a team as a code owner May 13, 2024 15:33
@inomdzhon inomdzhon marked this pull request as draft May 13, 2024 15:33
@inomdzhon inomdzhon changed the base branch from mendrew/6588/PanelHeader/remove-fixed-layout-usage to master May 13, 2024 15:34
@inomdzhon inomdzhon force-pushed the imirdzhamolov/6588/PanelHeader/experiment branch from 71ef4ed to c7d4d9b Compare May 13, 2024 15:38
Copy link
Contributor

size-limit report 📦

Path Size
JS 366.14 KB (+0.48% 🔺)
JS (gzip) 111.97 KB (+0.63% 🔺)
JS (brotli) 92.29 KB (+0.54% 🔺)
JS import Div (tree shaking) 1.43 KB (0%)
CSS 269.67 KB (-0.05% 🔽)
CSS (gzip) 35.25 KB (-0.08% 🔽)
CSS (brotli) 28.57 KB (-0.11% 🔽)

Copy link
Contributor

e2e tests

⚠️ Some screenshots were failed. See Playwright Report.

Playwright Report

Copy link
Contributor

👀 Docs deployed

Commit c7d4d9b

@vkcom-publisher vkcom-publisher added the pr-needs-work Автоматизация: PR автоматически закроется через 14 дней при отсутствии активности label May 22, 2024
@vkcom-publisher
Copy link
Contributor

PR закрыт из-за отсутствия активности в течение последних 14 дней. Если это произошло по ошибке или изменения все ещё актуальны, откройте PR повторно.

@mendrew mendrew reopened this May 30, 2024
@mendrew mendrew added the no-stale Добавляет PR в исключения для автоматического закрытия label May 30, 2024
@inomdzhon
Copy link
Contributor Author

PR закрываю, т.к. это был эксперимент.

Вердикт – проблему на 💯 не решает, а Holy Grail это брейкинг чендж.

@inomdzhon inomdzhon closed this Jun 6, 2024
@inomdzhon inomdzhon deleted the imirdzhamolov/6588/PanelHeader/experiment branch June 6, 2024 14:29
@inomdzhon inomdzhon added cmp:panel-header and removed pr-needs-work Автоматизация: PR автоматически закроется через 14 дней при отсутствии активности no-stale Добавляет PR в исключения для автоматического закрытия labels Jun 6, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants