diff --git a/packages/grafana-schema/src/index.gen.ts b/packages/grafana-schema/src/index.gen.ts index 4ec9a38b62f..6b17d832f7a 100644 --- a/packages/grafana-schema/src/index.gen.ts +++ b/packages/grafana-schema/src/index.gen.ts @@ -76,7 +76,10 @@ export { } from './veneer/dashboard.types'; // Raw generated types from playlist entity type. -export type { Playlist } from './raw/playlist/x/playlist.gen'; +export type { + Playlist, + PlaylistItem +} from './raw/playlist/x/playlist.gen'; // Raw generated default consts from playlist entity type. export { defaultPlaylist } from './raw/playlist/x/playlist.gen'; diff --git a/packages/grafana-schema/src/raw/playlist/x/playlist.gen.ts b/packages/grafana-schema/src/raw/playlist/x/playlist.gen.ts index 73afa9d350f..ed13e0ef775 100644 --- a/packages/grafana-schema/src/raw/playlist/x/playlist.gen.ts +++ b/packages/grafana-schema/src/raw/playlist/x/playlist.gen.ts @@ -6,6 +6,28 @@ // // Run `make gen-cue` from repository root to regenerate. +export interface PlaylistItem { + /** + * Title is an unused property -- it will be removed in the future + */ + title?: string; + /** + * Type of the item. + */ + type: ('dashboard_by_uid' | 'dashboard_by_id' | 'dashboard_by_tag'); + /** + * Value depends on type and describes the playlist item. + * + * - dashboard_by_id: The value is an internal numerical identifier set by Grafana. This + * is not portable as the numerical identifier is non-deterministic between different instances. + * Will be replaced by dashboard_by_uid in the future. (deprecated) + * - dashboard_by_tag: The value is a tag which is set on any number of dashboards. All + * dashboards behind the tag will be added to the playlist. + * - dashboard_by_uid: The value is the dashboard UID + */ + value: string; +} + export interface Playlist { /** * Interval sets the time between switching views in a playlist. @@ -15,27 +37,7 @@ export interface Playlist { /** * The ordered list of items that the playlist will iterate over. */ - items?: Array<{ - /** - * Type of the item. - */ - type: ('dashboard_by_uid' | 'dashboard_by_id' | 'dashboard_by_tag'); - /** - * Value depends on type and describes the playlist item. - * - * - dashboard_by_id: The value is an internal numerical identifier set by Grafana. This - * is not portable as the numerical identifier is non-deterministic between different instances. - * Will be replaced by dashboard_by_uid in the future. (deprecated) - * - dashboard_by_tag: The value is a tag which is set on any number of dashboards. All - * dashboards behind the tag will be added to the playlist. - * - dashboard_by_uid: The value is the dashboard UID - */ - value: string; - /** - * Title is an unused property -- it will be removed in the future - */ - title: string; - }>; + items?: Array; /** * Name of the playlist. */ diff --git a/pkg/coremodel/playlist/coremodel.cue b/pkg/coremodel/playlist/coremodel.cue index f881798bade..4070cf3b848 100644 --- a/pkg/coremodel/playlist/coremodel.cue +++ b/pkg/coremodel/playlist/coremodel.cue @@ -39,10 +39,10 @@ seqs: [ // dashboards behind the tag will be added to the playlist. // - dashboard_by_uid: The value is the dashboard UID value: string - + // Title is an unused property -- it will be removed in the future - title: string - } + title?: string + } @cuetsy(kind="interface") } ] } diff --git a/pkg/coremodel/playlist/playlist_gen.go b/pkg/coremodel/playlist/playlist_gen.go index a742e99ac88..01f8fa2f044 100644 --- a/pkg/coremodel/playlist/playlist_gen.go +++ b/pkg/coremodel/playlist/playlist_gen.go @@ -52,7 +52,7 @@ type Model struct { // Equivalent Go types at stable import paths are provided in https://github.com/grafana/grok. type PlaylistItem struct { // Title is an unused property -- it will be removed in the future - Title string `json:"title"` + Title *string `json:"title,omitempty"` // Type of the item. Type PlaylistItemType `json:"type"` diff --git a/pkg/services/playlist/playlistimpl/playlist.go b/pkg/services/playlist/playlistimpl/playlist.go index 14854213b7a..b1778475539 100644 --- a/pkg/services/playlist/playlistimpl/playlist.go +++ b/pkg/services/playlist/playlistimpl/playlist.go @@ -55,6 +55,12 @@ func (s *Service) Get(ctx context.Context, q *playlist.GetPlaylistByUidQuery) (* for i := 0; i < len(rawItems); i++ { items[i].Type = playlist.PlaylistItemType(rawItems[i].Type) items[i].Value = rawItems[i].Value + + // Add the unused title to the result + title := rawItems[i].Title + if title != "" { + items[i].Title = &title + } } return &playlist.PlaylistDTO{ Uid: v.UID, diff --git a/public/app/features/playlist/types.ts b/public/app/features/playlist/types.ts index bf8f58bcb01..0856917c176 100644 --- a/public/app/features/playlist/types.ts +++ b/public/app/features/playlist/types.ts @@ -1,3 +1,5 @@ +import { PlaylistItem as PlaylistItemFromSchema } from '@grafana/schema/src/raw/playlist/x/playlist.gen'; + import { DashboardQueryResult } from '../search/service'; export type PlaylistMode = boolean | 'tv'; @@ -16,10 +18,7 @@ export interface Playlist { items?: PlaylistItem[]; } -export interface PlaylistItem { - type: 'dashboard_by_tag' | 'dashboard_by_uid' | 'dashboard_by_id'; // _by_id is deprecated - value: string; // tag or uid - +export interface PlaylistItem extends PlaylistItemFromSchema { // Loaded in the frontend dashboards?: DashboardQueryResult[]; }