@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,278 @@
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.GroupsForm = void 0;
11
+
12
+ var _regeneratorRuntime2 = _interopRequireDefault(require("@babel/runtime/helpers/regeneratorRuntime"));
13
+
14
+ var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
15
+
16
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
17
+
18
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
19
+
20
+ var _react = _interopRequireWildcard(require("react"));
21
+
22
+ var _reactHooks = require("@apollo/react-hooks");
23
+
24
+ var _styled = _interopRequireDefault(require("@emotion/styled"));
25
+
26
+ var _pick = _interopRequireDefault(require("lodash/pick"));
27
+
28
+ var _get = _interopRequireDefault(require("lodash/get"));
29
+
30
+ var _reactRouter = require("@webiny/react-router");
31
+
32
+ var _i18n = require("@webiny/app/i18n");
33
+
34
+ var _form = require("@webiny/form");
35
+
36
+ var _Grid = require("@webiny/ui/Grid");
37
+
38
+ var _Input = require("@webiny/ui/Input");
39
+
40
+ var _Alert = require("@webiny/ui/Alert");
41
+
42
+ var _Button = require("@webiny/ui/Button");
43
+
44
+ var _Progress = require("@webiny/ui/Progress");
45
+
46
+ var _validation = require("@webiny/validation");
47
+
48
+ var _SimpleForm = require("@webiny/app-admin/components/SimpleForm");
49
+
50
+ var _Typography = require("@webiny/ui/Typography");
51
+
52
+ var _Permissions = require("@webiny/app-admin/components/Permissions");
53
+
54
+ var _useSnackbar2 = require("@webiny/app-admin/hooks/useSnackbar");
55
+
56
+ var _graphql = require("./graphql");
57
+
58
+ var _Snackbar = require("@webiny/ui/Snackbar");
59
+
60
+ var _isEmpty = _interopRequireDefault(require("lodash/isEmpty"));
61
+
62
+ var _EmptyView = _interopRequireDefault(require("@webiny/app-admin/components/EmptyView"));
63
+
64
+ var _add18px = require("@webiny/app-admin/assets/icons/add-18px.svg");
65
+
66
+ var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9, _templateObject10;
67
+
68
+ var t = _i18n.i18n.ns("app-security/admin/groups/form");
69
+
70
+ var ButtonWrapper = /*#__PURE__*/(0, _styled.default)("div", {
71
+ target: "euuiyav0",
72
+ label: "ButtonWrapper"
73
+ })({
74
+ display: "flex",
75
+ justifyContent: "space-between"
76
+ });
77
+
78
+ var GroupsForm = function GroupsForm() {
79
+ var _useRouter = (0, _reactRouter.useRouter)(),
80
+ location = _useRouter.location,
81
+ history = _useRouter.history;
82
+
83
+ var _useSnackbar = (0, _useSnackbar2.useSnackbar)(),
84
+ showSnackbar = _useSnackbar.showSnackbar;
85
+
86
+ var newGroup = new URLSearchParams(location.search).get("new") === "true";
87
+ var id = new URLSearchParams(location.search).get("id");
88
+ var getQuery = (0, _reactHooks.useQuery)(_graphql.READ_GROUP, {
89
+ variables: {
90
+ id: id
91
+ },
92
+ skip: !id,
93
+ onCompleted: function onCompleted(data) {
94
+ if (!data) {
95
+ return;
96
+ }
97
+
98
+ var error = data.security.group.error;
99
+
100
+ if (error) {
101
+ history.push("/access-management/groups");
102
+ showSnackbar(error.message);
103
+ }
104
+ }
105
+ });
106
+
107
+ var _useMutation = (0, _reactHooks.useMutation)(_graphql.CREATE_GROUP, {
108
+ refetchQueries: [{
109
+ query: _graphql.LIST_GROUPS
110
+ }]
111
+ }),
112
+ _useMutation2 = (0, _slicedToArray2.default)(_useMutation, 2),
113
+ create = _useMutation2[0],
114
+ createMutation = _useMutation2[1];
115
+
116
+ var _useMutation3 = (0, _reactHooks.useMutation)(_graphql.UPDATE_GROUP, {
117
+ refetchQueries: [{
118
+ query: _graphql.LIST_GROUPS
119
+ }]
120
+ }),
121
+ _useMutation4 = (0, _slicedToArray2.default)(_useMutation3, 2),
122
+ update = _useMutation4[0],
123
+ updateMutation = _useMutation4[1];
124
+
125
+ var loading = [getQuery, createMutation, updateMutation].find(function (item) {
126
+ return item.loading;
127
+ });
128
+ var onSubmit = (0, _react.useCallback)( /*#__PURE__*/function () {
129
+ var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee(data) {
130
+ var isUpdate, _ref2, _ref3, operation, args, response, _response$data$securi, group, error;
131
+
132
+ return (0, _regeneratorRuntime2.default)().wrap(function _callee$(_context) {
133
+ while (1) {
134
+ switch (_context.prev = _context.next) {
135
+ case 0:
136
+ if (!(!data.permissions || !data.permissions.length)) {
137
+ _context.next = 3;
138
+ break;
139
+ }
140
+
141
+ showSnackbar(t(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["You must configure permissions before saving!"]))), {
142
+ timeout: 60000,
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;
172
+ }
173
+
174
+ return _context.abrupt("return", showSnackbar(error.message));
175
+
176
+ case 11:
177
+ !isUpdate && history.push("/access-management/groups?id=".concat(group.id));
178
+ showSnackbar(t(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2.default)(["Group saved successfully!"]))));
179
+
180
+ case 13:
181
+ case "end":
182
+ return _context.stop();
183
+ }
184
+ }
185
+ }, _callee);
186
+ }));
187
+
188
+ return function (_x) {
189
+ return _ref.apply(this, arguments);
190
+ };
191
+ }(), [id]);
192
+ var data = loading ? {} : (0, _get.default)(getQuery, "data.security.group.data", {});
193
+ var systemGroup = data.slug === "full-access";
194
+ var showEmptyView = !newGroup && !loading && (0, _isEmpty.default)(data); // Render "No content" selected view.
195
+
196
+ if (showEmptyView) {
197
+ return /*#__PURE__*/_react.default.createElement(_EmptyView.default, {
198
+ title: t(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2.default)(["Click on the left side list to display group details or create a..."]))),
199
+ action: /*#__PURE__*/_react.default.createElement(_Button.ButtonDefault, {
200
+ "data-testid": "new-record-button",
201
+ onClick: function onClick() {
202
+ return history.push("/access-management/groups?new=true");
203
+ }
204
+ }, /*#__PURE__*/_react.default.createElement(_Button.ButtonIcon, {
205
+ icon: /*#__PURE__*/_react.default.createElement(_add18px.ReactComponent, null)
206
+ }), t(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2.default)(["New Group"]))))
207
+ });
208
+ }
209
+
210
+ return /*#__PURE__*/_react.default.createElement(_form.Form, {
211
+ data: data,
212
+ onSubmit: onSubmit
213
+ }, function (_ref4) {
214
+ var data = _ref4.data,
215
+ form = _ref4.form,
216
+ Bind = _ref4.Bind;
217
+ return /*#__PURE__*/_react.default.createElement(_SimpleForm.SimpleForm, null, loading && /*#__PURE__*/_react.default.createElement(_Progress.CircularProgress, null), /*#__PURE__*/_react.default.createElement(_SimpleForm.SimpleFormHeader, {
218
+ title: data.name ? data.name : "Untitled"
219
+ }), /*#__PURE__*/_react.default.createElement(_SimpleForm.SimpleFormContent, null, /*#__PURE__*/_react.default.createElement(_Grid.Grid, null, /*#__PURE__*/_react.default.createElement(_Grid.Cell, {
220
+ span: 6
221
+ }, /*#__PURE__*/_react.default.createElement(Bind, {
222
+ name: "name",
223
+ validators: _validation.validation.create("required,minLength:3")
224
+ }, /*#__PURE__*/_react.default.createElement(_Input.Input, {
225
+ label: t(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2.default)(["Name"]))),
226
+ disabled: systemGroup,
227
+ "data-testid": "admin.am.group.new.name"
228
+ }))), /*#__PURE__*/_react.default.createElement(_Grid.Cell, {
229
+ span: 6
230
+ }, /*#__PURE__*/_react.default.createElement(Bind, {
231
+ name: "slug",
232
+ validators: _validation.validation.create("required,minLength:3")
233
+ }, /*#__PURE__*/_react.default.createElement(_Input.Input, {
234
+ disabled: Boolean(data.id),
235
+ label: t(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteral2.default)(["Slug"]))),
236
+ "data-testid": "admin.am.group.new.slug"
237
+ })))), /*#__PURE__*/_react.default.createElement(_Grid.Grid, null, /*#__PURE__*/_react.default.createElement(_Grid.Cell, {
238
+ span: 12
239
+ }, /*#__PURE__*/_react.default.createElement(Bind, {
240
+ name: "description",
241
+ validators: _validation.validation.create("maxLength:500")
242
+ }, /*#__PURE__*/_react.default.createElement(_Input.Input, {
243
+ label: t(_templateObject7 || (_templateObject7 = (0, _taggedTemplateLiteral2.default)(["Description"]))),
244
+ rows: 3,
245
+ disabled: systemGroup,
246
+ "data-testid": "admin.am.group.new.description"
247
+ })))), systemGroup && /*#__PURE__*/_react.default.createElement(_Grid.Grid, null, /*#__PURE__*/_react.default.createElement(_Grid.Cell, {
248
+ span: 12
249
+ }, /*#__PURE__*/_react.default.createElement(_Alert.Alert, {
250
+ type: "info",
251
+ title: "Permissions are locked"
252
+ }, "This is a protected system group and you can't modify its permissions."))), !systemGroup && /*#__PURE__*/_react.default.createElement(_Grid.Grid, null, /*#__PURE__*/_react.default.createElement(_Grid.Cell, {
253
+ span: 12
254
+ }, /*#__PURE__*/_react.default.createElement(_Typography.Typography, {
255
+ use: "subtitle1"
256
+ }, t(_templateObject8 || (_templateObject8 = (0, _taggedTemplateLiteral2.default)(["Permissions"]))))), /*#__PURE__*/_react.default.createElement(_Grid.Cell, {
257
+ span: 12
258
+ }, /*#__PURE__*/_react.default.createElement(Bind, {
259
+ name: "permissions",
260
+ defaultValue: []
261
+ }, function (bind) {
262
+ return /*#__PURE__*/_react.default.createElement(_Permissions.Permissions, Object.assign({
263
+ id: data.id || "new"
264
+ }, bind));
265
+ })))), systemGroup ? null : /*#__PURE__*/_react.default.createElement(_SimpleForm.SimpleFormFooter, null, /*#__PURE__*/_react.default.createElement(ButtonWrapper, null, /*#__PURE__*/_react.default.createElement(_Button.ButtonDefault, {
266
+ onClick: function onClick() {
267
+ return history.push("/access-management/groups");
268
+ }
269
+ }, t(_templateObject9 || (_templateObject9 = (0, _taggedTemplateLiteral2.default)(["Cancel"])))), /*#__PURE__*/_react.default.createElement(_Button.ButtonPrimary, {
270
+ "data-testid": "admin.am.group.new.save",
271
+ onClick: function onClick(ev) {
272
+ form.submit(ev);
273
+ }
274
+ }, t(_templateObject10 || (_templateObject10 = (0, _taggedTemplateLiteral2.default)(["Save group"])))))));
275
+ });
276
+ };
277
+
278
+ exports.GroupsForm = GroupsForm;
@@ -0,0 +1 @@
1
+ {"version":3,"names":["t","i18n","ns","ButtonWrapper","styled","display","justifyContent","GroupsForm","useRouter","location","history","useSnackbar","showSnackbar","newGroup","URLSearchParams","search","get","id","getQuery","useQuery","READ_GROUP","variables","skip","onCompleted","data","error","security","group","push","message","useMutation","CREATE_GROUP","refetchQueries","query","LIST_GROUPS","create","createMutation","UPDATE_GROUP","update","updateMutation","loading","find","item","onSubmit","useCallback","permissions","length","timeout","dismissesOnAction","action","isUpdate","createdOn","pick","operation","args","response","systemGroup","slug","showEmptyView","isEmpty","form","Bind","name","validation","Boolean","bind","ev","submit"],"sources":["GroupsForm.tsx"],"sourcesContent":["import React, { useCallback } from \"react\";\nimport { useMutation, useQuery } from \"@apollo/react-hooks\";\nimport styled from \"@emotion/styled\";\nimport pick from \"lodash/pick\";\nimport get from \"lodash/get\";\nimport { useRouter } from \"@webiny/react-router\";\nimport { i18n } from \"@webiny/app/i18n\";\nimport { Form } from \"@webiny/form\";\nimport { Grid, Cell } from \"@webiny/ui/Grid\";\nimport { Input } from \"@webiny/ui/Input\";\nimport { Alert } from \"@webiny/ui/Alert\";\nimport { ButtonDefault, ButtonIcon, ButtonPrimary } from \"@webiny/ui/Button\";\nimport { CircularProgress } from \"@webiny/ui/Progress\";\nimport { validation } from \"@webiny/validation\";\nimport {\n SimpleForm,\n SimpleFormFooter,\n SimpleFormContent,\n SimpleFormHeader\n} from \"@webiny/app-admin/components/SimpleForm\";\nimport { Typography } from \"@webiny/ui/Typography\";\nimport { Permissions } from \"@webiny/app-admin/components/Permissions\";\nimport { useSnackbar } from \"@webiny/app-admin/hooks/useSnackbar\";\nimport { CREATE_GROUP, LIST_GROUPS, READ_GROUP, UPDATE_GROUP } from \"./graphql\";\nimport { SnackbarAction } from \"@webiny/ui/Snackbar\";\nimport isEmpty from \"lodash/isEmpty\";\nimport EmptyView from \"@webiny/app-admin/components/EmptyView\";\nimport { ReactComponent as AddIcon } from \"@webiny/app-admin/assets/icons/add-18px.svg\";\n\nconst t = i18n.ns(\"app-security/admin/groups/form\");\n\nconst ButtonWrapper = styled(\"div\")({\n display: \"flex\",\n justifyContent: \"space-between\"\n});\n\nexport interface GroupsFormProps {\n // TODO @ts-refactor delete and go up the tree and sort it out\n [key: string]: any;\n}\nexport const GroupsForm: React.FC<GroupsFormProps> = () => {\n const { location, history } = useRouter();\n const { showSnackbar } = useSnackbar();\n const newGroup = new URLSearchParams(location.search).get(\"new\") === \"true\";\n const id = new URLSearchParams(location.search).get(\"id\");\n\n const getQuery = useQuery(READ_GROUP, {\n variables: { id },\n skip: !id,\n onCompleted: data => {\n if (!data) {\n return;\n }\n\n const { error } = data.security.group;\n if (error) {\n history.push(\"/access-management/groups\");\n showSnackbar(error.message);\n }\n }\n });\n\n const [create, createMutation] = useMutation(CREATE_GROUP, {\n refetchQueries: [{ query: LIST_GROUPS }]\n });\n\n const [update, updateMutation] = useMutation(UPDATE_GROUP, {\n refetchQueries: [{ query: LIST_GROUPS }]\n });\n\n const loading = [getQuery, createMutation, updateMutation].find(item => item.loading);\n\n const onSubmit = useCallback(\n async data => {\n if (!data.permissions || !data.permissions.length) {\n showSnackbar(t`You must configure permissions before saving!`, {\n timeout: 60000,\n dismissesOnAction: true,\n action: <SnackbarAction label={\"OK\"} />\n });\n return;\n }\n\n const isUpdate = data.createdOn;\n const [operation, args] = isUpdate\n ? [\n update,\n {\n variables: {\n id: data.id,\n data: pick(data, [\"name\", \"description\", \"permissions\"])\n }\n }\n ]\n : [\n create,\n {\n variables: {\n data: pick(data, [\"name\", \"slug\", \"description\", \"permissions\"])\n }\n }\n ];\n\n const response = await operation(args);\n\n const { data: group, error } = response.data.security.group;\n if (error) {\n return showSnackbar(error.message);\n }\n\n !isUpdate && history.push(`/access-management/groups?id=${group.id}`);\n showSnackbar(t`Group saved successfully!`);\n },\n [id]\n );\n\n const data = loading ? {} : get(getQuery, \"data.security.group.data\", {});\n\n const systemGroup = data.slug === \"full-access\";\n\n const showEmptyView = !newGroup && !loading && isEmpty(data);\n // Render \"No content\" selected view.\n if (showEmptyView) {\n return (\n <EmptyView\n title={t`Click on the left side list to display group details or create a...`}\n action={\n <ButtonDefault\n data-testid=\"new-record-button\"\n onClick={() => history.push(\"/access-management/groups?new=true\")}\n >\n <ButtonIcon icon={<AddIcon />} />\n {t`New Group`}\n </ButtonDefault>\n }\n />\n );\n }\n\n return (\n <Form data={data} onSubmit={onSubmit}>\n {({ data, form, Bind }) => {\n return (\n <SimpleForm>\n {loading && <CircularProgress />}\n <SimpleFormHeader title={data.name ? data.name : \"Untitled\"} />\n <SimpleFormContent>\n <Grid>\n <Cell span={6}>\n <Bind\n name=\"name\"\n validators={validation.create(\"required,minLength:3\")}\n >\n <Input\n label={t`Name`}\n disabled={systemGroup}\n data-testid=\"admin.am.group.new.name\"\n />\n </Bind>\n </Cell>\n <Cell span={6}>\n <Bind\n name=\"slug\"\n validators={validation.create(\"required,minLength:3\")}\n >\n <Input\n disabled={Boolean(data.id)}\n label={t`Slug`}\n data-testid=\"admin.am.group.new.slug\"\n />\n </Bind>\n </Cell>\n </Grid>\n <Grid>\n <Cell span={12}>\n <Bind\n name=\"description\"\n validators={validation.create(\"maxLength:500\")}\n >\n <Input\n label={t`Description`}\n rows={3}\n disabled={systemGroup}\n data-testid=\"admin.am.group.new.description\"\n />\n </Bind>\n </Cell>\n </Grid>\n {systemGroup && (\n <Grid>\n <Cell span={12}>\n <Alert type={\"info\"} title={\"Permissions are locked\"}>\n This is a protected system group and you can&apos;t\n modify its permissions.\n </Alert>\n </Cell>\n </Grid>\n )}\n {!systemGroup && (\n <Grid>\n <Cell span={12}>\n <Typography use={\"subtitle1\"}>{t`Permissions`}</Typography>\n </Cell>\n <Cell span={12}>\n <Bind name={\"permissions\"} defaultValue={[]}>\n {bind => (\n <Permissions id={data.id || \"new\"} {...bind} />\n )}\n </Bind>\n </Cell>\n </Grid>\n )}\n </SimpleFormContent>\n {systemGroup ? null : (\n <SimpleFormFooter>\n <ButtonWrapper>\n <ButtonDefault\n onClick={() => history.push(\"/access-management/groups\")}\n >{t`Cancel`}</ButtonDefault>\n <ButtonPrimary\n data-testid=\"admin.am.group.new.save\"\n onClick={ev => {\n form.submit(ev);\n }}\n >{t`Save group`}</ButtonPrimary>\n </ButtonWrapper>\n </SimpleFormFooter>\n )}\n </SimpleForm>\n );\n }}\n </Form>\n );\n};\n"],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export declare const LIST_GROUPS: import("graphql").DocumentNode;
2
+ export declare const READ_GROUP: import("graphql").DocumentNode;
3
+ export declare const CREATE_GROUP: import("graphql").DocumentNode;
4
+ export declare const UPDATE_GROUP: import("graphql").DocumentNode;
5
+ export declare const DELETE_GROUP: import("graphql").DocumentNode;
@@ -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_GROUP = exports.READ_GROUP = exports.LIST_GROUPS = exports.DELETE_GROUP = exports.CREATE_GROUP = 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 slug\n description\n permissions\n system\n createdOn\n";
17
+ var LIST_GROUPS = (0, _graphqlTag.default)(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n query listGroups {\n security {\n groups: listGroups {\n data {\n ", "\n }\n }\n }\n }\n"])), fields);
18
+ exports.LIST_GROUPS = LIST_GROUPS;
19
+ var READ_GROUP = (0, _graphqlTag.default)(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2.default)(["\n query getGroup($id: ID!) {\n security {\n group: getGroup(where: { id: $id }){\n data {\n ", "\n }\n error {\n code\n message\n }\n }\n }\n }\n"])), fields);
20
+ exports.READ_GROUP = READ_GROUP;
21
+ var CREATE_GROUP = (0, _graphqlTag.default)(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2.default)(["\n mutation createGroup($data: SecurityGroupCreateInput!){\n security {\n group: createGroup(data: $data) {\n data {\n ", "\n }\n error {\n code\n message\n data\n }\n }\n }\n }\n"])), fields);
22
+ exports.CREATE_GROUP = CREATE_GROUP;
23
+ var UPDATE_GROUP = (0, _graphqlTag.default)(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2.default)(["\n mutation updateGroup($id: ID!, $data: SecurityGroupUpdateInput!){\n security {\n group: updateGroup(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_GROUP = UPDATE_GROUP;
25
+ var DELETE_GROUP = (0, _graphqlTag.default)(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2.default)(["\n mutation deleteGroup($id: ID!) {\n security {\n deleteGroup(id: $id) {\n data\n error {\n code\n message\n }\n }\n }\n }\n"])));
26
+ exports.DELETE_GROUP = DELETE_GROUP;
@@ -0,0 +1 @@
1
+ {"version":3,"names":["fields","LIST_GROUPS","gql","READ_GROUP","CREATE_GROUP","UPDATE_GROUP","DELETE_GROUP"],"sources":["graphql.ts"],"sourcesContent":["import gql from \"graphql-tag\";\n\nconst fields = `\n id\n name\n slug\n description\n permissions\n system\n createdOn\n`;\n\nexport const LIST_GROUPS = gql`\n query listGroups {\n security {\n groups: listGroups {\n data {\n ${fields}\n }\n }\n }\n }\n`;\n\nexport const READ_GROUP = gql`\n query getGroup($id: ID!) {\n security {\n group: getGroup(where: { id: $id }){\n data {\n ${fields}\n }\n error {\n code\n message\n }\n }\n }\n }\n`;\n\nexport const CREATE_GROUP = gql`\n mutation createGroup($data: SecurityGroupCreateInput!){\n security {\n group: createGroup(data: $data) {\n data {\n ${fields}\n }\n error {\n code\n message\n data\n }\n }\n }\n }\n`;\n\nexport const UPDATE_GROUP = gql`\n mutation updateGroup($id: ID!, $data: SecurityGroupUpdateInput!){\n security {\n group: updateGroup(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_GROUP = gql`\n mutation deleteGroup($id: ID!) {\n security {\n deleteGroup(id: $id) {\n data\n error {\n code\n message\n }\n }\n }\n }\n`;\n"],"mappings":";;;;;;;;;;;AAAA;;;;AAEA,IAAMA,MAAM,gGAAZ;AAUO,IAAMC,WAAW,OAAGC,mBAAH,2QAKFF,MALE,CAAjB;;AAYA,IAAMG,UAAU,OAAGD,mBAAH,wYAKDF,MALC,CAAhB;;AAgBA,IAAMI,YAAY,OAAGF,mBAAH,4bAKHF,MALG,CAAlB;;AAiBA,IAAMK,YAAY,OAAGH,mBAAH,+cAKHF,MALG,CAAlB;;AAiBA,IAAMM,YAAY,OAAGJ,mBAAH,gVAAlB"}
@@ -0,0 +1 @@
1
+ export * from "./Groups";
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+
7
+ var _Groups = require("./Groups");
8
+
9
+ Object.keys(_Groups).forEach(function (key) {
10
+ if (key === "default" || key === "__esModule") return;
11
+ if (key in exports && exports[key] === _Groups[key]) return;
12
+ Object.defineProperty(exports, key, {
13
+ enumerable: true,
14
+ get: function get() {
15
+ return _Groups[key];
16
+ }
17
+ });
18
+ });
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["index.ts"],"sourcesContent":["export * from \"./Groups\";\n"],"mappings":";;;;;;AAAA;;AAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA"}
@@ -0,0 +1,3 @@
1
+ declare type SortTypes = "asc" | "desc";
2
+ export declare const deserializeSorters: (data: string) => [string, SortTypes];
3
+ export {};
@@ -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.deserializeSorters = void 0;
9
+
10
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
11
+
12
+ var deserializeSorters = function deserializeSorters(data) {
13
+ if (typeof data !== "string") {
14
+ return data;
15
+ }
16
+
17
+ var _ref = data.split("_"),
18
+ _ref2 = (0, _slicedToArray2.default)(_ref, 2),
19
+ field = _ref2[0],
20
+ orderBy = _ref2[1];
21
+
22
+ var order = String(orderBy).toLowerCase() === "asc" ? "asc" : "desc";
23
+ return [field, order];
24
+ };
25
+
26
+ exports.deserializeSorters = deserializeSorters;
@@ -0,0 +1 @@
1
+ {"version":3,"names":["deserializeSorters","data","split","field","orderBy","order","String","toLowerCase"],"sources":["utils.ts"],"sourcesContent":["type SortTypes = \"asc\" | \"desc\";\nexport const deserializeSorters = (data: string): [string, SortTypes] => {\n if (typeof data !== \"string\") {\n return data;\n }\n const [field, orderBy] = data.split(\"_\") as [string, SortTypes];\n const order = String(orderBy).toLowerCase() === \"asc\" ? \"asc\" : \"desc\";\n return [field, order];\n};\n"],"mappings":";;;;;;;;;;;AACO,IAAMA,kBAAkB,GAAG,SAArBA,kBAAqB,CAACC,IAAD,EAAuC;EACrE,IAAI,OAAOA,IAAP,KAAgB,QAApB,EAA8B;IAC1B,OAAOA,IAAP;EACH;;EACD,WAAyBA,IAAI,CAACC,KAAL,CAAW,GAAX,CAAzB;EAAA;EAAA,IAAOC,KAAP;EAAA,IAAcC,OAAd;;EACA,IAAMC,KAAK,GAAGC,MAAM,CAACF,OAAD,CAAN,CAAgBG,WAAhB,OAAkC,KAAlC,GAA0C,KAA1C,GAAkD,MAAhE;EACA,OAAO,CAACJ,KAAD,EAAQE,KAAR,CAAP;AACH,CAPM"}