Skip to content

feat(useSnackbar): add snackbar manager#8839

Merged
EldarMuhamethanov merged 82 commits intomasterfrom
e.muhamethanov/use-snackbar-hook
Dec 18, 2025
Merged

feat(useSnackbar): add snackbar manager#8839
EldarMuhamethanov merged 82 commits intomasterfrom
e.muhamethanov/use-snackbar-hook

Conversation

@EldarMuhamethanov
Copy link
Contributor

@EldarMuhamethanov EldarMuhamethanov commented Aug 6, 2025

  • Unit-тесты
  • e2e-тесты
  • Документация фичи
  • Release notes

Описание

Добавлен новый хук useSnackbarManager для централизованного управления снекбарами в приложении. Хук предоставляет удобный API для открытия, закрытия и обновления снекбаров, поддерживает очередь снекбаров с настраиваемым лимитом и стратегией переполнения, а также позволяет создавать кастомные снекбары.

В рамках этой работы также переименовано свойство onClose в onClosed в компоненте Snackbar для улучшения семантики (обработчик теперь вызывается после окончания анимации закрытия, а не в момент начала закрытия). Для автоматической миграции добавлен codemod.

Изменения

Новый хук useSnackbarManager

  • Добавлен хук useSnackbarManager с полным API для управления снекбарами:

    • open(config) - открытие снекбара с конфигурацией
    • openCustom(payload) - открытие кастомного снекбара с произвольным компонентом
    • update(id, config) - обновление свойств существующего снекбара
    • close(id) - закрытие снекбара по ID
    • closeAll() - закрытие всех снекбаров
    • Методы для настройки: setLimit, setQueueStrategy, setVerticalOffsetYStart, setVerticalOffsetYEnd, setZIndex
  • Реализована система управления состоянием снекбаров через store с подписками

  • Добавлена поддержка очереди снекбаров с двумя стратегиями: queue (ожидание места) и shift (закрытие старых)

  • Реализована поддержка кастомных снекбаров через openCustom

  • Добавлены компоненты SnackbarsContainer и SnackbarAnimatedWrapper для отображения снекбаров

  • Добавлен контекст SnackbarsContainerContext для интеграции снекбаров с менеджером

Изменения в компоненте Snackbar

  • Переименовано свойство onClose в onClosed (breaking change)
  • onClosed теперь вызывается после окончания анимации закрытия (ранее onClose вызывался в момент начала закрытия)
  • Добавлена поддержка работы внутри SnackbarsContainer через контекст
  • Обновлены стили для поддержки как фиксированного позиционирования (standalone), так и работы внутри контейнера

Codemod для миграции

  • Добавлен codemod snackbar для автоматического переименования onClose в onClosed во всех использованиях компонента Snackbar

Документация

  • Добавлена документация для хука useSnackbarManager с примерами использования
  • Добавлены примеры работы с кастомными снекбарами
  • Обновлена документация компонента Snackbar с упоминанием нового хука

Вспомогательные изменения

  • Обновлен хук useCSSKeyframesAnimationController для поддержки stopPropagation
  • Добавлена зависимость uuid для генерации уникальных ID снекбаров
  • Обновлены все использования Snackbar в кодовой базе для использования нового API

Release notes

Новые компоненты

  • useSnackbarManager: хук для централизованного управления снекбарами в приложении

    Хук предоставляет удобный API для работы со снекбарами: открытие, закрытие, обновление, поддержка очереди с настраиваемым лимитом и стратегией переполнения. Также поддерживает создание кастомных снекбаров с произвольным компонентом.

BREAKING CHANGE

  • Snackbar: переименовано свойство onClose в onClosed

    Свойство onClose переименовано в onClosed для улучшения семантики. Обработчик onClosed вызывается после окончания анимации закрытия снекбара, а не в момент начала закрытия.
    Пример миграции:

    - <Snackbar onClose={() => setSnackbar(null)}>
    + <Snackbar onClosed={() => setSnackbar(null)}>
      Message
    </Snackbar>

# Conflicts:
#	packages/vkui/src/components/Snackbar/Snackbar.stories.tsx
# Conflicts:
#	packages/vkui/src/components/Snackbar/Snackbar.tsx
# Conflicts:
#	packages/vkui/src/components/ModalCardBase/ModalCardBase.tsx
@EldarMuhamethanov EldarMuhamethanov self-assigned this Aug 6, 2025
@EldarMuhamethanov EldarMuhamethanov requested a review from a team as a code owner August 6, 2025 10:25
@EldarMuhamethanov EldarMuhamethanov marked this pull request as draft August 6, 2025 10:25
@EldarMuhamethanov EldarMuhamethanov added the no-stale Добавляет PR в исключения для автоматического закрытия label Aug 6, 2025
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.

ну-с, с Богом 🫡

@EldarMuhamethanov EldarMuhamethanov merged commit e00c51b into master Dec 18, 2025
29 checks passed
@EldarMuhamethanov EldarMuhamethanov deleted the e.muhamethanov/use-snackbar-hook branch December 18, 2025 14:44
@github-project-automation github-project-automation bot moved this from 👀 In Review to ✅ Done in VKUI Dec 18, 2025
@inomdzhon inomdzhon added the v8 label Dec 19, 2025
@inomdzhon inomdzhon mentioned this pull request Feb 4, 2026
5 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

cmp:snackbar no-stale Добавляет PR в исключения для автоматического закрытия type:feature

Projects

Status: ✅ Done

Development

Successfully merging this pull request may close these issues.

4 participants