import { useMemo, useState } from 'react'; import { useAsync } from 'react-use'; import { ConfirmModal, EmptyState, LinkButton, TextLink } from '@grafana/ui'; import { Page } from 'app/core/components/Page/Page'; import PageActionBar from 'app/core/components/PageActionBar/PageActionBar'; import { Trans, t } from 'app/core/internationalization'; import { contextSrv } from 'app/core/services/context_srv'; import { PlaylistPageList } from './PlaylistPageList'; import { StartModal } from './StartModal'; import { getPlaylistAPI, searchPlaylists } from './api'; import { Playlist } from './types'; export const PlaylistPage = () => { const api = getPlaylistAPI(); const [forcePlaylistsFetch, setForcePlaylistsFetch] = useState(0); const [searchQuery, setSearchQuery] = useState(''); const allPlaylists = useAsync(() => api.getAllPlaylist(), [forcePlaylistsFetch]); const playlists = useMemo(() => searchPlaylists(allPlaylists.value ?? [], searchQuery), [searchQuery, allPlaylists]); const [startPlaylist, setStartPlaylist] = useState(); const [playlistToDelete, setPlaylistToDelete] = useState(); const hasPlaylists = playlists && playlists.length > 0; const onDismissDelete = () => setPlaylistToDelete(undefined); const onDeletePlaylist = () => { if (!playlistToDelete) { return; } api.deletePlaylist(playlistToDelete.uid).finally(() => { setForcePlaylistsFetch(forcePlaylistsFetch + 1); setPlaylistToDelete(undefined); }); }; const showSearch = allPlaylists.loading || playlists.length > 0 || searchQuery.length > 0; return ( New playlist ) : undefined } navId="dashboards/playlists" > {showSearch && } {allPlaylists.loading ? ( ) : ( <> {!hasPlaylists && searchQuery ? ( ) : ( )} {!showSearch && ( Create playlist } message={t('playlist-page.empty.title', 'There are no playlists created yet')} > You can use playlists to cycle dashboards on TVs without user control.{' '} Learn more )} {playlistToDelete && ( )} {startPlaylist && setStartPlaylist(undefined)} />} )} ); }; export default PlaylistPage;