in frontend/src/js/components/viewer/DeleteButtonModal.tsx [10:77]
export function DeleteButtonModal({ resource, deleteBlob, buttonTitle }: { resource: Resource | null, deleteBlob: (blobUri: string) => Promise<Response>, buttonTitle: string | undefined }) {
const [modalOpen, setModalOpen] = useState(false);
const [deleteStatus, setDeleteStatus] = useState<DeleteStatus>("unconfirmed");
if (!resource) {
return null;
}
const modalTitle: Record<DeleteStatus, string> = {
unconfirmed: "Delete item?",
deleting: "Deleting item",
deleted: "Item deleted",
failed: "Failed to delete"
}
const modalMessage: Record<DeleteStatus, string> = {
unconfirmed: "Are you sure you want to delete this item? This action will permanently delete the item from giant.",
deleting: "",
deleted: "This item has been successfully deleted.",
failed: "Failed to delete item. Please contact the administrator to delete this item."
}
const hasChildResources = resource.children.length > 0
const tooltip = hasChildResources ? "Item cannot be deleted as it has child resources" : "Delete item"
const deleteItem = async () => {
try {
setDeleteStatus("deleting")
await deleteBlob(resource.uri);
setDeleteStatus("deleted")
}
catch (e){
setDeleteStatus("failed")
console.error("Error deleting item", e)
}
}
const closeModal = () => {
setDeleteStatus("unconfirmed");
setModalOpen(false);
}
const spinner = deleteStatus === "deleting" ? <ProgressAnimation /> : false;
return <React.Fragment>
<Modal
isOpen={modalOpen}
isDismissable={false}
dismiss={() => {}}
>
<div className="form form-full-width">
<h2 className='modal__title'>
{modalTitle[deleteStatus]}
</h2>
<div className='form__row'>
{modalMessage[deleteStatus]}
</div>
<div className='form__row'>
{ deleteStatus === "unconfirmed" &&
<>
<button className="btn" onClick={closeModal}>Cancel</button>
<button className="btn" onClick={deleteItem}>Delete</button>
</>
}
{ deleteStatus === "deleted" &&
<>
<button className="btn" onClick={()=>document.location.href="/"}>Giant Home</button>
{(window.history.length > 1) && <button className="btn" onClick={() => window.history.back()}>Back to last page</button>}