make submenus static

related to #107903
This commit is contained in:
João Moreno 2020-10-05 17:52:47 +02:00
parent f88b86d714
commit f76edc7e68
2 changed files with 20 additions and 21 deletions

View file

@ -234,15 +234,13 @@ export class Separator extends Action {
}
}
export type SubmenuActions = IAction[] | (() => IAction[]);
export class SubmenuAction extends Action {
get actions(): IAction[] {
return Array.isArray(this._actions) ? this._actions : this._actions();
return this._actions;
}
constructor(id: string, label: string, private _actions: SubmenuActions, cssClass?: string) {
constructor(id: string, label: string, private _actions: IAction[], cssClass?: string) {
super(id, label, cssClass, true);
}
}

View file

@ -302,33 +302,34 @@ export class ExecuteCommandAction extends Action {
export class SubmenuItemAction extends SubmenuAction {
readonly item: ISubmenuItem;
constructor(
readonly item: ISubmenuItem,
item: ISubmenuItem,
menuService: IMenuService,
contextKeyService: IContextKeyService,
options?: IMenuActionOptions
) {
super(`submenuitem.${item.submenu.id}`, typeof item.title === 'string' ? item.title : item.title.value, () => {
const result: IAction[] = [];
const menu = menuService.createMenu(item.submenu, contextKeyService);
const groups = menu.getActions(options);
menu.dispose();
const result: IAction[] = [];
const menu = menuService.createMenu(item.submenu, contextKeyService);
const groups = menu.getActions(options);
menu.dispose();
for (let group of groups) {
const [, actions] = group;
for (let group of groups) {
const [, actions] = group;
if (actions.length > 0) {
result.push(...actions);
result.push(new Separator());
}
if (actions.length > 0) {
result.push(...actions);
result.push(new Separator());
}
}
if (result.length) {
result.pop(); // remove last separator
}
if (result.length) {
result.pop(); // remove last separator
}
return result;
}, 'submenu');
super(`submenuitem.${item.submenu.id}`, typeof item.title === 'string' ? item.title : item.title.value, result, 'submenu');
this.item = item;
}
}