From ea59d0dd02199cb074770be689c5ea5d08b52b5b Mon Sep 17 00:00:00 2001
From: Dirk Klimpel <5740567+dklimpel@users.noreply.github.com>
Date: Thu, 11 Feb 2021 21:11:34 +0100
Subject: [PATCH] Add a new tab to user page with media (#87)
* Add a new tab to user page with media
---
src/App.js | 1 +
src/components/users.js | 54 ++++++++++++++++++++++++++++++++++++-
src/i18n/de.js | 13 +++++++++
src/i18n/en.js | 13 +++++++++
src/synapse/dataProvider.js | 24 ++++++++++++++++-
5 files changed, 103 insertions(+), 2 deletions(-)
diff --git a/src/App.js b/src/App.js
index 5c8e132..d5c9bfd 100644
--- a/src/App.js
+++ b/src/App.js
@@ -52,6 +52,7 @@ const App = () => (
+
diff --git a/src/components/users.js b/src/components/users.js
index e93e409..e66eb44 100644
--- a/src/components/users.js
+++ b/src/components/users.js
@@ -5,8 +5,9 @@ import ContactMailIcon from "@material-ui/icons/ContactMail";
import DevicesIcon from "@material-ui/icons/Devices";
import GetAppIcon from "@material-ui/icons/GetApp";
import SettingsInputComponentIcon from "@material-ui/icons/SettingsInputComponent";
-import ViewListIcon from "@material-ui/icons/ViewList";
import NotificationsIcon from "@material-ui/icons/Notifications";
+import PermMediaIcon from "@material-ui/icons/PermMedia";
+import ViewListIcon from "@material-ui/icons/ViewList";
import {
ArrayInput,
ArrayField,
@@ -42,6 +43,7 @@ import {
ExportButton,
TopToolbar,
sanitizeListRestProps,
+ NumberField,
} from "react-admin";
import { ServerNoticeButton, ServerNoticeBulkButton } from "./ServerNotices";
import { DeviceRemoveButton } from "./devices";
@@ -406,6 +408,56 @@ export const UserEdit = props => {
+ }
+ path="media"
+ >
+ }
+ perPage={50}
+ >
+
+
+
+
+
+
+
+
+
+
+
+
+
+
}
diff --git a/src/i18n/de.js b/src/i18n/de.js
index a881b1d..4402a50 100644
--- a/src/i18n/de.js
+++ b/src/i18n/de.js
@@ -223,6 +223,19 @@ export default {
},
},
},
+ users_media: {
+ name: "Medien",
+ fields: {
+ media_id: "Medien ID",
+ media_length: "Größe",
+ media_type: "Typ",
+ upload_name: "Dateiname",
+ quarantined_by: "Zur Quarantäne hinzugefügt",
+ safe_from_quarantine: "Geschützt vor Quarantäne",
+ created_ts: "Erstellt",
+ last_access_ts: "Letzter Zugriff",
+ },
+ },
pushers: {
name: "Pusher |||| Pushers",
fields: {
diff --git a/src/i18n/en.js b/src/i18n/en.js
index 87d70be..74a1e9c 100644
--- a/src/i18n/en.js
+++ b/src/i18n/en.js
@@ -220,6 +220,19 @@ export default {
},
},
},
+ users_media: {
+ name: "Media",
+ fields: {
+ media_id: "Media ID",
+ media_length: "Lenght",
+ media_type: "Type",
+ upload_name: "File name",
+ quarantined_by: "Quarantined by",
+ safe_from_quarantine: "Safe from quarantine",
+ created_ts: "Created",
+ last_access_ts: "Last access",
+ },
+ },
pushers: {
name: "Pusher |||| Pushers",
fields: {
diff --git a/src/synapse/dataProvider.js b/src/synapse/dataProvider.js
index a329e66..2a664c4 100644
--- a/src/synapse/dataProvider.js
+++ b/src/synapse/dataProvider.js
@@ -142,6 +142,24 @@ const resourceMap = {
return json.total;
},
},
+ users_media: {
+ map: um => ({
+ ...um,
+ id: um.media_id,
+ }),
+ reference: id => ({
+ endpoint: `/_synapse/admin/v1/users/${id}/media`,
+ }),
+ data: "media",
+ total: json => {
+ return json.total;
+ },
+ delete: params => ({
+ endpoint: `/_synapse/admin/v1/media/${localStorage.getItem(
+ "home_server"
+ )}/${params.id}`,
+ }),
+ },
servernotices: {
map: n => ({ id: n.event_id }),
create: data => ({
@@ -239,6 +257,10 @@ const dataProvider = {
console.log("getManyReference " + resource);
const { page, perPage } = params.pagination;
const from = (page - 1) * perPage;
+ const query = {
+ from: from,
+ limit: perPage,
+ };
const homeserver = localStorage.getItem("base_url");
if (!homeserver || !(resource in resourceMap)) return Promise.reject();
@@ -246,7 +268,7 @@ const dataProvider = {
const res = resourceMap[resource];
const ref = res["reference"](params.id);
- const endpoint_url = homeserver + ref.endpoint;
+ const endpoint_url = `${homeserver}${ref.endpoint}?${stringify(query)}`;
return jsonClient(endpoint_url).then(({ headers, json }) => ({
data: json[res.data].map(res.map),