/
Users.js
81 lines (76 loc) · 2.77 KB
/
Users.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
import React, { useCallback } from "react";
import { withRouter } from "react-router-dom";
import { compose } from "recompose";
import { get } from "dot-prop-immutable";
import { pick } from "lodash";
import { i18n } from "@webiny/app/i18n";
import { SplitView, LeftPanel, RightPanel } from "@webiny/app-admin/components/SplitView";
import { FloatingActionButton } from "@webiny/app-admin/components/FloatingActionButton";
import { withCrud } from "@webiny/app-admin/components";
import UsersDataList from "./Users/UsersDataList";
import UsersForm from "./Users/UsersForm";
import { createUser, deleteUser, loadUser, loadUsers, updateUser } from "./Users/graphql";
const t = i18n.namespace("Security.Users");
const Users = ({ formProps, listProps, location, history }) => {
const createNew = useCallback(() => {
const query = new URLSearchParams(location.search);
query.delete("id");
history.push({ search: query.toString() });
});
return (
<SplitView>
<LeftPanel>
<UsersDataList {...listProps} />
</LeftPanel>
<RightPanel>
<UsersForm {...formProps} />
</RightPanel>
<FloatingActionButton onClick={createNew} />
</SplitView>
);
};
export default compose(
withCrud({
list: {
get: {
query: loadUsers,
variables: { sort: { savedOn: -1 } },
response: data => get(data, "security.users")
},
delete: {
mutation: deleteUser,
response: data => data.security.deleteUser,
snackbar: data => t`User {name} deleted.`({ name: data.fullName })
}
},
form: {
get: {
query: loadUser,
response: data => get(data, "security.user")
},
save: {
create: createUser,
update: updateUser,
response: data => data.security.user,
variables: form => {
return {
data: {
...pick(form, [
"email",
"password",
"firstName",
"lastName",
"avatar",
"enabled"
]),
roles: (form.roles || []).map(x => x.id),
groups: (form.groups || []).map(x => x.id)
}
};
},
snackbar: data => t`User {name} saved successfully.`({ name: data.fullName })
}
}
}),
withRouter
)(Users);