@webiny/app-security-access-management 6.3.0 → 6.4.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/Extension.js +74 -73
  2. package/Extension.js.map +1 -1
  3. package/SecurityPermissions.js +49 -41
  4. package/SecurityPermissions.js.map +1 -1
  5. package/constants.js +6 -5
  6. package/constants.js.map +1 -1
  7. package/domain/permissionsSchema.js +30 -19
  8. package/domain/permissionsSchema.js.map +1 -1
  9. package/features/permissions/abstractions.js +2 -1
  10. package/features/permissions/abstractions.js.map +1 -1
  11. package/features/permissions/feature.js +2 -1
  12. package/features/permissions/feature.js.map +1 -1
  13. package/index.js +0 -2
  14. package/package.json +9 -11
  15. package/routes.js +32 -37
  16. package/routes.js.map +1 -1
  17. package/types.js +0 -3
  18. package/ui/views/ApiKeys/ApiKeyForm.js +203 -220
  19. package/ui/views/ApiKeys/ApiKeyForm.js.map +1 -1
  20. package/ui/views/ApiKeys/ApiKeys.js +11 -12
  21. package/ui/views/ApiKeys/ApiKeys.js.map +1 -1
  22. package/ui/views/ApiKeys/ApiKeysDataList.js +129 -143
  23. package/ui/views/ApiKeys/ApiKeysDataList.js.map +1 -1
  24. package/ui/views/ApiKeys/graphql.js +7 -6
  25. package/ui/views/ApiKeys/graphql.js.map +1 -1
  26. package/ui/views/ApiKeys/index.js +0 -2
  27. package/ui/views/ApiKeys/utils.js +12 -6
  28. package/ui/views/ApiKeys/utils.js.map +1 -1
  29. package/ui/views/Roles/Roles.js +11 -12
  30. package/ui/views/Roles/Roles.js.map +1 -1
  31. package/ui/views/Roles/RolesDataList.js +130 -144
  32. package/ui/views/Roles/RolesDataList.js.map +1 -1
  33. package/ui/views/Roles/RolesForm.js +198 -223
  34. package/ui/views/Roles/RolesForm.js.map +1 -1
  35. package/ui/views/Roles/graphql.js +7 -6
  36. package/ui/views/Roles/graphql.js.map +1 -1
  37. package/ui/views/Roles/index.js +0 -2
  38. package/ui/views/Teams/Teams.js +11 -12
  39. package/ui/views/Teams/Teams.js.map +1 -1
  40. package/ui/views/Teams/TeamsDataList.js +130 -146
  41. package/ui/views/Teams/TeamsDataList.js.map +1 -1
  42. package/ui/views/Teams/TeamsForm.js +174 -182
  43. package/ui/views/Teams/TeamsForm.js.map +1 -1
  44. package/ui/views/Teams/graphql.js +7 -6
  45. package/ui/views/Teams/graphql.js.map +1 -1
  46. package/ui/views/Teams/index.js +0 -2
  47. package/ui/views/utils.js +9 -7
  48. package/ui/views/utils.js.map +1 -1
  49. package/index.js.map +0 -1
  50. package/types.js.map +0 -1
  51. package/ui/views/ApiKeys/index.js.map +0 -1
  52. package/ui/views/Roles/index.js.map +0 -1
  53. package/ui/views/Teams/index.js.map +0 -1
@@ -1,238 +1,213 @@
1
- import React, { useCallback } from "react";
1
+ import react, { useCallback } from "react";
2
2
  import { useMutation, useQuery } from "@apollo/react-hooks";
3
3
  import get from "lodash/get.js";
4
4
  import { i18n } from "@webiny/app/i18n/index.js";
5
- import { Bind, Form, useForm, useGenerateSlug } from "@webiny/form";
5
+ import { Bind as form_Bind, Form, useForm, useGenerateSlug } from "@webiny/form";
6
6
  import { validation } from "@webiny/validation";
7
- import { SimpleForm, SimpleFormFooter, SimpleFormContent, SimpleFormHeader, Permissions, EmptyView, useRouter, useSnackbar } from "@webiny/app-admin";
7
+ import { EmptyView, Permissions, SimpleForm, SimpleFormContent, SimpleFormFooter, SimpleFormHeader, useRouter, useSnackbar } from "@webiny/app-admin";
8
8
  import { CREATE_ROLE, LIST_ROLES, READ_ROLE, UPDATE_ROLE } from "./graphql.js";
9
9
  import isEmpty from "lodash/isEmpty.js";
10
- import { ReactComponent as AddIcon } from "@webiny/icons/add.svg";
11
- import { ReactComponent as CopyIcon } from "@webiny/icons/content_copy.svg";
12
- import { ReactComponent as SettingsIcon } from "@webiny/icons/settings.svg";
10
+ import { ReactComponent } from "@webiny/icons/add.svg";
11
+ import { ReactComponent as content_copy_svg_ReactComponent } from "@webiny/icons/content_copy.svg";
12
+ import { ReactComponent as settings_svg_ReactComponent } from "@webiny/icons/settings.svg";
13
13
  import { Alert, Button, Grid, IconButton, Input, OverlayLoader, Textarea, Tooltip } from "@webiny/admin-ui";
14
14
  import { Routes } from "../../../routes.js";
15
15
  const t = i18n.ns("app-security/admin/roles/form");
