Type Alias: ContextMenuItem
ContextMenuItem =
SimpleContextMenuItem|ContextMenuItemWithDropdown
Объединённый тип для всех поддерживаемых вариантов элементов контекстного меню.
Представляет собой union type, который позволяет использовать любой из поддерживаемых типов элементов контекстного меню в методах ContextMenuApi.addItems.
Remarks
Поддерживаемые типы:
| Тип | Описание | Использование |
|---|---|---|
| SimpleContextMenuItem | Простой пункт без подменю | Прямые действия |
| ContextMenuItemWithDropdown | Пункт с выпадающим подменю | Группировка действий |
Как работает union type:
ContextMenuItemможет быть либоSimpleContextMenuItem, либоContextMenuItemWithDropdown- TypeScript автоматически проверяет тип при использовании
- В runtime можно проверить наличие свойства
itemsдля определения типа
Иерархия типов:
ContextMenuItem (текущий union type)
├── SimpleContextMenuItem
│ └── extends BaseContextMenuItem
│ ├── extends BaseControl
│ └── extends MayHaveIcon
│ └── onClick: Callback (обязательно)
│
└── ContextMenuItemWithDropdown
└── extends BaseContextMenuItem
├── extends BaseControl
└── extends MayHaveIcon
└── items: ContextMenuItem[] (обязательно)
Общие свойства для всех типов:
id— уникальный идентификатор элементаtitle— текст, отображаемый в менюicon?— иконка элемента (опционально)shownInScopes?— условия видимости (опционально)disabledInScopes?— условия отключения (опционально)groupingId?— ID группы для группировки (опционально)
Различия между типами:
SimpleContextMenuItem:
onClick: Callback— обработчик клика (обязательно)- Нет свойства
items - Используется для прямых действий
- Одиночный пункт меню
ContextMenuItemWithDropdown:
items: ContextMenuItem[]— массив вложенных элементов (обязательно)- Нет свойства
onClickна главном уровне - Используется для группировки связанных действий
- Имеет подменю с дополнительными опциями
Example
Использование SimpleContextMenuItem
const menuItem: ContextMenuItem = {
id: 'plugin:action',
title: 'Простое действие',
onClick: editorApi.createCallback(() => {
console.log('Действие выполнено');
})
};
editorApi.ui.contextMenu.addItems([menuItem]);
Использование ContextMenuItemWithDropdown
const menuItem: ContextMenuItem = {
id: 'plugin:export',
title: 'Экспортировать',
icon: 'Download',
items: [
{
id: 'plugin:export-pdf',
title: 'В PDF',
onClick: editorApi.createCallback(() => {})
},
{
id: 'plugin:export-html',
title: 'В HTML',
onClick: editorApi.createCallback(() => {})
}
]
};
editorApi.ui.contextMenu.addItems([menuItem]);
Смешивание типов в одном массиве
const menuItems: ContextMenuItem[] = [
// SimpleContextMenuItem
{
id: 'plugin:copy',
title: 'Копировать',
onClick: editorApi.createCallback(async () => {
await editorApi.document.clipboard.copy();
})
},
// ContextMenuItemWithDropdown
{
id: 'plugin:export',
title: 'Экспортировать',
items: [
{
id: 'plugin:export-pdf',
title: 'PDF',
onClick: editorApi.createCallback(() => {})
}
]
},
// Ещё SimpleContextMenuItem
{
id: 'plugin:paste',
title: 'Вставить',
onClick: editorApi.createCallback(async () => {
await editorApi.document.clipboard.paste();
})
}
];
editorApi.ui.contextMenu.addItems(menuItems);
See
- SimpleContextMenuItem — простой пункт без подменю
- ContextMenuItemWithDropdown — пункт с выпадающим подменю
- BaseContextMenuItem — базовые свойства элемента
- ContextMenuApi.addItems — как регистрировать элементы
- ContextMenuApi.removeItems — как удалять элементы