import { css } from '@emotion/css'; import React, { FC, memo, useState } from 'react'; import { GrafanaTheme } from '@grafana/data'; import { FilterInput, Spinner, stylesFactory, useTheme } from '@grafana/ui'; import EmptyListCTA from 'app/core/components/EmptyListCTA/EmptyListCTA'; import { contextSrv } from 'app/core/services/context_srv'; import { FolderDTO } from 'app/types'; import { useManageDashboards } from '../hooks/useManageDashboards'; import { useSearchQuery } from '../hooks/useSearchQuery'; import { SearchLayout } from '../types'; import { ConfirmDeleteModal } from './ConfirmDeleteModal'; import { DashboardActions } from './DashboardActions'; import { MoveToFolderModal } from './MoveToFolderModal'; import { SearchResults } from './SearchResults'; import { SearchResultsFilter } from './SearchResultsFilter'; export interface Props { folder?: FolderDTO; } const { isEditor } = contextSrv; export const ManageDashboards: FC = memo(({ folder }) => { const folderId = folder?.id; const folderUid = folder?.uid; const theme = useTheme(); const styles = getStyles(theme); const [isDeleteModalOpen, setIsDeleteModalOpen] = useState(false); const [isMoveModalOpen, setIsMoveModalOpen] = useState(false); const defaultLayout = folderId ? SearchLayout.List : SearchLayout.Folders; const queryParamsDefaults = { skipRecent: true, skipStarred: true, folderIds: folderId ? [folderId] : [], layout: defaultLayout, }; const { query, hasFilters, onQueryChange, onTagFilterChange, onStarredFilterChange, onTagAdd, onSortChange, onLayoutChange, } = useSearchQuery(queryParamsDefaults); const { results, loading, initialLoading, canSave, allChecked, hasEditPermissionInFolders, canMove, canDelete, onToggleSection, onToggleChecked, onToggleAllChecked, onDeleteItems, onMoveItems, noFolders, showPreviews, setShowPreviews, } = useManageDashboards(query, {}, folder); const onMoveTo = () => { setIsMoveModalOpen(true); }; const onItemDelete = () => { setIsDeleteModalOpen(true); }; if (initialLoading) { return ; } if (noFolders && !hasFilters) { return ( ); } return (
setIsDeleteModalOpen(false)} /> setIsMoveModalOpen(false)} />
); }); ManageDashboards.displayName = 'ManageDashboards'; export default ManageDashboards; const getStyles = stylesFactory((theme: GrafanaTheme) => { return { container: css` height: 100%; display: flex; flex-direction: column; `, results: css` display: flex; flex-direction: column; flex: 1 1 0; height: 100%; padding-top: ${theme.spacing.lg}; `, spinner: css` display: flex; justify-content: center; align-items: center; min-height: 200px; `, }; });