import { useState, useCallback } from 'react'; import useAsync from 'react-use/lib/useAsync'; import { config } from '@grafana/runtime'; import { ConfirmModal, EmptyState, ScrollContainer, TextLink } from '@grafana/ui'; import { Trans, t } from 'app/core/internationalization'; import { getDashboardSnapshotSrv, Snapshot } from 'app/features/dashboard/services/SnapshotSrv'; import { SnapshotListTableRow } from './SnapshotListTableRow'; export async function getSnapshots() { return getDashboardSnapshotSrv() .getSnapshots() .then((result: Snapshot[]) => { return result.map((snapshot) => ({ ...snapshot, url: `${config.appUrl}dashboard/snapshot/${snapshot.key}`, })); }); } export const SnapshotListTable = () => { const [snapshots, setSnapshots] = useState([]); const [isFetching, setIsFetching] = useState(false); const [removeSnapshot, setRemoveSnapshot] = useState(); useAsync(async () => { setIsFetching(true); const response = await getSnapshots(); setIsFetching(false); setSnapshots(response); }, [setSnapshots]); const doRemoveSnapshot = useCallback( async (snapshot: Snapshot) => { const filteredSnapshots = snapshots.filter((ss) => ss.key !== snapshot.key); setSnapshots(filteredSnapshots); await getDashboardSnapshotSrv() .deleteSnapshot(snapshot.key) .catch(() => { setSnapshots(snapshots); }); }, [snapshots] ); if (!isFetching && snapshots.length === 0) { return ( You can create a snapshot of any dashboard through the Share modal.{' '} Learn more ); } return ( {isFetching ? ( <> ) : ( snapshots.map((snapshot) => ( setRemoveSnapshot(snapshot)} /> )) )}
Name Snapshot url
setRemoveSnapshot(undefined)} onConfirm={() => { doRemoveSnapshot(removeSnapshot!); setRemoveSnapshot(undefined); }} />
); };