16
- export const RolesForm = ({
17
- id,
18
- newEntry
19
- }) => {
20
- const {
21
- goToRoute
22
- } = useRouter();
23
- const {
24
- showSnackbar
25
- } = useSnackbar();
26
- const getQuery = useQuery(READ_ROLE, {
27
- variables: {
28
- id
29
- },
30
- skip: !id,
31
- onCompleted: data => {
32
- if (!data) {
33
- return;
34
- }
35
- const {
36
- error
37
- } = data.security.role;
38
- if (error) {
39
- goToRoute(Routes.Roles.List);
40
- showSnackbar(error.message);
41
- }
42
- }
43
- });
44
- const [create, createMutation] = useMutation(CREATE_ROLE, {
45
- refetchQueries: [{
46
- query: LIST_ROLES
47
- }]
48
- });
49
- const [update, updateMutation] = useMutation(UPDATE_ROLE, {
50
- refetchQueries: [{
51
- query: LIST_ROLES
52
- }]
53
- });
54
- const loading = [getQuery, createMutation, updateMutation].find(item => item.loading);
55
- const onSubmit = useCallback(async ({
56
- id,
57
- name,
58
- description,
59
- slug,
60
- permissions,
61
- createdOn
62
- }) => {
63
- if (!permissions || !permissions.length) {
64
- showSnackbar(t`You must configure permissions before saving!`, {
65
- timeout: 60000,
66
- dismissesOnAction: true
67
- });
68
- return;
69
- }
70
- const isUpdate = createdOn;
71
- const [operation, args] = isUpdate ? [update, {
72
- variables: {
73
- id,
74
- data: {
75
- name,
76
- permissions,
77
- ...(description && {
78
- description
79
- })
16
+ const RolesForm = ({ id, newEntry })=>{
17
+ const { goToRoute } = useRouter();
18
+ const { showSnackbar } = useSnackbar();
19
+ const getQuery = useQuery(READ_ROLE, {
20
+ variables: {
21
+ id
22
+ },
23
+ skip: !id,
24
+ onCompleted: (data)=>{
25
+ if (!data) return;
26
+ const { error } = data.security.role;
27
+ if (error) {
28
+ goToRoute(Routes.Roles.List);
29
+ showSnackbar(error.message);
30
+ }
80
31
  }
81
- }
82
- }] : [create, {
83
- variables: {
84
- data: {
85
- name,
86
- slug,
87
- description,
88
- permissions
89
- }
90
- }
91
- }];
92
- const response = await operation(args);
93
- const {
94
- data: role,
95
- error
96
- } = response.data.security.role;
97
- if (error) {
98
- return showSnackbar(error.message);
99
- }
100
- if (!isUpdate) {
101
- goToRoute(Routes.Roles.List, {
102
- id: role.id
103
- });
104
- }
105
- showSnackbar(t`Role saved successfully!`);
106
- }, [id]);
107
- const data = loading ? {} : get(getQuery, "data.security.role.data", {});
108
- const systemRole = data.slug === "full-access" || data.system;
109
- const pluginRole = data.plugin ?? false;
110
- const canModifyRole = !systemRole && !pluginRole;
111
- const showEmptyView = !newEntry && !loading && isEmpty(data);
112
- // Render "No content" selected view.
113
- if (showEmptyView) {
114
- return /*#__PURE__*/React.createElement(EmptyView, {
115
- icon: /*#__PURE__*/React.createElement(SettingsIcon, null),
116
- title: t`Click on the left side list to display role details or create a...`,
117
- action: /*#__PURE__*/React.createElement(Button, {
118
- icon: /*#__PURE__*/React.createElement(AddIcon, null),
119
- text: t`New Role`,
120
- "data-testid": "new-record-button",
121
- onClick: () => {
122
- goToRoute(Routes.Roles.List, {
123
- new: true
124
- });
125
- }
126
- })
127
32
  });
128
- }
129
- return /*#__PURE__*/React.createElement(Form, {
130
- data: data,
131
- onSubmit: onSubmit
132
- }, ({
133
- data,
134
- form,
135
- Bind
136
- }) => {
137
- return /*#__PURE__*/React.createElement(SimpleForm, {
138
- size: "lg"
139
- }, loading && /*#__PURE__*/React.createElement(OverlayLoader, null), /*#__PURE__*/React.createElement(SimpleFormHeader, {
140
- title: data.name ? data.name : "Untitled"
141
- }), /*#__PURE__*/React.createElement(SimpleFormContent, null, /*#__PURE__*/React.createElement(FormContent, {
142
- pluginRole: pluginRole,
143
- canModifyRole: canModifyRole,
144
- newEntry: newEntry
145
- })), /*#__PURE__*/React.createElement(SimpleFormHeader, {
146
- title: "Permissions",
147
- rounded: false
148
- }, /*#__PURE__*/React.createElement("div", {
149
- className: "flex justify-end"
150
- }, /*#__PURE__*/React.createElement(Tooltip, {
151
- content: "Copy permissions as JSON",
152
- trigger: /*#__PURE__*/React.createElement(IconButton, {
153
- variant: "ghost",
154
- icon: /*#__PURE__*/React.createElement(CopyIcon, null),
155
- onClick: () => {
156
- navigator.clipboard.writeText(JSON.stringify(data.permissions, null, 2));
157
- showSnackbar("JSON data copied to clipboard.");
158
- }
159
- })
160
- }))), /*#__PURE__*/React.createElement(SimpleFormContent, null, systemRole && /*#__PURE__*/React.createElement(Grid.Column, {
161
- span: 12
162
- }, /*#__PURE__*/React.createElement(Alert, {
163
- type: "warning",
164
- title: "Permissions are locked"
165
- }, "This is a protected system role and you can't modify its permissions.")), /*#__PURE__*/React.createElement(Grid, null, /*#__PURE__*/React.createElement(React.Fragment, null, canModifyRole && /*#__PURE__*/React.createElement(Grid.Column, {
166
- span: 12
167
- }, /*#__PURE__*/React.createElement(Bind, {
168
- name: "permissions",
169
- defaultValue: []
170
- }, bind => /*#__PURE__*/React.createElement(Permissions, Object.assign({
171
- id: data.id || "new"
172
- }, bind))))))), /*#__PURE__*/React.createElement(SimpleFormFooter, null, canModifyRole && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Button, {
173
- variant: "secondary",
174
- text: t`Cancel`,
175
- onClick: () => {
176
- goToRoute(Routes.Roles.List);
177
- },
178
- "data-testid": "pb.category.new.form.button.cancel"
179
- }), /*#__PURE__*/React.createElement(Button, {
180
- text: t`Save`,
181
- "data-testid": "admin.am.role.new.save",
182
- onClick: ev => {
183
- form.submit(ev);
184
- }
185
- }))));
186
- });
33
+ const [create, createMutation] = useMutation(CREATE_ROLE, {
34
+ refetchQueries: [
35
+ {
36
+ query: LIST_ROLES
37
+ }
38
+ ]
39
+ });
40
+ const [update, updateMutation] = useMutation(UPDATE_ROLE, {
41
+ refetchQueries: [
42
+ {
43
+ query: LIST_ROLES
44
+ }
45
+ ]
46
+ });
47
+ const loading = [
48
+ getQuery,
49
+ createMutation,
50
+ updateMutation
51
+ ].find((item)=>item.loading);
52
+ const onSubmit = useCallback(async ({ id, name, description, slug, permissions, createdOn })=>{
53
+ if (!permissions || !permissions.length) return void showSnackbar(t`You must configure permissions before saving!`, {
54
+ timeout: 60000,
55
+ dismissesOnAction: true
56
+ });
57
+ const isUpdate = createdOn;
58
+ const [operation, args] = isUpdate ? [
59
+ update,
60
+ {
61
+ variables: {
62
+ id,
63
+ data: {
64
+ name,
65
+ permissions,
66
+ ...description && {
67
+ description
68
+ }
69
+ }
70
+ }
71
+ }
72
+ ] : [
73
+ create,
74
+ {
75
+ variables: {
76
+ data: {
77
+ name,
78
+ slug,
79
+ description,
80
+ permissions
81
+ }
82
+ }
83
+ }
84
+ ];
85
+ const response = await operation(args);
86
+ const { data: role, error } = response.data.security.role;
87
+ if (error) return showSnackbar(error.message);
88
+ if (!isUpdate) goToRoute(Routes.Roles.List, {
89
+ id: role.id
90
+ });
91
+ showSnackbar(t`Role saved successfully!`);
92
+ }, [
93
+ id
94
+ ]);
95
+ const data = loading ? {} : get(getQuery, "data.security.role.data", {});
96
+ const systemRole = "full-access" === data.slug || data.system;
97
+ const pluginRole = data.plugin ?? false;
98
+ const canModifyRole = !systemRole && !pluginRole;
99
+ const showEmptyView = !newEntry && !loading && isEmpty(data);
100
+ if (showEmptyView) return /*#__PURE__*/ react.createElement(EmptyView, {
101
+ icon: /*#__PURE__*/ react.createElement(settings_svg_ReactComponent, null),
102
+ title: t`Click on the left side list to display role details or create a...`,
103
+ action: /*#__PURE__*/ react.createElement(Button, {
104
+ icon: /*#__PURE__*/ react.createElement(ReactComponent, null),
105
+ text: t`New Role`,
106
+ "data-testid": "new-record-button",
107
+ onClick: ()=>{
108
+ goToRoute(Routes.Roles.List, {
109
+ new: true
110
+ });
111
+ }
112
+ })
113
+ });
114
+ return /*#__PURE__*/ react.createElement(Form, {
115
+ data: data,
116
+ onSubmit: onSubmit
117
+ }, ({ data, form, Bind })=>/*#__PURE__*/ react.createElement(SimpleForm, {
118
+ size: "lg"
119
+ }, loading && /*#__PURE__*/ react.createElement(OverlayLoader, null), /*#__PURE__*/ react.createElement(SimpleFormHeader, {
120
+ title: data.name ? data.name : "Untitled"
121
+ }), /*#__PURE__*/ react.createElement(SimpleFormContent, null, /*#__PURE__*/ react.createElement(FormContent, {
122
+ pluginRole: pluginRole,
123
+ canModifyRole: canModifyRole,
124
+ newEntry: newEntry
125
+ })), /*#__PURE__*/ react.createElement(SimpleFormHeader, {
126
+ title: "Permissions",
127
+ rounded: false
128
+ }, /*#__PURE__*/ react.createElement("div", {
129
+ className: "flex justify-end"
130
+ }, /*#__PURE__*/ react.createElement(Tooltip, {
131
+ content: "Copy permissions as JSON",
132
+ trigger: /*#__PURE__*/ react.createElement(IconButton, {
133
+ variant: "ghost",
134
+ icon: /*#__PURE__*/ react.createElement(content_copy_svg_ReactComponent, null),
135
+ onClick: ()=>{
136
+ navigator.clipboard.writeText(JSON.stringify(data.permissions, null, 2));
137
+ showSnackbar("JSON data copied to clipboard.");
138
+ }
139
+ })
140
+ }))), /*#__PURE__*/ react.createElement(SimpleFormContent, null, systemRole && /*#__PURE__*/ react.createElement(Grid.Column, {
141
+ span: 12
142
+ }, /*#__PURE__*/ react.createElement(Alert, {
143
+ type: "warning",
144
+ title: "Permissions are locked"
145
+ }, "This is a protected system role and you can't modify its permissions.")), /*#__PURE__*/ react.createElement(Grid, null, /*#__PURE__*/ react.createElement(react.Fragment, null, canModifyRole && /*#__PURE__*/ react.createElement(Grid.Column, {
146
+ span: 12
147
+ }, /*#__PURE__*/ react.createElement(Bind, {
148
+ name: "permissions",
149
+ defaultValue: []
150
+ }, (bind)=>/*#__PURE__*/ react.createElement(Permissions, {
151
+ id: data.id || "new",
152
+ ...bind
153
+ })))))), /*#__PURE__*/ react.createElement(SimpleFormFooter, null, canModifyRole && /*#__PURE__*/ react.createElement(react.Fragment, null, /*#__PURE__*/ react.createElement(Button, {
154
+ variant: "secondary",
155
+ text: t`Cancel`,
156
+ onClick: ()=>{
157
+ goToRoute(Routes.Roles.List);
158
+ },
159
+ "data-testid": "pb.category.new.form.button.cancel"
160
+ }), /*#__PURE__*/ react.createElement(Button, {
161
+ text: t`Save`,
162
+ "data-testid": "admin.am.role.new.save",
163
+ onClick: (ev)=>{
164
+ form.submit(ev);
165
+ }
166
+ })))));
187
167
  };
188
- const FormContent = props => {
189
- const {
190
- pluginRole,
191
- canModifyRole,
192
- newEntry
193
- } = props;
194
- const form = useForm();
195
- const {
196
- generateSlug
197
- } = useGenerateSlug(form, "name", "slug");
198
- return /*#__PURE__*/React.createElement(Grid, null, /*#__PURE__*/React.createElement(React.Fragment, null, pluginRole && /*#__PURE__*/React.createElement(Grid.Column, {
199
- span: 12
200
- }, /*#__PURE__*/React.createElement(Alert, {
201
- type: "warning",
202
- title: "Permissions are locked"
203
- }, "This role is registered via an extension, and cannot be modified.")), /*#__PURE__*/React.createElement(Grid.Column, {
204
- span: 6
205
- }, /*#__PURE__*/React.createElement(Bind, {
206
- name: "name",
207
- validators: validation.create("required,minLength:1")
208
- }, /*#__PURE__*/React.createElement(Input, {
209
- required: true,
210
- label: t`Name`,
211
- disabled: !canModifyRole,
212
- onBlur: generateSlug,
213
- "data-testid": "admin.am.role.new.name"
214
- }))), /*#__PURE__*/React.createElement(Grid.Column, {
215
- span: 6
216
- }, /*#__PURE__*/React.createElement(Bind, {
217
- name: "slug",
218
- validators: validation.create("required,minLength:1")
219
- }, /*#__PURE__*/React.createElement(Input, {
220
- required: true,
221
- disabled: !canModifyRole || !newEntry,
222
- label: t`Slug`,
223
- "data-testid": "admin.am.role.new.slug"
224
- }))), /*#__PURE__*/React.createElement(Grid.Column, {
225
- span: 12
226
- }, /*#__PURE__*/React.createElement(Bind, {
227
- name: "description",
228
- validators: validation.create("maxLength:500"),
229
- defaultValue: ""
230
- }, /*#__PURE__*/React.createElement(Textarea, {
231
- label: t`Description`,
232
- rows: 3,
233
- disabled: !canModifyRole,
234
- "data-testid": "admin.am.role.new.description"
235
- })))));
168
+ const FormContent = (props)=>{
169
+ const { pluginRole, canModifyRole, newEntry } = props;
170
+ const form = useForm();
171
+ const { generateSlug } = useGenerateSlug(form, "name", "slug");
172
+ return /*#__PURE__*/ react.createElement(Grid, null, /*#__PURE__*/ react.createElement(react.Fragment, null, pluginRole && /*#__PURE__*/ react.createElement(Grid.Column, {
173
+ span: 12
174
+ }, /*#__PURE__*/ react.createElement(Alert, {
175
+ type: "warning",
176
+ title: "Permissions are locked"
177
+ }, "This role is registered via an extension, and cannot be modified.")), /*#__PURE__*/ react.createElement(Grid.Column, {
178
+ span: 6
179
+ }, /*#__PURE__*/ react.createElement(form_Bind, {
180
+ name: "name",
181
+ validators: validation.create("required,minLength:1")
182
+ }, /*#__PURE__*/ react.createElement(Input, {
183
+ required: true,
184
+ label: t`Name`,
185
+ disabled: !canModifyRole,
186
+ onBlur: generateSlug,
187
+ "data-testid": "admin.am.role.new.name"
188
+ }))), /*#__PURE__*/ react.createElement(Grid.Column, {
189
+ span: 6
190
+ }, /*#__PURE__*/ react.createElement(form_Bind, {
191
+ name: "slug",
192
+ validators: validation.create("required,minLength:1")
193
+ }, /*#__PURE__*/ react.createElement(Input, {
194
+ required: true,
195
+ disabled: !canModifyRole || !newEntry,
196
+ label: t`Slug`,
197
+ "data-testid": "admin.am.role.new.slug"
198
+ }))), /*#__PURE__*/ react.createElement(Grid.Column, {
199
+ span: 12
200
+ }, /*#__PURE__*/ react.createElement(form_Bind, {
201
+ name: "description",
202
+ validators: validation.create("maxLength:500"),
203
+ defaultValue: ""
204
+ }, /*#__PURE__*/ react.createElement(Textarea, {
205
+ label: t`Description`,
206
+ rows: 3,
207
+ disabled: !canModifyRole,
208
+ "data-testid": "admin.am.role.new.description"
209
+ })))));
236
210
  };
211
+ export { RolesForm };
237
212
 
238
213
  //# sourceMappingURL=RolesForm.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["React","useCallback","useMutation","useQuery","get","i18n","Bind","Form","useForm","useGenerateSlug","validation","SimpleForm","SimpleFormFooter","SimpleFormContent","SimpleFormHeader","Permissions","EmptyView","useRouter","useSnackbar","CREATE_ROLE","LIST_ROLES","READ_ROLE","UPDATE_ROLE","isEmpty","ReactComponent","AddIcon","CopyIcon","SettingsIcon","Alert","Button","Grid","IconButton","Input","OverlayLoader","Textarea","Tooltip","Routes","t","ns","RolesForm","id","newEntry","goToRoute","showSnackbar","getQuery","variables","skip","onCompleted","data","error","security","role","Roles","List","message","create","createMutation","refetchQueries","query","update","updateMutation","loading","find","item","onSubmit","name","description","slug","permissions","createdOn","length","timeout","dismissesOnAction","isUpdate","operation","args","response","systemRole","system","pluginRole","plugin","canModifyRole","showEmptyView","createElement","icon","title","action","text","onClick","new","form","size","FormContent","rounded","className","content","trigger","variant","navigator","clipboard","writeText","JSON","stringify","Column","span","type","Fragment","defaultValue","bind","Object","assign","ev","submit","props","generateSlug","validators","required","label","disabled","onBlur","rows"],"sources":["RolesForm.tsx"],"sourcesContent":["import React, { useCallback } from \"react\";\nimport { useMutation, useQuery } from \"@apollo/react-hooks\";\nimport get from \"lodash/get.js\";\nimport { i18n } from \"@webiny/app/i18n/index.js\";\nimport { Bind, Form, useForm, useGenerateSlug } from \"@webiny/form\";\nimport { validation } from \"@webiny/validation\";\nimport {\n SimpleForm,\n SimpleFormFooter,\n SimpleFormContent,\n SimpleFormHeader,\n Permissions,\n EmptyView,\n useRouter,\n useSnackbar\n} from \"@webiny/app-admin\";\nimport { CREATE_ROLE, LIST_ROLES, READ_ROLE, UPDATE_ROLE } from \"./graphql.js\";\nimport isEmpty from \"lodash/isEmpty.js\";\nimport { ReactComponent as AddIcon } from \"@webiny/icons/add.svg\";\nimport { ReactComponent as CopyIcon } from \"@webiny/icons/content_copy.svg\";\nimport { ReactComponent as SettingsIcon } from \"@webiny/icons/settings.svg\";\nimport type { Role } from \"~/types.js\";\nimport {\n Alert,\n Button,\n Grid,\n IconButton,\n Input,\n OverlayLoader,\n Textarea,\n Tooltip\n} from \"@webiny/admin-ui\";\nimport { Routes } from \"~/routes.js\";\n\nconst t = i18n.ns(\"app-security/admin/roles/form\");\n\nexport interface RolesFormProps {\n newEntry: boolean;\n id: string | undefined;\n}\n\nexport const RolesForm = ({ id, newEntry }: RolesFormProps) => {\n const { goToRoute } = useRouter();\n const { showSnackbar } = useSnackbar();\n\n const getQuery = useQuery(READ_ROLE, {\n variables: { id },\n skip: !id,\n onCompleted: data => {\n if (!data) {\n return;\n }\n\n const { error } = data.security.role;\n if (error) {\n goToRoute(Routes.Roles.List);\n showSnackbar(error.message);\n }\n }\n });\n\n const [create, createMutation] = useMutation(CREATE_ROLE, {\n refetchQueries: [{ query: LIST_ROLES }]\n });\n\n const [update, updateMutation] = useMutation(UPDATE_ROLE, {\n refetchQueries: [{ query: LIST_ROLES }]\n });\n\n const loading = [getQuery, createMutation, updateMutation].find(item => item.loading);\n\n const onSubmit = useCallback(\n async ({ id, name, description, slug, permissions, createdOn }: Role) => {\n if (!permissions || !permissions.length) {\n showSnackbar(t`You must configure permissions before saving!`, {\n timeout: 60000,\n dismissesOnAction: true\n });\n return;\n }\n\n const isUpdate = createdOn;\n const [operation, args] = isUpdate\n ? [\n update,\n {\n variables: {\n id,\n data: {\n name,\n permissions,\n ...(description && { description })\n }\n }\n }\n ]\n : [\n create,\n {\n variables: {\n data: {\n name,\n slug,\n description,\n permissions\n }\n }\n }\n ];\n\n const response = await operation(args);\n\n const { data: role, error } = response.data.security.role;\n if (error) {\n return showSnackbar(error.message);\n }\n\n if (!isUpdate) {\n goToRoute(Routes.Roles.List, { id: role.id });\n }\n showSnackbar(t`Role saved successfully!`);\n },\n [id]\n );\n\n const data: Role = loading ? {} : get(getQuery, \"data.security.role.data\", {});\n\n const systemRole = data.slug === \"full-access\" || data.system;\n const pluginRole = data.plugin ?? false;\n const canModifyRole = !systemRole && !pluginRole;\n\n const showEmptyView = !newEntry && !loading && isEmpty(data);\n // Render \"No content\" selected view.\n if (showEmptyView) {\n return (\n <EmptyView\n icon={<SettingsIcon />}\n title={t`Click on the left side list to display role details or create a...`}\n action={\n <Button\n icon={<AddIcon />}\n text={t`New Role`}\n data-testid=\"new-record-button\"\n onClick={() => {\n goToRoute(Routes.Roles.List, { new: true });\n }}\n />\n }\n />\n );\n }\n\n return (\n <Form data={data} onSubmit={onSubmit}>\n {({ data, form, Bind }) => {\n return (\n <SimpleForm size={\"lg\"}>\n {loading && <OverlayLoader />}\n <SimpleFormHeader title={data.name ? data.name : \"Untitled\"} />\n <SimpleFormContent>\n <FormContent\n pluginRole={pluginRole}\n canModifyRole={canModifyRole}\n newEntry={newEntry}\n />\n </SimpleFormContent>\n <SimpleFormHeader title={\"Permissions\"} rounded={false}>\n <div className={\"flex justify-end\"}>\n <Tooltip\n content=\"Copy permissions as JSON\"\n trigger={\n <IconButton\n variant={\"ghost\"}\n icon={<CopyIcon />}\n onClick={() => {\n navigator.clipboard.writeText(\n JSON.stringify(data.permissions, null, 2)\n );\n showSnackbar(\"JSON data copied to clipboard.\");\n }}\n />\n }\n />\n </div>\n </SimpleFormHeader>\n <SimpleFormContent>\n {systemRole && (\n <Grid.Column span={12}>\n <Alert type={\"warning\"} title={\"Permissions are locked\"}>\n This is a protected system role and you can&apos;t modify\n its permissions.\n </Alert>\n </Grid.Column>\n )}\n <Grid>\n <>\n {canModifyRole && (\n <Grid.Column span={12}>\n <Bind name={\"permissions\"} defaultValue={[]}>\n {bind => (\n <Permissions id={data.id || \"new\"} {...bind} />\n )}\n </Bind>\n </Grid.Column>\n )}\n </>\n </Grid>\n </SimpleFormContent>\n <SimpleFormFooter>\n {canModifyRole && (\n <>\n <Button\n variant={\"secondary\"}\n text={t`Cancel`}\n onClick={() => {\n goToRoute(Routes.Roles.List);\n }}\n data-testid=\"pb.category.new.form.button.cancel\"\n />\n <Button\n text={t`Save`}\n data-testid=\"admin.am.role.new.save\"\n onClick={ev => {\n form.submit(ev);\n }}\n />\n </>\n )}\n </SimpleFormFooter>\n </SimpleForm>\n );\n }}\n </Form>\n );\n};\n\ninterface FormContentProps {\n pluginRole: boolean;\n canModifyRole: boolean;\n newEntry: boolean;\n}\n\nconst FormContent = (props: FormContentProps) => {\n const { pluginRole, canModifyRole, newEntry } = props;\n const form = useForm();\n const { generateSlug } = useGenerateSlug(form, \"name\", \"slug\");\n\n return (\n <Grid>\n <>\n {pluginRole && (\n <Grid.Column span={12}>\n <Alert type={\"warning\"} title={\"Permissions are locked\"}>\n This role is registered via an extension, and cannot be modified.\n </Alert>\n </Grid.Column>\n )}\n <Grid.Column span={6}>\n <Bind name=\"name\" validators={validation.create(\"required,minLength:1\")}>\n <Input\n required\n label={t`Name`}\n disabled={!canModifyRole}\n onBlur={generateSlug}\n data-testid=\"admin.am.role.new.name\"\n />\n </Bind>\n </Grid.Column>\n <Grid.Column span={6}>\n <Bind name=\"slug\" validators={validation.create(\"required,minLength:1\")}>\n <Input\n required\n disabled={!canModifyRole || !newEntry}\n label={t`Slug`}\n data-testid=\"admin.am.role.new.slug\"\n />\n </Bind>\n </Grid.Column>\n <Grid.Column span={12}>\n <Bind\n name=\"description\"\n validators={validation.create(\"maxLength:500\")}\n defaultValue={\"\"}\n >\n <Textarea\n label={t`Description`}\n rows={3}\n disabled={!canModifyRole}\n data-testid=\"admin.am.role.new.description\"\n />\n </Bind>\n </Grid.Column>\n </>\n </Grid>\n );\n};\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,WAAW,QAAQ,OAAO;AAC1C,SAASC,WAAW,EAAEC,QAAQ,QAAQ,qBAAqB;AAC3D,OAAOC,GAAG,MAAM,eAAe;AAC/B,SAASC,IAAI,QAAQ,2BAA2B;AAChD,SAASC,IAAI,EAAEC,IAAI,EAAEC,OAAO,EAAEC,eAAe,QAAQ,cAAc;AACnE,SAASC,UAAU,QAAQ,oBAAoB;AAC/C,SACIC,UAAU,EACVC,gBAAgB,EAChBC,iBAAiB,EACjBC,gBAAgB,EAChBC,WAAW,EACXC,SAAS,EACTC,SAAS,EACTC,WAAW,QACR,mBAAmB;AAC1B,SAASC,WAAW,EAAEC,UAAU,EAAEC,SAAS,EAAEC,WAAW;AACxD,OAAOC,OAAO,MAAM,mBAAmB;AACvC,SAASC,cAAc,IAAIC,OAAO,QAAQ,uBAAuB;AACjE,SAASD,cAAc,IAAIE,QAAQ,QAAQ,gCAAgC;AAC3E,SAASF,cAAc,IAAIG,YAAY,QAAQ,4BAA4B;AAE3E,SACIC,KAAK,EACLC,MAAM,EACNC,IAAI,EACJC,UAAU,EACVC,KAAK,EACLC,aAAa,EACbC,QAAQ,EACRC,OAAO,QACJ,kBAAkB;AACzB,SAASC,MAAM;AAEf,MAAMC,CAAC,GAAGhC,IAAI,CAACiC,EAAE,CAAC,+BAA+B,CAAC;AAOlD,OAAO,MAAMC,SAAS,GAAGA,CAAC;EAAEC,EAAE;EAAEC;AAAyB,CAAC,KAAK;EAC3D,MAAM;IAAEC;EAAU,CAAC,GAAGzB,SAAS,CAAC,CAAC;EACjC,MAAM;IAAE0B;EAAa,CAAC,GAAGzB,WAAW,CAAC,CAAC;EAEtC,MAAM0B,QAAQ,GAAGzC,QAAQ,CAACkB,SAAS,EAAE;IACjCwB,SAAS,EAAE;MAAEL;IAAG,CAAC;IACjBM,IAAI,EAAE,CAACN,EAAE;IACTO,WAAW,EAAEC,IAAI,IAAI;MACjB,IAAI,CAACA,IAAI,EAAE;QACP;MACJ;MAEA,MAAM;QAAEC;MAAM,CAAC,GAAGD,IAAI,CAACE,QAAQ,CAACC,IAAI;MACpC,IAAIF,KAAK,EAAE;QACPP,SAAS,CAACN,MAAM,CAACgB,KAAK,CAACC,IAAI,CAAC;QAC5BV,YAAY,CAACM,KAAK,CAACK,OAAO,CAAC;MAC/B;IACJ;EACJ,CAAC,CAAC;EAEF,MAAM,CAACC,MAAM,EAAEC,cAAc,CAAC,GAAGtD,WAAW,CAACiB,WAAW,EAAE;IACtDsC,cAAc,EAAE,CAAC;MAAEC,KAAK,EAAEtC;IAAW,CAAC;EAC1C,CAAC,CAAC;EAEF,MAAM,CAACuC,MAAM,EAAEC,cAAc,CAAC,GAAG1D,WAAW,CAACoB,WAAW,EAAE;IACtDmC,cAAc,EAAE,CAAC;MAAEC,KAAK,EAAEtC;IAAW,CAAC;EAC1C,CAAC,CAAC;EAEF,MAAMyC,OAAO,GAAG,CAACjB,QAAQ,EAAEY,cAAc,EAAEI,cAAc,CAAC,CAACE,IAAI,CAACC,IAAI,IAAIA,IAAI,CAACF,OAAO,CAAC;EAErF,MAAMG,QAAQ,GAAG/D,WAAW,CACxB,OAAO;IAAEuC,EAAE;IAAEyB,IAAI;IAAEC,WAAW;IAAEC,IAAI;IAAEC,WAAW;IAAEC;EAAgB,CAAC,KAAK;IACrE,IAAI,CAACD,WAAW,IAAI,CAACA,WAAW,CAACE,MAAM,EAAE;MACrC3B,YAAY,CAACN,CAAC,+CAA+C,EAAE;QAC3DkC,OAAO,EAAE,KAAK;QACdC,iBAAiB,EAAE;MACvB,CAAC,CAAC;MACF;IACJ;IAEA,MAAMC,QAAQ,GAAGJ,SAAS;IAC1B,MAAM,CAACK,SAAS,EAAEC,IAAI,CAAC,GAAGF,QAAQ,GAC5B,CACId,MAAM,EACN;MACId,SAAS,EAAE;QACPL,EAAE;QACFQ,IAAI,EAAE;UACFiB,IAAI;UACJG,WAAW;UACX,IAAIF,WAAW,IAAI;YAAEA;UAAY,CAAC;QACtC;MACJ;IACJ,CAAC,CACJ,GACD,CACIX,MAAM,EACN;MACIV,SAAS,EAAE;QACPG,IAAI,EAAE;UACFiB,IAAI;UACJE,IAAI;UACJD,WAAW;UACXE;QACJ;MACJ;IACJ,CAAC,CACJ;IAEP,MAAMQ,QAAQ,GAAG,MAAMF,SAAS,CAACC,IAAI,CAAC;IAEtC,MAAM;MAAE3B,IAAI,EAAEG,IAAI;MAAEF;IAAM,CAAC,GAAG2B,QAAQ,CAAC5B,IAAI,CAACE,QAAQ,CAACC,IAAI;IACzD,IAAIF,KAAK,EAAE;MACP,OAAON,YAAY,CAACM,KAAK,CAACK,OAAO,CAAC;IACtC;IAEA,IAAI,CAACmB,QAAQ,EAAE;MACX/B,SAAS,CAACN,MAAM,CAACgB,KAAK,CAACC,IAAI,EAAE;QAAEb,EAAE,EAAEW,IAAI,CAACX;MAAG,CAAC,CAAC;IACjD;IACAG,YAAY,CAACN,CAAC,0BAA0B,CAAC;EAC7C,CAAC,EACD,CAACG,EAAE,CACP,CAAC;EAED,MAAMQ,IAAU,GAAGa,OAAO,GAAG,CAAC,CAAC,GAAGzD,GAAG,CAACwC,QAAQ,EAAE,yBAAyB,EAAE,CAAC,CAAC,CAAC;EAE9E,MAAMiC,UAAU,GAAG7B,IAAI,CAACmB,IAAI,KAAK,aAAa,IAAInB,IAAI,CAAC8B,MAAM;EAC7D,MAAMC,UAAU,GAAG/B,IAAI,CAACgC,MAAM,IAAI,KAAK;EACvC,MAAMC,aAAa,GAAG,CAACJ,UAAU,IAAI,CAACE,UAAU;EAEhD,MAAMG,aAAa,GAAG,CAACzC,QAAQ,IAAI,CAACoB,OAAO,IAAItC,OAAO,CAACyB,IAAI,CAAC;EAC5D;EACA,IAAIkC,aAAa,EAAE;IACf,oBACIlF,KAAA,CAAAmF,aAAA,CAACnE,SAAS;MACNoE,IAAI,eAAEpF,KAAA,CAAAmF,aAAA,CAACxD,YAAY,MAAE,CAAE;MACvB0D,KAAK,EAAEhD,CAAC,oEAAqE;MAC7EiD,MAAM,eACFtF,KAAA,CAAAmF,aAAA,CAACtD,MAAM;QACHuD,IAAI,eAAEpF,KAAA,CAAAmF,aAAA,CAAC1D,OAAO,MAAE,CAAE;QAClB8D,IAAI,EAAElD,CAAC,UAAW;QAClB,eAAY,mBAAmB;QAC/BmD,OAAO,EAAEA,CAAA,KAAM;UACX9C,SAAS,CAACN,MAAM,CAACgB,KAAK,CAACC,IAAI,EAAE;YAAEoC,GAAG,EAAE;UAAK,CAAC,CAAC;QAC/C;MAAE,CACL;IACJ,CACJ,CAAC;EAEV;EAEA,oBACIzF,KAAA,CAAAmF,aAAA,CAAC5E,IAAI;IAACyC,IAAI,EAAEA,IAAK;IAACgB,QAAQ,EAAEA;EAAS,GAChC,CAAC;IAAEhB,IAAI;IAAE0C,IAAI;IAAEpF;EAAK,CAAC,KAAK;IACvB,oBACIN,KAAA,CAAAmF,aAAA,CAACxE,UAAU;MAACgF,IAAI,EAAE;IAAK,GAClB9B,OAAO,iBAAI7D,KAAA,CAAAmF,aAAA,CAAClD,aAAa,MAAE,CAAC,eAC7BjC,KAAA,CAAAmF,aAAA,CAACrE,gBAAgB;MAACuE,KAAK,EAAErC,IAAI,CAACiB,IAAI,GAAGjB,IAAI,CAACiB,IAAI,GAAG;IAAW,CAAE,CAAC,eAC/DjE,KAAA,CAAAmF,aAAA,CAACtE,iBAAiB,qBACdb,KAAA,CAAAmF,aAAA,CAACS,WAAW;MACRb,UAAU,EAAEA,UAAW;MACvBE,aAAa,EAAEA,aAAc;MAC7BxC,QAAQ,EAAEA;IAAS,CACtB,CACc,CAAC,eACpBzC,KAAA,CAAAmF,aAAA,CAACrE,gBAAgB;MAACuE,KAAK,EAAE,aAAc;MAACQ,OAAO,EAAE;IAAM,gBACnD7F,KAAA,CAAAmF,aAAA;MAAKW,SAAS,EAAE;IAAmB,gBAC/B9F,KAAA,CAAAmF,aAAA,CAAChD,OAAO;MACJ4D,OAAO,EAAC,0BAA0B;MAClCC,OAAO,eACHhG,KAAA,CAAAmF,aAAA,CAACpD,UAAU;QACPkE,OAAO,EAAE,OAAQ;QACjBb,IAAI,eAAEpF,KAAA,CAAAmF,aAAA,CAACzD,QAAQ,MAAE,CAAE;QACnB8D,OAAO,EAAEA,CAAA,KAAM;UACXU,SAAS,CAACC,SAAS,CAACC,SAAS,CACzBC,IAAI,CAACC,SAAS,CAACtD,IAAI,CAACoB,WAAW,EAAE,IAAI,EAAE,CAAC,CAC5C,CAAC;UACDzB,YAAY,CAAC,gCAAgC,CAAC;QAClD;MAAE,CACL;IACJ,CACJ,CACA,CACS,CAAC,eACnB3C,KAAA,CAAAmF,aAAA,CAACtE,iBAAiB,QACbgE,UAAU,iBACP7E,KAAA,CAAAmF,aAAA,CAACrD,IAAI,CAACyE,MAAM;MAACC,IAAI,EAAE;IAAG,gBAClBxG,KAAA,CAAAmF,aAAA,CAACvD,KAAK;MAAC6E,IAAI,EAAE,SAAU;MAACpB,KAAK,EAAE;IAAyB,GAAC,uEAGlD,CACE,CAChB,eACDrF,KAAA,CAAAmF,aAAA,CAACrD,IAAI,qBACD9B,KAAA,CAAAmF,aAAA,CAAAnF,KAAA,CAAA0G,QAAA,QACKzB,aAAa,iBACVjF,KAAA,CAAAmF,aAAA,CAACrD,IAAI,CAACyE,MAAM;MAACC,IAAI,EAAE;IAAG,gBAClBxG,KAAA,CAAAmF,aAAA,CAAC7E,IAAI;MAAC2D,IAAI,EAAE,aAAc;MAAC0C,YAAY,EAAE;IAAG,GACvCC,IAAI,iBACD5G,KAAA,CAAAmF,aAAA,CAACpE,WAAW,EAAA8F,MAAA,CAAAC,MAAA;MAACtE,EAAE,EAAEQ,IAAI,CAACR,EAAE,IAAI;IAAM,GAAKoE,IAAI,CAAG,CAEhD,CACG,CAEnB,CACA,CACS,CAAC,eACpB5G,KAAA,CAAAmF,aAAA,CAACvE,gBAAgB,QACZqE,aAAa,iBACVjF,KAAA,CAAAmF,aAAA,CAAAnF,KAAA,CAAA0G,QAAA,qBACI1G,KAAA,CAAAmF,aAAA,CAACtD,MAAM;MACHoE,OAAO,EAAE,WAAY;MACrBV,IAAI,EAAElD,CAAC,QAAS;MAChBmD,OAAO,EAAEA,CAAA,KAAM;QACX9C,SAAS,CAACN,MAAM,CAACgB,KAAK,CAACC,IAAI,CAAC;MAChC,CAAE;MACF,eAAY;IAAoC,CACnD,CAAC,eACFrD,KAAA,CAAAmF,aAAA,CAACtD,MAAM;MACH0D,IAAI,EAAElD,CAAC,MAAO;MACd,eAAY,wBAAwB;MACpCmD,OAAO,EAAEuB,EAAE,IAAI;QACXrB,IAAI,CAACsB,MAAM,CAACD,EAAE,CAAC;MACnB;IAAE,CACL,CACH,CAEQ,CACV,CAAC;EAErB,CACE,CAAC;AAEf,CAAC;AAQD,MAAMnB,WAAW,GAAIqB,KAAuB,IAAK;EAC7C,MAAM;IAAElC,UAAU;IAAEE,aAAa;IAAExC;EAAS,CAAC,GAAGwE,KAAK;EACrD,MAAMvB,IAAI,GAAGlF,OAAO,CAAC,CAAC;EACtB,MAAM;IAAE0G;EAAa,CAAC,GAAGzG,eAAe,CAACiF,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC;EAE9D,oBACI1F,KAAA,CAAAmF,aAAA,CAACrD,IAAI,qBACD9B,KAAA,CAAAmF,aAAA,CAAAnF,KAAA,CAAA0G,QAAA,QACK3B,UAAU,iBACP/E,KAAA,CAAAmF,aAAA,CAACrD,IAAI,CAACyE,MAAM;IAACC,IAAI,EAAE;EAAG,gBAClBxG,KAAA,CAAAmF,aAAA,CAACvD,KAAK;IAAC6E,IAAI,EAAE,SAAU;IAACpB,KAAK,EAAE;EAAyB,GAAC,mEAElD,CACE,CAChB,eACDrF,KAAA,CAAAmF,aAAA,CAACrD,IAAI,CAACyE,MAAM;IAACC,IAAI,EAAE;EAAE,gBACjBxG,KAAA,CAAAmF,aAAA,CAAC7E,IAAI;IAAC2D,IAAI,EAAC,MAAM;IAACkD,UAAU,EAAEzG,UAAU,CAAC6C,MAAM,CAAC,sBAAsB;EAAE,gBACpEvD,KAAA,CAAAmF,aAAA,CAACnD,KAAK;IACFoF,QAAQ;IACRC,KAAK,EAAEhF,CAAC,MAAO;IACfiF,QAAQ,EAAE,CAACrC,aAAc;IACzBsC,MAAM,EAAEL,YAAa;IACrB,eAAY;EAAwB,CACvC,CACC,CACG,CAAC,eACdlH,KAAA,CAAAmF,aAAA,CAACrD,IAAI,CAACyE,MAAM;IAACC,IAAI,EAAE;EAAE,gBACjBxG,KAAA,CAAAmF,aAAA,CAAC7E,IAAI;IAAC2D,IAAI,EAAC,MAAM;IAACkD,UAAU,EAAEzG,UAAU,CAAC6C,MAAM,CAAC,sBAAsB;EAAE,gBACpEvD,KAAA,CAAAmF,aAAA,CAACnD,KAAK;IACFoF,QAAQ;IACRE,QAAQ,EAAE,CAACrC,aAAa,IAAI,CAACxC,QAAS;IACtC4E,KAAK,EAAEhF,CAAC,MAAO;IACf,eAAY;EAAwB,CACvC,CACC,CACG,CAAC,eACdrC,KAAA,CAAAmF,aAAA,CAACrD,IAAI,CAACyE,MAAM;IAACC,IAAI,EAAE;EAAG,gBAClBxG,KAAA,CAAAmF,aAAA,CAAC7E,IAAI;IACD2D,IAAI,EAAC,aAAa;IAClBkD,UAAU,EAAEzG,UAAU,CAAC6C,MAAM,CAAC,eAAe,CAAE;IAC/CoD,YAAY,EAAE;EAAG,gBAEjB3G,KAAA,CAAAmF,aAAA,CAACjD,QAAQ;IACLmF,KAAK,EAAEhF,CAAC,aAAc;IACtBmF,IAAI,EAAE,CAAE;IACRF,QAAQ,EAAE,CAACrC,aAAc;IACzB,eAAY;EAA+B,CAC9C,CACC,CACG,CACf,CACA,CAAC;AAEf,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"ui/views/Roles/RolesForm.js","sources":["../../../../src/ui/views/Roles/RolesForm.tsx"],"sourcesContent":["import React, { useCallback } from \"react\";\nimport { useMutation, useQuery } from \"@apollo/react-hooks\";\nimport get from \"lodash/get.js\";\nimport { i18n } from \"@webiny/app/i18n/index.js\";\nimport { Bind, Form, useForm, useGenerateSlug } from \"@webiny/form\";\nimport { validation } from \"@webiny/validation\";\nimport {\n SimpleForm,\n SimpleFormFooter,\n SimpleFormContent,\n SimpleFormHeader,\n Permissions,\n EmptyView,\n useRouter,\n useSnackbar\n} from \"@webiny/app-admin\";\nimport { CREATE_ROLE, LIST_ROLES, READ_ROLE, UPDATE_ROLE } from \"./graphql.js\";\nimport isEmpty from \"lodash/isEmpty.js\";\nimport { ReactComponent as AddIcon } from \"@webiny/icons/add.svg\";\nimport { ReactComponent as CopyIcon } from \"@webiny/icons/content_copy.svg\";\nimport { ReactComponent as SettingsIcon } from \"@webiny/icons/settings.svg\";\nimport type { Role } from \"~/types.js\";\nimport {\n Alert,\n Button,\n Grid,\n IconButton,\n Input,\n OverlayLoader,\n Textarea,\n Tooltip\n} from \"@webiny/admin-ui\";\nimport { Routes } from \"~/routes.js\";\n\nconst t = i18n.ns(\"app-security/admin/roles/form\");\n\nexport interface RolesFormProps {\n newEntry: boolean;\n id: string | undefined;\n}\n\nexport const RolesForm = ({ id, newEntry }: RolesFormProps) => {\n const { goToRoute } = useRouter();\n const { showSnackbar } = useSnackbar();\n\n const getQuery = useQuery(READ_ROLE, {\n variables: { id },\n skip: !id,\n onCompleted: data => {\n if (!data) {\n return;\n }\n\n const { error } = data.security.role;\n if (error) {\n goToRoute(Routes.Roles.List);\n showSnackbar(error.message);\n }\n }\n });\n\n const [create, createMutation] = useMutation(CREATE_ROLE, {\n refetchQueries: [{ query: LIST_ROLES }]\n });\n\n const [update, updateMutation] = useMutation(UPDATE_ROLE, {\n refetchQueries: [{ query: LIST_ROLES }]\n });\n\n const loading = [getQuery, createMutation, updateMutation].find(item => item.loading);\n\n const onSubmit = useCallback(\n async ({ id, name, description, slug, permissions, createdOn }: Role) => {\n if (!permissions || !permissions.length) {\n showSnackbar(t`You must configure permissions before saving!`, {\n timeout: 60000,\n dismissesOnAction: true\n });\n return;\n }\n\n const isUpdate = createdOn;\n const [operation, args] = isUpdate\n ? [\n update,\n {\n variables: {\n id,\n data: {\n name,\n permissions,\n ...(description && { description })\n }\n }\n }\n ]\n : [\n create,\n {\n variables: {\n data: {\n name,\n slug,\n description,\n permissions\n }\n }\n }\n ];\n\n const response = await operation(args);\n\n const { data: role, error } = response.data.security.role;\n if (error) {\n return showSnackbar(error.message);\n }\n\n if (!isUpdate) {\n goToRoute(Routes.Roles.List, { id: role.id });\n }\n showSnackbar(t`Role saved successfully!`);\n },\n [id]\n );\n\n const data: Role = loading ? {} : get(getQuery, \"data.security.role.data\", {});\n\n const systemRole = data.slug === \"full-access\" || data.system;\n const pluginRole = data.plugin ?? false;\n const canModifyRole = !systemRole && !pluginRole;\n\n const showEmptyView = !newEntry && !loading && isEmpty(data);\n // Render \"No content\" selected view.\n if (showEmptyView) {\n return (\n <EmptyView\n icon={<SettingsIcon />}\n title={t`Click on the left side list to display role details or create a...`}\n action={\n <Button\n icon={<AddIcon />}\n text={t`New Role`}\n data-testid=\"new-record-button\"\n onClick={() => {\n goToRoute(Routes.Roles.List, { new: true });\n }}\n />\n }\n />\n );\n }\n\n return (\n <Form data={data} onSubmit={onSubmit}>\n {({ data, form, Bind }) => {\n return (\n <SimpleForm size={\"lg\"}>\n {loading && <OverlayLoader />}\n <SimpleFormHeader title={data.name ? data.name : \"Untitled\"} />\n <SimpleFormContent>\n <FormContent\n pluginRole={pluginRole}\n canModifyRole={canModifyRole}\n newEntry={newEntry}\n />\n </SimpleFormContent>\n <SimpleFormHeader title={\"Permissions\"} rounded={false}>\n <div className={\"flex justify-end\"}>\n <Tooltip\n content=\"Copy permissions as JSON\"\n trigger={\n <IconButton\n variant={\"ghost\"}\n icon={<CopyIcon />}\n onClick={() => {\n navigator.clipboard.writeText(\n JSON.stringify(data.permissions, null, 2)\n );\n showSnackbar(\"JSON data copied to clipboard.\");\n }}\n />\n }\n />\n </div>\n </SimpleFormHeader>\n <SimpleFormContent>\n {systemRole && (\n <Grid.Column span={12}>\n <Alert type={\"warning\"} title={\"Permissions are locked\"}>\n This is a protected system role and you can&apos;t modify\n its permissions.\n </Alert>\n </Grid.Column>\n )}\n <Grid>\n <>\n {canModifyRole && (\n <Grid.Column span={12}>\n <Bind name={\"permissions\"} defaultValue={[]}>\n {bind => (\n <Permissions id={data.id || \"new\"} {...bind} />\n )}\n </Bind>\n </Grid.Column>\n )}\n </>\n </Grid>\n </SimpleFormContent>\n <SimpleFormFooter>\n {canModifyRole && (\n <>\n <Button\n variant={\"secondary\"}\n text={t`Cancel`}\n onClick={() => {\n goToRoute(Routes.Roles.List);\n }}\n data-testid=\"pb.category.new.form.button.cancel\"\n />\n <Button\n text={t`Save`}\n data-testid=\"admin.am.role.new.save\"\n onClick={ev => {\n form.submit(ev);\n }}\n />\n </>\n )}\n </SimpleFormFooter>\n </SimpleForm>\n );\n }}\n </Form>\n );\n};\n\ninterface FormContentProps {\n pluginRole: boolean;\n canModifyRole: boolean;\n newEntry: boolean;\n}\n\nconst FormContent = (props: FormContentProps) => {\n const { pluginRole, canModifyRole, newEntry } = props;\n const form = useForm();\n const { generateSlug } = useGenerateSlug(form, \"name\", \"slug\");\n\n return (\n <Grid>\n <>\n {pluginRole && (\n <Grid.Column span={12}>\n <Alert type={\"warning\"} title={\"Permissions are locked\"}>\n This role is registered via an extension, and cannot be modified.\n </Alert>\n </Grid.Column>\n )}\n <Grid.Column span={6}>\n <Bind name=\"name\" validators={validation.create(\"required,minLength:1\")}>\n <Input\n required\n label={t`Name`}\n disabled={!canModifyRole}\n onBlur={generateSlug}\n data-testid=\"admin.am.role.new.name\"\n />\n </Bind>\n </Grid.Column>\n <Grid.Column span={6}>\n <Bind name=\"slug\" validators={validation.create(\"required,minLength:1\")}>\n <Input\n required\n disabled={!canModifyRole || !newEntry}\n label={t`Slug`}\n data-testid=\"admin.am.role.new.slug\"\n />\n </Bind>\n </Grid.Column>\n <Grid.Column span={12}>\n <Bind\n name=\"description\"\n validators={validation.create(\"maxLength:500\")}\n defaultValue={\"\"}\n >\n <Textarea\n label={t`Description`}\n rows={3}\n disabled={!canModifyRole}\n data-testid=\"admin.am.role.new.description\"\n />\n </Bind>\n </Grid.Column>\n </>\n </Grid>\n );\n};\n"],"names":["t","i18n","RolesForm","id","newEntry","goToRoute","useRouter","showSnackbar","useSnackbar","getQuery","useQuery","READ_ROLE","data","error","Routes","create","createMutation","useMutation","CREATE_ROLE","LIST_ROLES","update","updateMutation","UPDATE_ROLE","loading","item","onSubmit","useCallback","name","description","slug","permissions","createdOn","isUpdate","operation","args","response","role","get","systemRole","pluginRole","canModifyRole","showEmptyView","isEmpty","EmptyView","SettingsIcon","Button","AddIcon","Form","form","Bind","SimpleForm","OverlayLoader","SimpleFormHeader","SimpleFormContent","FormContent","Tooltip","IconButton","CopyIcon","navigator","JSON","Grid","Alert","bind","Permissions","SimpleFormFooter","ev","props","useForm","generateSlug","useGenerateSlug","validation","Input","Textarea"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import gql from "graphql-tag";
1
+ import graphql_tag from "graphql-tag";
2
2
  const fields = `
3
3
  id
4
4
  name
@@ -9,7 +9,7 @@ const fields = `
9
9
  plugin
10
10
  createdOn
11
11
  `;
12
- export const LIST_ROLES = gql`
12
+ const LIST_ROLES = graphql_tag`
13
13
  query listRoles {
14
14
  security {
15
15
  roles: listRoles {
@@ -20,7 +20,7 @@ export const LIST_ROLES = gql`
20
20
  }
21
21
  }
22
22
  `;
23
- export const READ_ROLE = gql`
23
+ const READ_ROLE = graphql_tag`
24
24
  query getRole($id: ID!) {
25
25
  security {
26
26
  role: getRole(where: { id: $id }){
@@ -35,7 +35,7 @@ export const READ_ROLE = gql`
35
35
  }
