Type Alias: ContextMenuItemWithDropdown
ContextMenuItemWithDropdown =
BaseContextMenuItem&object
Элемент контекстного меню с вложенным выпадающим списком (каскадное меню).
Представляет собой пункт меню, при наведении или клике на который открывается подменю с дополнительными опциями. Используется для организации связанных действий.
Наследует все свойства от BaseContextMenuItem и добавляет массив вложенных элементов ContextMenuItemWithDropdown.items.
Type declaration
items
items:
ContextMenuItem[]
Массив вложенных элементов второго уровня (подменю).
Содержит элементы, которые будут отображены в выпадающем подменю при наведении или клике на родительский пункт.
Remarks
Допустимые типы вложенных элементов:
- SimpleContextMenuItem — простые пункты меню
Порядок элементов:
- Элементы отображаются в том же порядке, что и в массиве
- Порядок можно изменять, переупорядочивая элементы в items
- Пункты с одинаковым groupingId автоматически группируются
Наследование условий видимости:
- Если родительский пункт скрыт (shownInScopes не совпадает), то и подменю скрыто
- Если родительский пункт отключен (disabledInScopes совпадает), то и подменю недоступно
- Вложенные элементы могут иметь свои shownInScopes и disabledInScopes
Example
Простой массив подменю
const dropdown: ContextMenuItemWithDropdown = {
id: 'plugin:export',
title: 'Экспортировать',
items: [
{
id: 'plugin:export-pdf',
title: 'PDF',
onClick: editorApi.createCallback(() => {})
},
{
id: 'plugin:export-html',
title: 'HTML',
onClick: editorApi.createCallback(() => {})
}
]
};
See
- ContextMenuItem — полное описание всех типов элементов
- SimpleContextMenuItem — для простых пунктов
- BaseContextMenuItem.shownInScopes — условная видимость
- BaseContextMenuItem.disabledInScopes — условное отключение
Remarks
Иерархия типов:
ContextMenuItemWithDropdown (текущий тип)
└── extends BaseContextMenuItem
│ ├── extends BaseControl
│ │ ├── id: string (обязательно)
│ │ ├── title: string (обязательно)
│ │ └── ...
│ └── extends MayHaveIcon
│ └── icon?: string (опционально)
└── items: ContextMenuItem[] (обязательно)
Ключевые отличия от других типов:
SimpleContextMenuItem— простой пункт без подменюContextMenuItemWithDropdown— пункт с выпадающим подменю (текущий)
Структура вложенного подменю:
- Может содержать SimpleContextMenuItem (обычные пункты)
- Может содержать ContextMenuItemWithDropdown (вложенные подменю)
- Максимум вложенности: 1 уровень
Когда использовать ContextMenuItemWithDropdown:
- Для группировки связанных действий (Экспорт, Трансформация, Анализ)
- Когда действий много и нужна хорошая организация
- Когда нужна структура "Действие → Способ/Тип"
Поведение при отображении:
- Пункт отображается с указателем (стрелка) обозначающим наличие подменю
- При наведении мышки или клике открывается подменю
- Подменю закрывается при клике вне меню
- На мобильных устройствах: требуется клик для открытия подменю
Рекомендации дизайна:
- Максимум 5-7 пунктов в подменю
- Используйте понятные названия категорий
- Используйте группировку логически связанных пунктов подменю
- Добавляйте иконки для быстрого распознавания
Example
Выпадающее меню "Экспортировать" с тремя пунктами
const exportMenu: ContextMenuItemWithDropdown = {
id: 'plugin:export',
title: 'Экспортировать',
icon: 'Download',
items: [
{
id: 'plugin:export-pdf',
title: 'Экспортировать в PDF',
onClick: editorApi.createCallback(async () => {
editorApi.ui.toasts.showToast({ id, content: 'Экспорт в PDF...' });
// экспорт в PDF
})
},
{
id: 'plugin:export-html',
title: 'Экспортировать в HTML',
onClick: editorApi.createCallback(async () => {
editorApi.ui.toasts.showToast({ id, content: 'Экспорт в HTML...' });
// экспорт в HTML
})
},
{
id: 'plugin:export-markdown',
title: 'Экспортировать в Markdown',
onClick: editorApi.createCallback(async () => {
editorApi.ui.toasts.showToast({ id, content: 'Экспорт в Markdown...' });
// экспорт в Markdown
})
}
]
};
editorApi.ui.contextMenu.addItems([exportMenu]);
Выпадающее меню с условной видимостью
const conditionalMenu: ContextMenuItemWithDropdown = {
id: 'plugin:text-transform',
title: 'Трансформировать текст',
icon: 'TextTransform',
shownInScopes: [
{ scope: 'text' },
{ scope: 'selection' }
],
items: [ /* пункты подменю */ ]
};
Выпадающее меню, недоступное внутри таблиц
const conditionalMenu: ContextMenuItemWithDropdown = {
id: 'plugin:text-transform',
title: 'Трансформировать текст',
icon: 'TextTransform',
disabledInScopes: [
{ scope: 'table' },
{ parentScope: 'table' }
],
items: [ /* пункты подменю */ ]
};
See
- BaseContextMenuItem — наследуемые свойства
- SimpleContextMenuItem — простой пункт без подменю
- ContextMenuItem — объединение всех типов элементов меню
- ContextMenuApi — API управления контекстным меню