From 009ce803e2e5b23cfd7b44fcfb15460f85e23f4d Mon Sep 17 00:00:00 2001
From: Dirk Klimpel <5740567+dklimpel@users.noreply.github.com>
Date: Wed, 6 May 2020 09:03:33 +0200
Subject: [PATCH] Add ServerNoticeButton to UserBulkActionButtons (#41)
This adds the button to send "Server Notices" to many users at once.
---
src/components/ServerNotices.js | 48 +++++++++++++++++++++++++++++++++
src/components/users.js | 3 ++-
src/synapse/dataProvider.js | 23 ++++++++++++++++
3 files changed, 73 insertions(+), 1 deletion(-)
diff --git a/src/components/ServerNotices.js b/src/components/ServerNotices.js
index a0f37da..2a3e8bd 100644
--- a/src/components/ServerNotices.js
+++ b/src/components/ServerNotices.js
@@ -7,8 +7,10 @@ import {
Toolbar,
required,
useCreate,
+ useMutation,
useNotify,
useTranslate,
+ useUnselectAll,
} from "react-admin";
import MessageIcon from "@material-ui/icons/Message";
import IconCancel from "@material-ui/icons/Cancel";
@@ -98,3 +100,49 @@ export const ServerNoticeButton = ({ record }) => {
);
};
+
+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 (
+
+
+
+
+ );
+};
diff --git a/src/components/users.js b/src/components/users.js
index 8e6c75b..16167a0 100644
--- a/src/components/users.js
+++ b/src/components/users.js
@@ -30,7 +30,7 @@ import {
useTranslate,
Pagination,
} from "react-admin";
-import { ServerNoticeButton } from "./ServerNotices";
+import { ServerNoticeButton, ServerNoticeBulkButton } from "./ServerNotices";
const UserPagination = props => (
@@ -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");