import React, { useState } from "react"; import { BooleanInput, Button, DateTimeInput, NumberInput, SaveButton, SimpleForm, Toolbar, useCreate, useDelete, useNotify, useRecordContext, useRefresh, useTranslate, } from "react-admin"; import BlockIcon from "@mui/icons-material/Block"; import ClearIcon from "@mui/icons-material/Clear"; import DeleteSweepIcon from "@mui/icons-material/DeleteSweep"; import { Dialog, DialogContent, DialogContentText, DialogTitle, Tooltip, } from "@mui/material"; import IconCancel from "@mui/icons-material/Cancel"; import LockIcon from "@mui/icons-material/Lock"; import LockOpenIcon from "@mui/icons-material/LockOpen"; import { alpha, useTheme } from "@mui/material/styles"; const DeleteMediaDialog = ({ open, loading, onClose, onSubmit }) => { const translate = useTranslate(); const dateParser = v => { const d = new Date(v); if (isNaN(d)) return 0; return d.getTime(); }; const DeleteMediaToolbar = props => { return ( } /> ); }; return ( {translate("resources.delete_media.action.send")} {translate("resources.delete_media.helper.send")} } onSubmit={onSubmit}> ); }; export const DeleteMediaButton = props => { const theme = useTheme(); const [open, setOpen] = useState(false); const notify = useNotify(); const [deleteOne, { isLoading }] = useDelete(); const handleDialogOpen = () => setOpen(true); const handleDialogClose = () => setOpen(false); const handleSend = values => { deleteOne( "delete_media", { id: values.id }, { onSuccess: () => { notify("resources.delete_media.action.send_success"); handleDialogClose(); }, onError: () => notify("resources.delete_media.action.send_failure", { type: "error", }), } ); }; return ( <> ); }; export const ProtectMediaButton = props => { const record = useRecordContext(); const translate = useTranslate(); const refresh = useRefresh(); const notify = useNotify(); const [create, { isLoading }] = useCreate(); const [deleteOne] = useDelete(); if (!record) return null; const handleProtect = () => { create( "protect_media", { data: record }, { onSuccess: () => { notify("resources.protect_media.action.send_success"); refresh(); }, onError: () => notify("resources.protect_media.action.send_failure", { type: "error", }), } ); }; const handleUnprotect = () => { deleteOne( "protect_media", { id: record.id }, { onSuccess: () => { notify("resources.protect_media.action.send_success"); refresh(); }, onError: () => notify("resources.protect_media.action.send_failure", { type: "error", }), } ); }; return ( /* Wrapping Tooltip with
https://github.com/marmelab/react-admin/issues/4349#issuecomment-578594735 */ <> {record.quarantined_by && (
{/* Button instead BooleanField for consistent appearance and position in the column */}
)} {record.safe_from_quarantine && (
)} {!record.safe_from_quarantine && !record.quarantined_by && (
)} ); }; export const QuarantineMediaButton = props => { const record = useRecordContext(); const translate = useTranslate(); const refresh = useRefresh(); const notify = useNotify(); const [create, { isLoading }] = useCreate(); const [deleteOne] = useDelete(); if (!record) return null; const handleQuarantaine = () => { create( "quarantine_media", { data: record }, { onSuccess: () => { notify("resources.quarantine_media.action.send_success"); refresh(); }, onError: () => notify("resources.quarantine_media.action.send_failure", { type: "error", }), } ); }; const handleRemoveQuarantaine = () => { deleteOne( "quarantine_media", { id: record.id }, { onSuccess: () => { notify("resources.quarantine_media.action.send_success"); refresh(); }, onError: () => notify("resources.quarantine_media.action.send_failure", { type: "error", }), } ); }; return ( <> {record.safe_from_quarantine && (
)} {record.quarantined_by && (
)} {!record.safe_from_quarantine && !record.quarantined_by && (
)} ); };