This commit is contained in:
jkanefendt 2022-02-01 12:54:23 +01:00 committed by GitHub
commit 63216a8150
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 158 additions and 14 deletions

View File

@ -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>
);
};

View File

@ -1,11 +1,11 @@
import React, { Fragment } from "react"; import React, { Fragment } from "react";
import { fade } from "@material-ui/core/styles/colorManipulator";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { import {
BooleanField, BooleanField,
BulkDeleteButton, BulkDeleteButton,
DateField, DateField,
Datagrid, Datagrid,
DeleteButton,
Filter, Filter,
List, List,
NumberField, NumberField,
@ -40,12 +40,23 @@ import {
RoomDirectoryDeleteButton, RoomDirectoryDeleteButton,
RoomDirectorySaveButton, RoomDirectorySaveButton,
} from "./RoomDirectory"; } from "./RoomDirectory";
import { DeleteRoomButton } from "./DeleteRoom";
const useStyles = makeStyles(theme => ({ const useStyles = makeStyles(theme => ({
helper_forward_extremities: { helper_forward_extremities: {
fontFamily: "Roboto, Helvetica, Arial, sans-serif", fontFamily: "Roboto, Helvetica, Arial, sans-serif",
margin: "0.5em", 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 => ( const RoomPagination = props => (
@ -106,14 +117,7 @@ const RoomShowActions = ({ basePath, data, resource }) => {
{roomDirectoryStatus === true && ( {roomDirectoryStatus === true && (
<RoomDirectoryDeleteButton record={data} /> <RoomDirectoryDeleteButton record={data} />
)} )}
<DeleteButton <DeleteRoomButton record={data} />
basePath={basePath}
record={data}
resource={resource}
mutationMode="pessimistic"
confirmTitle="resources.rooms.action.erase.title"
confirmContent="resources.rooms.action.erase.content"
/>
</TopToolbar> </TopToolbar>
); );
}; };

View File

@ -180,6 +180,11 @@ const de = {
title: "Raum löschen", title: "Raum löschen",
content: 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!", "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",
}, },
}, },
}, },

View File

@ -173,10 +173,17 @@ const en = {
}, },
unencrypted: "Unencrypted", unencrypted: "Unencrypted",
}, },
action: {
erase: { erase: {
title: "Delete room", title: "Delete room",
content: 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!", "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: { reports: {

View File

@ -70,7 +70,7 @@ const resourceMap = {
}, },
delete: params => ({ delete: params => ({
endpoint: `/_synapse/admin/v1/rooms/${params.id}`, endpoint: `/_synapse/admin/v1/rooms/${params.id}`,
body: { block: false }, body: { block: !!params.block },
}), }),
}, },
reports: { reports: {