diff --git a/public/app/features/dashboard-scene/scene/DashboardScene.tsx b/public/app/features/dashboard-scene/scene/DashboardScene.tsx index be793d5f1d1..f918af82afa 100644 --- a/public/app/features/dashboard-scene/scene/DashboardScene.tsx +++ b/public/app/features/dashboard-scene/scene/DashboardScene.tsx @@ -589,13 +589,14 @@ export class DashboardScene extends SceneObjectBase impleme this.setState({ overlay: undefined }); } - public async onStarDashboard() { + public async onStarDashboard(isStarred?: boolean) { const { meta, uid } = this.state; + isStarred = isStarred ?? Boolean(meta.isStarred); if (!uid) { return; } try { - const result = await getDashboardSrv().starDashboard(uid, Boolean(meta.isStarred)); + const result = await getDashboardSrv().starDashboard(uid, isStarred); this.setState({ meta: { diff --git a/public/app/features/stars/StarToolbarButton.tsx b/public/app/features/stars/StarToolbarButton.tsx index b8c3a612f6c..3a9949ed42a 100644 --- a/public/app/features/stars/StarToolbarButton.tsx +++ b/public/app/features/stars/StarToolbarButton.tsx @@ -1,8 +1,9 @@ import { useMemo } from 'react'; +import { useAsyncRetry } from 'react-use'; import { selectors } from '@grafana/e2e-selectors'; import { t } from '@grafana/i18n'; -import { config } from '@grafana/runtime'; +import { config, getBackendSrv } from '@grafana/runtime'; import { Icon, ToolbarButton } from '@grafana/ui'; import { useAddStarMutation, useRemoveStarMutation, useListStarsQuery } from 'app/api/clients/preferences/v1alpha1'; import { contextSrv } from 'app/core/core'; @@ -63,18 +64,29 @@ export function StarToolbarButtonApiServer({ group, kind, id }: Pick { + return getBackendSrv().get('api/user/stars'); + }); + + if (!starredUids || !uid) { + return null; + } + + const isStarred = starredUids?.includes(uid); return ( } data-testid={selectors.components.NavToolbar.markAsFavorite} - onClick={() => { + onClick={async () => { DashboardInteractions.toolbarFavoritesClick(); - dashboard.onStarDashboard(); + await dashboard.onStarDashboard(isStarred); + retry(); }} /> );