36
36
  }
37
37
  `;
38
- export const CREATE_ROLE = gql`
38
+ const CREATE_ROLE = graphql_tag`
39
39
  mutation createRole($data: SecurityRoleCreateInput!){
40
40
  security {
41
41
  role: createRole(data: $data) {
@@ -51,7 +51,7 @@ export const CREATE_ROLE = gql`
51
51
  }
52
52
  }
53
53
  `;
54
- export const UPDATE_ROLE = gql`
54
+ const UPDATE_ROLE = graphql_tag`
55
55
  mutation updateRole($id: ID!, $data: SecurityRoleUpdateInput!){
56
56
  security {
57
57
  role: updateRole(id: $id, data: $data) {
@@ -67,7 +67,7 @@ export const UPDATE_ROLE = gql`
67
67
  }
68
68
  }
69
69
  `;
70
- export const DELETE_ROLE = gql`
70
+ const DELETE_ROLE = graphql_tag`
71
71
  mutation deleteRole($id: ID!) {
72
72
  security {
73
73
  deleteRole(id: $id) {
@@ -81,5 +81,6 @@ export const DELETE_ROLE = gql`
81
81
  }
82
82
  }
83
83
  `;
84
+ export { CREATE_ROLE, DELETE_ROLE, LIST_ROLES, READ_ROLE, UPDATE_ROLE };
84
85
 
85
86
  //# sourceMappingURL=graphql.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["gql","fields","LIST_ROLES","READ_ROLE","CREATE_ROLE","UPDATE_ROLE","DELETE_ROLE"],"sources":["graphql.ts"],"sourcesContent":["import gql from \"graphql-tag\";\nimport type { Role } from \"~/types.js\";\n\nconst fields = `\n id\n name\n slug\n description\n permissions\n system\n plugin\n createdOn\n`;\n\nexport interface ListRolesResponse {\n security: {\n roles: {\n data: Role[];\n };\n };\n}\n\nexport const LIST_ROLES = gql`\n query listRoles {\n security {\n roles: listRoles {\n data {\n ${fields}\n }\n }\n }\n }\n`;\n\nexport const READ_ROLE = gql`\n query getRole($id: ID!) {\n security {\n role: getRole(where: { id: $id }){\n data {\n ${fields}\n }\n error {\n code\n message\n }\n }\n }\n }\n`;\n\nexport const CREATE_ROLE = gql`\n mutation createRole($data: SecurityRoleCreateInput!){\n security {\n role: createRole(data: $data) {\n data {\n ${fields}\n }\n error {\n code\n message\n data\n }\n }\n }\n }\n`;\n\nexport const UPDATE_ROLE = gql`\n mutation updateRole($id: ID!, $data: SecurityRoleUpdateInput!){\n security {\n role: updateRole(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_ROLE = gql`\n mutation deleteRole($id: ID!) {\n security {\n deleteRole(id: $id) {\n data\n error {\n code\n message\n data\n }\n }\n }\n }\n`;\n"],"mappings":"AAAA,OAAOA,GAAG,MAAM,aAAa;AAG7B,MAAMC,MAAM,GAAG;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAUD,OAAO,MAAMC,UAAU,GAAGF,GAAG;AAC7B;AACA;AACA;AACA;AACA,sBAAsBC,MAAM;AAC5B;AACA;AACA;AACA;AACA,CAAC;AAED,OAAO,MAAME,SAAS,GAAGH,GAAG;AAC5B;AACA;AACA;AACA;AACA,sBAAsBC,MAAM;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAED,OAAO,MAAMG,WAAW,GAAGJ,GAAG;AAC9B;AACA;AACA;AACA;AACA,sBAAsBC,MAAM;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAED,OAAO,MAAMI,WAAW,GAAGL,GAAG;AAC9B;AACA;AACA;AACA;AACA,sBAAsBC,MAAM;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAED,OAAO,MAAMK,WAAW,GAAGN,GAAG;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"ui/views/Roles/graphql.js","sources":["../../../../src/ui/views/Roles/graphql.ts"],"sourcesContent":["import gql from \"graphql-tag\";\nimport type { Role } from \"~/types.js\";\n\nconst fields = `\n id\n name\n slug\n description\n permissions\n system\n plugin\n createdOn\n`;\n\nexport interface ListRolesResponse {\n security: {\n roles: {\n data: Role[];\n };\n };\n}\n\nexport const LIST_ROLES = gql`\n query listRoles {\n security {\n roles: listRoles {\n data {\n ${fields}\n }\n }\n }\n }\n`;\n\nexport const READ_ROLE = gql`\n query getRole($id: ID!) {\n security {\n role: getRole(where: { id: $id }){\n data {\n ${fields}\n }\n error {\n code\n message\n }\n }\n }\n }\n`;\n\nexport const CREATE_ROLE = gql`\n mutation createRole($data: SecurityRoleCreateInput!){\n security {\n role: createRole(data: $data) {\n data {\n ${fields}\n }\n error {\n code\n message\n data\n }\n }\n }\n }\n`;\n\nexport const UPDATE_ROLE = gql`\n mutation updateRole($id: ID!, $data: SecurityRoleUpdateInput!){\n security {\n role: updateRole(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_ROLE = gql`\n mutation deleteRole($id: ID!) {\n security {\n deleteRole(id: $id) {\n data\n error {\n code\n message\n data\n }\n }\n }\n }\n`;\n"],"names":["fields","LIST_ROLES","gql","READ_ROLE","CREATE_ROLE","UPDATE_ROLE","DELETE_ROLE"],"mappings":";AAGA,MAAMA,SAAS,CAAC;;;;;;;;;AAShB,CAAC;AAUM,MAAMC,aAAaC,WAAG,CAAC;;;;;oBAKV,EAAEF,OAAO;;;;;AAK7B,CAAC;AAEM,MAAMG,YAAYD,WAAG,CAAC;;;;;oBAKT,EAAEF,OAAO;;;;;;;;;AAS7B,CAAC;AAEM,MAAMI,cAAcF,WAAG,CAAC;;;;;oBAKX,EAAEF,OAAO;;;;;;;;;;AAU7B,CAAC;AAEM,MAAMK,cAAcH,WAAG,CAAC;;;;;oBAKX,EAAEF,OAAO;;;;;;;;;;AAU7B,CAAC;AAEM,MAAMM,cAAcJ,WAAG,CAAC;;;;;;;;;;;;;AAa/B,CAAC"}
@@ -1,3 +1 @@
1
1
  export * from "./Roles.js";
2
-
3
- //# sourceMappingURL=index.js.map
@@ -1,18 +1,17 @@
1
- import React from "react";
1
+ import react from "react";
2
2
  import { TeamsDataList } from "./TeamsDataList.js";
3
3
  import { TeamsForm } from "./TeamsForm.js";
4
- import { SplitView, LeftPanel, RightPanel, useRoute } from "@webiny/app-admin";
4
+ import { LeftPanel, RightPanel, SplitView, useRoute } from "@webiny/app-admin";
5
5
  import { Routes } from "../../../routes.js";
6
- export const Teams = () => {
7
- const {
8
- route
9
- } = useRoute(Routes.Roles.List);
10
- return /*#__PURE__*/React.createElement(SplitView, null, /*#__PURE__*/React.createElement(LeftPanel, null, /*#__PURE__*/React.createElement(TeamsDataList, {
11
- activeId: route.params.id
12
- })), /*#__PURE__*/React.createElement(RightPanel, null, /*#__PURE__*/React.createElement(TeamsForm, {
13
- newEntry: route.params.new === true,
14
- id: route.params.id
15
- })));
6
+ const Teams = ()=>{
7
+ const { route } = useRoute(Routes.Roles.List);
8
+ return /*#__PURE__*/ react.createElement(SplitView, null, /*#__PURE__*/ react.createElement(LeftPanel, null, /*#__PURE__*/ react.createElement(TeamsDataList, {
9
+ activeId: route.params.id
10
+ })), /*#__PURE__*/ react.createElement(RightPanel, null, /*#__PURE__*/ react.createElement(TeamsForm, {
11
+ newEntry: true === route.params.new,
12
+ id: route.params.id
13
+ })));
16
14
  };
15
+ export { Teams };
17
16
 
18
17
  //# sourceMappingURL=Teams.js.map