@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,154 +1,140 @@
1
- import React, { useCallback, useMemo, useState } from "react";
1
+ import react, { useCallback, useMemo, useState } from "react";
2
2
  import orderBy from "lodash/orderBy.js";
3
- import { Button, Grid, Select, useToast } from "@webiny/admin-ui";
4
- import { ReactComponent as AddIcon } from "@webiny/icons/add.svg";
3
+ import { Button, DataList, DataListModal, DeleteIcon, Grid, List, Select, useToast } from "@webiny/admin-ui";
4
+ import { ReactComponent } from "@webiny/icons/add.svg";
5
5
  import { i18n } from "@webiny/app/i18n/index.js";
6
- import { DataList, ScrollList, ListItem, ListItemText, ListItemTextSecondary, ListItemMeta, ListActions, DataListModalOverlayAction, DataListModalOverlay, ListItemTextPrimary } from "@webiny/ui/List/index.js";
7
- import { DeleteIcon } from "@webiny/ui/List/DataList/icons/index.js";
8
- import { useQuery, useMutation } from "@apollo/react-hooks";
9
- import * as GQL from "./graphql.js";
6
+ import { useMutation, useQuery } from "@apollo/react-hooks";
10
7
  import { deserializeSorters } from "../utils.js";
11
- import { useConfirmationDialog, useRouter, SearchUI } from "@webiny/app-admin";
8
+ import { SearchUI, useConfirmationDialog, useRouter } from "@webiny/app-admin";
12
9
  import { Routes } from "../../../routes.js";
10
+ import * as __rspack_external__graphql_js_d64db012 from "./graphql.js";
13
11
  const t = i18n.ns("app-security/admin/roles/data-list");
14
- const SORTERS = [{
15
- label: t`Newest to oldest`,
16
- sorter: "createdOn_DESC"
17
- }, {
18
- label: t`Oldest to newest`,
19
- sorter: "createdOn_ASC"
20
- }, {
21
- label: t`Name A-Z`,
22
- sorter: "name_ASC"
23
- }, {
24
- label: t`Name Z-A`,
25
- sorter: "name_DESC"
26
- }];
27
- export const ApiKeysDataList = ({
28
- activeId
29
- }) => {
30
- const {
31
- goToRoute
32
- } = useRouter();
33
- const [filter, setFilter] = useState("");
34
- const [sort, setSort] = useState(SORTERS[0].sorter);
35
- const toast = useToast();
36
- const {
37
- showConfirmation
38
- } = useConfirmationDialog({
39
- dataTestId: "default-data-list.delete-dialog"
40
- });
41
- const filterAPIKey = useCallback(({
42
- description,
43
- name
44
- }) => {
45
- return description && description.toLowerCase().includes(filter) || name.toLowerCase().includes(filter);
46
- }, [filter]);
47
- const sortKeys = useCallback(list => {
48
- if (!sort) {
49
- return list;
12
+ const SORTERS = [
13
+ {
14
+ label: t`Newest to oldest`,
15
+ sorter: "createdOn_DESC"
16
+ },
17
+ {
18
+ label: t`Oldest to newest`,
19
+ sorter: "createdOn_ASC"
20
+ },
21
+ {
22
+ label: t`Name A-Z`,
23
+ sorter: "name_ASC"
24
+ },
25
+ {
26
+ label: t`Name Z-A`,
27
+ sorter: "name_DESC"
50
28
  }
51
- const [key, value] = deserializeSorters(sort);
52
- return orderBy(list, [key], [value]);
53
- }, [sort]);
54
- const {
55
- data: listResponse,
56
- loading: listLoading
57
- } = useQuery(GQL.LIST_API_KEYS);
58
- const [deleteIt, {
59
- loading: deleteLoading
60
- }] = useMutation(GQL.DELETE_API_KEY, {
61
- refetchQueries: [{
62
- query: GQL.LIST_API_KEYS
63
- }]
64
- });
65
- const data = listLoading && !listResponse ? [] : listResponse?.security.apiKeys.data || [];
66
- const deleteItem = useCallback(item => {
67
- showConfirmation(async () => {
68
- const {
69
- data
70
- } = await deleteIt({
71
- variables: item
72
- });
73
- const {
74
- error
75
- } = data.security.deleteApiKey;
76
- if (error) {
77
- toast.showWarningToast({
78
- title: error.message
79
- });
80
- return;
81
- }
82
- toast.showSuccessToast({
83
- title: t`Api key "{name}" was deleted.`({
84
- name: item.name
85
- })
86
- });
87
- if (activeId === item.id) {
88
- goToRoute(Routes.ApiKeys.List);
89
- }
29
+ ];
30
+ const ApiKeysDataList = ({ activeId })=>{
31
+ const { goToRoute } = useRouter();
32
+ const [filter, setFilter] = useState("");
33
+ const [sort, setSort] = useState(SORTERS[0].sorter);
34
+ const toast = useToast();
35
+ const { showConfirmation } = useConfirmationDialog({
36
+ dataTestId: "default-data-list.delete-dialog"
37
+ });
38
+ const filterAPIKey = useCallback(({ description, name })=>description && description.toLowerCase().includes(filter) || name.toLowerCase().includes(filter), [
39
+ filter
40
+ ]);
41
+ const sortKeys = useCallback((list)=>{
42
+ if (!sort) return list;
43
+ const [key, value] = deserializeSorters(sort);
44
+ return orderBy(list, [
45
+ key
46
+ ], [
47
+ value
48
+ ]);
49
+ }, [
50
+ sort
51
+ ]);
52
+ const { data: listResponse, loading: listLoading } = useQuery(__rspack_external__graphql_js_d64db012.LIST_API_KEYS);
53
+ const [deleteIt, { loading: deleteLoading }] = useMutation(__rspack_external__graphql_js_d64db012.DELETE_API_KEY, {
54
+ refetchQueries: [
55
+ {
56
+ query: __rspack_external__graphql_js_d64db012.LIST_API_KEYS
57
+ }
58
+ ]
90
59
  });
91
- }, [activeId]);
92
- const rolesDataListModalOverlay = useMemo(() => /*#__PURE__*/React.createElement(DataListModalOverlay, null, /*#__PURE__*/React.createElement(Grid, null, /*#__PURE__*/React.createElement(Grid.Column, {
93
- span: 12
94
- }, /*#__PURE__*/React.createElement(Select, {
95
- value: sort,
96
- onChange: setSort,
97
- label: t`Sort by`,
98
- options: SORTERS.map(({
99
- label,
100
- sorter: value
101
- }) => {
102
- return {
103
- label,
104
- value
105
- };
106
- })
107
- })))), [sort]);
108
- const filteredData = filter === "" ? data : data.filter(filterAPIKey);
109
- const list = sortKeys(filteredData);
110
- return /*#__PURE__*/React.createElement(DataList, {
111
- title: t`API keys`,
112
- actions: /*#__PURE__*/React.createElement(Button, {
113
- text: t`New`,
114
- icon: /*#__PURE__*/React.createElement(AddIcon, null),
115
- size: "sm",
116
- className: "ml-xs",
117
- "data-testid": "new-record-button",
118
- onClick: () => {
119
- goToRoute(Routes.ApiKeys.List, {
120
- new: true
60
+ const data = listLoading && !listResponse ? [] : listResponse?.security.apiKeys.data || [];
61
+ const deleteItem = useCallback((item)=>{
62
+ showConfirmation(async ()=>{
63
+ const { data } = await deleteIt({
64
+ variables: item
65
+ });
66
+ const { error } = data.security.deleteApiKey;
67
+ if (error) return void toast.showWarningToast({
68
+ title: error.message
69
+ });
70
+ toast.showSuccessToast({
71
+ title: t`Api key "{name}" was deleted.`({
72
+ name: item.name
73
+ })
74
+ });
75
+ if (activeId === item.id) goToRoute(Routes.ApiKeys.List);
121
76
  });
122
- }
123
- }),
124
- data: list,
125
- loading: listLoading || deleteLoading,
126
- search: /*#__PURE__*/React.createElement(SearchUI, {
127
- value: filter,
128
- onChange: setFilter,
129
- inputPlaceholder: t`Search API keys...`
130
- }),
131
- modalOverlay: rolesDataListModalOverlay,
132
- modalOverlayAction: /*#__PURE__*/React.createElement(DataListModalOverlayAction, {
133
- "data-testid": "default-data-list.filter"
134
- })
135
- }, ({
136
- data
137
- }) => /*#__PURE__*/React.createElement(ScrollList, {
138
- "data-testid": "default-data-list"
139
- }, data.map(item => /*#__PURE__*/React.createElement(ListItem, {
140
- key: item.id,
141
- selected: item.id === activeId
142
- }, /*#__PURE__*/React.createElement(ListItemText, {
143
- onClick: () => {
144
- goToRoute(Routes.ApiKeys.List, {
145
- id: item.id
146
- });
147
- }
148
- }, /*#__PURE__*/React.createElement(ListItemTextPrimary, null, item.name), /*#__PURE__*/React.createElement(ListItemTextSecondary, null, item.description)), /*#__PURE__*/React.createElement(ListItemMeta, null, /*#__PURE__*/React.createElement(ListActions, null, /*#__PURE__*/React.createElement(DeleteIcon, {
149
- onClick: () => deleteItem(item),
150
- "data-testid": "default-data-list.delete"
151
- })))))));
77
+ }, [
78
+ activeId
79
+ ]);
80
+ const rolesDataListModalOverlay = useMemo(()=>/*#__PURE__*/ react.createElement(DataListModal.Content, null, /*#__PURE__*/ react.createElement(Grid, null, /*#__PURE__*/ react.createElement(Grid.Column, {
81
+ span: 12
82
+ }, /*#__PURE__*/ react.createElement(Select, {
83
+ value: sort,
84
+ onChange: setSort,
85
+ label: t`Sort by`,
86
+ options: SORTERS.map(({ label, sorter: value })=>({
87
+ label,
88
+ value
89
+ }))
90
+ })))), [
91
+ sort
92
+ ]);
93
+ const filteredData = "" === filter ? data : data.filter(filterAPIKey);
94
+ const list = sortKeys(filteredData);
95
+ return /*#__PURE__*/ react.createElement(DataList, {
96
+ title: t`API keys`,
97
+ actions: /*#__PURE__*/ react.createElement(Button, {
98
+ text: t`New`,
99
+ icon: /*#__PURE__*/ react.createElement(ReactComponent, null),
100
+ size: "sm",
101
+ className: "ml-xs",
102
+ "data-testid": "new-record-button",
103
+ onClick: ()=>{
104
+ goToRoute(Routes.ApiKeys.List, {
105
+ new: true
106
+ });
107
+ }
108
+ }),
109
+ data: list,
110
+ loading: listLoading || deleteLoading,
111
+ search: /*#__PURE__*/ react.createElement(SearchUI, {
112
+ value: filter,
113
+ onChange: setFilter,
114
+ inputPlaceholder: t`Search API keys...`
115
+ }),
116
+ modalOverlay: rolesDataListModalOverlay,
117
+ modalOverlayAction: /*#__PURE__*/ react.createElement(DataListModal.Trigger, {
118
+ "data-testid": "default-data-list.filter"
119
+ })
120
+ }, ({ data })=>/*#__PURE__*/ react.createElement(List, {
121
+ "data-testid": "default-data-list"
122
+ }, data.map((item)=>/*#__PURE__*/ react.createElement(List.Item, {
123
+ key: item.id,
124
+ selected: item.id === activeId,
125
+ title: item.name,
126
+ description: item.description,
127
+ onClick: ()=>{
128
+ goToRoute(Routes.ApiKeys.List, {
129
+ id: item.id
130
+ });
131
+ },
132
+ actions: /*#__PURE__*/ react.createElement(DeleteIcon, {
133
+ onClick: ()=>deleteItem(item),
134
+ "data-testid": "default-data-list.delete"
135
+ })
136
+ }))));
152
137
  };
138
+ export { ApiKeysDataList };
153
139
 
154
140
  //# sourceMappingURL=ApiKeysDataList.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["React","useCallback","useMemo","useState","orderBy","Button","Grid","Select","useToast","ReactComponent","AddIcon","i18n","DataList","ScrollList","ListItem","ListItemText","ListItemTextSecondary","ListItemMeta","ListActions","DataListModalOverlayAction","DataListModalOverlay","ListItemTextPrimary","DeleteIcon","useQuery","useMutation","GQL","deserializeSorters","useConfirmationDialog","useRouter","SearchUI","Routes","t","ns","SORTERS","label","sorter","ApiKeysDataList","activeId","goToRoute","filter","setFilter","sort","setSort","toast","showConfirmation","dataTestId","filterAPIKey","description","name","toLowerCase","includes","sortKeys","list","key","value","data","listResponse","loading","listLoading","LIST_API_KEYS","deleteIt","deleteLoading","DELETE_API_KEY","refetchQueries","query","security","apiKeys","deleteItem","item","variables","error","deleteApiKey","showWarningToast","title","message","showSuccessToast","id","ApiKeys","List","rolesDataListModalOverlay","createElement","Column","span","onChange","options","map","filteredData","actions","text","icon","size","className","onClick","new","search","inputPlaceholder","modalOverlay","modalOverlayAction","selected"],"sources":["ApiKeysDataList.tsx"],"sourcesContent":["import React, { useCallback, useMemo, useState } from \"react\";\nimport orderBy from \"lodash/orderBy.js\";\nimport { Button, Grid, Select, useToast } from \"@webiny/admin-ui\";\nimport { ReactComponent as AddIcon } from \"@webiny/icons/add.svg\";\nimport { i18n } from \"@webiny/app/i18n/index.js\";\nimport {\n DataList,\n ScrollList,\n ListItem,\n ListItemText,\n ListItemTextSecondary,\n ListItemMeta,\n ListActions,\n DataListModalOverlayAction,\n DataListModalOverlay,\n ListItemTextPrimary\n} from \"@webiny/ui/List/index.js\";\nimport { DeleteIcon } from \"@webiny/ui/List/DataList/icons/index.js\";\nimport { useQuery, useMutation } from \"@apollo/react-hooks\";\nimport * as GQL from \"./graphql.js\";\nimport { deserializeSorters } from \"../utils.js\";\nimport type { ApiKey } from \"~/types.js\";\nimport { useConfirmationDialog, useRouter, SearchUI } from \"@webiny/app-admin\";\nimport { Routes } from \"~/routes.js\";\n\nconst t = i18n.ns(\"app-security/admin/roles/data-list\");\n\nconst SORTERS = [\n {\n label: t`Newest to oldest`,\n sorter: \"createdOn_DESC\"\n },\n {\n label: t`Oldest to newest`,\n sorter: \"createdOn_ASC\"\n },\n {\n label: t`Name A-Z`,\n sorter: \"name_ASC\"\n },\n {\n label: t`Name Z-A`,\n sorter: \"name_DESC\"\n }\n];\nexport interface ApiKeysDataListProps {\n activeId: string | undefined;\n}\n\nexport const ApiKeysDataList = ({ activeId }: ApiKeysDataListProps) => {\n const { goToRoute } = useRouter();\n const [filter, setFilter] = useState(\"\");\n const [sort, setSort] = useState<string>(SORTERS[0].sorter);\n const toast = useToast();\n const { showConfirmation } = useConfirmationDialog({\n dataTestId: \"default-data-list.delete-dialog\"\n });\n\n const filterAPIKey = useCallback(\n ({ description, name }: ApiKey) => {\n return (\n (description && description.toLowerCase().includes(filter)) ||\n name.toLowerCase().includes(filter)\n );\n },\n [filter]\n );\n\n const sortKeys = useCallback(\n (list: ApiKey[]) => {\n if (!sort) {\n return list;\n }\n const [key, value] = deserializeSorters(sort);\n return orderBy(list, [key], [value]);\n },\n [sort]\n );\n\n const { data: listResponse, loading: listLoading } = useQuery<GQL.ListApiKeysResponse>(\n GQL.LIST_API_KEYS\n );\n\n const [deleteIt, { loading: deleteLoading }] = useMutation(GQL.DELETE_API_KEY, {\n refetchQueries: [{ query: GQL.LIST_API_KEYS }]\n });\n\n const data = listLoading && !listResponse ? [] : listResponse?.security.apiKeys.data || [];\n\n const deleteItem = useCallback(\n (item: ApiKey) => {\n showConfirmation(async () => {\n const { data } = await deleteIt({\n variables: item\n });\n\n const { error } = data.security.deleteApiKey;\n if (error) {\n toast.showWarningToast({\n title: error.message\n });\n return;\n }\n\n toast.showSuccessToast({\n title: t`Api key \"{name}\" was deleted.`({ name: item.name })\n });\n\n if (activeId === item.id) {\n goToRoute(Routes.ApiKeys.List);\n }\n });\n },\n [activeId]\n );\n\n const rolesDataListModalOverlay = useMemo(\n () => (\n <DataListModalOverlay>\n <Grid>\n <Grid.Column span={12}>\n <Select\n value={sort}\n onChange={setSort}\n label={t`Sort by`}\n options={SORTERS.map(({ label, sorter: value }) => {\n return {\n label,\n value\n };\n })}\n />\n </Grid.Column>\n </Grid>\n </DataListModalOverlay>\n ),\n [sort]\n );\n\n const filteredData = filter === \"\" ? data : data.filter(filterAPIKey);\n const list = sortKeys(filteredData);\n\n return (\n <DataList\n title={t`API keys`}\n actions={\n <Button\n text={t`New`}\n icon={<AddIcon />}\n size={\"sm\"}\n className={\"ml-xs\"}\n data-testid=\"new-record-button\"\n onClick={() => {\n goToRoute(Routes.ApiKeys.List, { new: true });\n }}\n />\n }\n data={list}\n loading={listLoading || deleteLoading}\n search={\n <SearchUI\n value={filter}\n onChange={setFilter}\n inputPlaceholder={t`Search API keys...`}\n />\n }\n modalOverlay={rolesDataListModalOverlay}\n modalOverlayAction={\n <DataListModalOverlayAction data-testid={\"default-data-list.filter\"} />\n }\n >\n {({ data }: { data: ApiKey[] }) => (\n <ScrollList data-testid=\"default-data-list\">\n {data.map(item => (\n <ListItem key={item.id} selected={item.id === activeId}>\n <ListItemText\n onClick={() => {\n goToRoute(Routes.ApiKeys.List, { id: item.id });\n }}\n >\n <ListItemTextPrimary>{item.name}</ListItemTextPrimary>\n <ListItemTextSecondary>{item.description}</ListItemTextSecondary>\n </ListItemText>\n\n <ListItemMeta>\n <ListActions>\n <DeleteIcon\n onClick={() => deleteItem(item)}\n data-testid={\"default-data-list.delete\"}\n />\n </ListActions>\n </ListItemMeta>\n </ListItem>\n ))}\n </ScrollList>\n )}\n </DataList>\n );\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"ui/views/ApiKeys/ApiKeysDataList.js","sources":["../../../../src/ui/views/ApiKeys/ApiKeysDataList.tsx"],"sourcesContent":["import React, { useCallback, useMemo, useState } from \"react\";\nimport orderBy from \"lodash/orderBy.js\";\nimport { Button, Grid, Select, useToast } from \"@webiny/admin-ui\";\nimport { ReactComponent as AddIcon } from \"@webiny/icons/add.svg\";\nimport { i18n } from \"@webiny/app/i18n/index.js\";\nimport { List, DataList, DataListModal, DeleteIcon } from \"@webiny/admin-ui\";\n\nimport { useQuery, useMutation } from \"@apollo/react-hooks\";\nimport * as GQL from \"./graphql.js\";\nimport { deserializeSorters } from \"../utils.js\";\nimport type { ApiKey } from \"~/types.js\";\nimport { useConfirmationDialog, useRouter, SearchUI } from \"@webiny/app-admin\";\nimport { Routes } from \"~/routes.js\";\n\nconst t = i18n.ns(\"app-security/admin/roles/data-list\");\n\nconst SORTERS = [\n {\n label: t`Newest to oldest`,\n sorter: \"createdOn_DESC\"\n },\n {\n label: t`Oldest to newest`,\n sorter: \"createdOn_ASC\"\n },\n {\n label: t`Name A-Z`,\n sorter: \"name_ASC\"\n },\n {\n label: t`Name Z-A`,\n sorter: \"name_DESC\"\n }\n];\nexport interface ApiKeysDataListProps {\n activeId: string | undefined;\n}\n\nexport const ApiKeysDataList = ({ activeId }: ApiKeysDataListProps) => {\n const { goToRoute } = useRouter();\n const [filter, setFilter] = useState(\"\");\n const [sort, setSort] = useState<string>(SORTERS[0].sorter);\n const toast = useToast();\n const { showConfirmation } = useConfirmationDialog({\n dataTestId: \"default-data-list.delete-dialog\"\n });\n\n const filterAPIKey = useCallback(\n ({ description, name }: ApiKey) => {\n return (\n (description && description.toLowerCase().includes(filter)) ||\n name.toLowerCase().includes(filter)\n );\n },\n [filter]\n );\n\n const sortKeys = useCallback(\n (list: ApiKey[]) => {\n if (!sort) {\n return list;\n }\n const [key, value] = deserializeSorters(sort);\n return orderBy(list, [key], [value]);\n },\n [sort]\n );\n\n const { data: listResponse, loading: listLoading } = useQuery<GQL.ListApiKeysResponse>(\n GQL.LIST_API_KEYS\n );\n\n const [deleteIt, { loading: deleteLoading }] = useMutation(GQL.DELETE_API_KEY, {\n refetchQueries: [{ query: GQL.LIST_API_KEYS }]\n });\n\n const data = listLoading && !listResponse ? [] : listResponse?.security.apiKeys.data || [];\n\n const deleteItem = useCallback(\n (item: ApiKey) => {\n showConfirmation(async () => {\n const { data } = await deleteIt({\n variables: item\n });\n\n const { error } = data.security.deleteApiKey;\n if (error) {\n toast.showWarningToast({\n title: error.message\n });\n return;\n }\n\n toast.showSuccessToast({\n title: t`Api key \"{name}\" was deleted.`({ name: item.name })\n });\n\n if (activeId === item.id) {\n goToRoute(Routes.ApiKeys.List);\n }\n });\n },\n [activeId]\n );\n\n const rolesDataListModalOverlay = useMemo(\n () => (\n <DataListModal.Content>\n <Grid>\n <Grid.Column span={12}>\n <Select\n value={sort}\n onChange={setSort}\n label={t`Sort by`}\n options={SORTERS.map(({ label, sorter: value }) => {\n return {\n label,\n value\n };\n })}\n />\n </Grid.Column>\n </Grid>\n </DataListModal.Content>\n ),\n [sort]\n );\n\n const filteredData = filter === \"\" ? data : data.filter(filterAPIKey);\n const list = sortKeys(filteredData);\n\n return (\n <DataList\n title={t`API keys`}\n actions={\n <Button\n text={t`New`}\n icon={<AddIcon />}\n size={\"sm\"}\n className={\"ml-xs\"}\n data-testid=\"new-record-button\"\n onClick={() => {\n goToRoute(Routes.ApiKeys.List, { new: true });\n }}\n />\n }\n data={list}\n loading={listLoading || deleteLoading}\n search={\n <SearchUI\n value={filter}\n onChange={setFilter}\n inputPlaceholder={t`Search API keys...`}\n />\n }\n modalOverlay={rolesDataListModalOverlay}\n modalOverlayAction={<DataListModal.Trigger data-testid={\"default-data-list.filter\"} />}\n >\n {({ data }: { data: ApiKey[] }) => (\n <List data-testid=\"default-data-list\">\n {data.map(item => (\n <List.Item\n key={item.id}\n selected={item.id === activeId}\n title={item.name}\n description={item.description}\n onClick={() => {\n goToRoute(Routes.ApiKeys.List, { id: item.id });\n }}\n actions={\n <DeleteIcon\n onClick={() => deleteItem(item)}\n data-testid={\"default-data-list.delete\"}\n />\n }\n />\n ))}\n </List>\n )}\n </DataList>\n );\n};\n"],"names":["t","i18n","SORTERS","ApiKeysDataList","activeId","goToRoute","useRouter","filter","setFilter","useState","sort","setSort","toast","useToast","showConfirmation","useConfirmationDialog","filterAPIKey","useCallback","description","name","sortKeys","list","key","value","deserializeSorters","orderBy","listResponse","listLoading","useQuery","GQL","deleteIt","deleteLoading","useMutation","data","deleteItem","item","error","Routes","rolesDataListModalOverlay","useMemo","DataListModal","Grid","Select","label","filteredData","DataList","Button","AddIcon","SearchUI","List","DeleteIcon"],"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
@@ -8,7 +8,7 @@ const fields = `
8
8
  permissions
9
9
  createdOn
10
10
  `;
11
- export const LIST_API_KEYS = gql`
11
+ const LIST_API_KEYS = graphql_tag`
12
12
  query ListApiKeys {
13
13
  security {
14
14
  apiKeys: listApiKeys {
@@ -19,7 +19,7 @@ export const LIST_API_KEYS = gql`
19
19
  }
20
20
  }
21
21
  `;
22
- export const READ_API_KEY = gql`
22
+ const READ_API_KEY = graphql_tag`
23
23
  query GetApiKey($id: ID!) {
24
24
  security {
25
25
  apiKey: getApiKey(id: $id){
@@ -34,7 +34,7 @@ export const READ_API_KEY = gql`
34
34
  }
35
35
  }
36
36
  `;
37
- export const CREATE_API_KEY = gql`
37
+ const CREATE_API_KEY = graphql_tag`
38
38
  mutation CreateApiKey($data: SecurityApiKeyInput!){
39
39
  security {
40
40
  apiKey: createApiKey(data: $data) {
@@ -50,7 +50,7 @@ export const CREATE_API_KEY = gql`
50
50
  }
51
51
  }
52
52
  `;
53
- export const UPDATE_API_KEY = gql`
53
+ const UPDATE_API_KEY = graphql_tag`
54
54
  mutation UpdateApiKey($id: ID!, $data: SecurityApiKeyInput!){
55
55
  security {
56
56
  apiKey: updateApiKey(id: $id, data: $data) {
@@ -66,7 +66,7 @@ export const UPDATE_API_KEY = gql`
66
66
  }
67
67
  }
68
68
  `;
69
- export const DELETE_API_KEY = gql`
69
+ const DELETE_API_KEY = graphql_tag`
70
70
  mutation DeleteApiKey($id: ID!) {
71
71
  security {
72
72
  deleteApiKey(id: $id) {
@@ -79,5 +79,6 @@ export const DELETE_API_KEY = gql`
79
79
  }
80
80
  }
81
81
  `;
82
+ export { CREATE_API_KEY, DELETE_API_KEY, LIST_API_KEYS, READ_API_KEY, UPDATE_API_KEY };
82
83
 
83
84
  //# sourceMappingURL=graphql.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["gql","fields","LIST_API_KEYS","READ_API_KEY","CREATE_API_KEY","UPDATE_API_KEY","DELETE_API_KEY"],"sources":["graphql.ts"],"sourcesContent":["import gql from \"graphql-tag\";\nimport type { ApiKey } from \"~/types.js\";\n\nconst fields = `\n id\n name\n slug\n description\n token\n permissions\n createdOn\n`;\n\nexport interface ListApiKeysResponse {\n security: {\n apiKeys: {\n data: ApiKey[];\n };\n };\n}\n\nexport const LIST_API_KEYS = gql`\n query ListApiKeys {\n security {\n apiKeys: listApiKeys {\n data {\n ${fields}\n }\n }\n }\n }\n`;\n\nexport const READ_API_KEY = gql`\n query GetApiKey($id: ID!) {\n security {\n apiKey: getApiKey(id: $id){\n data {\n ${fields}\n }\n error {\n code\n message\n }\n }\n }\n }\n`;\n\nexport const CREATE_API_KEY = gql`\n mutation CreateApiKey($data: SecurityApiKeyInput!){\n security {\n apiKey: createApiKey(data: $data) {\n data {\n ${fields}\n }\n error {\n code\n message\n data\n }\n }\n }\n }\n`;\n\nexport const UPDATE_API_KEY = gql`\n mutation UpdateApiKey($id: ID!, $data: SecurityApiKeyInput!){\n security {\n apiKey: updateApiKey(id: $id, data: $data) {\n data {\n ${fields}\n }\n error {\n code\n message\n data\n }\n }\n }\n }\n`;\n\nexport const DELETE_API_KEY = gql`\n mutation DeleteApiKey($id: ID!) {\n security {\n deleteApiKey(id: $id) {\n data\n error {\n code\n message\n }\n }\n }\n }\n`;\n"],"mappings":"AAAA,OAAOA,GAAG,MAAM,aAAa;AAG7B,MAAMC,MAAM,GAAG;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAUD,OAAO,MAAMC,aAAa,GAAGF,GAAG;AAChC;AACA;AACA;AACA;AACA,qBAAqBC,MAAM;AAC3B;AACA;AACA;AACA;AACA,CAAC;AAED,OAAO,MAAME,YAAY,GAAGH,GAAG;AAC/B;AACA;AACA;AACA;AACA,sBAAsBC,MAAM;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAED,OAAO,MAAMG,cAAc,GAAGJ,GAAG;AACjC;AACA;AACA;AACA;AACA,sBAAsBC,MAAM;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAED,OAAO,MAAMI,cAAc,GAAGL,GAAG;AACjC;AACA;AACA;AACA;AACA,sBAAsBC,MAAM;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAED,OAAO,MAAMK,cAAc,GAAGN,GAAG;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"ui/views/ApiKeys/graphql.js","sources":["../../../../src/ui/views/ApiKeys/graphql.ts"],"sourcesContent":["import gql from \"graphql-tag\";\nimport type { ApiKey } from \"~/types.js\";\n\nconst fields = `\n id\n name\n slug\n description\n token\n permissions\n createdOn\n`;\n\nexport interface ListApiKeysResponse {\n security: {\n apiKeys: {\n data: ApiKey[];\n };\n };\n}\n\nexport const LIST_API_KEYS = gql`\n query ListApiKeys {\n security {\n apiKeys: listApiKeys {\n data {\n ${fields}\n }\n }\n }\n }\n`;\n\nexport const READ_API_KEY = gql`\n query GetApiKey($id: ID!) {\n security {\n apiKey: getApiKey(id: $id){\n data {\n ${fields}\n }\n error {\n code\n message\n }\n }\n }\n }\n`;\n\nexport const CREATE_API_KEY = gql`\n mutation CreateApiKey($data: SecurityApiKeyInput!){\n security {\n apiKey: createApiKey(data: $data) {\n data {\n ${fields}\n }\n error {\n code\n message\n data\n }\n }\n }\n }\n`;\n\nexport const UPDATE_API_KEY = gql`\n mutation UpdateApiKey($id: ID!, $data: SecurityApiKeyInput!){\n security {\n apiKey: updateApiKey(id: $id, data: $data) {\n data {\n ${fields}\n }\n error {\n code\n message\n data\n }\n }\n }\n }\n`;\n\nexport const DELETE_API_KEY = gql`\n mutation DeleteApiKey($id: ID!) {\n security {\n deleteApiKey(id: $id) {\n data\n error {\n code\n message\n }\n }\n }\n }\n`;\n"],"names":["fields","LIST_API_KEYS","gql","READ_API_KEY","CREATE_API_KEY","UPDATE_API_KEY","DELETE_API_KEY"],"mappings":";AAGA,MAAMA,SAAS,CAAC;;;;;;;;AAQhB,CAAC;AAUM,MAAMC,gBAAgBC,WAAG,CAAC;;;;;mBAKd,EAAEF,OAAO;;;;;AAK5B,CAAC;AAEM,MAAMG,eAAeD,WAAG,CAAC;;;;;oBAKZ,EAAEF,OAAO;;;;;;;;;AAS7B,CAAC;AAEM,MAAMI,iBAAiBF,WAAG,CAAC;;;;;oBAKd,EAAEF,OAAO;;;;;;;;;;AAU7B,CAAC;AAEM,MAAMK,iBAAiBH,WAAG,CAAC;;;;;oBAKd,EAAEF,OAAO;;;;;;;;;;AAU7B,CAAC;AAEM,MAAMM,iBAAiBJ,WAAG,CAAC;;;;;;;;;;;;AAYlC,CAAC"}
@@ -1,3 +1 @@
1
1
  export * from "./ApiKeys.js";
2
-
3
- //# sourceMappingURL=index.js.map
@@ -1,9 +1,15 @@
1
1
  import pick from "lodash/pick.js";
2
- export const pickDataForCreate = data => {
3
- return structuredClone(pick(data, ["name", "slug", "description", "permissions"]));
4
- };
5
- export const pickDataForUpdate = data => {
6
- return structuredClone(pick(data, ["name", "description", "permissions"]));
7
- };
2
+ const pickDataForCreate = (data)=>structuredClone(pick(data, [
3
+ "name",
4
+ "slug",
5
+ "description",
6
+ "permissions"
7
+ ]));
8
+ const pickDataForUpdate = (data)=>structuredClone(pick(data, [
9
+ "name",
10
+ "description",
11
+ "permissions"
12
+ ]));
13
+ export { pickDataForCreate, pickDataForUpdate };
8
14
 
9
15
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["pick","pickDataForCreate","data","structuredClone","pickDataForUpdate"],"sources":["utils.ts"],"sourcesContent":["import pick from \"lodash/pick.js\";\nimport type { ApiKey } from \"~/types.js\";\n\nexport const pickDataForCreate = (\n data: ApiKey\n): Pick<ApiKey, \"name\" | \"slug\" | \"description\" | \"permissions\"> => {\n return structuredClone(pick(data, [\"name\", \"slug\", \"description\", \"permissions\"]));\n};\n\nexport const pickDataForUpdate = (\n data: ApiKey\n): Pick<ApiKey, \"name\" | \"description\" | \"permissions\"> => {\n return structuredClone(pick(data, [\"name\", \"description\", \"permissions\"]));\n};\n"],"mappings":"AAAA,OAAOA,IAAI,MAAM,gBAAgB;AAGjC,OAAO,MAAMC,iBAAiB,GAC1BC,IAAY,IACoD;EAChE,OAAOC,eAAe,CAACH,IAAI,CAACE,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC,CAAC;AACtF,CAAC;AAED,OAAO,MAAME,iBAAiB,GAC1BF,IAAY,IAC2C;EACvD,OAAOC,eAAe,CAACH,IAAI,CAACE,IAAI,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC,CAAC;AAC9E,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"ui/views/ApiKeys/utils.js","sources":["../../../../src/ui/views/ApiKeys/utils.ts"],"sourcesContent":["import pick from \"lodash/pick.js\";\nimport type { ApiKey } from \"~/types.js\";\n\nexport const pickDataForCreate = (\n data: ApiKey\n): Pick<ApiKey, \"name\" | \"slug\" | \"description\" | \"permissions\"> => {\n return structuredClone(pick(data, [\"name\", \"slug\", \"description\", \"permissions\"]));\n};\n\nexport const pickDataForUpdate = (\n data: ApiKey\n): Pick<ApiKey, \"name\" | \"description\" | \"permissions\"> => {\n return structuredClone(pick(data, [\"name\", \"description\", \"permissions\"]));\n};\n"],"names":["pickDataForCreate","data","structuredClone","pick","pickDataForUpdate"],"mappings":";AAGO,MAAMA,oBAAoB,CAC7BC,OAEOC,gBAAgBC,KAAKF,MAAM;QAAC;QAAQ;QAAQ;QAAe;KAAc;AAG7E,MAAMG,oBAAoB,CAC7BH,OAEOC,gBAAgBC,KAAKF,MAAM;QAAC;QAAQ;QAAe;KAAc"}
@@ -1,18 +1,17 @@
1
- import React from "react";
2
- import { SplitView, LeftPanel, RightPanel, useRoute } from "@webiny/app-admin";
1
+ import react from "react";
2
+ import { LeftPanel, RightPanel, SplitView, useRoute } from "@webiny/app-admin";
3
3
  import { RolesDataList } from "./RolesDataList.js";
4
4
  import { RolesForm } from "./RolesForm.js";
5
5
  import { Routes } from "../../../routes.js";
6
- export const Roles = () => {
7
- const {
8
- route
9
- } = useRoute(Routes.Roles.List);
10
- return /*#__PURE__*/React.createElement(SplitView, null, /*#__PURE__*/React.createElement(LeftPanel, null, /*#__PURE__*/React.createElement(RolesDataList, {
11
- activeId: route.params.id
12
- })), /*#__PURE__*/React.createElement(RightPanel, null, /*#__PURE__*/React.createElement(RolesForm, {
13
- newEntry: route.params.new === true,
14
- id: route.params.id
15
- })));
6
+ const Roles = ()=>{
7
+ const { route } = useRoute(Routes.Roles.List);
8
+ return /*#__PURE__*/ react.createElement(SplitView, null, /*#__PURE__*/ react.createElement(LeftPanel, null, /*#__PURE__*/ react.createElement(RolesDataList, {
9
+ activeId: route.params.id
10
+ })), /*#__PURE__*/ react.createElement(RightPanel, null, /*#__PURE__*/ react.createElement(RolesForm, {
11
+ newEntry: true === route.params.new,
12
+ id: route.params.id
13
+ })));
16
14
  };
15
+ export { Roles };
17
16
 
18
17
  //# sourceMappingURL=Roles.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["React","SplitView","LeftPanel","RightPanel","useRoute","RolesDataList","RolesForm","Routes","Roles","route","List","createElement","activeId","params","id","newEntry","new"],"sources":["Roles.tsx"],"sourcesContent":["import React from \"react\";\nimport { SplitView, LeftPanel, RightPanel, useRoute } from \"@webiny/app-admin\";\nimport { RolesDataList } from \"./RolesDataList.js\";\nimport { RolesForm } from \"./RolesForm.js\";\nimport { Routes } from \"~/routes.js\";\n\nexport const Roles = () => {\n const { route } = useRoute(Routes.Roles.List);\n\n return (\n <SplitView>\n <LeftPanel>\n <RolesDataList activeId={route.params.id} />\n </LeftPanel>\n <RightPanel>\n <RolesForm newEntry={route.params.new === true} id={route.params.id} />\n </RightPanel>\n </SplitView>\n );\n};\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,SAAS,EAAEC,SAAS,EAAEC,UAAU,EAAEC,QAAQ,QAAQ,mBAAmB;AAC9E,SAASC,aAAa;AACtB,SAASC,SAAS;AAClB,SAASC,MAAM;AAEf,OAAO,MAAMC,KAAK,GAAGA,CAAA,KAAM;EACvB,MAAM;IAAEC;EAAM,CAAC,GAAGL,QAAQ,CAACG,MAAM,CAACC,KAAK,CAACE,IAAI,CAAC;EAE7C,oBACIV,KAAA,CAAAW,aAAA,CAACV,SAAS,qBACND,KAAA,CAAAW,aAAA,CAACT,SAAS,qBACNF,KAAA,CAAAW,aAAA,CAACN,aAAa;IAACO,QAAQ,EAAEH,KAAK,CAACI,MAAM,CAACC;EAAG,CAAE,CACpC,CAAC,eACZd,KAAA,CAAAW,aAAA,CAACR,UAAU,qBACPH,KAAA,CAAAW,aAAA,CAACL,SAAS;IAACS,QAAQ,EAAEN,KAAK,CAACI,MAAM,CAACG,GAAG,KAAK,IAAK;IAACF,EAAE,EAAEL,KAAK,CAACI,MAAM,CAACC;EAAG,CAAE,CAC9D,CACL,CAAC;AAEpB,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"ui/views/Roles/Roles.js","sources":["../../../../src/ui/views/Roles/Roles.tsx"],"sourcesContent":["import React from \"react\";\nimport { SplitView, LeftPanel, RightPanel, useRoute } from \"@webiny/app-admin\";\nimport { RolesDataList } from \"./RolesDataList.js\";\nimport { RolesForm } from \"./RolesForm.js\";\nimport { Routes } from \"~/routes.js\";\n\nexport const Roles = () => {\n const { route } = useRoute(Routes.Roles.List);\n\n return (\n <SplitView>\n <LeftPanel>\n <RolesDataList activeId={route.params.id} />\n </LeftPanel>\n <RightPanel>\n <RolesForm newEntry={route.params.new === true} id={route.params.id} />\n </RightPanel>\n </SplitView>\n );\n};\n"],"names":["Roles","route","useRoute","Routes","SplitView","LeftPanel","RolesDataList","RightPanel","RolesForm"],"mappings":";;;;;AAMO,MAAMA,QAAQ;IACjB,MAAM,EAAEC,KAAK,EAAE,GAAGC,SAASC,OAAO,KAAK,CAAC,IAAI;IAE5C,OAAO,WAAP,GACI,oBAACC,WAASA,MAAAA,WAAAA,GACN,oBAACC,WAASA,MAAAA,WAAAA,GACN,oBAACC,eAAaA;QAAC,UAAUL,MAAM,MAAM,CAAC,EAAE;uBAE5C,oBAACM,YAAUA,MAAAA,WAAAA,GACP,oBAACC,WAASA;QAAC,UAAUP,AAAqB,SAArBA,MAAM,MAAM,CAAC,GAAG;QAAW,IAAIA,MAAM,MAAM,CAAC,EAAE;;AAInF"}