Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
128 changes: 128 additions & 0 deletions src/components/DeleteRoom.js
Original file line number Diff line number Diff line change
@@ -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 (
<Toolbar {...props}>
<SaveButton
label="resources.rooms.action.erase.title"
icon={<DeleteIcon />}
/>
<Button label="ra.action.cancel" onClick={onClose}>
<IconCancel />
</Button>
</Toolbar>
);
};

return (
<Dialog open={open} onClose={onClose} loading={loading}>
<DialogTitle>
{translate("resources.rooms.action.erase.title")}
</DialogTitle>
<DialogContent>
<DialogContentText>
{translate("resources.rooms.action.erase.content")}
</DialogContentText>
<SimpleForm
toolbar={<DeleteRoomToolbar />}
submitOnEnter={false}
redirect={false}
save={onSend}
>
<BooleanInput
fullWidth
source="block"
label="resources.rooms.action.erase.fields.block"
defaultValue={true}
/>
</SimpleForm>
</DialogContent>
</Dialog>
);
};

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 (
<Fragment>
<Button
label="resources.rooms.action.erase.title"
onClick={handleDialogOpen}
disabled={loading}
className={classnames("ra-delete-button", classes.deleteButton)}
>
<DeleteIcon />
</Button>
<DeleteRoomDialog
open={open}
onClose={handleDialogClose}
onSend={handleSend}
/>
</Fragment>
);
};
22 changes: 13 additions & 9 deletions src/components/rooms.js
Original file line number Diff line number Diff line change
@@ -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,
Expand Down Expand Up @@ -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 => (
Expand Down Expand Up @@ -106,14 +117,7 @@ const RoomShowActions = ({ basePath, data, resource }) => {
{roomDirectoryStatus === true && (
<RoomDirectoryDeleteButton record={data} />
)}
<DeleteButton
basePath={basePath}
record={data}
resource={resource}
mutationMode="pessimistic"
confirmTitle="resources.rooms.action.erase.title"
confirmContent="resources.rooms.action.erase.content"
/>
<DeleteRoomButton record={data} />
</TopToolbar>
);
};
Expand Down
5 changes: 5 additions & 0 deletions src/i18n/de.js
Original file line number Diff line number Diff line change
Expand Up @@ -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",
},
},
},
Expand Down
15 changes: 11 additions & 4 deletions src/i18n/en.js
Original file line number Diff line number Diff line change
Expand Up @@ -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: {
Expand Down
2 changes: 1 addition & 1 deletion src/synapse/dataProvider.js
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ const resourceMap = {
},
delete: params => ({
endpoint: `/_synapse/admin/v1/rooms/${params.id}`,
body: { block: false },
body: { block: !!params.block },
}),
},
reports: {
Expand Down