import React, { useMemo, useState } from 'react'; import { useAsync } from 'react-use'; import { ConfirmModal } from '@grafana/ui'; import EmptyListCTA from 'app/core/components/EmptyListCTA/EmptyListCTA'; import { Page } from 'app/core/components/Page/Page'; import PageActionBar from 'app/core/components/PageActionBar/PageActionBar'; import { contextSrv } from 'app/core/services/context_srv'; import { EmptyQueryListBanner } from './EmptyQueryListBanner'; import { PlaylistPageList } from './PlaylistPageList'; import { StartModal } from './StartModal'; import { deletePlaylist, getAllPlaylist, searchPlaylists } from './api'; import { Playlist } from './types'; export const PlaylistPage = () => { const [forcePlaylistsFetch, setForcePlaylistsFetch] = useState(0); const [searchQuery, setSearchQuery] = useState(''); const allPlaylists = useAsync(() => 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; } deletePlaylist(playlistToDelete.uid).finally(() => { setForcePlaylistsFetch(forcePlaylistsFetch + 1); setPlaylistToDelete(undefined); }); }; const emptyListBanner = ( ); const showSearch = playlists.length > 0 || searchQuery.length > 0; return ( {showSearch && ( )} {!hasPlaylists && searchQuery ? ( ) : ( )} {!showSearch && emptyListBanner} {playlistToDelete && ( )} {startPlaylist && setStartPlaylist(undefined)} />} ); }; export default PlaylistPage;