Playlist: Split PlaylistItem into standalone TS type (#56343)

* playlist: Split PlaylistItem into standalone TS type

* update playlist model

* actually set the title

Co-authored-by: Ryan McKinley <ryantxu@gmail.com>
This commit is contained in:
sam boyer 2022-10-04 16:08:26 -04:00 committed by GitHub
parent 2c1c98f3b6
commit ba97b268d0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 40 additions and 30 deletions

View File

@ -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';

View File

@ -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<PlaylistItem>;
/**
* Name of the playlist.
*/

View File

@ -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")
}
]
}

View File

@ -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"`

View File

@ -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,

View File

@ -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[];
}