import React, { useState } from 'react'; import { ServerBackup } from '@/api/server/backups/getServerBackups'; import { faCloudDownloadAlt, faEllipsisH, faLock, faTrashAlt } from '@fortawesome/free-solid-svg-icons'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; import DropdownMenu, { DropdownButtonRow } from '@/components/elements/DropdownMenu'; import getBackupDownloadUrl from '@/api/server/backups/getBackupDownloadUrl'; import { httpErrorToHuman } from '@/api/http'; import useFlash from '@/plugins/useFlash'; import ChecksumModal from '@/components/server/backups/ChecksumModal'; import SpinnerOverlay from '@/components/elements/SpinnerOverlay'; import useServer from '@/plugins/useServer'; import deleteBackup from '@/api/server/backups/deleteBackup'; import { ServerContext } from '@/state/server'; import ConfirmationModal from '@/components/elements/ConfirmationModal'; import Can from '@/components/elements/Can'; import tw from 'twin.macro'; interface Props { backup: ServerBackup; } export default ({ backup }: Props) => { const { uuid } = useServer(); const [ loading, setLoading ] = useState(false); const [ visible, setVisible ] = useState(false); const [ deleteVisible, setDeleteVisible ] = useState(false); const { addError, clearFlashes } = useFlash(); const removeBackup = ServerContext.useStoreActions(actions => actions.backups.removeBackup); const doDownload = () => { setLoading(true); clearFlashes('backups'); getBackupDownloadUrl(uuid, backup.uuid) .then(url => { // @ts-ignore window.location = url; }) .catch(error => { console.error(error); addError({ key: 'backups', message: httpErrorToHuman(error) }); }) .then(() => setLoading(false)); }; const doDeletion = () => { setLoading(true); clearFlashes('backups'); deleteBackup(uuid, backup.uuid) .then(() => removeBackup(backup.uuid)) .catch(error => { console.error(error); addError({ key: 'backups', message: httpErrorToHuman(error) }); setLoading(false); setDeleteVisible(false); }); }; return ( <> {visible && setVisible(false)} checksum={backup.sha256Hash} /> } doDeletion()} onModalDismissed={() => setDeleteVisible(false)} > Are you sure you wish to delete this backup? This is a permanent operation and the backup cannot be recovered once deleted. ( )} >
doDownload()}> Download setVisible(true)}> Checksum setDeleteVisible(true)}> Delete
); };