diff --git a/src/components/ServerNotices.js b/src/components/ServerNotices.js index a0f37da..39864cf 100644 --- a/src/components/ServerNotices.js +++ b/src/components/ServerNotices.js @@ -6,9 +6,10 @@ import { 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"; @@ -59,26 +60,50 @@ const ServerNoticeDialog = ({ open, loading, onClose, onSend }) => { ); }; -export const ServerNoticeButton = ({ record }) => { +export const ServerNoticeButton = ({ record, selectedIds }) => { const [open, setOpen] = useState(false); const notify = useNotify(); - const [create, { loading }] = useCreate("servernotices"); + const unselectAll = useUnselectAll(); + const [create, { loading }] = useMutation(); 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(); + if (record) { + create( + { + type: "create", + resource: "servernotices", + payload: { data: { id: record.id, ...values } }, }, - onFailure: () => - notify("resources.servernotices.action.send_failure", "error"), - } - ); + { + onSuccess: () => { + notify("resources.servernotices.action.send_success"); + handleDialogClose(); + }, + onFailure: () => + notify("resources.servernotices.action.send_failure", "error"), + } + ); + } else { + create( + { + 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 ( diff --git a/src/components/users.js b/src/components/users.js index 8e6c75b..616f699 100644 --- a/src/components/users.js +++ b/src/components/users.js @@ -51,6 +51,7 @@ const UserBulkActionButtons = props => { const translate = useTranslate(); return ( + { + console.log("createMany " + resource); + const homeserver = localStorage.getItem("base_url"); + if (!homeserver || !(resource in resourceMap)) return Promise.reject(); + + const res = resourceMap[resource]; + if (!("create" in res)) return Promise.reject(); + + return Promise.all( + params.ids.map(id => { + params.data.id = id; + const cre = res["create"](params.data); + const endpoint_url = homeserver + cre.endpoint; + return jsonClient(endpoint_url, { + method: cre.method, + body: JSON.stringify(cre.body, filterNullValues), + }); + }) + ).then(responses => ({ + data: responses.map(({ json }) => json), + })); + }, + delete: (resource, params) => { console.log("delete " + resource); const homeserver = localStorage.getItem("base_url");