import React, { Fragment, useState } from "react"; import classnames from "classnames"; import { fade } from "@material-ui/core/styles/colorManipulator"; import { makeStyles } from "@material-ui/core/styles"; import { Tooltip } from "@material-ui/core"; import { BooleanInput, Button, DateTimeInput, NumberInput, SaveButton, SimpleForm, Toolbar, useCreate, useDelete, useNotify, useRefresh, useTranslate, } from "react-admin"; import BlockIcon from "@material-ui/icons/Block"; import ClearIcon from "@material-ui/icons/Clear"; import DeleteSweepIcon from "@material-ui/icons/DeleteSweep"; import Dialog from "@material-ui/core/Dialog"; import DialogContent from "@material-ui/core/DialogContent"; import DialogContentText from "@material-ui/core/DialogContentText"; import DialogTitle from "@material-ui/core/DialogTitle"; import IconCancel from "@material-ui/icons/Cancel"; import LockIcon from "@material-ui/icons/Lock"; import LockOpenIcon from "@material-ui/icons/LockOpen"; const useStyles = makeStyles( theme => ({ deleteButton: { color: theme.palette.error.main, "&:hover": { backgroundColor: fade(theme.palette.error.main, 0.12), // Reset on mouse devices "@media (hover: none)": { backgroundColor: "transparent", }, }, }, }), { name: "RaDeleteDeviceButton" } ); const DeleteMediaDialog = ({ open, loading, onClose, onSend }) => { 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")} } submitOnEnter={false} redirect={false} save={onSend} > ); }; export const DeleteMediaButton = props => { const classes = useStyles(props); const [open, setOpen] = useState(false); const notify = useNotify(); const [deleteOne, { loading }] = useDelete("delete_media"); const handleDialogOpen = () => setOpen(true); const handleDialogClose = () => setOpen(false); const handleSend = values => { deleteOne( { payload: { ...values } }, { onSuccess: () => { notify("resources.delete_media.action.send_success"); handleDialogClose(); }, onFailure: () => notify("resources.delete_media.action.send_failure", "error"), } ); }; return ( ); }; export const ProtectMediaButton = props => { const { record } = props; const translate = useTranslate(); const refresh = useRefresh(); const notify = useNotify(); const [create, { loading }] = useCreate("protect_media"); const [deleteOne] = useDelete("protect_media"); if (!record) return null; const handleProtect = () => { create( { payload: { data: record } }, { onSuccess: () => { notify("resources.protect_media.action.send_success"); refresh(); }, onFailure: () => notify("resources.protect_media.action.send_failure", "error"), } ); }; const handleUnprotect = () => { deleteOne( { payload: { ...record } }, { onSuccess: () => { notify("resources.protect_media.action.send_success"); refresh(); }, onFailure: () => notify("resources.protect_media.action.send_failure", "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 } = props; const translate = useTranslate(); const refresh = useRefresh(); const notify = useNotify(); const [create, { loading }] = useCreate("quarantine_media"); const [deleteOne] = useDelete("quarantine_media"); if (!record) return null; const handleQuarantaine = () => { create( { payload: { data: record } }, { onSuccess: () => { notify("resources.quarantine_media.action.send_success"); refresh(); }, onFailure: () => notify("resources.quarantine_media.action.send_failure", "error"), } ); }; const handleRemoveQuarantaine = () => { deleteOne( { payload: { ...record } }, { onSuccess: () => { notify("resources.quarantine_media.action.send_success"); refresh(); }, onFailure: () => notify("resources.quarantine_media.action.send_failure", "error"), } ); }; return ( {record.safe_from_quarantine && (
)} {record.quarantined_by && (
)} {!record.safe_from_quarantine && !record.quarantined_by && (
)}
); };