diff --git a/public/app/features/browse-dashboards/components/BrowseActions/BrowseActions.tsx b/public/app/features/browse-dashboards/components/BrowseActions/BrowseActions.tsx index d881d07f863..fb6bc9a1e4a 100644 --- a/public/app/features/browse-dashboards/components/BrowseActions/BrowseActions.tsx +++ b/public/app/features/browse-dashboards/components/BrowseActions/BrowseActions.tsx @@ -3,6 +3,7 @@ import { useState } from 'react'; import { Trans, t } from '@grafana/i18n'; import { config, reportInteraction } from '@grafana/runtime'; import { Button, Drawer, Stack, Text } from '@grafana/ui'; +import { useGetFrontendSettingsQuery } from 'app/api/clients/provisioning/v0alpha1'; import { appEvents } from 'app/core/app_events'; import { ManagerKind } from 'app/features/apiserver/types'; import { BulkDeleteProvisionedResource } from 'app/features/provisioning/components/BulkActions/BulkDeleteProvisionedResource'; @@ -20,7 +21,7 @@ import { useMoveMultipleFoldersMutationFacade, } from '../../../../api/clients/folder/v1beta1/hooks'; import { useDeleteDashboardsMutation, useMoveDashboardsMutation } from '../../api/browseDashboardsAPI'; -import { useActionSelectionState, useCheckboxSelectionState } from '../../state/hooks'; +import { useActionSelectionState } from '../../state/hooks'; import { setAllSelection } from '../../state/slice'; import { DashboardTreeSelection } from '../../types'; @@ -38,8 +39,7 @@ export function BrowseActions({ folderDTO }: Props) { const [showBulkExportProvisionedResource, setShowBulkExportProvisionedResource] = useState(false); const dispatch = useDispatch(); - const selectedItemsForActions = useActionSelectionState(); // For move/delete - filters out children - const selectedItems = useCheckboxSelectionState(); // For export - includes all selected items + const selectedItems = useActionSelectionState(); const [deleteDashboards] = useDeleteDashboardsMutation(); const deleteFolders = useDeleteMultipleFoldersMutationFacade(); const [moveFolders] = useMoveMultipleFoldersMutationFacade(); @@ -48,10 +48,12 @@ export function BrowseActions({ folderDTO }: Props) { const provisioningEnabled = config.featureToggles.provisioning; const { hasProvisioned, hasNonProvisioned } = useSelectionProvisioningStatus( - selectedItemsForActions, + selectedItems, folderDTO?.managedBy === ManagerKind.Repo ); const { hasUnmanaged, isLoading: isLoadingUnmanaged } = useSelectionUnmanagedStatus(selectedItems); + const { data: frontendSettings, isLoading: isLoadingSettings } = useGetFrontendSettingsQuery(); + const hasRepositories = (frontendSettings?.items?.length ?? 0) > 0; const isSearching = stateManager.hasSearchFilters(); @@ -65,29 +67,21 @@ export function BrowseActions({ folderDTO }: Props) { }; const onDelete = async () => { - const selectedDashboards = Object.keys(selectedItemsForActions.dashboard).filter( - (uid) => selectedItemsForActions.dashboard[uid] - ); - const selectedFolders = Object.keys(selectedItemsForActions.folder).filter( - (uid) => selectedItemsForActions.folder[uid] - ); + const selectedDashboards = Object.keys(selectedItems.dashboard).filter((uid) => selectedItems.dashboard[uid]); + const selectedFolders = Object.keys(selectedItems.folder).filter((uid) => selectedItems.folder[uid]); await deleteDashboards({ dashboardUIDs: selectedDashboards }); await deleteFolders({ folderUIDs: selectedFolders }); - trackAction('delete', selectedItemsForActions); + trackAction('delete', selectedItems); onActionComplete(); }; const onMove = async (destinationUID: string) => { - const selectedDashboards = Object.keys(selectedItemsForActions.dashboard).filter( - (uid) => selectedItemsForActions.dashboard[uid] - ); - const selectedFolders = Object.keys(selectedItemsForActions.folder).filter( - (uid) => selectedItemsForActions.folder[uid] - ); + const selectedDashboards = Object.keys(selectedItems.dashboard).filter((uid) => selectedItems.dashboard[uid]); + const selectedFolders = Object.keys(selectedItems.folder).filter((uid) => selectedItems.folder[uid]); await moveFolders({ folderUIDs: selectedFolders, destinationUID }); await moveDashboards({ dashboardUIDs: selectedDashboards, destinationUID }); - trackAction('move', selectedItemsForActions); + trackAction('move', selectedItems); onActionComplete(); }; @@ -147,6 +141,11 @@ export function BrowseActions({ folderDTO }: Props) { } }; + const showExportModal = () => { + trackAction('export', selectedItems); + setShowBulkExportProvisionedResource(true); + }; + const moveButton = ( @@ -172,7 +170,7 @@ export function BrowseActions({ folderDTO }: Props) { <> {moveButton} - {provisioningEnabled && pushButton} + {provisioningEnabled && exportButton}