text: import React, { Fragment, useState } from "react";
  import {
    Button,
    SaveButton,
    SimpleForm,
    TextInput,
    Toolbar,
    required,
    useCreate,
    useMutation,
    useNotify,
    useTranslate,
    useUnselectAll,
  } from "react-admin";
  import MessageIcon from "@material-ui/icons/Message";
  import IconCancel from "@material-ui/icons/Cancel";
  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";
  
  const ServerNoticeDialog = ({ open, loading, onClose, onSend }) => {
    const translate = useTranslate();
  
    const ServerNoticeToolbar = props => (
      <Toolbar {...props}>
        <SaveButton label="resources.servernotices.action.send" />
        <Button label="ra.action.cancel" onClick={onClose}>
          <IconCancel />
        </Button>
      </Toolbar>
    );
  
    return (
      <Dialog open={open} onClose={onClose} loading={loading}>
        <DialogTitle>
          {translate("resources.servernotices.action.send")}
        </DialogTitle>
        <DialogContent>
          <DialogContentText>
            {translate("resources.servernotices.helper.send")}
          </DialogContentText>
          <SimpleForm
            toolbar={<ServerNoticeToolbar />}
            submitOnEnter={false}
            redirect={false}
            save={onSend}
          >
            <TextInput
              source="body"
              label="resources.servernotices.fields.body"
              fullWidth
              multiline
              rows="4"
              resettable
              validate={required()}
            />
          </SimpleForm>
        </DialogContent>
      </Dialog>
    );
  };
  
  export const ServerNoticeButton = ({ record }) => {
    const [open, setOpen] = useState(false);
    const notify = useNotify();
    const [create, { loading }] = useCreate("servernotices");
  
    const handleDialogOpen = () => setOpen(true);
    const handleDialogClose = () => setOpen(false);
  
    const handleSend = values => {
      create(
        { payload: { data: { id: record.id, ...values } } },
        {
          onSuccess: () => {
            notify("resources.servernotices.action.send_success");
            handleDialogClose();
          },
          onFailure: () =>
            notify("resources.servernotices.action.send_failure", "error"),
        }
      );
    };
  
    return (
      <Fragment>
        <Button
          label="resources.servernotices.send"
          onClick={handleDialogOpen}
          disabled={loading}
        >
          <MessageIcon />
        </Button>
        <ServerNoticeDialog
          open={open}
          onClose={handleDialogClose}
          onSend={handleSend}
        />
      </Fragment>
    );
  };
  
  export const ServerNoticeBulkButton = ({ selectedIds }) => {
    const [open, setOpen] = useState(false);
    const notify = useNotify();
    const unselectAll = useUnselectAll();
    const [createMany, { loading }] = useMutation();
  
    const handleDialogOpen = () => setOpen(true);
    const handleDialogClose = () => setOpen(false);
  
    const handleSend = values => {
      createMany(
        {
          type: "createMany",
          resource: "servernotices",
          payload: { ids: selectedIds, data: values },
        },
        {
          onSuccess: ({ data }) => {
            notify("resources.servernotices.action.send_success");
            unselectAll("users");
            handleDialogClose();
          },
          onFailure: error =>
            notify("resources.servernotices.action.send_failure", "error"),
        }
      );
    };
  
    return (
      <Fragment>
        <Button
          label="resources.servernotices.send"
          onClick={handleDialogOpen}
          disabled={loading}
        >
          <MessageIcon />
        </Button>
        <ServerNoticeDialog
          open={open}
          onClose={handleDialogClose}
          onSend={handleSend}
        />
      </Fragment>
    );
  };
  