Перейти к основному содержимому
Версия: Next

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