diff --git a/public/app/features/dashboard-scene/scene/DashboardScene.tsx b/public/app/features/dashboard-scene/scene/DashboardScene.tsx index 30ed8897580..22d02daf1e4 100644 --- a/public/app/features/dashboard-scene/scene/DashboardScene.tsx +++ b/public/app/features/dashboard-scene/scene/DashboardScene.tsx @@ -218,6 +218,25 @@ export class DashboardScene extends SceneObjectBase { this.setState({ overlay: undefined }); } + public async onStarDashboard() { + const { meta, uid } = this.state; + if (!uid) { + return; + } + try { + const result = await getDashboardSrv().starDashboard(uid, Boolean(meta.isStarred)); + + this.setState({ + meta: { + ...meta, + isStarred: result, + }, + }); + } catch (err) { + console.error('Failed to star dashboard', err); + } + } + /** * Called by the SceneQueryRunner to privide contextural parameters (tracking) props for the request */ diff --git a/public/app/features/dashboard-scene/scene/NavToolbarActions.tsx b/public/app/features/dashboard-scene/scene/NavToolbarActions.tsx index 2a634c2b5c5..a4db6e15024 100644 --- a/public/app/features/dashboard-scene/scene/NavToolbarActions.tsx +++ b/public/app/features/dashboard-scene/scene/NavToolbarActions.tsx @@ -16,10 +16,28 @@ interface Props { } export const NavToolbarActions = React.memo(({ dashboard }) => { - const { actions = [], isEditing, viewPanelKey, isDirty, uid } = dashboard.useState(); + const { actions = [], isEditing, viewPanelKey, isDirty, uid, meta } = dashboard.useState(); const toolbarActions = (actions ?? []).map((action) => ); if (uid) { + if (meta.canStar) { + let desc = meta.isStarred + ? t('dashboard.toolbar.unmark-favorite', 'Unmark as favorite') + : t('dashboard.toolbar.mark-favorite', 'Mark as favorite'); + + toolbarActions.push( + { + dashboard.onStarDashboard(); + }} + /> + ); + } toolbarActions.push(