import React, { FC, useState, useCallback, useEffect } from 'react'; import { ConfirmModal, Button, LinkButton } from '@grafana/ui'; import { getBackendSrv } from '@grafana/runtime'; import { Snapshot } from '../types'; interface Props { url: string; } export const SnapshotListTable: FC = ({ url }) => { const [snapshots, setSnapshots] = useState([]); const [removeSnapshot, setRemoveSnapshot] = useState(); const getSnapshots = useCallback(async () => { await getBackendSrv() .get('/api/dashboard/snapshots') .then((result: Snapshot[]) => { const absUrl = window.location.href; const baseUrl = absUrl.replace(url, ''); const snapshots = result.map((snapshot) => ({ ...snapshot, url: snapshot.externalUrl || `${baseUrl}/dashboard/snapshot/${snapshot.key}`, })); setSnapshots(snapshots); }); }, []); const doRemoveSnapshot = useCallback( async (snapshot: Snapshot) => { const filteredSnapshots = snapshots.filter((ss) => ss.key !== snapshot.key); setSnapshots(filteredSnapshots); await getBackendSrv() .delete(`/api/snapshots/${snapshot.key}`) .catch(() => { setSnapshots(snapshots); }); }, [snapshots] ); useEffect(() => { getSnapshots(); }, []); return (
{snapshots.map((snapshot) => { return ( ); })}
Name Snapshot url
{snapshot.name} {snapshot.url} {snapshot.external && External} View
setRemoveSnapshot(undefined)} onConfirm={() => { doRemoveSnapshot(removeSnapshot!); setRemoveSnapshot(undefined); }} />
); };