diff --git a/src/components/DeleteRoom.js b/src/components/DeleteRoom.js
new file mode 100644
index 0000000..bba877e
--- /dev/null
+++ b/src/components/DeleteRoom.js
@@ -0,0 +1,128 @@
+import React, { Fragment, useState } from "react";
+import classnames from "classnames";
+import { fade } from "@material-ui/core/styles/colorManipulator";
+import {
+ useTranslate,
+ useRedirect,
+ Toolbar,
+ SaveButton,
+ Button,
+ SimpleForm,
+ BooleanInput,
+ useRecordContext,
+ useDelete,
+ useNotify,
+} from "react-admin";
+import { makeStyles } from "@material-ui/core/styles";
+import IconCancel from "@material-ui/icons/Cancel";
+import DeleteIcon from "@material-ui/icons/Delete";
+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 useStyles = makeStyles(theme => ({
+ helper_forward_extremities: {
+ fontFamily: "Roboto, Helvetica, Arial, sans-serif",
+ margin: "0.5em",
+ },
+ deleteButton: {
+ color: theme.palette.error.main,
+ "&:hover": {
+ backgroundColor: fade(theme.palette.error.main, 0.12),
+ // Reset on mouse devices
+ "@media (hover: none)": {
+ backgroundColor: "transparent",
+ },
+ },
+ },
+}));
+
+export const DeleteRoomDialog = ({ open, loading, onClose, onSend }) => {
+ const translate = useTranslate();
+
+ const DeleteRoomToolbar = props => {
+ return (
+
+ }
+ />
+
+
+ );
+ };
+
+ return (
+
+ );
+};
+
+export const DeleteRoomButton = props => {
+ const classes = useStyles(props);
+ const [open, setOpen] = useState(false);
+ const notify = useNotify();
+ const redirect = useRedirect();
+ const [deleteOne, { loading }] = useDelete("rooms");
+ const record = useRecordContext(props);
+
+ const handleDialogOpen = () => setOpen(true);
+ const handleDialogClose = () => setOpen(false);
+
+ const handleSend = values => {
+ deleteOne(
+ { payload: { id: record.id, ...values } },
+ {
+ onSuccess: () => {
+ notify("resources.rooms.action.erase.send_success");
+ handleDialogClose();
+ redirect("/rooms");
+ },
+ onFailure: () =>
+ notify("resources.rooms.action.erase.send_failure", "error"),
+ }
+ );
+ };
+
+ return (
+
+
+
+
+ );
+};
diff --git a/src/components/rooms.js b/src/components/rooms.js
index fa01c77..a2a8372 100644
--- a/src/components/rooms.js
+++ b/src/components/rooms.js
@@ -1,11 +1,11 @@
import React, { Fragment } from "react";
+import { fade } from "@material-ui/core/styles/colorManipulator";
import { connect } from "react-redux";
import {
BooleanField,
BulkDeleteButton,
DateField,
Datagrid,
- DeleteButton,
Filter,
List,
NumberField,
@@ -40,12 +40,23 @@ import {
RoomDirectoryDeleteButton,
RoomDirectorySaveButton,
} from "./RoomDirectory";
+import { DeleteRoomButton } from "./DeleteRoom";
const useStyles = makeStyles(theme => ({
helper_forward_extremities: {
fontFamily: "Roboto, Helvetica, Arial, sans-serif",
margin: "0.5em",
},
+ deleteButton: {
+ color: theme.palette.error.main,
+ "&:hover": {
+ backgroundColor: fade(theme.palette.error.main, 0.12),
+ // Reset on mouse devices
+ "@media (hover: none)": {
+ backgroundColor: "transparent",
+ },
+ },
+ },
}));
const RoomPagination = props => (
@@ -106,14 +117,7 @@ const RoomShowActions = ({ basePath, data, resource }) => {
{roomDirectoryStatus === true && (
)}
-
+
);
};
diff --git a/src/i18n/de.js b/src/i18n/de.js
index ced6512..4b765ae 100644
--- a/src/i18n/de.js
+++ b/src/i18n/de.js
@@ -180,6 +180,11 @@ const de = {
title: "Raum löschen",
content:
"Sind Sie sicher dass Sie den Raum löschen möchten? Diese Aktion kann nicht rückgängig gemacht werden. Alle Nachrichten und Medien, die der Raum beinhaltet werden vom Server gelöscht!",
+ fields: {
+ block: "Raum für erneute Beitritte sperren",
+ },
+ send_success: "Der Raum wurde gelöscht",
+ send_failure: "Der Raum konnte nicht gelöscht werden",
},
},
},
diff --git a/src/i18n/en.js b/src/i18n/en.js
index 5ceaed9..f083de3 100644
--- a/src/i18n/en.js
+++ b/src/i18n/en.js
@@ -173,10 +173,17 @@ const en = {
},
unencrypted: "Unencrypted",
},
- erase: {
- title: "Delete room",
- content:
- "Are you sure you want to delete the room? This cannot be undone. All messages and shared media in the room will be deleted from the server!",
+ action: {
+ erase: {
+ title: "Delete room",
+ content:
+ "Are you sure you want to delete the room? This cannot be undone. All messages and shared media in the room will be deleted from the server!",
+ fields: {
+ block: "Block room from being rejoined",
+ },
+ send_success: "The room has been deleted",
+ send_failure: "The room could not be deleted",
+ },
},
},
reports: {
diff --git a/src/synapse/dataProvider.js b/src/synapse/dataProvider.js
index 5b11139..aed69c4 100644
--- a/src/synapse/dataProvider.js
+++ b/src/synapse/dataProvider.js
@@ -70,7 +70,7 @@ const resourceMap = {
},
delete: params => ({
endpoint: `/_synapse/admin/v1/rooms/${params.id}`,
- body: { block: false },
+ body: { block: !!params.block },
}),
},
reports: {