Skip to content

Conversation

@ShavrinAleksei
Copy link
Contributor

Описание изменений

Чек-лист

  • PR: направлен в правильную ветку
  • PR: назначен исполнитель PR и указаны нужные лейблы
  • PR: проверен diff, ничего лишнего в PR не попало
  • PR: прилинкованы затронутые issue и связанные PR
  • PR: есть описание изменений
  • JS: нет варнингов и ошибок в консоли браузера
  • Тесты: новый функционал и исправленные баги покрыты тестами
  • Документация: отражены все изменения в API компонентов и описаны важные особенности реализации или использования
  • Сторибук: для компонентов написаны или обновлены stories
  • Верстка: используются переменные
  • Верстка: проверена с разным количеством контента

Опционально

  • Доработки: заведены задачи для дальнейшей работы, если что-то решено не править в текущем пулл-реквесте
  • Коммиты: проименованы в соответствии с правилами

- Added `NavbarPropGetItemSubMenuOpen`
- Added `NavbarPropOnItemSubMenuToggle`
- Updated `NavbarProps` and `NavbarItemProps` to support controlled sub-menu behavior
- Pass `getItemSubMenuOpen` and `onItemSubMenuToggle` to `NavbarItem`
- Update `withDefaultGetters`
- Add controlled/uncontrolled logic via `getItemSubMenuOpen` and `onItemSubMenuToggle`
- Use external state when controlled, preserve local state otherwise
- Update click handlers and arrow toggle behavior
- Ensure backward compatibility
@ShavrinAleksei
Copy link
Contributor Author

Описание изменений
Реализована возможность контролируемого управления состоянием подменю (subMenu) в компоненте Navbar. Теперь можно управлять открытием/закрытием подменю через внешний стейт, сохраняя обратную совместимость с текущей реализацией.

Ключевые изменения

  1. Новая функциональность
  • Добавлены пропсы getItemSubMenuOpen и onItemSubMenuToggle для контролируемого управления состоянием подменю
  • Реализована гибридная логика: компонент работает в контролируемом режиме при передаче пропсов, и в неконтролируемом - при их отсутствии
  1. Добавлены TypeScript типы
  • NavbarPropGetItemSubMenuOpen
  • NavbarPropOnItemSubMenuToggle
  1. Обновлены NavbarProps и NavbarItemProps для поддержки новой функциональности

  2. Добавлены комплексные тесты для всех компонентов Navbar

  • Navbar (основной компонент)
  • NavbarItem (элемент навигации)
  • NavbarRail (рейл-контейнер)
  • NavbarRailItem (элемент рейла)
  • NavbarArrow (компонент стрелки)
  1. Настроена конфигурация Jest для тестовой среды

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

  • Добавлено описание новых пропсов и их использования
  • Приведены примеры реализации контролируемого состояния подменю
  1. Технические детали
  • Обновлена версия @consta/uikit
  • Удален неиспользуемый компонент NavbarDrawer
  • Добавлен тестовый скрипт в package.json

Закрыт issue: Navbar: управление состоянием подменю #4063


Для управления состоянием подменю (открыто/закрыто) используйте связку getItemSubMenuOpen и onSubMenuToggle. Это позволяет контролировать открытие подменю через внешний стейт, включая задание начального состояния.

```tsx
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

давай живой пример создадим который пощелкать можно будет.

менюха с 3мя пунктами

  • Пункт 1
  • Пункт 2
  • Пункт 3

и 3 кнопки

  • Открыть 1
  • Открыть 2
  • Открыть 3

если пункт открыт то кнопку переименуй в закрыть


export type NavbarPropGetItemSubMenuOpen<ITEM> = (
item: ITEM,
) => boolean | undefined;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

undefined думаю стоит убрать так как далее по логике у нас

const controlledOpen = getItemSubMenuOpen?.(item);

useEffect(() => {
    if (controlledOpen !== undefined) {
      setOpen.set(controlledOpen);
    }
  }, [controlledOpen]);

где если приходит undefined то мы считаем что контролировать пункт не надо и не будем синкать внутреннее состояние. А пользователь может подумать что если не true то будет закрываться, и отдаст undefined. Пусть будет строго boolean

@gizeasy gizeasy merged commit 520b94b into consta-design-system:dev Nov 10, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants