@webiny/app-security-access-management 6.3.0 → 6.4.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/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,199 +1,191 @@
1
- import React, { useCallback } from "react";
1
+ import react, { useCallback } from "react";
2
2
  import { useMutation, useQuery } from "@apollo/react-hooks";
3
3
  import pick from "lodash/pick.js";
4
4
  import get from "lodash/get.js";
5
5
  import { i18n } from "@webiny/app/i18n/index.js";
6
6
  import { Bind, Form, useForm, useGenerateSlug } from "@webiny/form";
7
7
  import { validation } from "@webiny/validation";
8
- import { SimpleForm, SimpleFormFooter, SimpleFormContent, SimpleFormHeader, EmptyView, useSnackbar, useRouter } from "@webiny/app-admin";
8
+ import { EmptyView, RolesMultiAutocomplete, SimpleForm, SimpleFormContent, SimpleFormFooter, SimpleFormHeader, useRouter, useSnackbar } from "@webiny/app-admin";
9
9
  import { CREATE_TEAM, LIST_TEAMS, READ_TEAM, UPDATE_TEAM } from "./graphql.js";
10
10
  import isEmpty from "lodash/isEmpty.js";
11
- import { ReactComponent as AddIcon } from "@webiny/app-admin/assets/icons/add-18px.svg";
12
- import { ReactComponent as SettingsIcon } from "@webiny/icons/settings.svg";
11
+ import { ReactComponent } from "@webiny/app-admin/assets/icons/add-18px.svg";
12
+ import { ReactComponent as settings_svg_ReactComponent } from "@webiny/icons/settings.svg";
13
13
  import { Alert, Button, Grid, Input, OverlayLoader, Textarea } from "@webiny/admin-ui";
14
- import { RolesMultiAutocomplete } from "@webiny/app-admin";
15
14
  import { Routes } from "../../../routes.js";
16
15
  const t = i18n.ns("app-security/admin/teams/form");
17
- export const TeamsForm = ({
18
- newEntry,
19
- id
20
- }) => {
21
- const {
22
- goToRoute
23
- } = useRouter();
24
- const {
25
- showSnackbar
26
- } = useSnackbar();
27
- const getQuery = useQuery(READ_TEAM, {
28
- variables: {
29
- id
30
- },
31
- skip: !id,
32
- onCompleted: data => {
33
- if (!data) {
34
- return;
35
- }
36
- const {
37
- error
38
- } = data.security.team;
39
- if (error) {
40
- goToRoute(Routes.Teams.List);
41
- showSnackbar(error.message);
42
- }
43
- }
44
- });
45
- const [create, createMutation] = useMutation(CREATE_TEAM, {
46
- refetchQueries: [{
47
- query: LIST_TEAMS
48
- }]
49
- });
50
- const [update, updateMutation] = useMutation(UPDATE_TEAM, {
51
- refetchQueries: [{
52
- query: LIST_TEAMS
53
- }]
54
- });
55
- const loading = [getQuery, createMutation, updateMutation].find(item => item.loading);
56
- const onSubmit = useCallback(async formData => {
57
- const isUpdate = formData.createdOn;
58
- const [operation, args] = isUpdate ? [update, {
59
- variables: {
60
- id: formData.id,
61
- data: pick(formData, ["name", "description", "roles"])
62
- }
63
- }] : [create, {
64
- variables: {
65
- data: pick(formData, ["name", "slug", "description", "roles"])
66
- }
67
- }];
68
- const response = await operation(args);
69
- const {
70
- data: team,
71
- error
72
- } = response.data.security.team;
73
- if (error) {
74
- return showSnackbar(error.message);
75
- }
76
- if (!isUpdate) {
77
- goToRoute(Routes.Teams.List, {
78
- id: team.id
79
- });
80
- }
81
- showSnackbar(t`Team saved successfully!`);
82
- }, [id]);
83
- const data = loading ? {} : get(getQuery, "data.security.team.data", {});
84
- const systemTeam = data.system;
85
- const pluginTeam = data.plugin ?? false;
86
- const canModifyTeam = !systemTeam && !pluginTeam;
87
- const showEmptyView = !newEntry && !loading && isEmpty(data);
88
- // Render "No content" selected view.
89
- if (showEmptyView) {
90
- return /*#__PURE__*/React.createElement(EmptyView, {
91
- icon: /*#__PURE__*/React.createElement(SettingsIcon, null),
92
- title: t`Click on the left side list to display team details or create a...`,
93
- action: /*#__PURE__*/React.createElement(Button, {
94
- text: t`New Team`,
95
- icon: /*#__PURE__*/React.createElement(AddIcon, null),
96
- "data-testid": "new-record-button",
97
- onClick: () => {
98
- goToRoute(Routes.Teams.List, {
99
- new: true
100
- });
16
+ const TeamsForm = ({ newEntry, id })=>{
17
+ const { goToRoute } = useRouter();
18
+ const { showSnackbar } = useSnackbar();
19
+ const getQuery = useQuery(READ_TEAM, {
20
+ variables: {
21
+ id
22
+ },
23
+ skip: !id,
24
+ onCompleted: (data)=>{
25
+ if (!data) return;
26
+ const { error } = data.security.team;
27
+ if (error) {
28
+ goToRoute(Routes.Teams.List);
29
+ showSnackbar(error.message);
30
+ }
101
31
  }
102
- })
103
32
  });
104
- }
105
- return /*#__PURE__*/React.createElement(Form, {
106
- data: data,
107
- onSubmit: onSubmit
108
- }, ({
109
- data,
110
- form
111
- }) => {
112
- return /*#__PURE__*/React.createElement(SimpleForm, null, loading && /*#__PURE__*/React.createElement(OverlayLoader, null), /*#__PURE__*/React.createElement(SimpleFormHeader, {
113
- title: data.name ? data.name : "Untitled"
114
- }), /*#__PURE__*/React.createElement(SimpleFormContent, null, /*#__PURE__*/React.createElement(FormContent, {
115
- pluginTeam: pluginTeam,
116
- systemTeam: systemTeam,
117
- canModifyTeam: canModifyTeam,
118
- newEntry: newEntry
119
- })), /*#__PURE__*/React.createElement(SimpleFormFooter, null, /*#__PURE__*/React.createElement(Button, {
120
- variant: "secondary",
121
- text: t`Cancel`,
122
- onClick: () => {
123
- goToRoute(Routes.Teams.List);
124
- }
125
- }), canModifyTeam && /*#__PURE__*/React.createElement(Button, {
126
- text: t`Save`,
127
- "data-testid": "admin.am.team.new.save",
128
- onClick: ev => {
129
- form.submit(ev);
130
- }
131
- })));
132
- });
33
+ const [create, createMutation] = useMutation(CREATE_TEAM, {
34
+ refetchQueries: [
35
+ {
36
+ query: LIST_TEAMS
37
+ }
38
+ ]
39
+ });
40
+ const [update, updateMutation] = useMutation(UPDATE_TEAM, {
41
+ refetchQueries: [
42
+ {
43
+ query: LIST_TEAMS
44
+ }
45
+ ]
46
+ });
47
+ const loading = [
48
+ getQuery,
49
+ createMutation,
50
+ updateMutation
51
+ ].find((item)=>item.loading);
52
+ const onSubmit = useCallback(async (formData)=>{
53
+ const isUpdate = formData.createdOn;
54
+ const [operation, args] = isUpdate ? [
55
+ update,
56
+ {
57
+ variables: {
58
+ id: formData.id,
59
+ data: pick(formData, [
60
+ "name",
61
+ "description",
62
+ "roles"
63
+ ])
64
+ }
65
+ }
66
+ ] : [
67
+ create,
68
+ {
69
+ variables: {
70
+ data: pick(formData, [
71
+ "name",
72
+ "slug",
73
+ "description",
74
+ "roles"
75
+ ])
76
+ }
77
+ }
78
+ ];
79
+ const response = await operation(args);
80
+ const { data: team, error } = response.data.security.team;
81
+ if (error) return showSnackbar(error.message);
82
+ if (!isUpdate) goToRoute(Routes.Teams.List, {
83
+ id: team.id
84
+ });
85
+ showSnackbar(t`Team saved successfully!`);
86
+ }, [
87
+ id
88
+ ]);
89
+ const data = loading ? {} : get(getQuery, "data.security.team.data", {});
90
+ const systemTeam = data.system;
91
+ const pluginTeam = data.plugin ?? false;
92
+ const canModifyTeam = !systemTeam && !pluginTeam;
93
+ const showEmptyView = !newEntry && !loading && isEmpty(data);
94
+ if (showEmptyView) return /*#__PURE__*/ react.createElement(EmptyView, {
95
+ icon: /*#__PURE__*/ react.createElement(settings_svg_ReactComponent, null),
96
+ title: t`Click on the left side list to display team details or create a...`,
97
+ action: /*#__PURE__*/ react.createElement(Button, {
98
+ text: t`New Team`,
99
+ icon: /*#__PURE__*/ react.createElement(ReactComponent, null),
100
+ "data-testid": "new-record-button",
101
+ onClick: ()=>{
102
+ goToRoute(Routes.Teams.List, {
103
+ new: true
104
+ });
105
+ }
106
+ })
107
+ });
108
+ return /*#__PURE__*/ react.createElement(Form, {
109
+ data: data,
110
+ onSubmit: onSubmit
111
+ }, ({ data, form })=>/*#__PURE__*/ react.createElement(SimpleForm, null, loading && /*#__PURE__*/ react.createElement(OverlayLoader, null), /*#__PURE__*/ react.createElement(SimpleFormHeader, {
112
+ title: data.name ? data.name : "Untitled"
113
+ }), /*#__PURE__*/ react.createElement(SimpleFormContent, null, /*#__PURE__*/ react.createElement(FormContent, {
114
+ pluginTeam: pluginTeam,
115
+ systemTeam: systemTeam,
116
+ canModifyTeam: canModifyTeam,
117
+ newEntry: newEntry
118
+ })), /*#__PURE__*/ react.createElement(SimpleFormFooter, null, /*#__PURE__*/ react.createElement(Button, {
119
+ variant: "secondary",
120
+ text: t`Cancel`,
121
+ onClick: ()=>{
122
+ goToRoute(Routes.Teams.List);
123
+ }
124
+ }), canModifyTeam && /*#__PURE__*/ react.createElement(Button, {
125
+ text: t`Save`,
126
+ "data-testid": "admin.am.team.new.save",
127
+ onClick: (ev)=>{
128
+ form.submit(ev);
129
+ }
130
+ }))));
133
131
  };
134
- const FormContent = props => {
135
- const {
136
- newEntry,
137
- pluginTeam,
138
- systemTeam,
139
- canModifyTeam
140
- } = props;
141
- const form = useForm();
142
- const {
143
- generateSlug
144
- } = useGenerateSlug(form, "name", "slug");
145
- return /*#__PURE__*/React.createElement(Grid, null, /*#__PURE__*/React.createElement(React.Fragment, null, systemTeam && /*#__PURE__*/React.createElement(Grid.Column, {
146
- span: 12
147
- }, /*#__PURE__*/React.createElement(Alert, {
148
- type: "info",
149
- title: "Permissions are locked"
150
- }, "This is a protected system team and you can't modify its permissions.")), pluginTeam && /*#__PURE__*/React.createElement(Grid.Column, {
151
- span: 12
152
- }, /*#__PURE__*/React.createElement(Alert, {
153
- type: "info",
154
- title: "Important"
155
- }, "This team is registered via an extension, and cannot be modified."))), /*#__PURE__*/React.createElement(Grid.Column, {
156
- span: 6
157
- }, /*#__PURE__*/React.createElement(Bind, {
158
- name: "name",
159
- validators: validation.create("required,minLength:1")
160
- }, /*#__PURE__*/React.createElement(Input, {
161
- required: true,
162
- onBlur: generateSlug,
163
- disabled: !canModifyTeam,
164
- label: t`Name`,
165
- "data-testid": "admin.am.team.new.name"
166
- }))), /*#__PURE__*/React.createElement(Grid.Column, {
167
- span: 6
168
- }, /*#__PURE__*/React.createElement(Bind, {
169
- name: "slug",
170
- validators: validation.create("required,minLength:1")
171
- }, /*#__PURE__*/React.createElement(Input, {
172
- required: true,
173
- disabled: !canModifyTeam || !newEntry,
174
- label: t`Slug`,
175
- "data-testid": "admin.am.team.new.slug"
176
- }))), /*#__PURE__*/React.createElement(Grid.Column, {
177
- span: 12
178
- }, /*#__PURE__*/React.createElement(Bind, {
179
- name: "description",
180
- validators: validation.create("maxLength:500"),
181
- defaultValue: ""
182
- }, /*#__PURE__*/React.createElement(Textarea, {
183
- disabled: !canModifyTeam,
184
- label: t`Description`,
185
- rows: 3,
186
- "data-testid": "admin.am.team.new.description"
187
- }))), /*#__PURE__*/React.createElement(Grid.Column, {
188
- span: 12
189
- }, /*#__PURE__*/React.createElement(Bind, {
190
- name: "roles",
191
- validators: validation.create("required")
192
- }, /*#__PURE__*/React.createElement(RolesMultiAutocomplete, {
193
- disabled: !canModifyTeam,
194
- label: t`Roles`,
195
- "data-testid": "admin.am.team.new.roles"
196
- }))));
132
+ const FormContent = (props)=>{
133
+ const { newEntry, pluginTeam, systemTeam, canModifyTeam } = props;
134
+ const form = useForm();
135
+ const { generateSlug } = useGenerateSlug(form, "name", "slug");
136
+ return /*#__PURE__*/ react.createElement(Grid, null, /*#__PURE__*/ react.createElement(react.Fragment, null, systemTeam && /*#__PURE__*/ react.createElement(Grid.Column, {
137
+ span: 12
138
+ }, /*#__PURE__*/ react.createElement(Alert, {
139
+ type: "info",
140
+ title: "Permissions are locked"
141
+ }, "This is a protected system team and you can't modify its permissions.")), pluginTeam && /*#__PURE__*/ react.createElement(Grid.Column, {
142
+ span: 12
143
+ }, /*#__PURE__*/ react.createElement(Alert, {
144
+ type: "info",
145
+ title: "Important"
146
+ }, "This team is registered via an extension, and cannot be modified."))), /*#__PURE__*/ react.createElement(Grid.Column, {
147
+ span: 6
148
+ }, /*#__PURE__*/ react.createElement(Bind, {
149
+ name: "name",
150
+ validators: validation.create("required,minLength:1")
151
+ }, /*#__PURE__*/ react.createElement(Input, {
152
+ required: true,
153
+ onBlur: generateSlug,
154
+ disabled: !canModifyTeam,
155
+ label: t`Name`,
156
+ "data-testid": "admin.am.team.new.name"
157
+ }))), /*#__PURE__*/ react.createElement(Grid.Column, {
158
+ span: 6
159
+ }, /*#__PURE__*/ react.createElement(Bind, {
160
+ name: "slug",
161
+ validators: validation.create("required,minLength:1")
162
+ }, /*#__PURE__*/ react.createElement(Input, {
163
+ required: true,
164
+ disabled: !canModifyTeam || !newEntry,
165
+ label: t`Slug`,
166
+ "data-testid": "admin.am.team.new.slug"
167
+ }))), /*#__PURE__*/ react.createElement(Grid.Column, {
168
+ span: 12
169
+ }, /*#__PURE__*/ react.createElement(Bind, {
170
+ name: "description",
171
+ validators: validation.create("maxLength:500"),
172
+ defaultValue: ""
173
+ }, /*#__PURE__*/ react.createElement(Textarea, {
174
+ disabled: !canModifyTeam,
175
+ label: t`Description`,
176
+ rows: 3,
177
+ "data-testid": "admin.am.team.new.description"
178
+ }))), /*#__PURE__*/ react.createElement(Grid.Column, {
179
+ span: 12
180
+ }, /*#__PURE__*/ react.createElement(Bind, {
181
+ name: "roles",
182
+ validators: validation.create("required")
183
+ }, /*#__PURE__*/ react.createElement(RolesMultiAutocomplete, {
184
+ disabled: !canModifyTeam,
185
+ label: t`Roles`,
186
+ "data-testid": "admin.am.team.new.roles"
187
+ }))));
197
188
  };
189
+ export { TeamsForm };
198
190
 
199
191
  //# sourceMappingURL=TeamsForm.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["React","useCallback","useMutation","useQuery","pick","get","i18n","Bind","Form","useForm","useGenerateSlug","validation","SimpleForm","SimpleFormFooter","SimpleFormContent","SimpleFormHeader","EmptyView","useSnackbar","useRouter","CREATE_TEAM","LIST_TEAMS","READ_TEAM","UPDATE_TEAM","isEmpty","ReactComponent","AddIcon","SettingsIcon","Alert","Button","Grid","Input","OverlayLoader","Textarea","RolesMultiAutocomplete","Routes","t","ns","TeamsForm","newEntry","id","goToRoute","showSnackbar","getQuery","variables","skip","onCompleted","data","error","security","team","Teams","List","message","create","createMutation","refetchQueries","query","update","updateMutation","loading","find","item","onSubmit","formData","isUpdate","createdOn","operation","args","response","systemTeam","system","pluginTeam","plugin","canModifyTeam","showEmptyView","createElement","icon","title","action","text","onClick","new","form","name","FormContent","variant","ev","submit","props","generateSlug","Fragment","Column","span","type","validators","required","onBlur","disabled","label","defaultValue","rows"],"sources":["TeamsForm.tsx"],"sourcesContent":["import React, { useCallback } from \"react\";\nimport { useMutation, useQuery } from \"@apollo/react-hooks\";\nimport pick from \"lodash/pick.js\";\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 EmptyView,\n useSnackbar,\n useRouter\n} from \"@webiny/app-admin\";\nimport { CREATE_TEAM, LIST_TEAMS, READ_TEAM, UPDATE_TEAM } from \"./graphql.js\";\nimport isEmpty from \"lodash/isEmpty.js\";\nimport { ReactComponent as AddIcon } from \"@webiny/app-admin/assets/icons/add-18px.svg\";\nimport type { Team } from \"~/types.js\";\nimport { ReactComponent as SettingsIcon } from \"@webiny/icons/settings.svg\";\nimport { Alert, Button, Grid, Input, OverlayLoader, Textarea } from \"@webiny/admin-ui\";\nimport { RolesMultiAutocomplete } from \"@webiny/app-admin\";\nimport { Routes } from \"~/routes.js\";\n\nconst t = i18n.ns(\"app-security/admin/teams/form\");\n\nexport interface TeamsFormProps {\n newEntry: boolean;\n id: string | undefined;\n}\n\nexport const TeamsForm = ({ newEntry, id }: TeamsFormProps) => {\n const { goToRoute } = useRouter();\n const { showSnackbar } = useSnackbar();\n\n const getQuery = useQuery(READ_TEAM, {\n variables: { id },\n skip: !id,\n onCompleted: data => {\n if (!data) {\n return;\n }\n\n const { error } = data.security.team;\n if (error) {\n goToRoute(Routes.Teams.List);\n showSnackbar(error.message);\n }\n }\n });\n\n const [create, createMutation] = useMutation(CREATE_TEAM, {\n refetchQueries: [{ query: LIST_TEAMS }]\n });\n\n const [update, updateMutation] = useMutation(UPDATE_TEAM, {\n refetchQueries: [{ query: LIST_TEAMS }]\n });\n\n const loading = [getQuery, createMutation, updateMutation].find(item => item.loading);\n\n const onSubmit = useCallback(\n async (formData: Team) => {\n const isUpdate = formData.createdOn;\n const [operation, args] = isUpdate\n ? [\n update,\n {\n variables: {\n id: formData.id,\n data: pick(formData, [\"name\", \"description\", \"roles\"])\n }\n }\n ]\n : [\n create,\n {\n variables: {\n data: pick(formData, [\"name\", \"slug\", \"description\", \"roles\"])\n }\n }\n ];\n\n const response = await operation(args);\n\n const { data: team, error } = response.data.security.team;\n if (error) {\n return showSnackbar(error.message);\n }\n\n if (!isUpdate) {\n goToRoute(Routes.Teams.List, { id: team.id });\n }\n showSnackbar(t`Team saved successfully!`);\n },\n [id]\n );\n\n const data = loading ? {} : get(getQuery, \"data.security.team.data\", {});\n\n const systemTeam = data.system;\n const pluginTeam = data.plugin ?? false;\n const canModifyTeam = !systemTeam && !pluginTeam;\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 team details or create a...`}\n action={\n <Button\n text={t`New Team`}\n icon={<AddIcon />}\n data-testid=\"new-record-button\"\n onClick={() => {\n goToRoute(Routes.Teams.List, { new: true });\n }}\n />\n }\n />\n );\n }\n\n return (\n <Form data={data} onSubmit={onSubmit}>\n {({ data, form }) => {\n return (\n <SimpleForm>\n {loading && <OverlayLoader />}\n <SimpleFormHeader title={data.name ? data.name : \"Untitled\"} />\n <SimpleFormContent>\n <FormContent\n pluginTeam={pluginTeam}\n systemTeam={systemTeam}\n canModifyTeam={canModifyTeam}\n newEntry={newEntry}\n />\n </SimpleFormContent>\n <SimpleFormFooter>\n <Button\n variant={\"secondary\"}\n text={t`Cancel`}\n onClick={() => {\n goToRoute(Routes.Teams.List);\n }}\n />\n {canModifyTeam && (\n <Button\n text={t`Save`}\n data-testid=\"admin.am.team.new.save\"\n onClick={ev => {\n form.submit(ev);\n }}\n />\n )}\n </SimpleFormFooter>\n </SimpleForm>\n );\n }}\n </Form>\n );\n};\n\ninterface FormContentProps {\n systemTeam: boolean;\n pluginTeam: boolean;\n canModifyTeam: boolean;\n newEntry: boolean;\n}\n\nconst FormContent = (props: FormContentProps) => {\n const { newEntry, pluginTeam, systemTeam, canModifyTeam } = props;\n\n const form = useForm();\n const { generateSlug } = useGenerateSlug(form, \"name\", \"slug\");\n\n return (\n <Grid>\n <>\n {systemTeam && (\n <Grid.Column span={12}>\n <Alert type={\"info\"} title={\"Permissions are locked\"}>\n This is a protected system team and you can&apos;t modify its\n permissions.\n </Alert>\n </Grid.Column>\n )}\n {pluginTeam && (\n <Grid.Column span={12}>\n <Alert type={\"info\"} title={\"Important\"}>\n This team is registered via an extension, and cannot be modified.\n </Alert>\n </Grid.Column>\n )}\n </>\n <Grid.Column span={6}>\n <Bind name=\"name\" validators={validation.create(\"required,minLength:1\")}>\n <Input\n required\n onBlur={generateSlug}\n disabled={!canModifyTeam}\n label={t`Name`}\n data-testid=\"admin.am.team.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={!canModifyTeam || !newEntry}\n label={t`Slug`}\n data-testid=\"admin.am.team.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 disabled={!canModifyTeam}\n label={t`Description`}\n rows={3}\n data-testid=\"admin.am.team.new.description\"\n />\n </Bind>\n </Grid.Column>\n <Grid.Column span={12}>\n <Bind name=\"roles\" validators={validation.create(\"required\")}>\n <RolesMultiAutocomplete\n disabled={!canModifyTeam}\n label={t`Roles`}\n data-testid=\"admin.am.team.new.roles\"\n />\n </Bind>\n </Grid.Column>\n </Grid>\n );\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"ui/views/Teams/TeamsForm.js","sources":["../../../../src/ui/views/Teams/TeamsForm.tsx"],"sourcesContent":["import React, { useCallback } from \"react\";\nimport { useMutation, useQuery } from \"@apollo/react-hooks\";\nimport pick from \"lodash/pick.js\";\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 EmptyView,\n useSnackbar,\n useRouter\n} from \"@webiny/app-admin\";\nimport { CREATE_TEAM, LIST_TEAMS, READ_TEAM, UPDATE_TEAM } from \"./graphql.js\";\nimport isEmpty from \"lodash/isEmpty.js\";\nimport { ReactComponent as AddIcon } from \"@webiny/app-admin/assets/icons/add-18px.svg\";\nimport type { Team } from \"~/types.js\";\nimport { ReactComponent as SettingsIcon } from \"@webiny/icons/settings.svg\";\nimport { Alert, Button, Grid, Input, OverlayLoader, Textarea } from \"@webiny/admin-ui\";\nimport { RolesMultiAutocomplete } from \"@webiny/app-admin\";\nimport { Routes } from \"~/routes.js\";\n\nconst t = i18n.ns(\"app-security/admin/teams/form\");\n\nexport interface TeamsFormProps {\n newEntry: boolean;\n id: string | undefined;\n}\n\nexport const TeamsForm = ({ newEntry, id }: TeamsFormProps) => {\n const { goToRoute } = useRouter();\n const { showSnackbar } = useSnackbar();\n\n const getQuery = useQuery(READ_TEAM, {\n variables: { id },\n skip: !id,\n onCompleted: data => {\n if (!data) {\n return;\n }\n\n const { error } = data.security.team;\n if (error) {\n goToRoute(Routes.Teams.List);\n showSnackbar(error.message);\n }\n }\n });\n\n const [create, createMutation] = useMutation(CREATE_TEAM, {\n refetchQueries: [{ query: LIST_TEAMS }]\n });\n\n const [update, updateMutation] = useMutation(UPDATE_TEAM, {\n refetchQueries: [{ query: LIST_TEAMS }]\n });\n\n const loading = [getQuery, createMutation, updateMutation].find(item => item.loading);\n\n const onSubmit = useCallback(\n async (formData: Team) => {\n const isUpdate = formData.createdOn;\n const [operation, args] = isUpdate\n ? [\n update,\n {\n variables: {\n id: formData.id,\n data: pick(formData, [\"name\", \"description\", \"roles\"])\n }\n }\n ]\n : [\n create,\n {\n variables: {\n data: pick(formData, [\"name\", \"slug\", \"description\", \"roles\"])\n }\n }\n ];\n\n const response = await operation(args);\n\n const { data: team, error } = response.data.security.team;\n if (error) {\n return showSnackbar(error.message);\n }\n\n if (!isUpdate) {\n goToRoute(Routes.Teams.List, { id: team.id });\n }\n showSnackbar(t`Team saved successfully!`);\n },\n [id]\n );\n\n const data = loading ? {} : get(getQuery, \"data.security.team.data\", {});\n\n const systemTeam = data.system;\n const pluginTeam = data.plugin ?? false;\n const canModifyTeam = !systemTeam && !pluginTeam;\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 team details or create a...`}\n action={\n <Button\n text={t`New Team`}\n icon={<AddIcon />}\n data-testid=\"new-record-button\"\n onClick={() => {\n goToRoute(Routes.Teams.List, { new: true });\n }}\n />\n }\n />\n );\n }\n\n return (\n <Form data={data} onSubmit={onSubmit}>\n {({ data, form }) => {\n return (\n <SimpleForm>\n {loading && <OverlayLoader />}\n <SimpleFormHeader title={data.name ? data.name : \"Untitled\"} />\n <SimpleFormContent>\n <FormContent\n pluginTeam={pluginTeam}\n systemTeam={systemTeam}\n canModifyTeam={canModifyTeam}\n newEntry={newEntry}\n />\n </SimpleFormContent>\n <SimpleFormFooter>\n <Button\n variant={\"secondary\"}\n text={t`Cancel`}\n onClick={() => {\n goToRoute(Routes.Teams.List);\n }}\n />\n {canModifyTeam && (\n <Button\n text={t`Save`}\n data-testid=\"admin.am.team.new.save\"\n onClick={ev => {\n form.submit(ev);\n }}\n />\n )}\n </SimpleFormFooter>\n </SimpleForm>\n );\n }}\n </Form>\n );\n};\n\ninterface FormContentProps {\n systemTeam: boolean;\n pluginTeam: boolean;\n canModifyTeam: boolean;\n newEntry: boolean;\n}\n\nconst FormContent = (props: FormContentProps) => {\n const { newEntry, pluginTeam, systemTeam, canModifyTeam } = props;\n\n const form = useForm();\n const { generateSlug } = useGenerateSlug(form, \"name\", \"slug\");\n\n return (\n <Grid>\n <>\n {systemTeam && (\n <Grid.Column span={12}>\n <Alert type={\"info\"} title={\"Permissions are locked\"}>\n This is a protected system team and you can&apos;t modify its\n permissions.\n </Alert>\n </Grid.Column>\n )}\n {pluginTeam && (\n <Grid.Column span={12}>\n <Alert type={\"info\"} title={\"Important\"}>\n This team is registered via an extension, and cannot be modified.\n </Alert>\n </Grid.Column>\n )}\n </>\n <Grid.Column span={6}>\n <Bind name=\"name\" validators={validation.create(\"required,minLength:1\")}>\n <Input\n required\n onBlur={generateSlug}\n disabled={!canModifyTeam}\n label={t`Name`}\n data-testid=\"admin.am.team.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={!canModifyTeam || !newEntry}\n label={t`Slug`}\n data-testid=\"admin.am.team.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 disabled={!canModifyTeam}\n label={t`Description`}\n rows={3}\n data-testid=\"admin.am.team.new.description\"\n />\n </Bind>\n </Grid.Column>\n <Grid.Column span={12}>\n <Bind name=\"roles\" validators={validation.create(\"required\")}>\n <RolesMultiAutocomplete\n disabled={!canModifyTeam}\n label={t`Roles`}\n data-testid=\"admin.am.team.new.roles\"\n />\n </Bind>\n </Grid.Column>\n </Grid>\n );\n};\n"],"names":["t","i18n","TeamsForm","newEntry","id","goToRoute","useRouter","showSnackbar","useSnackbar","getQuery","useQuery","READ_TEAM","data","error","Routes","create","createMutation","useMutation","CREATE_TEAM","LIST_TEAMS","update","updateMutation","UPDATE_TEAM","loading","item","onSubmit","useCallback","formData","isUpdate","operation","args","pick","response","team","get","systemTeam","pluginTeam","canModifyTeam","showEmptyView","isEmpty","EmptyView","SettingsIcon","Button","AddIcon","Form","form","SimpleForm","OverlayLoader","SimpleFormHeader","SimpleFormContent","FormContent","SimpleFormFooter","ev","props","useForm","generateSlug","useGenerateSlug","Grid","Alert","Bind","validation","Input","Textarea","RolesMultiAutocomplete"],"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
@@ -13,7 +13,7 @@ const fields = `
13
13
  plugin
14
14
  createdOn
15
15
  `;
16
- export const LIST_TEAMS = gql`
16
+ const LIST_TEAMS = graphql_tag`
17
17
  query listTeams {
18
18
  security {
19
19
  teams: listTeams {
@@ -24,7 +24,7 @@ export const LIST_TEAMS = gql`
24
24
  }
25
25
  }
26
26
  `;
27
- export const READ_TEAM = gql`
27
+ const READ_TEAM = graphql_tag`
28
28
  query getTeam($id: ID!) {
29
29
  security {
30
30
  team: getTeam(where: { id: $id }){
@@ -39,7 +39,7 @@ export const READ_TEAM = gql`
39
39
  }
40
40
  }
41
41
  `;
42
- export const CREATE_TEAM = gql`
42
+ const CREATE_TEAM = graphql_tag`
43
43
  mutation createTeam($data: SecurityTeamCreateInput!){
44
44
  security {
45
45
  team: createTeam(data: $data) {
@@ -55,7 +55,7 @@ export const CREATE_TEAM = gql`
55
55
  }
56
56
  }
57
57
  `;
58
- export const UPDATE_TEAM = gql`
58
+ const UPDATE_TEAM = graphql_tag`
59
59
  mutation updateTeam($id: ID!, $data: SecurityTeamUpdateInput!){
60
60
  security {
61
61
  team: updateTeam(id: $id, data: $data) {
@@ -71,7 +71,7 @@ export const UPDATE_TEAM = gql`
71
71
  }
72
72
  }
73
73
  `;
74
- export const DELETE_TEAM = gql`
74
+ const DELETE_TEAM = graphql_tag`
75
75
  mutation deleteTeam($id: ID!) {
76
76
  security {
77
77
  deleteTeam(id: $id) {
@@ -85,5 +85,6 @@ export const DELETE_TEAM = gql`
85
85
  }
86
86
  }
87
87
  `;
88
+ export { CREATE_TEAM, DELETE_TEAM, LIST_TEAMS, READ_TEAM, UPDATE_TEAM };
88
89
 
89
90
  //# sourceMappingURL=graphql.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["gql","fields","LIST_TEAMS","READ_TEAM","CREATE_TEAM","UPDATE_TEAM","DELETE_TEAM"],"sources":["graphql.ts"],"sourcesContent":["import gql from \"graphql-tag\";\nimport type { Team } from \"~/types.js\";\n\nconst fields = `\n id\n name\n slug\n description\n roles {\n id\n slug\n name\n }\n system\n plugin\n createdOn\n`;\n\nexport interface ListTeamsResponse {\n security: {\n teams: {\n data: Team[];\n };\n };\n}\n\nexport const LIST_TEAMS = gql`\n query listTeams {\n security {\n teams: listTeams {\n data {\n ${fields}\n }\n }\n }\n }\n`;\n\nexport const READ_TEAM = gql`\n query getTeam($id: ID!) {\n security {\n team: getTeam(where: { id: $id }){\n data {\n ${fields}\n }\n error {\n code\n message\n }\n }\n }\n }\n`;\n\nexport const CREATE_TEAM = gql`\n mutation createTeam($data: SecurityTeamCreateInput!){\n security {\n team: createTeam(data: $data) {\n data {\n ${fields}\n }\n error {\n code\n message\n data\n }\n }\n }\n }\n`;\n\nexport const UPDATE_TEAM = gql`\n mutation updateTeam($id: ID!, $data: SecurityTeamUpdateInput!){\n security {\n team: updateTeam(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_TEAM = gql`\n mutation deleteTeam($id: ID!) {\n security {\n deleteTeam(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;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/Teams/graphql.js","sources":["../../../../src/ui/views/Teams/graphql.ts"],"sourcesContent":["import gql from \"graphql-tag\";\nimport type { Team } from \"~/types.js\";\n\nconst fields = `\n id\n name\n slug\n description\n roles {\n id\n slug\n name\n }\n system\n plugin\n createdOn\n`;\n\nexport interface ListTeamsResponse {\n security: {\n teams: {\n data: Team[];\n };\n };\n}\n\nexport const LIST_TEAMS = gql`\n query listTeams {\n security {\n teams: listTeams {\n data {\n ${fields}\n }\n }\n }\n }\n`;\n\nexport const READ_TEAM = gql`\n query getTeam($id: ID!) {\n security {\n team: getTeam(where: { id: $id }){\n data {\n ${fields}\n }\n error {\n code\n message\n }\n }\n }\n }\n`;\n\nexport const CREATE_TEAM = gql`\n mutation createTeam($data: SecurityTeamCreateInput!){\n security {\n team: createTeam(data: $data) {\n data {\n ${fields}\n }\n error {\n code\n message\n data\n }\n }\n }\n }\n`;\n\nexport const UPDATE_TEAM = gql`\n mutation updateTeam($id: ID!, $data: SecurityTeamUpdateInput!){\n security {\n team: updateTeam(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_TEAM = gql`\n mutation deleteTeam($id: ID!) {\n security {\n deleteTeam(id: $id) {\n data\n error {\n code\n message\n data\n }\n }\n }\n }\n`;\n"],"names":["fields","LIST_TEAMS","gql","READ_TEAM","CREATE_TEAM","UPDATE_TEAM","DELETE_TEAM"],"mappings":";AAGA,MAAMA,SAAS,CAAC;;;;;;;;;;;;;AAahB,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 "./Teams.js";
2
-
3
- //# sourceMappingURL=index.js.map
package/ui/views/utils.js CHANGED
@@ -1,10 +1,12 @@
1
- export const deserializeSorters = data => {
2
- if (typeof data !== "string") {
3
- return data;
4
- }
5
- const [field, orderBy] = data.split("_");
6
- const order = String(orderBy).toLowerCase() === "asc" ? "asc" : "desc";
7
- return [field, order];
1
+ const deserializeSorters = (data)=>{
2
+ if ("string" != typeof data) return data;
3
+ const [field, orderBy] = data.split("_");
4
+ const order = "asc" === String(orderBy).toLowerCase() ? "asc" : "desc";
5
+ return [
6
+ field,
7
+ order
8
+ ];
8
9
  };
10
+ export { deserializeSorters };
9
11
 
10
12
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["deserializeSorters","data","field","orderBy","split","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":"AACA,OAAO,MAAMA,kBAAkB,GAAIC,IAAY,IAA0B;EACrE,IAAI,OAAOA,IAAI,KAAK,QAAQ,EAAE;IAC1B,OAAOA,IAAI;EACf;EACA,MAAM,CAACC,KAAK,EAAEC,OAAO,CAAC,GAAGF,IAAI,CAACG,KAAK,CAAC,GAAG,CAAwB;EAC/D,MAAMC,KAAK,GAAGC,MAAM,CAACH,OAAO,CAAC,CAACI,WAAW,CAAC,CAAC,KAAK,KAAK,GAAG,KAAK,GAAG,MAAM;EACtE,OAAO,CAACL,KAAK,EAAEG,KAAK,CAAC;AACzB,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"ui/views/utils.js","sources":["../../../src/ui/views/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"],"names":["deserializeSorters","data","field","orderBy","order","String"],"mappings":"AACO,MAAMA,qBAAqB,CAACC;IAC/B,IAAI,AAAgB,YAAhB,OAAOA,MACP,OAAOA;IAEX,MAAM,CAACC,OAAOC,QAAQ,GAAGF,KAAK,KAAK,CAAC;IACpC,MAAMG,QAAQC,AAAkC,UAAlCA,OAAOF,SAAS,WAAW,KAAe,QAAQ;IAChE,OAAO;QAACD;QAAOE;KAAM;AACzB"}
package/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"names":["AccessManagement"],"sources":["index.tsx"],"sourcesContent":["export { AccessManagement } from \"./Extension.js\";\n"],"mappings":"AAAA,SAASA,gBAAgB","ignoreList":[]}
package/types.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import type { Identity } from \"@webiny/app-admin/domain/Identity.js\";\n\nexport interface Role {\n id: string;\n name: string;\n description: string;\n slug: string;\n system?: boolean;\n plugin: boolean | null;\n permissions: Identity.Permission[];\n createdOn: string;\n}\n\nexport interface Team {\n id: string;\n name: string;\n description: string;\n slug: string;\n system?: boolean;\n plugin: boolean | null;\n createdOn: string;\n}\n\nexport interface ApiKey {\n id: string;\n slug: string;\n token: string;\n name: string;\n description: string;\n permissions: Identity.Permission[];\n createdOn: string;\n}\n"],"mappings":"","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"version":3,"names":[],"sources":["index.ts"],"sourcesContent":["export * from \"./ApiKeys.js\";\n"],"mappings":"AAAA","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"version":3,"names":[],"sources":["index.ts"],"sourcesContent":["export * from \"./Roles.js\";\n"],"mappings":"AAAA","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"version":3,"names":[],"sources":["index.ts"],"sourcesContent":["export * from \"./Teams.js\";\n"],"mappings":"AAAA","ignoreList":[]}