Plugin Extensions: Move PanelMenu links into extensions submenu (#64599)

* feat(pluginextensions): move panel menu links into an extensions submenu

* refactor(pluginextensions): move extensions submenu above more... submenu

* test(panelmenu): fix failing tests after moving extensions out of more

* fix: fix rebase issues

---------

Co-authored-by: Levente Balogh <balogh.levente.hu@gmail.com>
This commit is contained in:
Jack Westbrook 2023-03-17 11:09:23 +01:00 committed by GitHub
parent 15804234d6
commit 595518ec12
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 38 additions and 27 deletions

View File

@ -126,7 +126,7 @@ describe('getPanelMenu()', () => {
const panel = new PanelModel({});
const dashboard = createDashboardModelFixture({});
const menuItems = getPanelMenu(dashboard, panel);
const moreSubMenu = menuItems.find((i) => i.text === 'More...')?.subMenu;
const moreSubMenu = menuItems.find((i) => i.text === 'Extensions')?.subMenu;
expect(moreSubMenu).toEqual(
expect.arrayContaining([
@ -154,7 +154,7 @@ describe('getPanelMenu()', () => {
const panel = new PanelModel({});
const dashboard = createDashboardModelFixture({});
const menuItems = getPanelMenu(dashboard, panel);
const moreSubMenu = menuItems.find((i) => i.text === 'More...')?.subMenu;
const moreSubMenu = menuItems.find((i) => i.text === 'Extensions')?.subMenu;
expect(moreSubMenu).toEqual(
expect.arrayContaining([
@ -193,7 +193,7 @@ describe('getPanelMenu()', () => {
const panel = new PanelModel({});
const dashboard = createDashboardModelFixture({});
const menuItems = getPanelMenu(dashboard, panel);
const moreSubMenu = menuItems.find((i) => i.text === 'More...')?.subMenu;
const moreSubMenu = menuItems.find((i) => i.text === 'Extensions')?.subMenu;
expect(moreSubMenu).toEqual(
expect.arrayContaining([
@ -224,7 +224,7 @@ describe('getPanelMenu()', () => {
const panel = new PanelModel({});
const dashboard = createDashboardModelFixture({});
const menuItems = getPanelMenu(dashboard, panel);
const moreSubMenu = menuItems.find((i) => i.text === 'More...')?.subMenu;
const moreSubMenu = menuItems.find((i) => i.text === 'Extensions')?.subMenu;
expect(moreSubMenu).toEqual(
expect.not.arrayContaining([

View File

@ -268,6 +268,40 @@ export function getPanelMenu(
});
}
const { extensions } = getPluginExtensions({
placement: PluginExtensionPlacements.DashboardPanelMenu,
context: createExtensionContext(panel, dashboard),
});
if (extensions.length > 0) {
const extensionsMenu: PanelMenuItem[] = [];
for (const extension of extensions) {
if (isPluginExtensionLink(extension)) {
extensionsMenu.push({
text: truncateTitle(extension.title, 25),
href: extension.path,
});
continue;
}
if (isPluginExtensionCommand(extension)) {
extensionsMenu.push({
text: truncateTitle(extension.title, 25),
onClick: extension.callHandlerWithContext,
});
continue;
}
}
menu.push({
text: 'Extensions',
iconClassName: 'plug',
type: 'submenu',
subMenu: extensionsMenu,
});
}
if (dashboard.canEditPanel(panel) && !panel.isEditing && !panel.isViewing) {
menu.push({ type: 'divider', text: '' });
@ -279,29 +313,6 @@ export function getPanelMenu(
});
}
const { extensions } = getPluginExtensions({
placement: PluginExtensionPlacements.DashboardPanelMenu,
context: createExtensionContext(panel, dashboard),
});
for (const extension of extensions) {
if (isPluginExtensionLink(extension)) {
subMenu.push({
text: truncateTitle(extension.title, 25),
href: extension.path,
});
continue;
}
if (isPluginExtensionCommand(extension)) {
subMenu.push({
text: truncateTitle(extension.title, 25),
onClick: extension.callHandlerWithContext,
});
continue;
}
}
return menu;
}