@webiny/app-security-access-management 0.0.0-ee-vpcs.549378cf03

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.
Files changed (82) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +115 -0
  3. package/components/GroupAutocomplete/graphql.d.ts +1 -0
  4. package/components/GroupAutocomplete/graphql.js +17 -0
  5. package/components/GroupAutocomplete/graphql.js.map +1 -0
  6. package/components/GroupAutocomplete/index.d.ts +5 -0
  7. package/components/GroupAutocomplete/index.js +31 -0
  8. package/components/GroupAutocomplete/index.js.map +1 -0
  9. package/components/NotAuthorizedError/NotAuthorizedError.d.ts +2 -0
  10. package/components/NotAuthorizedError/NotAuthorizedError.js +71 -0
  11. package/components/NotAuthorizedError/NotAuthorizedError.js.map +1 -0
  12. package/components/NotAuthorizedError/SecureRouteError.svg +1 -0
  13. package/components/NotAuthorizedError/index.d.ts +1 -0
  14. package/components/NotAuthorizedError/index.js +13 -0
  15. package/components/NotAuthorizedError/index.js.map +1 -0
  16. package/index.d.ts +9 -0
  17. package/index.js +80 -0
  18. package/index.js.map +1 -0
  19. package/package.json +65 -0
  20. package/plugins/constants.d.ts +4 -0
  21. package/plugins/constants.js +13 -0
  22. package/plugins/constants.js.map +1 -0
  23. package/plugins/index.d.ts +3 -0
  24. package/plugins/index.js +20 -0
  25. package/plugins/index.js.map +1 -0
  26. package/plugins/installation.d.ts +3 -0
  27. package/plugins/installation.js +121 -0
  28. package/plugins/installation.js.map +1 -0
  29. package/plugins/permissionRenderer/SecurityPermissions.d.ts +8 -0
  30. package/plugins/permissionRenderer/SecurityPermissions.js +199 -0
  31. package/plugins/permissionRenderer/SecurityPermissions.js.map +1 -0
  32. package/plugins/permissionRenderer/index.d.ts +3 -0
  33. package/plugins/permissionRenderer/index.js +39 -0
  34. package/plugins/permissionRenderer/index.js.map +1 -0
  35. package/plugins/routes.d.ts +3 -0
  36. package/plugins/routes.js +56 -0
  37. package/plugins/routes.js.map +1 -0
  38. package/plugins/secureRouteError.d.ts +7 -0
  39. package/plugins/secureRouteError.js +22 -0
  40. package/plugins/secureRouteError.js.map +1 -0
  41. package/types.d.ts +15 -0
  42. package/types.js +5 -0
  43. package/types.js.map +1 -0
  44. package/ui/elements/GroupAutocompleteElement.d.ts +6 -0
  45. package/ui/elements/GroupAutocompleteElement.js +64 -0
  46. package/ui/elements/GroupAutocompleteElement.js.map +1 -0
  47. package/ui/views/ApiKeys/ApiKeyForm.d.ts +5 -0
  48. package/ui/views/ApiKeys/ApiKeyForm.js +288 -0
  49. package/ui/views/ApiKeys/ApiKeyForm.js.map +1 -0
  50. package/ui/views/ApiKeys/ApiKeys.d.ts +8 -0
  51. package/ui/views/ApiKeys/ApiKeys.js +26 -0
  52. package/ui/views/ApiKeys/ApiKeys.js.map +1 -0
  53. package/ui/views/ApiKeys/ApiKeysDataList.d.ts +5 -0
  54. package/ui/views/ApiKeys/ApiKeysDataList.js +232 -0
  55. package/ui/views/ApiKeys/ApiKeysDataList.js.map +1 -0
  56. package/ui/views/ApiKeys/graphql.d.ts +5 -0
  57. package/ui/views/ApiKeys/graphql.js +26 -0
  58. package/ui/views/ApiKeys/graphql.js.map +1 -0
  59. package/ui/views/ApiKeys/index.d.ts +1 -0
  60. package/ui/views/ApiKeys/index.js +18 -0
  61. package/ui/views/ApiKeys/index.js.map +1 -0
  62. package/ui/views/ApiKeys/utils.d.ts +2 -0
  63. package/ui/views/ApiKeys/utils.js +18 -0
  64. package/ui/views/ApiKeys/utils.js.map +1 -0
  65. package/ui/views/Groups/Groups.d.ts +8 -0
  66. package/ui/views/Groups/Groups.js +26 -0
  67. package/ui/views/Groups/Groups.js.map +1 -0
  68. package/ui/views/Groups/GroupsDataList.d.ts +5 -0
  69. package/ui/views/Groups/GroupsDataList.js +239 -0
  70. package/ui/views/Groups/GroupsDataList.js.map +1 -0
  71. package/ui/views/Groups/GroupsForm.d.ts +5 -0
  72. package/ui/views/Groups/GroupsForm.js +278 -0
  73. package/ui/views/Groups/GroupsForm.js.map +1 -0
  74. package/ui/views/Groups/graphql.d.ts +5 -0
  75. package/ui/views/Groups/graphql.js +26 -0
  76. package/ui/views/Groups/graphql.js.map +1 -0
  77. package/ui/views/Groups/index.d.ts +1 -0
  78. package/ui/views/Groups/index.js +18 -0
  79. package/ui/views/Groups/index.js.map +1 -0
  80. package/ui/views/utils.d.ts +3 -0
  81. package/ui/views/utils.js +26 -0
  82. package/ui/views/utils.js.map +1 -0
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.UPDATE_API_KEY = exports.READ_API_KEY = exports.LIST_API_KEYS = exports.DELETE_API_KEY = exports.CREATE_API_KEY = void 0;
9
+
10
+ var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
11
+
12
+ var _graphqlTag = _interopRequireDefault(require("graphql-tag"));
13
+
14
+ var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5;
15
+
16
+ var fields = "\n id\n name\n description\n token\n permissions\n createdOn\n";
17
+ var LIST_API_KEYS = (0, _graphqlTag.default)(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n query ListApiKeys {\n security {\n apiKeys: listApiKeys {\n data {\n ", "\n }\n }\n }\n }\n"])), fields);
18
+ exports.LIST_API_KEYS = LIST_API_KEYS;
19
+ var READ_API_KEY = (0, _graphqlTag.default)(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2.default)(["\n query GetApiKey($id: ID!) {\n security {\n apiKey: getApiKey(id: $id){\n data {\n ", "\n }\n error {\n code\n message\n }\n }\n }\n }\n"])), fields);
20
+ exports.READ_API_KEY = READ_API_KEY;
21
+ var CREATE_API_KEY = (0, _graphqlTag.default)(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2.default)(["\n mutation CreateApiKey($data: SecurityApiKeyInput!){\n security {\n apiKey: createApiKey(data: $data) {\n data {\n ", "\n }\n error {\n code\n message\n data\n }\n }\n }\n }\n"])), fields);
22
+ exports.CREATE_API_KEY = CREATE_API_KEY;
23
+ var UPDATE_API_KEY = (0, _graphqlTag.default)(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2.default)(["\n mutation UpdateApiKey($id: ID!, $data: SecurityApiKeyInput!){\n security {\n apiKey: updateApiKey(id: $id, data: $data) {\n data {\n ", "\n }\n error {\n code\n message\n data\n }\n }\n }\n }\n"])), fields);
24
+ exports.UPDATE_API_KEY = UPDATE_API_KEY;
25
+ var DELETE_API_KEY = (0, _graphqlTag.default)(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2.default)(["\n mutation DeleteApiKey($id: ID!) {\n security {\n deleteApiKey(id: $id) {\n data\n error {\n code\n message\n }\n }\n }\n }\n"])));
26
+ exports.DELETE_API_KEY = DELETE_API_KEY;
@@ -0,0 +1 @@
1
+ {"version":3,"names":["fields","LIST_API_KEYS","gql","READ_API_KEY","CREATE_API_KEY","UPDATE_API_KEY","DELETE_API_KEY"],"sources":["graphql.ts"],"sourcesContent":["import gql from \"graphql-tag\";\n\nconst fields = `\n id\n name\n description\n token\n permissions\n createdOn\n`;\n\nexport const LIST_API_KEYS = gql`\n query ListApiKeys {\n security {\n apiKeys: listApiKeys {\n data {\n ${fields}\n }\n }\n }\n }\n`;\n\nexport const READ_API_KEY = gql`\n query GetApiKey($id: ID!) {\n security {\n apiKey: getApiKey(id: $id){\n data {\n ${fields}\n }\n error {\n code\n message\n }\n }\n }\n }\n`;\n\nexport const CREATE_API_KEY = gql`\n mutation CreateApiKey($data: SecurityApiKeyInput!){\n security {\n apiKey: createApiKey(data: $data) {\n data {\n ${fields}\n }\n error {\n code\n message\n data\n }\n }\n }\n }\n`;\n\nexport const UPDATE_API_KEY = gql`\n mutation UpdateApiKey($id: ID!, $data: SecurityApiKeyInput!){\n security {\n apiKey: updateApiKey(id: $id, data: $data) {\n data {\n ${fields}\n }\n error {\n code\n message\n data\n }\n }\n }\n }\n`;\n\nexport const DELETE_API_KEY = gql`\n mutation DeleteApiKey($id: ID!) {\n security {\n deleteApiKey(id: $id) {\n data\n error {\n code\n message\n }\n }\n }\n }\n`;\n"],"mappings":";;;;;;;;;;;AAAA;;;;AAEA,IAAMA,MAAM,qFAAZ;AASO,IAAMC,aAAa,OAAGC,mBAAH,6QAKLF,MALK,CAAnB;;AAYA,IAAMG,YAAY,OAAGD,mBAAH,gYAKHF,MALG,CAAlB;;AAgBA,IAAMI,cAAc,OAAGF,mBAAH,0bAKLF,MALK,CAApB;;AAiBA,IAAMK,cAAc,OAAGH,mBAAH,6cAKLF,MALK,CAApB;;AAiBA,IAAMM,cAAc,OAAGJ,mBAAH,kVAApB"}
@@ -0,0 +1 @@
1
+ export * from "./ApiKeys";
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+
7
+ var _ApiKeys = require("./ApiKeys");
8
+
9
+ Object.keys(_ApiKeys).forEach(function (key) {
10
+ if (key === "default" || key === "__esModule") return;
11
+ if (key in exports && exports[key] === _ApiKeys[key]) return;
12
+ Object.defineProperty(exports, key, {
13
+ enumerable: true,
14
+ get: function get() {
15
+ return _ApiKeys[key];
16
+ }
17
+ });
18
+ });
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["index.ts"],"sourcesContent":["export * from \"./ApiKeys\";\n"],"mappings":";;;;;;AAAA;;AAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA"}
@@ -0,0 +1,2 @@
1
+ import { ApiKey } from "../../../types";
2
+ export declare const pickDataForAPI: (data: ApiKey) => Pick<ApiKey, "name" | "description" | "permissions">;
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.pickDataForAPI = void 0;
9
+
10
+ var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
11
+
12
+ var _pick2 = _interopRequireDefault(require("lodash/pick"));
13
+
14
+ var pickDataForAPI = function pickDataForAPI(data) {
15
+ return (0, _objectSpread2.default)({}, (0, _pick2.default)(data, ["name", "description", "permissions"]));
16
+ };
17
+
18
+ exports.pickDataForAPI = pickDataForAPI;
@@ -0,0 +1 @@
1
+ {"version":3,"names":["pickDataForAPI","data"],"sources":["utils.ts"],"sourcesContent":["import { pick } from \"lodash\";\nimport { ApiKey } from \"~/types\";\n\nexport const pickDataForAPI = (\n data: ApiKey\n): Pick<ApiKey, \"name\" | \"description\" | \"permissions\"> => ({\n ...pick(data, [\"name\", \"description\", \"permissions\"])\n});\n"],"mappings":";;;;;;;;;;;;;AAGO,IAAMA,cAAc,GAAG,SAAjBA,cAAiB,CAC1BC,IAD0B;EAAA,uCAGvB,oBAAKA,IAAL,EAAW,CAAC,MAAD,EAAS,aAAT,EAAwB,aAAxB,CAAX,CAHuB;AAAA,CAAvB"}
@@ -0,0 +1,8 @@
1
+ import React from "react";
2
+ import { GroupsDataListProps } from "./GroupsDataList";
3
+ import { GroupsFormProps } from "./GroupsForm";
4
+ export interface GroupsProps {
5
+ listProps?: GroupsDataListProps;
6
+ formProps?: GroupsFormProps;
7
+ }
8
+ export declare const Groups: React.FC<GroupsProps>;
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.Groups = void 0;
9
+
10
+ var _react = _interopRequireDefault(require("react"));
11
+
12
+ var _SplitView = require("@webiny/app-admin/components/SplitView");
13
+
14
+ var _GroupsDataList = require("./GroupsDataList");
15
+
16
+ var _GroupsForm = require("./GroupsForm");
17
+
18
+ var Groups = function Groups(_ref) {
19
+ var _ref$formProps = _ref.formProps,
20
+ formProps = _ref$formProps === void 0 ? {} : _ref$formProps,
21
+ _ref$listProps = _ref.listProps,
22
+ listProps = _ref$listProps === void 0 ? {} : _ref$listProps;
23
+ return /*#__PURE__*/_react.default.createElement(_SplitView.SplitView, null, /*#__PURE__*/_react.default.createElement(_SplitView.LeftPanel, null, /*#__PURE__*/_react.default.createElement(_GroupsDataList.GroupsDataList, listProps)), /*#__PURE__*/_react.default.createElement(_SplitView.RightPanel, null, /*#__PURE__*/_react.default.createElement(_GroupsForm.GroupsForm, formProps)));
24
+ };
25
+
26
+ exports.Groups = Groups;
@@ -0,0 +1 @@
1
+ {"version":3,"names":["Groups","formProps","listProps"],"sources":["Groups.tsx"],"sourcesContent":["import React from \"react\";\nimport { SplitView, LeftPanel, RightPanel } from \"@webiny/app-admin/components/SplitView\";\nimport { GroupsDataList, GroupsDataListProps } from \"./GroupsDataList\";\nimport { GroupsForm, GroupsFormProps } from \"./GroupsForm\";\n\nexport interface GroupsProps {\n listProps?: GroupsDataListProps;\n formProps?: GroupsFormProps;\n}\nexport const Groups: React.FC<GroupsProps> = ({ formProps = {}, listProps = {} }) => {\n return (\n <SplitView>\n <LeftPanel>\n <GroupsDataList {...listProps} />\n </LeftPanel>\n <RightPanel>\n <GroupsForm {...formProps} />\n </RightPanel>\n </SplitView>\n );\n};\n"],"mappings":";;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AAMO,IAAMA,MAA6B,GAAG,SAAhCA,MAAgC,OAAwC;EAAA,0BAArCC,SAAqC;EAAA,IAArCA,SAAqC,+BAAzB,EAAyB;EAAA,0BAArBC,SAAqB;EAAA,IAArBA,SAAqB,+BAAT,EAAS;EACjF,oBACI,6BAAC,oBAAD,qBACI,6BAAC,oBAAD,qBACI,6BAAC,8BAAD,EAAoBA,SAApB,CADJ,CADJ,eAII,6BAAC,qBAAD,qBACI,6BAAC,sBAAD,EAAgBD,SAAhB,CADJ,CAJJ,CADJ;AAUH,CAXM"}
@@ -0,0 +1,5 @@
1
+ import React from "react";
2
+ export interface GroupsDataListProps {
3
+ [key: string]: any;
4
+ }
5
+ export declare const GroupsDataList: React.FC<GroupsDataListProps>;
@@ -0,0 +1,239 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+
5
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
6
+
7
+ Object.defineProperty(exports, "__esModule", {
8
+ value: true
9
+ });
10
+ exports.GroupsDataList = void 0;
11
+
12
+ var _regeneratorRuntime2 = _interopRequireDefault(require("@babel/runtime/helpers/regeneratorRuntime"));
13
+
14
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
15
+
16
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
17
+
18
+ var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
19
+
20
+ var _react = _interopRequireWildcard(require("react"));
21
+
22
+ var _orderBy = _interopRequireDefault(require("lodash/orderBy"));
23
+
24
+ var _i18n = require("@webiny/app/i18n");
25
+
26
+ var _List = require("@webiny/ui/List");
27
+
28
+ var _icons = require("@webiny/ui/List/DataList/icons");
29
+
30
+ var _reactRouter = require("@webiny/react-router");
31
+
32
+ var _useSnackbar2 = require("@webiny/app-admin/hooks/useSnackbar");
33
+
34
+ var _reactHooks = require("@apollo/react-hooks");
35
+
36
+ var _useConfirmationDialog = require("@webiny/app-admin/hooks/useConfirmationDialog");
37
+
38
+ var _graphql = require("./graphql");
39
+
40
+ var _Tooltip = require("@webiny/ui/Tooltip");
41
+
42
+ var _Button = require("@webiny/ui/Button");
43
+
44
+ var _Grid = require("@webiny/ui/Grid");
45
+
46
+ var _Select = require("@webiny/ui/Select");
47
+
48
+ var _SearchUI = _interopRequireDefault(require("@webiny/app-admin/components/SearchUI"));
49
+
50
+ var _add18px = require("@webiny/app-admin/assets/icons/add-18px.svg");
51
+
52
+ var _filter24px = require("@webiny/app-admin/assets/icons/filter-24px.svg");
53
+
54
+ var _utils = require("../utils");
55
+
56
+ var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9, _templateObject10;
57
+
58
+ var t = _i18n.i18n.ns("app-security/admin/groups/data-list");
59
+
60
+ var SORTERS = [{
61
+ label: t(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["Newest to oldest"]))),
62
+ sorter: "createdOn_DESC"
63
+ }, {
64
+ label: t(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2.default)(["Oldest to newest"]))),
65
+ sorter: "createdOn_ASC"
66
+ }, {
67
+ label: t(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2.default)(["Name A-Z"]))),
68
+ sorter: "name_ASC"
69
+ }, {
70
+ label: t(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2.default)(["Name Z-A"]))),
71
+ sorter: "name_DESC"
72
+ }];
73
+
74
+ var GroupsDataList = function GroupsDataList() {
75
+ var _useState = (0, _react.useState)(""),
76
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
77
+ filter = _useState2[0],
78
+ setFilter = _useState2[1];
79
+
80
+ var _useState3 = (0, _react.useState)(SORTERS[0].sorter),
81
+ _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
82
+ sort = _useState4[0],
83
+ setSort = _useState4[1];
84
+
85
+ var _useRouter = (0, _reactRouter.useRouter)(),
86
+ history = _useRouter.history,
87
+ location = _useRouter.location;
88
+
89
+ var _useSnackbar = (0, _useSnackbar2.useSnackbar)(),
90
+ showSnackbar = _useSnackbar.showSnackbar;
91
+
92
+ var _useConfirmationDialo = (0, _useConfirmationDialog.useConfirmationDialog)({
93
+ dataTestId: "default-data-list.delete-dialog"
94
+ }),
95
+ showConfirmation = _useConfirmationDialo.showConfirmation;
96
+
97
+ var _useQuery = (0, _reactHooks.useQuery)(_graphql.LIST_GROUPS),
98
+ listResponse = _useQuery.data,
99
+ listLoading = _useQuery.loading;
100
+
101
+ var _useMutation = (0, _reactHooks.useMutation)(_graphql.DELETE_GROUP, {
102
+ refetchQueries: [{
103
+ query: _graphql.LIST_GROUPS
104
+ }]
105
+ }),
106
+ _useMutation2 = (0, _slicedToArray2.default)(_useMutation, 2),
107
+ deleteIt = _useMutation2[0],
108
+ deleteLoading = _useMutation2[1].loading;
109
+
110
+ var data = listLoading && !listResponse ? [] : listResponse.security.groups.data;
111
+ var id = new URLSearchParams(location.search).get("id");
112
+ var filterGroup = (0, _react.useCallback)(function (_ref) {
113
+ var name = _ref.name,
114
+ slug = _ref.slug,
115
+ description = _ref.description;
116
+ return name.toLowerCase().includes(filter) || slug.toLowerCase().includes(filter) || description && description.toLowerCase().includes(filter);
117
+ }, [filter]);
118
+ var sortGroups = (0, _react.useCallback)(function (groups) {
119
+ if (!sort) {
120
+ return groups;
121
+ }
122
+
123
+ var _deserializeSorters = (0, _utils.deserializeSorters)(sort),
124
+ _deserializeSorters2 = (0, _slicedToArray2.default)(_deserializeSorters, 2),
125
+ key = _deserializeSorters2[0],
126
+ sortBy = _deserializeSorters2[1];
127
+
128
+ return (0, _orderBy.default)(groups, [key], [sortBy]);
129
+ }, [sort]);
130
+ var deleteItem = (0, _react.useCallback)(function (item) {
131
+ showConfirmation( /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee() {
132
+ var _yield$deleteIt, data, error;
133
+
134
+ return (0, _regeneratorRuntime2.default)().wrap(function _callee$(_context) {
135
+ while (1) {
136
+ switch (_context.prev = _context.next) {
137
+ case 0:
138
+ _context.next = 2;
139
+ return deleteIt({
140
+ variables: item
141
+ });
142
+
143
+ case 2:
144
+ _yield$deleteIt = _context.sent;
145
+ data = _yield$deleteIt.data;
146
+ error = data.security.deleteGroup.error;
147
+
148
+ if (!error) {
149
+ _context.next = 7;
150
+ break;
151
+ }
152
+
153
+ return _context.abrupt("return", showSnackbar(error.message));
154
+
155
+ case 7:
156
+ showSnackbar(t(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2.default)(["Group \"{slug}\" deleted."])))({
157
+ slug: item.slug
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
+ }
168
+ }
169
+ }, _callee);
170
+ })));
171
+ }, [id]);
172
+ var groupsDataListModalOverlay = (0, _react.useMemo)(function () {
173
+ return /*#__PURE__*/_react.default.createElement(_List.DataListModalOverlay, null, /*#__PURE__*/_react.default.createElement(_Grid.Grid, null, /*#__PURE__*/_react.default.createElement(_Grid.Cell, {
174
+ span: 12
175
+ }, /*#__PURE__*/_react.default.createElement(_Select.Select, {
176
+ value: sort,
177
+ onChange: setSort,
178
+ label: t(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteral2.default)(["Sort by"])))
179
+ }, SORTERS.map(function (_ref3) {
180
+ var label = _ref3.label,
181
+ sorter = _ref3.sorter;
182
+ return /*#__PURE__*/_react.default.createElement("option", {
183
+ key: label,
184
+ value: sorter
185
+ }, label);
186
+ })))));
187
+ }, [sort]);
188
+ var filteredData = filter === "" ? data : data.filter(filterGroup);
189
+ var groupList = sortGroups(filteredData);
190
+ return /*#__PURE__*/_react.default.createElement(_List.DataList, {
191
+ title: t(_templateObject7 || (_templateObject7 = (0, _taggedTemplateLiteral2.default)(["Groups"]))),
192
+ actions: /*#__PURE__*/_react.default.createElement(_Button.ButtonSecondary, {
193
+ "data-testid": "new-record-button",
194
+ onClick: function onClick() {
195
+ return history.push("/access-management/groups?new=true");
196
+ }
197
+ }, /*#__PURE__*/_react.default.createElement(_Button.ButtonIcon, {
198
+ icon: /*#__PURE__*/_react.default.createElement(_add18px.ReactComponent, null)
199
+ }), " ", t(_templateObject8 || (_templateObject8 = (0, _taggedTemplateLiteral2.default)(["New Group"])))),
200
+ data: groupList,
201
+ loading: listLoading || deleteLoading,
202
+ search: /*#__PURE__*/_react.default.createElement(_SearchUI.default, {
203
+ value: filter,
204
+ onChange: setFilter,
205
+ inputPlaceholder: t(_templateObject9 || (_templateObject9 = (0, _taggedTemplateLiteral2.default)(["Search Groups"])))
206
+ }),
207
+ modalOverlay: groupsDataListModalOverlay,
208
+ modalOverlayAction: /*#__PURE__*/_react.default.createElement(_List.DataListModalOverlayAction, {
209
+ icon: /*#__PURE__*/_react.default.createElement(_filter24px.ReactComponent, null),
210
+ "data-testid": "default-data-list.filter"
211
+ })
212
+ }, function (_ref4) {
213
+ var data = _ref4.data;
214
+ return /*#__PURE__*/_react.default.createElement(_List.ScrollList, {
215
+ "data-testid": "default-data-list"
216
+ }, data.map(function (item) {
217
+ return /*#__PURE__*/_react.default.createElement(_List.ListItem, {
218
+ key: item.id,
219
+ selected: item.id === id
220
+ }, /*#__PURE__*/_react.default.createElement(_List.ListItemText, {
221
+ onClick: function onClick() {
222
+ return history.push("/access-management/groups?id=".concat(item.id));
223
+ }
224
+ }, item.name, /*#__PURE__*/_react.default.createElement(_List.ListItemTextSecondary, null, item.description)), /*#__PURE__*/_react.default.createElement(_List.ListItemMeta, null, /*#__PURE__*/_react.default.createElement(_List.ListActions, null, !item.system ? /*#__PURE__*/_react.default.createElement(_icons.DeleteIcon, {
225
+ onClick: function onClick() {
226
+ return deleteItem(item);
227
+ },
228
+ "data-testid": "default-data-list.delete"
229
+ }) : /*#__PURE__*/_react.default.createElement(_Tooltip.Tooltip, {
230
+ placement: "bottom",
231
+ content: /*#__PURE__*/_react.default.createElement("span", null, t(_templateObject10 || (_templateObject10 = (0, _taggedTemplateLiteral2.default)(["You can't delete this group."]))))
232
+ }, /*#__PURE__*/_react.default.createElement(_icons.DeleteIcon, {
233
+ disabled: true
234
+ })))));
235
+ }));
236
+ });
237
+ };
238
+
239
+ exports.GroupsDataList = GroupsDataList;
@@ -0,0 +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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"}
@@ -0,0 +1,5 @@
1
+ import React from "react";
2
+ export interface GroupsFormProps {
3
+ [key: string]: any;
4
+ }
5
+ export declare const GroupsForm: React.FC<GroupsFormProps>;