Add a new tab to rooms with state events

This commit is contained in:
dklimpel 2021-02-18 18:10:29 +01:00
parent 684c44e470
commit 4ef2b14789
6 changed files with 76 additions and 4 deletions

View File

@ -4,7 +4,7 @@
This project is built using [react-admin](https://marmelab.com/react-admin/).
It needs at least Synapse v1.23.0 for all functions to work as expected!
It needs at least Synapse v1.27.0 for all functions to work as expected!
You get your server version with the request `/_synapse/admin/v1/server_version`.
See also [Synapse version API](https://github.com/matrix-org/synapse/blob/develop/docs/admin_api/version_api.rst).

View File

@ -63,6 +63,7 @@ const App = () => (
<Resource name="joined_rooms" />
<Resource name="pushers" />
<Resource name="servernotices" />
<Resource name="room_state" />
</Admin>
);

View File

@ -3,6 +3,7 @@ import { connect } from "react-redux";
import {
BooleanField,
BulkDeleteWithConfirmButton,
DateField,
Datagrid,
DeleteButton,
Filter,
@ -27,6 +28,7 @@ import PageviewIcon from "@material-ui/icons/Pageview";
import UserIcon from "@material-ui/icons/Group";
import ViewListIcon from "@material-ui/icons/ViewList";
import VisibilityIcon from "@material-ui/icons/Visibility";
import EventIcon from "@material-ui/icons/Event";
const RoomPagination = props => (
<Pagination {...props} rowsPerPageOptions={[10, 25, 50, 100, 500, 1000]} />
@ -97,7 +99,9 @@ export const RoomShow = props => {
<TextField source="room_id" />
<TextField source="name" />
<TextField source="canonical_alias" />
<TextField source="creator" />
<ReferenceField source="creator" reference="users">
<TextField source="id" />
</ReferenceField>
</Tab>
<Tab
@ -197,6 +201,42 @@ export const RoomShow = props => {
]}
/>
</Tab>
<Tab
label={translate("resources.room_state.name", { smart_count: 2 })}
icon={<EventIcon />}
path="state"
>
<ReferenceManyField
reference="room_state"
target="room_id"
addLabel={false}
>
<Datagrid style={{ width: "100%" }}>
<TextField source="type" sortable={false} />
<DateField
source="origin_server_ts"
showTime
options={{
year: "numeric",
month: "2-digit",
day: "2-digit",
hour: "2-digit",
minute: "2-digit",
second: "2-digit",
}}
sortable={false}
/>
<TextField source="content" sortable={false} />
<ReferenceField
source="sender"
reference="users"
sortable={false}
>
<TextField source="id" />
</ReferenceField>
</Datagrid>
</ReferenceManyField>
</Tab>
</TabbedShowLayout>
</Show>
);

View File

@ -143,7 +143,7 @@ export default {
canonical_alias: "Alias",
joined_members: "Mitglieder",
joined_local_members: "Lokale Mitglieder",
state_events: "Ereignisse",
state_events: "Zustandsereignisse / Komplexität",
version: "Version",
is_encrypted: "Verschlüsselt",
encryption: "Verschlüsselungs-Algorithmus",
@ -273,6 +273,15 @@ export default {
media_length: "Größe der Dateien",
},
},
room_state: {
name: "Zustandsereignisse",
fields: {
type: "Typ",
content: "Inhalt",
origin_server_ts: "Sendezeit",
sender: "Absender",
},
},
},
ra: {
...germanMessages.ra,

View File

@ -140,7 +140,7 @@ export default {
canonical_alias: "Alias",
joined_members: "Members",
joined_local_members: "local members",
state_events: "State events",
state_events: "State events / Complexity",
version: "Version",
is_encrypted: "Encrypted",
encryption: "Encryption",
@ -270,5 +270,14 @@ export default {
media_length: "Media length",
},
},
room_state: {
name: "State events",
fields: {
type: "Type",
content: "Content",
origin_server_ts: "time of send",
sender: "Sender",
},
},
},
};

View File

@ -117,6 +117,19 @@ const resourceMap = {
return json.total;
},
},
room_state: {
map: rs => ({
...rs,
id: rs.event_id,
}),
reference: id => ({
endpoint: `/_synapse/admin/v1/rooms/${id}/state`,
}),
data: "state",
total: json => {
return json.state.length;
},
},
pushers: {
map: p => ({
...p,