Compare commits

..

1 Commits

Author SHA1 Message Date
Michael Albert a2807fe281 Allow importing csv files
Change-Id: I8f4c417c1762ba6dbc0fa929ecf8262e6e8a2e42
2020-04-15 11:38:11 +02:00
5 changed files with 47 additions and 87 deletions
+2 -1
View File
@@ -25,7 +25,8 @@
"react": "^16.13.1",
"react-admin": "^3.4.0",
"react-dom": "^16.13.1",
"react-scripts": "^3.4.1"
"react-scripts": "^3.4.1",
"react-admin-import-csv": "^0.2.5"
},
"scripts": {
"start": "react-scripts start",
+28 -29
View File
@@ -1,4 +1,4 @@
import React, { Fragment } from "react";
import React from "react";
import PersonPinIcon from "@material-ui/icons/PersonPin";
import SettingsInputComponentIcon from "@material-ui/icons/SettingsInputComponent";
import {
@@ -10,7 +10,6 @@ import {
Edit,
List,
Filter,
Toolbar,
SimpleForm,
SimpleFormIterator,
TabbedForm,
@@ -22,14 +21,14 @@ import {
TextField,
TextInput,
ReferenceField,
Toolbar,
TopToolbar,
SelectInput,
BulkDeleteButton,
DeleteButton,
SaveButton,
regex,
useTranslate,
Pagination,
} from "react-admin";
import { ImportButton } from "react-admin-import-csv";
import { CreateButton, ExportButton } from "ra-ui-materialui";
const UserPagination = props => (
<Pagination {...props} rowsPerPageOptions={[10, 25, 50, 100, 500, 1000]} />
@@ -46,16 +45,28 @@ const UserFilter = props => (
</Filter>
);
const UserBulkActionButtons = props => {
const translate = useTranslate();
const ListActions = props => {
const {
className,
basePath,
total,
resource,
currentSort,
filterValues,
exporter
} = props;
return (
<Fragment>
<BulkDeleteButton
{...props}
label="resources.users.action.erase"
title={translate("resources.users.helper.erase")}
<TopToolbar className={className}>
<CreateButton basePath={basePath} />
<ImportButton {...props} />
<ExportButton
disabled={total === 0}
resource={resource}
sort={currentSort}
filter={filterValues}
exporter={exporter}
/>
</Fragment>
</TopToolbar>
);
};
@@ -64,8 +75,9 @@ export const UserList = props => (
{...props}
filters={<UserFilter />}
filterDefaultValues={{ guests: true, deactivated: false }}
bulkActionButtons={<UserBulkActionButtons />}
bulkActionButtons={false}
pagination={<UserPagination />}
actions={<ListActions />}
>
<Datagrid rowClick="edit">
<ReferenceField
@@ -99,19 +111,6 @@ const validateUser = regex(
"synapseadmin.users.invalid_user_id"
);
const UserEditToolbar = props => {
const translate = useTranslate();
return (
<Toolbar {...props}>
<SaveButton submitOnEnter={true} />
<DeleteButton
label="resources.users.action.erase"
title={translate("resources.users.helper.erase")}
/>
</Toolbar>
);
};
export const UserCreate = props => (
<Create {...props}>
<SimpleForm>
@@ -137,7 +136,7 @@ export const UserCreate = props => (
export const UserEdit = props => (
<Edit {...props}>
<TabbedForm toolbar={<UserEditToolbar />}>
<TabbedForm>
<FormTab label="resources.users.name" icon={<PersonPinIcon />}>
<TextInput source="id" disabled />
<TextInput source="displayname" />
-4
View File
@@ -37,10 +37,6 @@ export default {
},
helper: {
deactivate: "Deaktivierte Nutzer können nicht wieder aktiviert werden.",
erase: "DSGVO konformes Löschen der Benutzerdaten",
},
action: {
erase: "Lösche Benutzerdaten",
},
},
rooms: {
-4
View File
@@ -37,10 +37,6 @@ export default {
},
helper: {
deactivate: "Deactivated users cannot be reactivated",
erase: "Mark the user as GDPR-erased",
},
action: {
erase: "Erase user data",
},
},
rooms: {
+17 -49
View File
@@ -30,11 +30,6 @@ const resourceMap = {
? parseInt(json.next_token, 10) + perPage
: from + json.users.length;
},
delete: id => ({
endpoint: `/_synapse/admin/v1/deactivate/${id}`,
body: { erase: true },
method: "POST",
}),
},
rooms: {
path: "/_synapse/admin/v1/rooms",
@@ -207,24 +202,12 @@ const dataProvider = {
const res = resourceMap[resource];
if ("delete" in res) {
const del = res["delete"](params.id);
const homeserver_url = homeserver + del.endpoint;
return jsonClient(homeserver_url, {
method: del.method,
body: JSON.stringify(del.body),
}).then(({ json }) => ({
data: json,
}));
} else {
const homeserver_url = homeserver + res.path;
return jsonClient(`${homeserver_url}/${params.id}`, {
method: "DELETE",
body: JSON.stringify(params.data, filterNullValues),
}).then(({ json }) => ({
data: json,
}));
}
const homeserver_url = homeserver + res.path;
return jsonClient(`${homeserver_url}/${params.id}`, {
method: "DELETE",
}).then(({ json }) => ({
data: json,
}));
},
deleteMany: (resource, params) => {
@@ -234,32 +217,17 @@ const dataProvider = {
const res = resourceMap[resource];
if ("delete" in res) {
return Promise.all(
params.ids.map(id => {
const del = res["delete"](id);
const homeserver_url = homeserver + del.endpoint;
return jsonClient(homeserver_url, {
method: del.method,
body: JSON.stringify(del.body),
});
})
).then(responses => ({
data: responses.map(({ json }) => json),
}));
} else {
const homeserver_url = homeserver + res.path;
return Promise.all(
params.ids.map(id =>
jsonClient(`${homeserver_url}/${id}`, {
method: "DELETE",
body: JSON.stringify(params.data, filterNullValues),
})
)
).then(responses => ({
data: responses.map(({ json }) => json),
}));
}
const homeserver_url = homeserver + res.path;
return Promise.all(
params.ids.map(id =>
jsonClient(`${homeserver_url}/${id}`, {
method: "DELETE",
body: JSON.stringify(params.data, filterNullValues),
}).then(responses => ({
data: responses.map(({ json }) => json),
}))
)
);
},
};