// @flow import { observer } from "mobx-react"; import * as React from "react"; import { useTranslation, Trans } from "react-i18next"; import { useHistory } from "react-router-dom"; import Document from "models/Document"; import Button from "components/Button"; import Flex from "components/Flex"; import HelpText from "components/HelpText"; import useStores from "hooks/useStores"; import useToasts from "hooks/useToasts"; import { collectionUrl, documentUrl } from "utils/routeHelpers"; type Props = { document: Document, onSubmit: () => void, }; function DocumentDelete({ document, onSubmit }: Props) { const { t } = useTranslation(); const { ui, documents, collections } = useStores(); const history = useHistory(); const [isDeleting, setDeleting] = React.useState(false); const [isArchiving, setArchiving] = React.useState(false); const { showToast } = useToasts(); const canArchive = !document.isDraft && !document.isArchived; const collection = collections.get(document.collectionId); const handleSubmit = React.useCallback( async (ev: SyntheticEvent<>) => { ev.preventDefault(); setDeleting(true); try { await document.delete(); // only redirect if we're currently viewing the document that's deleted if (ui.activeDocumentId === document.id) { // If the document has a parent and it's available in the store then // redirect to it if (document.parentDocumentId) { const parent = documents.get(document.parentDocumentId); if (parent) { history.push(documentUrl(parent)); return; } } // otherwise, redirect to the collection home history.push(collectionUrl(collection?.url || "/")); } onSubmit(); } catch (err) { showToast(err.message, { type: "error" }); } finally { setDeleting(false); } }, [showToast, onSubmit, ui, document, documents, history, collection] ); const handleArchive = React.useCallback( async (ev: SyntheticEvent<>) => { ev.preventDefault(); setArchiving(true); try { await document.archive(); onSubmit(); } catch (err) { showToast(err.message, { type: "error" }); } finally { setArchiving(false); } }, [showToast, onSubmit, document] ); return (
{document.isTemplate ? ( }} /> ) : ( }} /> )} {canArchive && ( If you’d like the option of referencing or restoring the{" "} {{ noun: document.noun }} in the future, consider archiving it instead. )}    {canArchive && ( )}
); } export default observer(DocumentDelete);