From 527071aed6fdde4fbcc75cf2d5027f7b510bc09d Mon Sep 17 00:00:00 2001 From: Sergej-Vlasov <37613182+Sergej-Vlasov@users.noreply.github.com> Date: Tue, 2 Jul 2024 13:36:14 +0300 Subject: [PATCH] DashboardScene: Disable edit related shortcuts for Viewer (#89936) check if can edit before adding edit shortcuts --- .../scene/keyboardShortcuts.ts | 91 ++++++++++--------- 1 file changed, 48 insertions(+), 43 deletions(-) diff --git a/public/app/features/dashboard-scene/scene/keyboardShortcuts.ts b/public/app/features/dashboard-scene/scene/keyboardShortcuts.ts index b5282772143..b88bd57d422 100644 --- a/public/app/features/dashboard-scene/scene/keyboardShortcuts.ts +++ b/public/app/features/dashboard-scene/scene/keyboardShortcuts.ts @@ -16,6 +16,8 @@ export function setupKeyboardShortcuts(scene: DashboardScene) { const keybindings = new KeybindingSet(); let vizPanelKey: string | null = null; + const canEdit = scene.canEditDashboard(); + const panelAttentionSubscription = appEvents.subscribe(SetPanelAttentionEvent, (event) => { if (typeof event.payload.panelId === 'string') { vizPanelKey = event.payload.panelId; @@ -42,20 +44,6 @@ export function setupKeyboardShortcuts(scene: DashboardScene) { }), }); - // Panel edit - keybindings.addBinding({ - key: 'e', - onTrigger: withFocusedPanel(scene, async (vizPanel: VizPanel) => { - const sceneRoot = vizPanel.getRoot(); - if (sceneRoot instanceof DashboardScene) { - const panelId = getPanelIdForVizPanel(vizPanel); - if (!scene.state.editPanel) { - locationService.push(getEditPanelUrl(panelId)); - } - } - }), - }); - // Panel share keybindings.addBinding({ key: 'p s', @@ -133,38 +121,55 @@ export function setupKeyboardShortcuts(scene: DashboardScene) { }, }); - // Dashboard settings - keybindings.addBinding({ - key: 'd s', - onTrigger: scene.onOpenSettings, - }); + if (canEdit) { + // Panel edit + keybindings.addBinding({ + key: 'e', + onTrigger: withFocusedPanel(scene, async (vizPanel: VizPanel) => { + const sceneRoot = vizPanel.getRoot(); + if (sceneRoot instanceof DashboardScene) { + const panelId = getPanelIdForVizPanel(vizPanel); + if (!scene.state.editPanel) { + locationService.push(getEditPanelUrl(panelId)); + } + } + }), + }); - keybindings.addBinding({ - key: 'mod+s', - onTrigger: () => scene.openSaveDrawer({}), - }); + // Dashboard settings + keybindings.addBinding({ + key: 'd s', + onTrigger: scene.onOpenSettings, + }); + + // Open save drawer + keybindings.addBinding({ + key: 'mod+s', + onTrigger: () => scene.openSaveDrawer({}), + }); + + // delete panel + keybindings.addBinding({ + key: 'p r', + onTrigger: withFocusedPanel(scene, (vizPanel: VizPanel) => { + if (scene.state.isEditing) { + onRemovePanel(scene, vizPanel); + } + }), + }); + + // duplicate panel + keybindings.addBinding({ + key: 'p d', + onTrigger: withFocusedPanel(scene, (vizPanel: VizPanel) => { + if (scene.state.isEditing) { + scene.duplicatePanel(vizPanel); + } + }), + }); + } // toggle all panel legends (TODO) - // delete panel - keybindings.addBinding({ - key: 'p r', - onTrigger: withFocusedPanel(scene, (vizPanel: VizPanel) => { - if (scene.state.isEditing) { - onRemovePanel(scene, vizPanel); - } - }), - }); - - // duplicate panel - keybindings.addBinding({ - key: 'p d', - onTrigger: withFocusedPanel(scene, (vizPanel: VizPanel) => { - if (scene.state.isEditing) { - scene.duplicatePanel(vizPanel); - } - }), - }); - // toggle all exemplars (TODO) // collapse all rows (TODO) // expand all rows (TODO)