@webiny/app-security-access-management 5.27.0 → 5.28.0-beta.0

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 (53) hide show
  1. package/components/GroupAutocomplete/graphql.js +14 -3
  2. package/components/GroupAutocomplete/graphql.js.map +1 -1
  3. package/components/GroupAutocomplete/index.js +23 -8
  4. package/components/GroupAutocomplete/index.js.map +1 -1
  5. package/components/NotAuthorizedError/NotAuthorizedError.js +39 -18
  6. package/components/NotAuthorizedError/NotAuthorizedError.js.map +1 -1
  7. package/components/NotAuthorizedError/index.js +13 -1
  8. package/components/NotAuthorizedError/index.js.map +1 -1
  9. package/index.js +57 -32
  10. package/index.js.map +1 -1
  11. package/package.json +12 -12
  12. package/plugins/constants.js +9 -2
  13. package/plugins/constants.js.map +1 -1
  14. package/plugins/index.js +20 -6
  15. package/plugins/index.js.map +1 -1
  16. package/plugins/installation.js +47 -25
  17. package/plugins/installation.js.map +1 -1
  18. package/plugins/permissionRenderer/SecurityPermissions.js +69 -46
  19. package/plugins/permissionRenderer/SecurityPermissions.js.map +1 -1
  20. package/plugins/permissionRenderer/index.js +33 -15
  21. package/plugins/permissionRenderer/index.js.map +1 -1
  22. package/plugins/routes.js +37 -19
  23. package/plugins/routes.js.map +1 -1
  24. package/plugins/secureRouteError.js +16 -4
  25. package/plugins/secureRouteError.js.map +1 -1
  26. package/types.js +5 -1
  27. package/types.js.map +1 -1
  28. package/ui/elements/GroupAutocompleteElement.js +34 -18
  29. package/ui/elements/GroupAutocompleteElement.js.map +1 -1
  30. package/ui/views/ApiKeys/ApiKeyForm.js +122 -81
  31. package/ui/views/ApiKeys/ApiKeyForm.js.map +1 -1
  32. package/ui/views/ApiKeys/ApiKeys.js +22 -7
  33. package/ui/views/ApiKeys/ApiKeys.js.map +1 -1
  34. package/ui/views/ApiKeys/ApiKeysDataList.js +101 -66
  35. package/ui/views/ApiKeys/ApiKeysDataList.js.map +1 -1
  36. package/ui/views/ApiKeys/graphql.js +22 -7
  37. package/ui/views/ApiKeys/graphql.js.map +1 -1
  38. package/ui/views/ApiKeys/index.js +18 -1
  39. package/ui/views/ApiKeys/index.js.map +1 -1
  40. package/ui/views/ApiKeys/utils.js +18 -5
  41. package/ui/views/ApiKeys/utils.js.map +1 -1
  42. package/ui/views/Groups/Groups.js +22 -7
  43. package/ui/views/Groups/Groups.js.map +1 -1
  44. package/ui/views/Groups/GroupsDataList.js +107 -71
  45. package/ui/views/Groups/GroupsDataList.js.map +1 -1
  46. package/ui/views/Groups/GroupsForm.js +125 -84
  47. package/ui/views/Groups/GroupsForm.js.map +1 -1
  48. package/ui/views/Groups/graphql.js +22 -7
  49. package/ui/views/Groups/graphql.js.map +1 -1
  50. package/ui/views/Groups/index.js +18 -1
  51. package/ui/views/Groups/index.js.map +1 -1
  52. package/ui/views/utils.js +16 -4
  53. package/ui/views/utils.js.map +1 -1
@@ -1,52 +1,91 @@
1
- import _taggedTemplateLiteral from "@babel/runtime/helpers/taggedTemplateLiteral";
2
- import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
3
- import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
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.ApiKeyForm = 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 _get = _interopRequireDefault(require("lodash/get"));
25
+
26
+ var _reactRouter = require("@webiny/react-router");
27
+
28
+ var _i18n = require("@webiny/app/i18n");
29
+
30
+ var _form = require("@webiny/form");
31
+
32
+ var _Grid = require("@webiny/ui/Grid");
33
+
34
+ var _Input = require("@webiny/ui/Input");
35
+
36
+ var _Button = require("@webiny/ui/Button");
37
+
38
+ var _Progress = require("@webiny/ui/Progress");
39
+
40
+ var _FormElementMessage = require("@webiny/ui/FormElementMessage");
41
+
42
+ var _Permissions = require("@webiny/app-admin/components/Permissions");
43
+
44
+ var _validation = require("@webiny/validation");
45
+
46
+ var _SimpleForm = require("@webiny/app-admin/components/SimpleForm");
47
+
48
+ var _Typography = require("@webiny/ui/Typography");
49
+
50
+ var _useSnackbar2 = require("@webiny/app-admin/hooks/useSnackbar");
51
+
52
+ var _utils = require("./utils");
53
+
54
+ var GQL = _interopRequireWildcard(require("./graphql"));
55
+
56
+ var _Snackbar = require("@webiny/ui/Snackbar");
57
+
58
+ var _isEmpty = _interopRequireDefault(require("lodash/isEmpty"));
59
+
60
+ var _EmptyView = _interopRequireDefault(require("@webiny/app-admin/components/EmptyView"));
61
+
62
+ var _add18px = require("@webiny/app-admin/assets/icons/add-18px.svg");
63
+
64
+ var _styled = _interopRequireDefault(require("@emotion/styled"));
4
65
 
