@webiny/app-security-access-management 5.34.8 → 5.35.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/components/GroupAutocomplete/graphql.js +0 -5
- package/components/GroupAutocomplete/graphql.js.map +1 -1
- package/components/GroupAutocomplete/index.js +2 -10
- package/components/GroupAutocomplete/index.js.map +1 -1
- package/components/NotAuthorizedError/NotAuthorizedError.js +0 -12
- package/components/NotAuthorizedError/NotAuthorizedError.js.map +1 -1
- package/components/NotAuthorizedError/index.js +0 -1
- package/components/NotAuthorizedError/index.js.map +1 -1
- package/index.js +0 -15
- package/index.js.map +1 -1
- package/package.json +13 -13
- package/plugins/constants.js +0 -1
- package/plugins/constants.js.map +1 -1
- package/plugins/index.js +0 -6
- package/plugins/index.js.map +1 -1
- package/plugins/installation.js +19 -44
- package/plugins/installation.js.map +1 -1
- package/plugins/permissionRenderer/SecurityPermissions.js +2 -34
- package/plugins/permissionRenderer/SecurityPermissions.js.map +1 -1
- package/plugins/permissionRenderer/index.js +0 -12
- package/plugins/permissionRenderer/index.js.map +1 -1
- package/plugins/routes.js +0 -10
- package/plugins/routes.js.map +1 -1
- package/plugins/secureRouteError.js +0 -4
- package/plugins/secureRouteError.js.map +1 -1
- package/ui/elements/GroupAutocompleteElement.js +1 -16
- package/ui/elements/GroupAutocompleteElement.js.map +1 -1
- package/ui/views/ApiKeys/ApiKeyForm.js +62 -115
- package/ui/views/ApiKeys/ApiKeyForm.js.map +1 -1
- package/ui/views/ApiKeys/ApiKeys.js +3 -10
- package/ui/views/ApiKeys/ApiKeys.js.map +1 -1
- package/ui/views/ApiKeys/ApiKeysDataList.js +51 -98
- package/ui/views/ApiKeys/ApiKeysDataList.js.map +1 -1
- package/ui/views/ApiKeys/graphql.js +0 -5
- package/ui/views/ApiKeys/graphql.js.map +1 -1
- package/ui/views/ApiKeys/index.js +0 -2
- package/ui/views/ApiKeys/index.js.map +1 -1
- package/ui/views/ApiKeys/utils.js +0 -5
- package/ui/views/ApiKeys/utils.js.map +1 -1
- package/ui/views/Groups/Groups.js +3 -10
- package/ui/views/Groups/Groups.js.map +1 -1
- package/ui/views/Groups/GroupsDataList.js +52 -99
- package/ui/views/Groups/GroupsDataList.js.map +1 -1
- package/ui/views/Groups/GroupsForm.js +61 -114
- package/ui/views/Groups/GroupsForm.js.map +1 -1
- package/ui/views/Groups/graphql.js +0 -5
- package/ui/views/Groups/graphql.js.map +1 -1
- package/ui/views/Groups/index.js +0 -2
- package/ui/views/Groups/index.js.map +1 -1
- package/ui/views/utils.js +3 -9
- package/ui/views/utils.js.map +1 -1
|
@@ -1,62 +1,35 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
-
|
|
5
4
|
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
|
|
6
|
-
|
|
7
5
|
Object.defineProperty(exports, "__esModule", {
|
|
8
6
|
value: true
|
|
9
7
|
});
|
|
10
8
|
exports.GroupsDataList = void 0;
|
|
11
|
-
|
|
12
9
|
var _regeneratorRuntime2 = _interopRequireDefault(require("@babel/runtime/helpers/regeneratorRuntime"));
|
|
13
|
-
|
|
14
10
|
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
15
|
-
|
|
16
11
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
17
|
-
|
|
18
12
|
var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
|
|
19
|
-
|
|
20
13
|
var _react = _interopRequireWildcard(require("react"));
|
|
21
|
-
|
|
22
14
|
var _orderBy = _interopRequireDefault(require("lodash/orderBy"));
|
|
23
|
-
|
|
24
15
|
var _i18n = require("@webiny/app/i18n");
|
|
25
|
-
|
|
26
16
|
var _List = require("@webiny/ui/List");
|
|
27
|
-
|
|
28
17
|
var _icons = require("@webiny/ui/List/DataList/icons");
|
|
29
|
-
|
|
30
18
|
var _reactRouter = require("@webiny/react-router");
|
|
31
|
-
|
|
32
19
|
var _useSnackbar2 = require("@webiny/app-admin/hooks/useSnackbar");
|
|
33
|
-
|
|
34
20
|
var _reactHooks = require("@apollo/react-hooks");
|
|
35
|
-
|
|
36
21
|
var _useConfirmationDialog = require("@webiny/app-admin/hooks/useConfirmationDialog");
|
|
37
|
-
|
|
38
22
|
var _graphql = require("./graphql");
|
|
39
|
-
|
|
40
23
|
var _Tooltip = require("@webiny/ui/Tooltip");
|
|
41
|
-
|
|
42
24
|
var _Button = require("@webiny/ui/Button");
|
|
43
|
-
|
|
44
25
|
var _Grid = require("@webiny/ui/Grid");
|
|
45
|
-
|
|
46
26
|
var _Select = require("@webiny/ui/Select");
|
|
47
|
-
|
|
48
27
|
var _SearchUI = _interopRequireDefault(require("@webiny/app-admin/components/SearchUI"));
|
|
49
|
-
|
|
50
28
|
var _add18px = require("@webiny/app-admin/assets/icons/add-18px.svg");
|
|
51
|
-
|
|
52
29
|
var _filter24px = require("@webiny/app-admin/assets/icons/filter-24px.svg");
|
|
53
|
-
|
|
54
30
|
var _utils = require("../utils");
|
|
55
|
-
|
|
56
31
|
var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9, _templateObject10;
|
|
57
|
-
|
|
58
32
|
var t = _i18n.i18n.ns("app-security/admin/groups/data-list");
|
|
59
|
-
|
|
60
33
|
var SORTERS = [{
|
|
61
34
|
label: t(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["Newest to oldest"]))),
|
|
62
35
|
sorter: "createdOn_DESC"
|
|
@@ -70,101 +43,82 @@ var SORTERS = [{
|
|
|
70
43
|
label: t(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2.default)(["Name Z-A"]))),
|
|
71
44
|
sorter: "name_DESC"
|
|
72
45
|
}];
|
|
73
|
-
|
|
74
46
|
var GroupsDataList = function GroupsDataList() {
|
|
75
47
|
var _useState = (0, _react.useState)(""),
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
48
|
+
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
49
|
+
filter = _useState2[0],
|
|
50
|
+
setFilter = _useState2[1];
|
|
80
51
|
var _useState3 = (0, _react.useState)(SORTERS[0].sorter),
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
52
|
+
_useState4 = (0, _slicedToArray2.default)(_useState3, 2),
|
|
53
|
+
sort = _useState4[0],
|
|
54
|
+
setSort = _useState4[1];
|
|
85
55
|
var _useRouter = (0, _reactRouter.useRouter)(),
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
56
|
+
history = _useRouter.history,
|
|
57
|
+
location = _useRouter.location;
|
|
89
58
|
var _useSnackbar = (0, _useSnackbar2.useSnackbar)(),
|
|
90
|
-
|
|
91
|
-
|
|
59
|
+
showSnackbar = _useSnackbar.showSnackbar;
|
|
92
60
|
var _useConfirmationDialo = (0, _useConfirmationDialog.useConfirmationDialog)({
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
61
|
+
dataTestId: "default-data-list.delete-dialog"
|
|
62
|
+
}),
|
|
63
|
+
showConfirmation = _useConfirmationDialo.showConfirmation;
|
|
97
64
|
var _useQuery = (0, _reactHooks.useQuery)(_graphql.LIST_GROUPS),
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
65
|
+
listResponse = _useQuery.data,
|
|
66
|
+
listLoading = _useQuery.loading;
|
|
101
67
|
var _useMutation = (0, _reactHooks.useMutation)(_graphql.DELETE_GROUP, {
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
68
|
+
refetchQueries: [{
|
|
69
|
+
query: _graphql.LIST_GROUPS
|
|
70
|
+
}]
|
|
71
|
+
}),
|
|
72
|
+
_useMutation2 = (0, _slicedToArray2.default)(_useMutation, 2),
|
|
73
|
+
deleteIt = _useMutation2[0],
|
|
74
|
+
deleteLoading = _useMutation2[1].loading;
|
|
110
75
|
var data = listLoading && !listResponse ? [] : listResponse.security.groups.data;
|
|
111
76
|
var id = new URLSearchParams(location.search).get("id");
|
|
112
77
|
var filterGroup = (0, _react.useCallback)(function (_ref) {
|
|
113
78
|
var name = _ref.name,
|
|
114
|
-
|
|
115
|
-
|
|
79
|
+
slug = _ref.slug,
|
|
80
|
+
description = _ref.description;
|
|
116
81
|
return name.toLowerCase().includes(filter) || slug.toLowerCase().includes(filter) || description && description.toLowerCase().includes(filter);
|
|
117
82
|
}, [filter]);
|
|
118
83
|
var sortGroups = (0, _react.useCallback)(function (groups) {
|
|
119
84
|
if (!sort) {
|
|
120
85
|
return groups;
|
|
121
86
|
}
|
|
122
|
-
|
|
123
87
|
var _deserializeSorters = (0, _utils.deserializeSorters)(sort),
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
88
|
+
_deserializeSorters2 = (0, _slicedToArray2.default)(_deserializeSorters, 2),
|
|
89
|
+
key = _deserializeSorters2[0],
|
|
90
|
+
sortBy = _deserializeSorters2[1];
|
|
128
91
|
return (0, _orderBy.default)(groups, [key], [sortBy]);
|
|
129
92
|
}, [sort]);
|
|
130
93
|
var deleteItem = (0, _react.useCallback)(function (item) {
|
|
131
94
|
showConfirmation( /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee() {
|
|
132
95
|
var _yield$deleteIt, data, error;
|
|
133
|
-
|
|
134
96
|
return (0, _regeneratorRuntime2.default)().wrap(function _callee$(_context) {
|
|
135
|
-
while (1) {
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
if (id === item.id) {
|
|
161
|
-
history.push("/access-management/groups");
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
case 9:
|
|
165
|
-
case "end":
|
|
166
|
-
return _context.stop();
|
|
167
|
-
}
|
|
97
|
+
while (1) switch (_context.prev = _context.next) {
|
|
98
|
+
case 0:
|
|
99
|
+
_context.next = 2;
|
|
100
|
+
return deleteIt({
|
|
101
|
+
variables: item
|
|
102
|
+
});
|
|
103
|
+
case 2:
|
|
104
|
+
_yield$deleteIt = _context.sent;
|
|
105
|
+
data = _yield$deleteIt.data;
|
|
106
|
+
error = data.security.deleteGroup.error;
|
|
107
|
+
if (!error) {
|
|
108
|
+
_context.next = 7;
|
|
109
|
+
break;
|
|
110
|
+
}
|
|
111
|
+
return _context.abrupt("return", showSnackbar(error.message));
|
|
112
|
+
case 7:
|
|
113
|
+
showSnackbar(t(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2.default)(["Group \"{slug}\" deleted."])))({
|
|
114
|
+
slug: item.slug
|
|
115
|
+
}));
|
|
116
|
+
if (id === item.id) {
|
|
117
|
+
history.push("/access-management/groups");
|
|
118
|
+
}
|
|
119
|
+
case 9:
|
|
120
|
+
case "end":
|
|
121
|
+
return _context.stop();
|
|
168
122
|
}
|
|
169
123
|
}, _callee);
|
|
170
124
|
})));
|
|
@@ -178,7 +132,7 @@ var GroupsDataList = function GroupsDataList() {
|
|
|
178
132
|
label: t(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteral2.default)(["Sort by"])))
|
|
179
133
|
}, SORTERS.map(function (_ref3) {
|
|
180
134
|
var label = _ref3.label,
|
|
181
|
-
|
|
135
|
+
sorter = _ref3.sorter;
|
|
182
136
|
return /*#__PURE__*/_react.default.createElement("option", {
|
|
183
137
|
key: label,
|
|
184
138
|
value: sorter
|
|
@@ -235,5 +189,4 @@ var GroupsDataList = function GroupsDataList() {
|
|
|
235
189
|
}));
|
|
236
190
|
});
|
|
237
191
|
};
|
|
238
|
-
|
|
239
192
|
exports.GroupsDataList = GroupsDataList;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["t","i18n","ns","SORTERS","label","sorter","GroupsDataList","useState","filter","setFilter","sort","setSort","useRouter","history","location","useSnackbar","showSnackbar","useConfirmationDialog","dataTestId","showConfirmation","useQuery","LIST_GROUPS","listResponse","data","listLoading","loading","useMutation","DELETE_GROUP","refetchQueries","query","deleteIt","deleteLoading","security","groups","id","URLSearchParams","search","get","filterGroup","useCallback","name","slug","description","toLowerCase","includes","sortGroups","deserializeSorters","key","sortBy","orderBy","deleteItem","item","variables","error","deleteGroup","message","push","groupsDataListModalOverlay","useMemo","map","filteredData","groupList","system"],"sources":["GroupsDataList.tsx"],"sourcesContent":["import React, { useCallback, useMemo, useState } from \"react\";\nimport orderBy from \"lodash/orderBy\";\nimport { i18n } from \"@webiny/app/i18n\";\nimport {\n DataList,\n ScrollList,\n ListItem,\n ListItemText,\n ListItemTextSecondary,\n ListItemMeta,\n ListActions,\n DataListModalOverlayAction,\n DataListModalOverlay\n} from \"@webiny/ui/List\";\nimport { DeleteIcon } from \"@webiny/ui/List/DataList/icons\";\nimport { useRouter } from \"@webiny/react-router\";\nimport { useSnackbar } from \"@webiny/app-admin/hooks/useSnackbar\";\nimport { useQuery, useMutation } from \"@apollo/react-hooks\";\nimport { useConfirmationDialog } from \"@webiny/app-admin/hooks/useConfirmationDialog\";\nimport { LIST_GROUPS, DELETE_GROUP } from \"./graphql\";\nimport { Tooltip } from \"@webiny/ui/Tooltip\";\nimport { ButtonIcon, ButtonSecondary } from \"@webiny/ui/Button\";\nimport { Cell, Grid } from \"@webiny/ui/Grid\";\nimport { Select } from \"@webiny/ui/Select\";\nimport SearchUI from \"@webiny/app-admin/components/SearchUI\";\nimport { ReactComponent as AddIcon } from \"@webiny/app-admin/assets/icons/add-18px.svg\";\nimport { ReactComponent as FilterIcon } from \"@webiny/app-admin/assets/icons/filter-24px.svg\";\nimport { deserializeSorters } from \"../utils\";\nimport { Group } from \"~/types\";\n\nconst t = i18n.ns(\"app-security/admin/groups/data-list\");\n\nconst SORTERS = [\n {\n label: t`Newest to oldest`,\n sorter: \"createdOn_DESC\"\n },\n {\n label: t`Oldest to newest`,\n sorter: \"createdOn_ASC\"\n },\n {\n label: t`Name A-Z`,\n sorter: \"name_ASC\"\n },\n {\n label: t`Name Z-A`,\n sorter: \"name_DESC\"\n }\n];\n\nexport interface GroupsDataListProps {\n // TODO @ts-refactor delete and go up the tree and sort it out\n [key: string]: any;\n}\nexport const GroupsDataList: React.FC<GroupsDataListProps> = () => {\n const [filter, setFilter] = useState(\"\");\n const [sort, setSort] = useState(SORTERS[0].sorter);\n const { history, location } = useRouter();\n const { showSnackbar } = useSnackbar();\n const { showConfirmation } = useConfirmationDialog({\n dataTestId: \"default-data-list.delete-dialog\"\n });\n\n const { data: listResponse, loading: listLoading } = useQuery(LIST_GROUPS);\n\n const [deleteIt, { loading: deleteLoading }] = useMutation(DELETE_GROUP, {\n refetchQueries: [{ query: LIST_GROUPS }]\n });\n\n const data = listLoading && !listResponse ? [] : listResponse.security.groups.data;\n const id = new URLSearchParams(location.search).get(\"id\");\n\n const filterGroup = useCallback(\n ({ name, slug, description }) => {\n return (\n name.toLowerCase().includes(filter) ||\n slug.toLowerCase().includes(filter) ||\n (description && description.toLowerCase().includes(filter))\n );\n },\n [filter]\n );\n\n const sortGroups = useCallback(\n groups => {\n if (!sort) {\n return groups;\n }\n const [key, sortBy] = deserializeSorters(sort);\n return orderBy(groups, [key], [sortBy]);\n },\n [sort]\n );\n\n const deleteItem = useCallback(\n item => {\n showConfirmation(async () => {\n const { data } = await deleteIt({\n variables: item\n });\n\n const { error } = data.security.deleteGroup;\n if (error) {\n return showSnackbar(error.message);\n }\n\n showSnackbar(t`Group \"{slug}\" deleted.`({ slug: item.slug }));\n\n if (id === item.id) {\n history.push(`/access-management/groups`);\n }\n });\n },\n [id]\n );\n\n const groupsDataListModalOverlay = useMemo(\n () => (\n <DataListModalOverlay>\n <Grid>\n <Cell span={12}>\n <Select value={sort} onChange={setSort} label={t`Sort by`}>\n {SORTERS.map(({ label, sorter }) => {\n return (\n <option key={label} value={sorter}>\n {label}\n </option>\n );\n })}\n </Select>\n </Cell>\n </Grid>\n </DataListModalOverlay>\n ),\n [sort]\n );\n\n const filteredData = filter === \"\" ? data : data.filter(filterGroup);\n const groupList = sortGroups(filteredData);\n\n return (\n <DataList\n title={t`Groups`}\n actions={\n <ButtonSecondary\n data-testid=\"new-record-button\"\n onClick={() => history.push(\"/access-management/groups?new=true\")}\n >\n <ButtonIcon icon={<AddIcon />} /> {t`New Group`}\n </ButtonSecondary>\n }\n data={groupList}\n loading={listLoading || deleteLoading}\n search={\n <SearchUI value={filter} onChange={setFilter} inputPlaceholder={t`Search Groups`} />\n }\n modalOverlay={groupsDataListModalOverlay}\n modalOverlayAction={\n <DataListModalOverlayAction\n icon={<FilterIcon />}\n data-testid={\"default-data-list.filter\"}\n />\n }\n >\n {({ data }: { data: Group[] }) => (\n <ScrollList data-testid=\"default-data-list\">\n {data.map(item => (\n <ListItem key={item.id} selected={item.id === id}>\n <ListItemText\n onClick={() =>\n history.push(`/access-management/groups?id=${item.id}`)\n }\n >\n {item.name}\n <ListItemTextSecondary>{item.description}</ListItemTextSecondary>\n </ListItemText>\n\n <ListItemMeta>\n <ListActions>\n {!item.system ? (\n <DeleteIcon\n onClick={() => deleteItem(item)}\n data-testid={\"default-data-list.delete\"}\n />\n ) : (\n <Tooltip\n placement={\"bottom\"}\n content={<span>{t`You can't delete this group.`}</span>}\n >\n <DeleteIcon disabled />\n </Tooltip>\n )}\n </ListActions>\n </ListItemMeta>\n </ListItem>\n ))}\n </ScrollList>\n )}\n </DataList>\n );\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["t","i18n","ns","SORTERS","label","sorter","GroupsDataList","useState","filter","setFilter","sort","setSort","useRouter","history","location","useSnackbar","showSnackbar","useConfirmationDialog","dataTestId","showConfirmation","useQuery","LIST_GROUPS","listResponse","data","listLoading","loading","useMutation","DELETE_GROUP","refetchQueries","query","deleteIt","deleteLoading","security","groups","id","URLSearchParams","search","get","filterGroup","useCallback","name","slug","description","toLowerCase","includes","sortGroups","deserializeSorters","key","sortBy","orderBy","deleteItem","item","variables","error","deleteGroup","message","push","groupsDataListModalOverlay","useMemo","map","filteredData","groupList","system"],"sources":["GroupsDataList.tsx"],"sourcesContent":["import React, { useCallback, useMemo, useState } from \"react\";\nimport orderBy from \"lodash/orderBy\";\nimport { i18n } from \"@webiny/app/i18n\";\nimport {\n DataList,\n ScrollList,\n ListItem,\n ListItemText,\n ListItemTextSecondary,\n ListItemMeta,\n ListActions,\n DataListModalOverlayAction,\n DataListModalOverlay\n} from \"@webiny/ui/List\";\nimport { DeleteIcon } from \"@webiny/ui/List/DataList/icons\";\nimport { useRouter } from \"@webiny/react-router\";\nimport { useSnackbar } from \"@webiny/app-admin/hooks/useSnackbar\";\nimport { useQuery, useMutation } from \"@apollo/react-hooks\";\nimport { useConfirmationDialog } from \"@webiny/app-admin/hooks/useConfirmationDialog\";\nimport { LIST_GROUPS, DELETE_GROUP } from \"./graphql\";\nimport { Tooltip } from \"@webiny/ui/Tooltip\";\nimport { ButtonIcon, ButtonSecondary } from \"@webiny/ui/Button\";\nimport { Cell, Grid } from \"@webiny/ui/Grid\";\nimport { Select } from \"@webiny/ui/Select\";\nimport SearchUI from \"@webiny/app-admin/components/SearchUI\";\nimport { ReactComponent as AddIcon } from \"@webiny/app-admin/assets/icons/add-18px.svg\";\nimport { ReactComponent as FilterIcon } from \"@webiny/app-admin/assets/icons/filter-24px.svg\";\nimport { deserializeSorters } from \"../utils\";\nimport { Group } from \"~/types\";\n\nconst t = i18n.ns(\"app-security/admin/groups/data-list\");\n\nconst SORTERS = [\n {\n label: t`Newest to oldest`,\n sorter: \"createdOn_DESC\"\n },\n {\n label: t`Oldest to newest`,\n sorter: \"createdOn_ASC\"\n },\n {\n label: t`Name A-Z`,\n sorter: \"name_ASC\"\n },\n {\n label: t`Name Z-A`,\n sorter: \"name_DESC\"\n }\n];\n\nexport interface GroupsDataListProps {\n // TODO @ts-refactor delete and go up the tree and sort it out\n [key: string]: any;\n}\nexport const GroupsDataList: React.FC<GroupsDataListProps> = () => {\n const [filter, setFilter] = useState(\"\");\n const [sort, setSort] = useState(SORTERS[0].sorter);\n const { history, location } = useRouter();\n const { showSnackbar } = useSnackbar();\n const { showConfirmation } = useConfirmationDialog({\n dataTestId: \"default-data-list.delete-dialog\"\n });\n\n const { data: listResponse, loading: listLoading } = useQuery(LIST_GROUPS);\n\n const [deleteIt, { loading: deleteLoading }] = useMutation(DELETE_GROUP, {\n refetchQueries: [{ query: LIST_GROUPS }]\n });\n\n const data = listLoading && !listResponse ? [] : listResponse.security.groups.data;\n const id = new URLSearchParams(location.search).get(\"id\");\n\n const filterGroup = useCallback(\n ({ name, slug, description }) => {\n return (\n name.toLowerCase().includes(filter) ||\n slug.toLowerCase().includes(filter) ||\n (description && description.toLowerCase().includes(filter))\n );\n },\n [filter]\n );\n\n const sortGroups = useCallback(\n groups => {\n if (!sort) {\n return groups;\n }\n const [key, sortBy] = deserializeSorters(sort);\n return orderBy(groups, [key], [sortBy]);\n },\n [sort]\n );\n\n const deleteItem = useCallback(\n item => {\n showConfirmation(async () => {\n const { data } = await deleteIt({\n variables: item\n });\n\n const { error } = data.security.deleteGroup;\n if (error) {\n return showSnackbar(error.message);\n }\n\n showSnackbar(t`Group \"{slug}\" deleted.`({ slug: item.slug }));\n\n if (id === item.id) {\n history.push(`/access-management/groups`);\n }\n });\n },\n [id]\n );\n\n const groupsDataListModalOverlay = useMemo(\n () => (\n <DataListModalOverlay>\n <Grid>\n <Cell span={12}>\n <Select value={sort} onChange={setSort} label={t`Sort by`}>\n {SORTERS.map(({ label, sorter }) => {\n return (\n <option key={label} value={sorter}>\n {label}\n </option>\n );\n })}\n </Select>\n </Cell>\n </Grid>\n </DataListModalOverlay>\n ),\n [sort]\n );\n\n const filteredData = filter === \"\" ? data : data.filter(filterGroup);\n const groupList = sortGroups(filteredData);\n\n return (\n <DataList\n title={t`Groups`}\n actions={\n <ButtonSecondary\n data-testid=\"new-record-button\"\n onClick={() => history.push(\"/access-management/groups?new=true\")}\n >\n <ButtonIcon icon={<AddIcon />} /> {t`New Group`}\n </ButtonSecondary>\n }\n data={groupList}\n loading={listLoading || deleteLoading}\n search={\n <SearchUI value={filter} onChange={setFilter} inputPlaceholder={t`Search Groups`} />\n }\n modalOverlay={groupsDataListModalOverlay}\n modalOverlayAction={\n <DataListModalOverlayAction\n icon={<FilterIcon />}\n data-testid={\"default-data-list.filter\"}\n />\n }\n >\n {({ data }: { data: Group[] }) => (\n <ScrollList data-testid=\"default-data-list\">\n {data.map(item => (\n <ListItem key={item.id} selected={item.id === id}>\n <ListItemText\n onClick={() =>\n history.push(`/access-management/groups?id=${item.id}`)\n }\n >\n {item.name}\n <ListItemTextSecondary>{item.description}</ListItemTextSecondary>\n </ListItemText>\n\n <ListItemMeta>\n <ListActions>\n {!item.system ? (\n <DeleteIcon\n onClick={() => deleteItem(item)}\n data-testid={\"default-data-list.delete\"}\n />\n ) : (\n <Tooltip\n placement={\"bottom\"}\n content={<span>{t`You can't delete this group.`}</span>}\n >\n <DeleteIcon disabled />\n </Tooltip>\n )}\n </ListActions>\n </ListItemMeta>\n </ListItem>\n ))}\n </ScrollList>\n )}\n </DataList>\n );\n};\n"],"mappings":"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"}
|
|
@@ -1,72 +1,40 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
-
|
|
5
4
|
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
|
|
6
|
-
|
|
7
5
|
Object.defineProperty(exports, "__esModule", {
|
|
8
6
|
value: true
|
|
9
7
|
});
|
|
10
8
|
exports.GroupsForm = void 0;
|
|
11
|
-
|
|
12
9
|
var _regeneratorRuntime2 = _interopRequireDefault(require("@babel/runtime/helpers/regeneratorRuntime"));
|
|
13
|
-
|
|
14
10
|
var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
|
|
15
|
-
|
|
16
11
|
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
17
|
-
|
|
18
12
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
19
|
-
|
|
20
13
|
var _react = _interopRequireWildcard(require("react"));
|
|
21
|
-
|
|
22
14
|
var _reactHooks = require("@apollo/react-hooks");
|
|
23
|
-
|
|
24
15
|
var _styled = _interopRequireDefault(require("@emotion/styled"));
|
|
25
|
-
|
|
26
16
|
var _pick = _interopRequireDefault(require("lodash/pick"));
|
|
27
|
-
|
|
28
17
|
var _get = _interopRequireDefault(require("lodash/get"));
|
|
29
|
-
|
|
30
18
|
var _reactRouter = require("@webiny/react-router");
|
|
31
|
-
|
|
32
19
|
var _i18n = require("@webiny/app/i18n");
|
|
33
|
-
|
|
34
20
|
var _form = require("@webiny/form");
|
|
35
|
-
|
|
36
21
|
var _Grid = require("@webiny/ui/Grid");
|
|
37
|
-
|
|
38
22
|
var _Input = require("@webiny/ui/Input");
|
|
39
|
-
|
|
40
23
|
var _Alert = require("@webiny/ui/Alert");
|
|
41
|
-
|
|
42
24
|
var _Button = require("@webiny/ui/Button");
|
|
43
|
-
|
|
44
25
|
var _Progress = require("@webiny/ui/Progress");
|
|
45
|
-
|
|
46
26
|
var _validation = require("@webiny/validation");
|
|
47
|
-
|
|
48
27
|
var _SimpleForm = require("@webiny/app-admin/components/SimpleForm");
|
|
49
|
-
|
|
50
28
|
var _Typography = require("@webiny/ui/Typography");
|
|
51
|
-
|
|
52
29
|
var _Permissions = require("@webiny/app-admin/components/Permissions");
|
|
53
|
-
|
|
54
30
|
var _useSnackbar2 = require("@webiny/app-admin/hooks/useSnackbar");
|
|
55
|
-
|
|
56
31
|
var _graphql = require("./graphql");
|
|
57
|
-
|
|
58
32
|
var _Snackbar = require("@webiny/ui/Snackbar");
|
|
59
|
-
|
|
60
33
|
var _isEmpty = _interopRequireDefault(require("lodash/isEmpty"));
|
|
61
|
-
|
|
62
34
|
var _EmptyView = _interopRequireDefault(require("@webiny/app-admin/components/EmptyView"));
|
|
63
|
-
|
|
64
35
|
var _add18px = require("@webiny/app-admin/assets/icons/add-18px.svg");
|
|
65
|
-
|
|
66
36
|
var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9, _templateObject10;
|
|
67
|
-
|
|
68
37
|
var t = _i18n.i18n.ns("app-security/admin/groups/form");
|
|
69
|
-
|
|
70
38
|
var ButtonWrapper = /*#__PURE__*/(0, _styled.default)("div", {
|
|
71
39
|
target: "euuiyav0",
|
|
72
40
|
label: "ButtonWrapper"
|
|
@@ -74,15 +42,12 @@ var ButtonWrapper = /*#__PURE__*/(0, _styled.default)("div", {
|
|
|
74
42
|
display: "flex",
|
|
75
43
|
justifyContent: "space-between"
|
|
76
44
|
});
|
|
77
|
-
|
|
78
45
|
var GroupsForm = function GroupsForm() {
|
|
79
46
|
var _useRouter = (0, _reactRouter.useRouter)(),
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
47
|
+
location = _useRouter.location,
|
|
48
|
+
history = _useRouter.history;
|
|
83
49
|
var _useSnackbar = (0, _useSnackbar2.useSnackbar)(),
|
|
84
|
-
|
|
85
|
-
|
|
50
|
+
showSnackbar = _useSnackbar.showSnackbar;
|
|
86
51
|
var newGroup = new URLSearchParams(location.search).get("new") === "true";
|
|
87
52
|
var id = new URLSearchParams(location.search).get("id");
|
|
88
53
|
var getQuery = (0, _reactHooks.useQuery)(_graphql.READ_GROUP, {
|
|
@@ -94,105 +59,89 @@ var GroupsForm = function GroupsForm() {
|
|
|
94
59
|
if (!data) {
|
|
95
60
|
return;
|
|
96
61
|
}
|
|
97
|
-
|
|
98
62
|
var error = data.security.group.error;
|
|
99
|
-
|
|
100
63
|
if (error) {
|
|
101
64
|
history.push("/access-management/groups");
|
|
102
65
|
showSnackbar(error.message);
|
|
103
66
|
}
|
|
104
67
|
}
|
|
105
68
|
});
|
|
106
|
-
|
|
107
69
|
var _useMutation = (0, _reactHooks.useMutation)(_graphql.CREATE_GROUP, {
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
70
|
+
refetchQueries: [{
|
|
71
|
+
query: _graphql.LIST_GROUPS
|
|
72
|
+
}]
|
|
73
|
+
}),
|
|
74
|
+
_useMutation2 = (0, _slicedToArray2.default)(_useMutation, 2),
|
|
75
|
+
create = _useMutation2[0],
|
|
76
|
+
createMutation = _useMutation2[1];
|
|
116
77
|
var _useMutation3 = (0, _reactHooks.useMutation)(_graphql.UPDATE_GROUP, {
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
78
|
+
refetchQueries: [{
|
|
79
|
+
query: _graphql.LIST_GROUPS
|
|
80
|
+
}]
|
|
81
|
+
}),
|
|
82
|
+
_useMutation4 = (0, _slicedToArray2.default)(_useMutation3, 2),
|
|
83
|
+
update = _useMutation4[0],
|
|
84
|
+
updateMutation = _useMutation4[1];
|
|
125
85
|
var loading = [getQuery, createMutation, updateMutation].find(function (item) {
|
|
126
86
|
return item.loading;
|
|
127
87
|
});
|
|
128
88
|
var onSubmit = (0, _react.useCallback)( /*#__PURE__*/function () {
|
|
129
89
|
var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee(data) {
|
|
130
90
|
var isUpdate, _ref2, _ref3, operation, args, response, _response$data$securi, group, error;
|
|
131
|
-
|
|
132
91
|
return (0, _regeneratorRuntime2.default)().wrap(function _callee$(_context) {
|
|
133
|
-
while (1) {
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
92
|
+
while (1) switch (_context.prev = _context.next) {
|
|
93
|
+
case 0:
|
|
94
|
+
if (!(!data.permissions || !data.permissions.length)) {
|
|
95
|
+
_context.next = 3;
|
|
96
|
+
break;
|
|
97
|
+
}
|
|
98
|
+
showSnackbar(t(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["You must configure permissions before saving!"]))), {
|
|
99
|
+
timeout: 60000,
|
|
100
|
+
dismissesOnAction: true,
|
|
101
|
+
action: /*#__PURE__*/_react.default.createElement(_Snackbar.SnackbarAction, {
|
|
102
|
+
label: "OK"
|
|
103
|
+
})
|
|
104
|
+
});
|
|
105
|
+
return _context.abrupt("return");
|
|
106
|
+
case 3:
|
|
107
|
+
isUpdate = data.createdOn;
|
|
108
|
+
_ref2 = isUpdate ? [update, {
|
|
109
|
+
variables: {
|
|
110
|
+
id: data.id,
|
|
111
|
+
data: (0, _pick.default)(data, ["name", "description", "permissions"])
|
|
139
112
|
}
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
dismissesOnAction: true,
|
|
144
|
-
action: /*#__PURE__*/_react.default.createElement(_Snackbar.SnackbarAction, {
|
|
145
|
-
label: "OK"
|
|
146
|
-
})
|
|
147
|
-
});
|
|
148
|
-
return _context.abrupt("return");
|
|
149
|
-
|
|
150
|
-
case 3:
|
|
151
|
-
isUpdate = data.createdOn;
|
|
152
|
-
_ref2 = isUpdate ? [update, {
|
|
153
|
-
variables: {
|
|
154
|
-
id: data.id,
|
|
155
|
-
data: (0, _pick.default)(data, ["name", "description", "permissions"])
|
|
156
|
-
}
|
|
157
|
-
}] : [create, {
|
|
158
|
-
variables: {
|
|
159
|
-
data: (0, _pick.default)(data, ["name", "slug", "description", "permissions"])
|
|
160
|
-
}
|
|
161
|
-
}], _ref3 = (0, _slicedToArray2.default)(_ref2, 2), operation = _ref3[0], args = _ref3[1];
|
|
162
|
-
_context.next = 7;
|
|
163
|
-
return operation(args);
|
|
164
|
-
|
|
165
|
-
case 7:
|
|
166
|
-
response = _context.sent;
|
|
167
|
-
_response$data$securi = response.data.security.group, group = _response$data$securi.data, error = _response$data$securi.error;
|
|
168
|
-
|
|
169
|
-
if (!error) {
|
|
170
|
-
_context.next = 11;
|
|
171
|
-
break;
|
|
113
|
+
}] : [create, {
|
|
114
|
+
variables: {
|
|
115
|
+
data: (0, _pick.default)(data, ["name", "slug", "description", "permissions"])
|
|
172
116
|
}
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
117
|
+
}], _ref3 = (0, _slicedToArray2.default)(_ref2, 2), operation = _ref3[0], args = _ref3[1];
|
|
118
|
+
_context.next = 7;
|
|
119
|
+
return operation(args);
|
|
120
|
+
case 7:
|
|
121
|
+
response = _context.sent;
|
|
122
|
+
_response$data$securi = response.data.security.group, group = _response$data$securi.data, error = _response$data$securi.error;
|
|
123
|
+
if (!error) {
|
|
124
|
+
_context.next = 11;
|
|
125
|
+
break;
|
|
126
|
+
}
|
|
127
|
+
return _context.abrupt("return", showSnackbar(error.message));
|
|
128
|
+
case 11:
|
|
129
|
+
!isUpdate && history.push("/access-management/groups?id=".concat(group.id));
|
|
130
|
+
showSnackbar(t(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2.default)(["Group saved successfully!"]))));
|
|
131
|
+
case 13:
|
|
132
|
+
case "end":
|
|
133
|
+
return _context.stop();
|
|
184
134
|
}
|
|
185
135
|
}, _callee);
|
|
186
136
|
}));
|
|
187
|
-
|
|
188
137
|
return function (_x) {
|
|
189
138
|
return _ref.apply(this, arguments);
|
|
190
139
|
};
|
|
191
140
|
}(), [id]);
|
|
192
141
|
var data = loading ? {} : (0, _get.default)(getQuery, "data.security.group.data", {});
|
|
193
142
|
var systemGroup = data.slug === "full-access";
|
|
194
|
-
var showEmptyView = !newGroup && !loading && (0, _isEmpty.default)(data);
|
|
195
|
-
|
|
143
|
+
var showEmptyView = !newGroup && !loading && (0, _isEmpty.default)(data);
|
|
144
|
+
// Render "No content" selected view.
|
|
196
145
|
if (showEmptyView) {
|
|
197
146
|
return /*#__PURE__*/_react.default.createElement(_EmptyView.default, {
|
|
198
147
|
title: t(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2.default)(["Click on the left side list to display group details or create a..."]))),
|
|
@@ -206,14 +155,13 @@ var GroupsForm = function GroupsForm() {
|
|
|
206
155
|
}), t(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2.default)(["New Group"]))))
|
|
207
156
|
});
|
|
208
157
|
}
|
|
209
|
-
|
|
210
158
|
return /*#__PURE__*/_react.default.createElement(_form.Form, {
|
|
211
159
|
data: data,
|
|
212
160
|
onSubmit: onSubmit
|
|
213
161
|
}, function (_ref4) {
|
|
214
162
|
var data = _ref4.data,
|
|
215
|
-
|
|
216
|
-
|
|
163
|
+
form = _ref4.form,
|
|
164
|
+
Bind = _ref4.Bind;
|
|
217
165
|
return /*#__PURE__*/_react.default.createElement(_SimpleForm.SimpleForm, null, loading && /*#__PURE__*/_react.default.createElement(_Progress.CircularProgress, null), /*#__PURE__*/_react.default.createElement(_SimpleForm.SimpleFormHeader, {
|
|
218
166
|
title: data.name ? data.name : "Untitled"
|
|
219
167
|
}), /*#__PURE__*/_react.default.createElement(_SimpleForm.SimpleFormContent, null, /*#__PURE__*/_react.default.createElement(_Grid.Grid, null, /*#__PURE__*/_react.default.createElement(_Grid.Cell, {
|
|
@@ -274,5 +222,4 @@ var GroupsForm = function GroupsForm() {
|
|
|
274
222
|
}, t(_templateObject10 || (_templateObject10 = (0, _taggedTemplateLiteral2.default)(["Save group"])))))));
|
|
275
223
|
});
|
|
276
224
|
};
|
|
277
|
-
|
|
278
225
|
exports.GroupsForm = GroupsForm;
|