5
66
  var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9, _templateObject10;
6
67
 
7
- import _regeneratorRuntime from "@babel/runtime/regenerator";
8
- import React, { useCallback } from "react";
9
- import { useMutation, useQuery } from "@apollo/react-hooks";
10
- import get from "lodash/get";
11
- import { useRouter } from "@webiny/react-router";
12
- import { i18n } from "@webiny/app/i18n";
13
- import { Form } from "@webiny/form";
14
- import { Grid, Cell } from "@webiny/ui/Grid";
15
- import { Input } from "@webiny/ui/Input";
16
- import { ButtonDefault, ButtonIcon, ButtonPrimary, CopyButton } from "@webiny/ui/Button";
17
- import { CircularProgress } from "@webiny/ui/Progress";
18
- import { FormElementMessage } from "@webiny/ui/FormElementMessage";
19
- import { Permissions } from "@webiny/app-admin/components/Permissions";
20
- import { validation } from "@webiny/validation";
21
- import { SimpleForm, SimpleFormFooter, SimpleFormContent, SimpleFormHeader } from "@webiny/app-admin/components/SimpleForm";
22
- import { Typography } from "@webiny/ui/Typography";
23
- import { useSnackbar } from "@webiny/app-admin/hooks/useSnackbar";
24
- import { pickDataForAPI } from "./utils";
25
- import * as GQL from "./graphql";
26
- import { SnackbarAction } from "@webiny/ui/Snackbar";
27
- import isEmpty from "lodash/isEmpty";
28
- import EmptyView from "@webiny/app-admin/components/EmptyView";
29
- import { ReactComponent as AddIcon } from "@webiny/app-admin/assets/icons/add-18px.svg";
30
- import styled from "@emotion/styled";
31
- var t = i18n.ns("app-security-admin-users/admin/api-keys/form");
32
- var ButtonWrapper = /*#__PURE__*/styled("div", {
68
+ var t = _i18n.i18n.ns("app-security-admin-users/admin/api-keys/form");
69
+
70
+ var ButtonWrapper = /*#__PURE__*/(0, _styled.default)("div", {
33
71
  target: "e18bg2x40",
34
72
  label: "ButtonWrapper"
35
73
  })({
36
74
  display: "flex",
37
75
  justifyContent: "space-between"
38
76
  });
39
- export var ApiKeyForm = function ApiKeyForm() {
40
- var _useRouter = useRouter(),
77
+
78
+ var ApiKeyForm = function ApiKeyForm() {
79
+ var _useRouter = (0, _reactRouter.useRouter)(),
41
80
  location = _useRouter.location,
42
81
  history = _useRouter.history;
43
82
 
44
- var _useSnackbar = useSnackbar(),
83
+ var _useSnackbar = (0, _useSnackbar2.useSnackbar)(),
45
84
  showSnackbar = _useSnackbar.showSnackbar;
46
85
 
47
86
  var newEntry = new URLSearchParams(location.search).get("new") === "true";
48
87
  var id = new URLSearchParams(location.search).get("id");
49
- var getQuery = useQuery(GQL.READ_API_KEY, {
88
+ var getQuery = (0, _reactHooks.useQuery)(GQL.READ_API_KEY, {
50
89
  variables: {
51
90
  id: id
52
91
  },
@@ -65,32 +104,32 @@ export var ApiKeyForm = function ApiKeyForm() {
65
104
  }
66
105
  });
67
106
 
68
- var _useMutation = useMutation(GQL.CREATE_API_KEY, {
107
+ var _useMutation = (0, _reactHooks.useMutation)(GQL.CREATE_API_KEY, {
69
108
  refetchQueries: [{
70
109
  query: GQL.LIST_API_KEYS
71
110
  }]
72
111
  }),
73
- _useMutation2 = _slicedToArray(_useMutation, 2),
112
+ _useMutation2 = (0, _slicedToArray2.default)(_useMutation, 2),
74
113
  create = _useMutation2[0],
75
114
  createMutation = _useMutation2[1];
76
115
 
77
- var _useMutation3 = useMutation(GQL.UPDATE_API_KEY, {
116
+ var _useMutation3 = (0, _reactHooks.useMutation)(GQL.UPDATE_API_KEY, {
78
117
  refetchQueries: [{
79
118
  query: GQL.LIST_API_KEYS
80
119
  }]
81
120
  }),
82
- _useMutation4 = _slicedToArray(_useMutation3, 2),
121
+ _useMutation4 = (0, _slicedToArray2.default)(_useMutation3, 2),
83
122
  update = _useMutation4[0],
84
123
  updateMutation = _useMutation4[1];
85
124
 
86
125
  var loading = [getQuery, createMutation, updateMutation].find(function (item) {
87
126
  return item.loading;
88
127
  });
89
- var onSubmit = useCallback( /*#__PURE__*/function () {
90
- var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(data) {
128
+ var onSubmit = (0, _react.useCallback)( /*#__PURE__*/function () {
129
+ var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee(data) {
91
130
  var isUpdate, _ref2, _ref3, operation, args, response, error, id;
92
131
 
93
- return _regeneratorRuntime.wrap(function _callee$(_context) {
132
+ return (0, _regeneratorRuntime2.default)().wrap(function _callee$(_context) {
94
133
  while (1) {
95
134
  switch (_context.prev = _context.next) {
96
135
  case 0:
@@ -99,10 +138,10 @@ export var ApiKeyForm = function ApiKeyForm() {
99
138
  break;
100
139
  }
101
140
 
102
- showSnackbar(t(_templateObject || (_templateObject = _taggedTemplateLiteral(["You must configure permissions before saving!"]))), {
141
+ showSnackbar(t(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["You must configure permissions before saving!"]))), {
103
142
  timeout: 60000,
104
143
  dismissesOnAction: true,
105
- action: /*#__PURE__*/React.createElement(SnackbarAction, {
144
+ action: /*#__PURE__*/_react.default.createElement(_Snackbar.SnackbarAction, {
106
145
  label: "OK"
107
146
  })
108
147
  });
@@ -113,13 +152,13 @@ export var ApiKeyForm = function ApiKeyForm() {
113
152
  _ref2 = isUpdate ? [update, {
114
153
  variables: {
115
154
  id: data.id,
116
- data: pickDataForAPI(data)
155
+ data: (0, _utils.pickDataForAPI)(data)
117
156
  }
118
157
  }] : [create, {
119
158
  variables: {
120
- data: pickDataForAPI(data)
159
+ data: (0, _utils.pickDataForAPI)(data)
121
160
  }
122
- }], _ref3 = _slicedToArray(_ref2, 2), operation = _ref3[0], args = _ref3[1];
161
+ }], _ref3 = (0, _slicedToArray2.default)(_ref2, 2), operation = _ref3[0], args = _ref3[1];
123
162
  _context.next = 7;
124
163
  return operation(args);
125
164
 
@@ -137,7 +176,7 @@ export var ApiKeyForm = function ApiKeyForm() {
137
176
  case 11:
138
177
  id = response.data.security.apiKey.data.id;
139
178
  !isUpdate && history.push("/access-management/api-keys?id=".concat(id));
140
- showSnackbar(t(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["API key saved successfully."]))));
179
+ showSnackbar(t(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2.default)(["API key saved successfully."]))));
141
180
 
142
181
  case 14:
143
182
  case "end":
@@ -151,93 +190,95 @@ export var ApiKeyForm = function ApiKeyForm() {
151
190
  return _ref.apply(this, arguments);
152
191
  };
153
192
  }(), [id]);
154
- var data = get(getQuery, "data.security.apiKey.data", {});
155
- var showEmptyView = !newEntry && !loading && isEmpty(data); // Render "No content" selected view.
193
+ var data = (0, _get.default)(getQuery, "data.security.apiKey.data", {});
194
+ var showEmptyView = !newEntry && !loading && (0, _isEmpty.default)(data); // Render "No content" selected view.
156
195
 
157
196
  if (showEmptyView) {
158
- return /*#__PURE__*/React.createElement(EmptyView, {
159
- title: t(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["Click on the left side list to display API key details or create a..."]))),
160
- action: /*#__PURE__*/React.createElement(ButtonDefault, {
197
+ return /*#__PURE__*/_react.default.createElement(_EmptyView.default, {
198
+ title: t(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2.default)(["Click on the left side list to display API key details or create a..."]))),
199
+ action: /*#__PURE__*/_react.default.createElement(_Button.ButtonDefault, {
161
200
  "data-testid": "new-record-button",
162
201
  onClick: function onClick() {
163
202
  return history.push("/access-management/api-keys?new=true");
164
203
  }
165
- }, /*#__PURE__*/React.createElement(ButtonIcon, {
166
- icon: /*#__PURE__*/React.createElement(AddIcon, null)
167
- }), " ", t(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral(["New API Key"]))))
204
+ }, /*#__PURE__*/_react.default.createElement(_Button.ButtonIcon, {
205
+ icon: /*#__PURE__*/_react.default.createElement(_add18px.ReactComponent, null)
206
+ }), " ", t(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2.default)(["New API Key"]))))
168
207
  });
169
208
  }
170
209
 
171
- return /*#__PURE__*/React.createElement(Form, {
210
+ return /*#__PURE__*/_react.default.createElement(_form.Form, {
172
211
  data: data,
173
212
  onSubmit: onSubmit
174
213
  }, function (_ref4) {
175
214
  var data = _ref4.data,
176
215
  form = _ref4.form,
177
216
  Bind = _ref4.Bind;
178
- return /*#__PURE__*/React.createElement(SimpleForm, null, loading && /*#__PURE__*/React.createElement(CircularProgress, null), /*#__PURE__*/React.createElement(SimpleFormHeader, {
217
+ return /*#__PURE__*/_react.default.createElement(_SimpleForm.SimpleForm, null, loading && /*#__PURE__*/_react.default.createElement(_Progress.CircularProgress, null), /*#__PURE__*/_react.default.createElement(_SimpleForm.SimpleFormHeader, {
179
218
  title: data.name ? data.name : "Untitled"
180
- }), /*#__PURE__*/React.createElement(SimpleFormContent, null, /*#__PURE__*/React.createElement(Grid, null, /*#__PURE__*/React.createElement(Cell, {
219
+ }), /*#__PURE__*/_react.default.createElement(_SimpleForm.SimpleFormContent, null, /*#__PURE__*/_react.default.createElement(_Grid.Grid, null, /*#__PURE__*/_react.default.createElement(_Grid.Cell, {
181
220
  span: 12
182
- }, /*#__PURE__*/React.createElement(Bind, {
221
+ }, /*#__PURE__*/_react.default.createElement(Bind, {
183
222
  name: "name",
184
- validators: validation.create("required")
185
- }, /*#__PURE__*/React.createElement(Input, {
186
- label: t(_templateObject5 || (_templateObject5 = _taggedTemplateLiteral(["Name"])))
187
- })))), /*#__PURE__*/React.createElement(Grid, null, /*#__PURE__*/React.createElement(Cell, {
223
+ validators: _validation.validation.create("required")
224
+ }, /*#__PURE__*/_react.default.createElement(_Input.Input, {
225
+ label: t(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2.default)(["Name"])))
226
+ })))), /*#__PURE__*/_react.default.createElement(_Grid.Grid, null, /*#__PURE__*/_react.default.createElement(_Grid.Cell, {
188
227
  span: 12
189
- }, /*#__PURE__*/React.createElement(Bind, {
228
+ }, /*#__PURE__*/_react.default.createElement(Bind, {
190
229
  name: "description",
191
- validators: validation.create("required")
192
- }, /*#__PURE__*/React.createElement(Input, {
193
- label: t(_templateObject6 || (_templateObject6 = _taggedTemplateLiteral(["Description"]))),
230
+ validators: _validation.validation.create("required")
231
+ }, /*#__PURE__*/_react.default.createElement(_Input.Input, {
232
+ label: t(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteral2.default)(["Description"]))),
194
233
  rows: 4
195
- })))), /*#__PURE__*/React.createElement(Grid, null, /*#__PURE__*/React.createElement(Cell, {
234
+ })))), /*#__PURE__*/_react.default.createElement(_Grid.Grid, null, /*#__PURE__*/_react.default.createElement(_Grid.Cell, {
196
235
  span: 12
197
- }, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(Typography, {
236
+ }, /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement(_Typography.Typography, {
198
237
  use: "subtitle1"
199
- }, t(_templateObject7 || (_templateObject7 = _taggedTemplateLiteral(["Token"])))), data.token ? /*#__PURE__*/React.createElement("div", {
238
+ }, t(_templateObject7 || (_templateObject7 = (0, _taggedTemplateLiteral2.default)(["Token"])))), data.token ? /*#__PURE__*/_react.default.createElement("div", {
200
239
  style: {
201
240
  background: "var(--mdc-theme-background)",
202
241
  padding: "8px",
203
242
  paddingLeft: "16px"
204
243
  }
205
- }, /*#__PURE__*/React.createElement("span", {
244
+ }, /*#__PURE__*/_react.default.createElement("span", {
206
245
  style: {
207
246
  lineHeight: "48px",
208
247
  verticalAlign: "middle"
209
248
  }
210
- }, data.token), /*#__PURE__*/React.createElement("span", {
249
+ }, data.token), /*#__PURE__*/_react.default.createElement("span", {
211
250
  style: {
212
251
  position: "absolute",
213
252
  right: "32px"
214
253
  }
215
- }, /*#__PURE__*/React.createElement(CopyButton, {
254
+ }, /*#__PURE__*/_react.default.createElement(_Button.CopyButton, {
216
255
  value: data.token,
217
256
  onCopy: function onCopy() {
218
257
  return showSnackbar("Successfully copied!");
219
258
  }
220
- }))) : /*#__PURE__*/React.createElement(FormElementMessage, null, "Your token will be shown once you submit the form.")))), /*#__PURE__*/React.createElement(Grid, null, /*#__PURE__*/React.createElement(Cell, {
259
+ }))) : /*#__PURE__*/_react.default.createElement(_FormElementMessage.FormElementMessage, null, "Your token will be shown once you submit the form.")))), /*#__PURE__*/_react.default.createElement(_Grid.Grid, null, /*#__PURE__*/_react.default.createElement(_Grid.Cell, {
221
260
  span: 12
222
- }, /*#__PURE__*/React.createElement(Typography, {
261
+ }, /*#__PURE__*/_react.default.createElement(_Typography.Typography, {
223
262
  use: "subtitle1"
224
- }, t(_templateObject8 || (_templateObject8 = _taggedTemplateLiteral(["Permissions"]))))), /*#__PURE__*/React.createElement(Cell, {
263
+ }, t(_templateObject8 || (_templateObject8 = (0, _taggedTemplateLiteral2.default)(["Permissions"]))))), /*#__PURE__*/_react.default.createElement(_Grid.Cell, {
225
264
  span: 12
226
- }, /*#__PURE__*/React.createElement(Bind, {
265
+ }, /*#__PURE__*/_react.default.createElement(Bind, {
227
266
  name: "permissions",
228
267
  defaultValue: []
229
268
  }, function (bind) {
230
- return /*#__PURE__*/React.createElement(Permissions, Object.assign({
269
+ return /*#__PURE__*/_react.default.createElement(_Permissions.Permissions, Object.assign({
231
270
  id: data.id || "new"
232
271
  }, bind));
233
- })))), /*#__PURE__*/React.createElement(SimpleFormFooter, null, /*#__PURE__*/React.createElement(ButtonWrapper, null, /*#__PURE__*/React.createElement(ButtonDefault, {
272
+ })))), /*#__PURE__*/_react.default.createElement(_SimpleForm.SimpleFormFooter, null, /*#__PURE__*/_react.default.createElement(ButtonWrapper, null, /*#__PURE__*/_react.default.createElement(_Button.ButtonDefault, {
234
273
  onClick: function onClick() {
235
274
  return history.push("/access-management/api-keys");
236
275
  }
237
- }, t(_templateObject9 || (_templateObject9 = _taggedTemplateLiteral(["Cancel"])))), /*#__PURE__*/React.createElement(ButtonPrimary, {
276
+ }, t(_templateObject9 || (_templateObject9 = (0, _taggedTemplateLiteral2.default)(["Cancel"])))), /*#__PURE__*/_react.default.createElement(_Button.ButtonPrimary, {
238
277
  onClick: function onClick(ev) {
239
278
  form.submit(ev);
240
279
  }
241
- }, t(_templateObject10 || (_templateObject10 = _taggedTemplateLiteral(["Save API key"])))))));
280
+ }, t(_templateObject10 || (_templateObject10 = (0, _taggedTemplateLiteral2.default)(["Save API key"])))))));
242
281
  });
243
- };
282
+ };
283
+
284
+ exports.ApiKeyForm = ApiKeyForm;
@@ -1 +1 @@
1
- {"version":3,"sources":["ApiKeyForm.tsx"],"names":["React","useCallback","useMutation","useQuery","get","useRouter","i18n","Form","Grid","Cell","Input","ButtonDefault","ButtonIcon","ButtonPrimary","CopyButton","CircularProgress","FormElementMessage","Permissions","validation","SimpleForm","SimpleFormFooter","SimpleFormContent","SimpleFormHeader","Typography","useSnackbar","pickDataForAPI","GQL","SnackbarAction","isEmpty","EmptyView","ReactComponent","AddIcon","styled","t","ns","ButtonWrapper","display","justifyContent","ApiKeyForm","location","history","showSnackbar","newEntry","URLSearchParams","search","id","getQuery","READ_API_KEY","variables","skip","onCompleted","data","error","security","apiKey","push","message","CREATE_API_KEY","refetchQueries","query","LIST_API_KEYS","create","createMutation","UPDATE_API_KEY","update","updateMutation","loading","find","item","onSubmit","permissions","length","timeout","dismissesOnAction","action","isUpdate","createdOn","operation","args","response","showEmptyView","form","Bind","name","token","background","padding","paddingLeft","lineHeight","verticalAlign","position","right","bind","ev","submit"],"mappings":"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","sourcesContent":["import React, { useCallback } from \"react\";\nimport { useMutation, useQuery } from \"@apollo/react-hooks\";\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 { ButtonDefault, ButtonIcon, ButtonPrimary, CopyButton } from \"@webiny/ui/Button\";\nimport { CircularProgress } from \"@webiny/ui/Progress\";\nimport { FormElementMessage } from \"@webiny/ui/FormElementMessage\";\nimport { Permissions } from \"@webiny/app-admin/components/Permissions\";\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 { useSnackbar } from \"@webiny/app-admin/hooks/useSnackbar\";\nimport { pickDataForAPI } from \"./utils\";\nimport * as GQL 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\";\nimport styled from \"@emotion/styled\";\nimport { ApiKey } from \"~/types\";\n\nconst t = i18n.ns(\"app-security-admin-users/admin/api-keys/form\");\n\nconst ButtonWrapper = styled(\"div\")({\n display: \"flex\",\n justifyContent: \"space-between\"\n});\nexport interface ApiKeyFormProps {\n // TODO @ts-refactor delete and go up the tree and sort it out\n [key: string]: any;\n}\nexport const ApiKeyForm: React.FC<ApiKeyFormProps> = () => {\n const { location, history } = useRouter();\n const { showSnackbar } = useSnackbar();\n const newEntry = new URLSearchParams(location.search).get(\"new\") === \"true\";\n const id = new URLSearchParams(location.search).get(\"id\");\n\n const getQuery = useQuery(GQL.READ_API_KEY, {\n variables: { id },\n skip: !id,\n onCompleted: data => {\n if (!data) {\n return;\n }\n\n const { error } = data.security.apiKey;\n if (error) {\n history.push(\"/access-management/api-keys\");\n showSnackbar(error.message);\n }\n }\n });\n\n const [create, createMutation] = useMutation(GQL.CREATE_API_KEY, {\n refetchQueries: [{ query: GQL.LIST_API_KEYS }]\n });\n\n const [update, updateMutation] = useMutation(GQL.UPDATE_API_KEY, {\n refetchQueries: [{ query: GQL.LIST_API_KEYS }]\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 ? [update, { variables: { id: data.id, data: pickDataForAPI(data) } }]\n : [create, { variables: { data: pickDataForAPI(data) } }];\n\n const response = await operation(args);\n\n const { error } = response.data.security.apiKey;\n if (error) {\n return showSnackbar(error.message);\n }\n\n const { id } = response.data.security.apiKey.data;\n\n !isUpdate && history.push(`/access-management/api-keys?id=${id}`);\n showSnackbar(t`API key saved successfully.`);\n },\n [id]\n );\n\n const data: ApiKey[] = get(getQuery, \"data.security.apiKey.data\", {});\n\n const showEmptyView = !newEntry && !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 API key details or create a...`}\n action={\n <ButtonDefault\n data-testid=\"new-record-button\"\n onClick={() => history.push(\"/access-management/api-keys?new=true\")}\n >\n <ButtonIcon icon={<AddIcon />} /> {t`New API Key`}\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={12}>\n <Bind name=\"name\" validators={validation.create(\"required\")}>\n <Input label={t`Name`} />\n </Bind>\n </Cell>\n </Grid>\n <Grid>\n <Cell span={12}>\n <Bind\n name=\"description\"\n validators={validation.create(\"required\")}\n >\n <Input label={t`Description`} rows={4} />\n </Bind>\n </Cell>\n </Grid>\n <Grid>\n <Cell span={12}>\n <div>\n <Typography use={\"subtitle1\"}>{t`Token`}</Typography>\n {data.token ? (\n <div\n style={{\n background: \"var(--mdc-theme-background)\",\n padding: \"8px\",\n paddingLeft: \"16px\"\n }}\n >\n <span\n style={{\n lineHeight: \"48px\",\n verticalAlign: \"middle\"\n }}\n >\n {data.token}\n </span>\n <span\n style={{ position: \"absolute\", right: \"32px\" }}\n >\n <CopyButton\n value={data.token}\n onCopy={() =>\n showSnackbar(\"Successfully copied!\")\n }\n />\n </span>\n </div>\n ) : (\n <FormElementMessage>\n Your token will be shown once you submit the form.\n </FormElementMessage>\n )}\n </div>\n </Cell>\n </Grid>\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 => <Permissions id={data.id || \"new\"} {...bind} />}\n </Bind>\n </Cell>\n </Grid>\n </SimpleFormContent>\n <SimpleFormFooter>\n <ButtonWrapper>\n <ButtonDefault\n onClick={() => history.push(\"/access-management/api-keys\")}\n >{t`Cancel`}</ButtonDefault>\n <ButtonPrimary\n onClick={ev => {\n form.submit(ev);\n }}\n >{t`Save API key`}</ButtonPrimary>\n </ButtonWrapper>\n </SimpleFormFooter>\n </SimpleForm>\n );\n }}\n </Form>\n );\n};\n"]}
1
+ {"version":3,"names":["t","i18n","ns","ButtonWrapper","styled","display","justifyContent","ApiKeyForm","useRouter","location","history","useSnackbar","showSnackbar","newEntry","URLSearchParams","search","get","id","getQuery","useQuery","GQL","READ_API_KEY","variables","skip","onCompleted","data","error","security","apiKey","push","message","useMutation","CREATE_API_KEY","refetchQueries","query","LIST_API_KEYS","create","createMutation","UPDATE_API_KEY","update","updateMutation","loading","find","item","onSubmit","useCallback","permissions","length","timeout","dismissesOnAction","action","isUpdate","createdOn","pickDataForAPI","operation","args","response","showEmptyView","isEmpty","form","Bind","name","validation","token","background","padding","paddingLeft","lineHeight","verticalAlign","position","right","bind","ev","submit"],"sources":["ApiKeyForm.tsx"],"sourcesContent":["import React, { useCallback } from \"react\";\nimport { useMutation, useQuery } from \"@apollo/react-hooks\";\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 { ButtonDefault, ButtonIcon, ButtonPrimary, CopyButton } from \"@webiny/ui/Button\";\nimport { CircularProgress } from \"@webiny/ui/Progress\";\nimport { FormElementMessage } from \"@webiny/ui/FormElementMessage\";\nimport { Permissions } from \"@webiny/app-admin/components/Permissions\";\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 { useSnackbar } from \"@webiny/app-admin/hooks/useSnackbar\";\nimport { pickDataForAPI } from \"./utils\";\nimport * as GQL 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\";\nimport styled from \"@emotion/styled\";\nimport { ApiKey } from \"~/types\";\n\nconst t = i18n.ns(\"app-security-admin-users/admin/api-keys/form\");\n\nconst ButtonWrapper = styled(\"div\")({\n display: \"flex\",\n justifyContent: \"space-between\"\n});\nexport interface ApiKeyFormProps {\n // TODO @ts-refactor delete and go up the tree and sort it out\n [key: string]: any;\n}\nexport const ApiKeyForm: React.FC<ApiKeyFormProps> = () => {\n const { location, history } = useRouter();\n const { showSnackbar } = useSnackbar();\n const newEntry = new URLSearchParams(location.search).get(\"new\") === \"true\";\n const id = new URLSearchParams(location.search).get(\"id\");\n\n const getQuery = useQuery(GQL.READ_API_KEY, {\n variables: { id },\n skip: !id,\n onCompleted: data => {\n if (!data) {\n return;\n }\n\n const { error } = data.security.apiKey;\n if (error) {\n history.push(\"/access-management/api-keys\");\n showSnackbar(error.message);\n }\n }\n });\n\n const [create, createMutation] = useMutation(GQL.CREATE_API_KEY, {\n refetchQueries: [{ query: GQL.LIST_API_KEYS }]\n });\n\n const [update, updateMutation] = useMutation(GQL.UPDATE_API_KEY, {\n refetchQueries: [{ query: GQL.LIST_API_KEYS }]\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 ? [update, { variables: { id: data.id, data: pickDataForAPI(data) } }]\n : [create, { variables: { data: pickDataForAPI(data) } }];\n\n const response = await operation(args);\n\n const { error } = response.data.security.apiKey;\n if (error) {\n return showSnackbar(error.message);\n }\n\n const { id } = response.data.security.apiKey.data;\n\n !isUpdate && history.push(`/access-management/api-keys?id=${id}`);\n showSnackbar(t`API key saved successfully.`);\n },\n [id]\n );\n\n const data: ApiKey[] = get(getQuery, \"data.security.apiKey.data\", {});\n\n const showEmptyView = !newEntry && !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 API key details or create a...`}\n action={\n <ButtonDefault\n data-testid=\"new-record-button\"\n onClick={() => history.push(\"/access-management/api-keys?new=true\")}\n >\n <ButtonIcon icon={<AddIcon />} /> {t`New API Key`}\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={12}>\n <Bind name=\"name\" validators={validation.create(\"required\")}>\n <Input label={t`Name`} />\n </Bind>\n </Cell>\n </Grid>\n <Grid>\n <Cell span={12}>\n <Bind\n name=\"description\"\n validators={validation.create(\"required\")}\n >\n <Input label={t`Description`} rows={4} />\n </Bind>\n </Cell>\n </Grid>\n <Grid>\n <Cell span={12}>\n <div>\n <Typography use={\"subtitle1\"}>{t`Token`}</Typography>\n {data.token ? (\n <div\n style={{\n background: \"var(--mdc-theme-background)\",\n padding: \"8px\",\n paddingLeft: \"16px\"\n }}\n >\n <span\n style={{\n lineHeight: \"48px\",\n verticalAlign: \"middle\"\n }}\n >\n {data.token}\n </span>\n <span\n style={{ position: \"absolute\", right: \"32px\" }}\n >\n <CopyButton\n value={data.token}\n onCopy={() =>\n showSnackbar(\"Successfully copied!\")\n }\n />\n </span>\n </div>\n ) : (\n <FormElementMessage>\n Your token will be shown once you submit the form.\n </FormElementMessage>\n )}\n </div>\n </Cell>\n </Grid>\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 => <Permissions id={data.id || \"new\"} {...bind} />}\n </Bind>\n </Cell>\n </Grid>\n </SimpleFormContent>\n <SimpleFormFooter>\n <ButtonWrapper>\n <ButtonDefault\n onClick={() => history.push(\"/access-management/api-keys\")}\n >{t`Cancel`}</ButtonDefault>\n <ButtonPrimary\n onClick={ev => {\n form.submit(ev);\n }}\n >{t`Save API key`}</ButtonPrimary>\n </ButtonWrapper>\n </SimpleFormFooter>\n </SimpleForm>\n );\n }}\n </Form>\n );\n};\n"],"mappings":"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"}
@@ -1,11 +1,26 @@
1
- import * as React from "react";
2
- import { SplitView, LeftPanel, RightPanel } from "@webiny/app-admin/components/SplitView";
3
- import { ApiKeysDataList } from "./ApiKeysDataList";
4
- import { ApiKeyForm } from "./ApiKeyForm";
5
- export var ApiKeys = function ApiKeys(_ref) {
1
+ "use strict";
2
+
3
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.ApiKeys = void 0;
9
+
10
+ var React = _interopRequireWildcard(require("react"));
11
+
12
+ var _SplitView = require("@webiny/app-admin/components/SplitView");
13
+
14
+ var _ApiKeysDataList = require("./ApiKeysDataList");
15
+
16
+ var _ApiKeyForm = require("./ApiKeyForm");
17
+
18
+ var ApiKeys = function ApiKeys(_ref) {
6
19
  var _ref$formProps = _ref.formProps,
7
20
  formProps = _ref$formProps === void 0 ? {} : _ref$formProps,
8
21
  _ref$listProps = _ref.listProps,
9
22
  listProps = _ref$listProps === void 0 ? {} : _ref$listProps;
10
- return /*#__PURE__*/React.createElement(SplitView, null, /*#__PURE__*/React.createElement(LeftPanel, null, /*#__PURE__*/React.createElement(ApiKeysDataList, listProps)), /*#__PURE__*/React.createElement(RightPanel, null, /*#__PURE__*/React.createElement(ApiKeyForm, formProps)));
11
- };
23
+ return /*#__PURE__*/React.createElement(_SplitView.SplitView, null, /*#__PURE__*/React.createElement(_SplitView.LeftPanel, null, /*#__PURE__*/React.createElement(_ApiKeysDataList.ApiKeysDataList, listProps)), /*#__PURE__*/React.createElement(_SplitView.RightPanel, null, /*#__PURE__*/React.createElement(_ApiKeyForm.ApiKeyForm, formProps)));
24
+ };
25
+
26
+ exports.ApiKeys = ApiKeys;
@@ -1 +1 @@
1
- {"version":3,"sources":["ApiKeys.tsx"],"names":["React","SplitView","LeftPanel","RightPanel","ApiKeysDataList","ApiKeyForm","ApiKeys","formProps","listProps"],"mappings":"AAAA,OAAO,KAAKA,KAAZ,MAAuB,OAAvB;AACA,SAASC,SAAT,EAAoBC,SAApB,EAA+BC,UAA/B,QAAiD,wCAAjD;AACA,SAASC,eAAT;AACA,SAASC,UAAT;AAMA,OAAO,IAAMC,OAA+B,GAAG,SAAlCA,OAAkC,OAAwC;AAAA,4BAArCC,SAAqC;AAAA,MAArCA,SAAqC,+BAAzB,EAAyB;AAAA,4BAArBC,SAAqB;AAAA,MAArBA,SAAqB,+BAAT,EAAS;AACnF,sBACI,oBAAC,SAAD,qBACI,oBAAC,SAAD,qBACI,oBAAC,eAAD,EAAqBA,SAArB,CADJ,CADJ,eAII,oBAAC,UAAD,qBACI,oBAAC,UAAD,EAAgBD,SAAhB,CADJ,CAJJ,CADJ;AAUH,CAXM","sourcesContent":["import * as React from \"react\";\nimport { SplitView, LeftPanel, RightPanel } from \"@webiny/app-admin/components/SplitView\";\nimport { ApiKeysDataList, ApiKeysDataListProps } from \"./ApiKeysDataList\";\nimport { ApiKeyForm, ApiKeyFormProps } from \"./ApiKeyForm\";\n\nexport interface ApiKeysProps {\n listProps?: ApiKeysDataListProps;\n formProps?: ApiKeyFormProps;\n}\nexport const ApiKeys: React.FC<ApiKeysProps> = ({ formProps = {}, listProps = {} }) => {\n return (\n <SplitView>\n <LeftPanel>\n <ApiKeysDataList {...listProps} />\n </LeftPanel>\n <RightPanel>\n <ApiKeyForm {...formProps} />\n </RightPanel>\n </SplitView>\n );\n};\n"]}
1
+ {"version":3,"names":["ApiKeys","formProps","listProps"],"sources":["ApiKeys.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { SplitView, LeftPanel, RightPanel } from \"@webiny/app-admin/components/SplitView\";\nimport { ApiKeysDataList, ApiKeysDataListProps } from \"./ApiKeysDataList\";\nimport { ApiKeyForm, ApiKeyFormProps } from \"./ApiKeyForm\";\n\nexport interface ApiKeysProps {\n listProps?: ApiKeysDataListProps;\n formProps?: ApiKeyFormProps;\n}\nexport const ApiKeys: React.FC<ApiKeysProps> = ({ formProps = {}, listProps = {} }) => {\n return (\n <SplitView>\n <LeftPanel>\n <ApiKeysDataList {...listProps} />\n </LeftPanel>\n <RightPanel>\n <ApiKeyForm {...formProps} />\n </RightPanel>\n </SplitView>\n );\n};\n"],"mappings":";;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AAMO,IAAMA,OAA+B,GAAG,SAAlCA,OAAkC,OAAwC;EAAA,0BAArCC,SAAqC;EAAA,IAArCA,SAAqC,+BAAzB,EAAyB;EAAA,0BAArBC,SAAqB;EAAA,IAArBA,SAAqB,+BAAT,EAAS;EACnF,oBACI,oBAAC,oBAAD,qBACI,oBAAC,oBAAD,qBACI,oBAAC,gCAAD,EAAqBA,SAArB,CADJ,CADJ,eAII,oBAAC,qBAAD,qBACI,oBAAC,sBAAD,EAAgBD,SAAhB,CADJ,CAJJ,CADJ;AAUH,CAXM"}