@webiny/app-security-access-management 0.0.0-mt-2 → 0.0.0-unstable.06b2ede40f

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 (119) hide show
  1. package/README.md +6 -4
  2. package/components/GroupAutocomplete/graphql.d.ts +1 -1
  3. package/components/GroupAutocomplete/graphql.js +17 -5
  4. package/components/GroupAutocomplete/graphql.js.map +1 -0
  5. package/components/GroupAutocomplete/index.d.ts +5 -2
  6. package/components/GroupAutocomplete/index.js +10 -8
  7. package/components/GroupAutocomplete/index.js.map +1 -0
  8. package/components/GroupsMultiAutocomplete/graphql.d.ts +1 -0
  9. package/components/GroupsMultiAutocomplete/graphql.js +23 -0
  10. package/components/GroupsMultiAutocomplete/graphql.js.map +1 -0
  11. package/components/GroupsMultiAutocomplete/index.d.ts +5 -0
  12. package/components/GroupsMultiAutocomplete/index.js +19 -0
  13. package/components/GroupsMultiAutocomplete/index.js.map +1 -0
  14. package/components/NotAuthorizedError/NotAuthorizedError.d.ts +2 -2
  15. package/components/NotAuthorizedError/NotAuthorizedError.js +17 -44
  16. package/components/NotAuthorizedError/NotAuthorizedError.js.map +1 -0
  17. package/components/NotAuthorizedError/index.js +3 -1
  18. package/components/NotAuthorizedError/index.js.map +1 -0
  19. package/components/TeamAutocomplete/graphql.d.ts +1 -0
  20. package/components/TeamAutocomplete/graphql.js +18 -0
  21. package/components/TeamAutocomplete/graphql.js.map +1 -0
  22. package/components/TeamAutocomplete/index.d.ts +5 -0
  23. package/components/TeamAutocomplete/index.js +18 -0
  24. package/components/TeamAutocomplete/index.js.map +1 -0
  25. package/components/TeamsMultiAutocomplete/graphql.d.ts +1 -0
  26. package/components/TeamsMultiAutocomplete/graphql.js +23 -0
  27. package/components/TeamsMultiAutocomplete/graphql.js.map +1 -0
  28. package/components/TeamsMultiAutocomplete/index.d.ts +5 -0
  29. package/components/TeamsMultiAutocomplete/index.js +19 -0
  30. package/components/TeamsMultiAutocomplete/index.js.map +1 -0
  31. package/index.d.ts +2 -2
  32. package/index.js +83 -4
  33. package/index.js.map +1 -0
  34. package/package.json +24 -37
  35. package/plugins/constants.d.ts +1 -0
  36. package/plugins/constants.js +6 -4
  37. package/plugins/constants.js.map +1 -0
  38. package/plugins/index.d.ts +1 -1
  39. package/plugins/index.js +3 -5
  40. package/plugins/index.js.map +1 -0
  41. package/plugins/installation.d.ts +1 -1
  42. package/plugins/installation.js +68 -67
  43. package/plugins/installation.js.map +1 -0
  44. package/plugins/permissionRenderer/SecurityPermissions.d.ts +8 -5
  45. package/plugins/permissionRenderer/SecurityPermissions.js +93 -94
  46. package/plugins/permissionRenderer/SecurityPermissions.js.map +1 -0
  47. package/plugins/permissionRenderer/index.js +14 -13
  48. package/plugins/permissionRenderer/index.js.map +1 -0
  49. package/plugins/routes.d.ts +1 -1
  50. package/plugins/routes.js +14 -16
  51. package/plugins/routes.js.map +1 -0
  52. package/plugins/secureRouteError.d.ts +2 -2
  53. package/plugins/secureRouteError.js +5 -3
  54. package/plugins/secureRouteError.js.map +1 -0
  55. package/types.d.ts +28 -0
  56. package/types.js +3 -0
  57. package/types.js.map +1 -0
  58. package/ui/elements/GroupAutocompleteElement.d.ts +2 -1
  59. package/ui/elements/GroupAutocompleteElement.js +27 -30
  60. package/ui/elements/GroupAutocompleteElement.js.map +1 -0
  61. package/ui/elements/GroupsMultiAutocompleteElement.d.ts +6 -0
  62. package/ui/elements/GroupsMultiAutocompleteElement.js +32 -0
  63. package/ui/elements/GroupsMultiAutocompleteElement.js.map +1 -0
  64. package/ui/elements/TeamAutocompleteElement.d.ts +6 -0
  65. package/ui/elements/TeamAutocompleteElement.js +32 -0
  66. package/ui/elements/TeamAutocompleteElement.js.map +1 -0
  67. package/ui/views/ApiKeys/ApiKeyForm.d.ts +5 -3
  68. package/ui/views/ApiKeys/ApiKeyForm.js +125 -183
  69. package/ui/views/ApiKeys/ApiKeyForm.js.map +1 -0
  70. package/ui/views/ApiKeys/ApiKeys.d.ts +8 -3
  71. package/ui/views/ApiKeys/ApiKeys.js +7 -7
  72. package/ui/views/ApiKeys/ApiKeys.js.map +1 -0
  73. package/ui/views/ApiKeys/ApiKeysDataList.d.ts +5 -3
  74. package/ui/views/ApiKeys/ApiKeysDataList.js +105 -169
  75. package/ui/views/ApiKeys/ApiKeysDataList.js.map +1 -0
  76. package/ui/views/ApiKeys/graphql.d.ts +13 -5
  77. package/ui/views/ApiKeys/graphql.js +81 -10
  78. package/ui/views/ApiKeys/graphql.js.map +1 -0
  79. package/ui/views/ApiKeys/index.d.ts +1 -1
  80. package/ui/views/ApiKeys/index.js +3 -1
  81. package/ui/views/ApiKeys/index.js.map +1 -0
  82. package/ui/views/ApiKeys/utils.d.ts +2 -1
  83. package/ui/views/ApiKeys/utils.js +6 -5
  84. package/ui/views/ApiKeys/utils.js.map +1 -0
  85. package/ui/views/Groups/Groups.d.ts +8 -3
  86. package/ui/views/Groups/Groups.js +8 -8
  87. package/ui/views/Groups/Groups.js.map +1 -0
  88. package/ui/views/Groups/GroupsDataList.d.ts +5 -3
  89. package/ui/views/Groups/GroupsDataList.js +110 -176
  90. package/ui/views/Groups/GroupsDataList.js.map +1 -0
  91. package/ui/views/Groups/GroupsForm.d.ts +5 -3
  92. package/ui/views/Groups/GroupsForm.js +150 -170
  93. package/ui/views/Groups/GroupsForm.js.map +1 -0
  94. package/ui/views/Groups/graphql.d.ts +13 -5
  95. package/ui/views/Groups/graphql.js +84 -10
  96. package/ui/views/Groups/graphql.js.map +1 -0
  97. package/ui/views/Groups/index.d.ts +1 -1
  98. package/ui/views/Groups/index.js +3 -1
  99. package/ui/views/Groups/index.js.map +1 -0
  100. package/ui/views/Teams/Teams.d.ts +8 -0
  101. package/ui/views/Teams/Teams.js +12 -0
  102. package/ui/views/Teams/Teams.js.map +1 -0
  103. package/ui/views/Teams/TeamsDataList.d.ts +5 -0
  104. package/ui/views/Teams/TeamsDataList.js +151 -0
  105. package/ui/views/Teams/TeamsDataList.js.map +1 -0
  106. package/ui/views/Teams/TeamsForm.d.ts +5 -0
  107. package/ui/views/Teams/TeamsForm.js +173 -0
  108. package/ui/views/Teams/TeamsForm.js.map +1 -0
  109. package/ui/views/Teams/graphql.d.ts +13 -0
  110. package/ui/views/Teams/graphql.js +89 -0
  111. package/ui/views/Teams/graphql.js.map +1 -0
  112. package/ui/views/Teams/index.d.ts +1 -0
  113. package/ui/views/Teams/index.js +3 -0
  114. package/ui/views/Teams/index.js.map +1 -0
  115. package/ui/views/utils.d.ts +3 -2
  116. package/ui/views/utils.js +6 -23
  117. package/ui/views/utils.js.map +1 -0
  118. package/plugins/menus.d.ts +0 -4
  119. package/plugins/menus.js +0 -61
@@ -0,0 +1,151 @@
1
+ import React, { useCallback, useMemo, useState } from "react";
2
+ import orderBy from "lodash/orderBy";
3
+ import { Button, Grid, Select, Tooltip } from "@webiny/admin-ui";
4
+ import { ReactComponent as AddIcon } from "@webiny/icons/add.svg";
5
+ import { i18n } from "@webiny/app/i18n";
6
+ import { DataList, ScrollList, ListItem, ListItemText, ListItemTextSecondary, ListItemMeta, DataListModalOverlayAction, DataListModalOverlay, ListItemTextPrimary, ListActions } from "@webiny/ui/List";
7
+ import { DeleteIcon } from "@webiny/ui/List/DataList/icons";
8
+ import { useRouter } from "@webiny/react-router";
9
+ import { useSnackbar } from "@webiny/app-admin/hooks/useSnackbar";
10
+ import { useQuery, useMutation } from "@apollo/react-hooks";
11
+ import { useConfirmationDialog } from "@webiny/app-admin/hooks/useConfirmationDialog";
12
+ import { LIST_TEAMS, DELETE_TEAM } from "./graphql";
13
+ import SearchUI from "@webiny/app-admin/components/SearchUI";
14
+ import { deserializeSorters } from "../utils";
15
+ const t = i18n.ns("app-security/admin/teams/data-list");
16
+ const SORTERS = [{
17
+ label: t`Newest to oldest`,
18
+ sorter: "createdOn_DESC"
19
+ }, {
20
+ label: t`Oldest to newest`,
21
+ sorter: "createdOn_ASC"
22
+ }, {
23
+ label: t`Name A-Z`,
24
+ sorter: "name_ASC"
25
+ }, {
26
+ label: t`Name Z-A`,
27
+ sorter: "name_DESC"
28
+ }];
29
+ export const TeamsDataList = () => {
30
+ const [filter, setFilter] = useState("");
31
+ const [sort, setSort] = useState(SORTERS[0].sorter);
32
+ const {
33
+ history,
34
+ location
35
+ } = useRouter();
36
+ const {
37
+ showSnackbar
38
+ } = useSnackbar();
39
+ const {
40
+ showConfirmation
41
+ } = useConfirmationDialog({
42
+ dataTestId: "default-data-list.delete-dialog"
43
+ });
44
+ const {
45
+ data: listResponse,
46
+ loading: listLoading
47
+ } = useQuery(LIST_TEAMS);
48
+ const [deleteIt, {
49
+ loading: deleteLoading
50
+ }] = useMutation(DELETE_TEAM, {
51
+ refetchQueries: [{
52
+ query: LIST_TEAMS
53
+ }]
54
+ });
55
+ const data = listLoading && !listResponse ? [] : listResponse?.security.teams.data || [];
56
+ const id = new URLSearchParams(location.search).get("id");
57
+ const filterTeam = useCallback(({
58
+ name,
59
+ slug,
60
+ description
61
+ }) => {
62
+ return name.toLowerCase().includes(filter) || slug.toLowerCase().includes(filter) || description && description.toLowerCase().includes(filter);
63
+ }, [filter]);
64
+ const sortTeams = useCallback(teams => {
65
+ if (!sort) {
66
+ return teams;
67
+ }
68
+ const [key, sortBy] = deserializeSorters(sort);
69
+ return orderBy(teams, [key], [sortBy]);
70
+ }, [sort]);
71
+ const deleteItem = useCallback(item => {
72
+ showConfirmation(async () => {
73
+ const {
74
+ data
75
+ } = await deleteIt({
76
+ variables: item
77
+ });
78
+ const {
79
+ error
80
+ } = data.security.deleteTeam;
81
+ if (error) {
82
+ return showSnackbar(error.message);
83
+ }
84
+ showSnackbar(t`Team "{slug}" deleted.`({
85
+ slug: item.slug
86
+ }));
87
+ if (id === item.id) {
88
+ history.push(`/access-management/teams`);
89
+ }
90
+ });
91
+ }, [id]);
92
+ const teamsDataListModalOverlay = 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(filterTeam);
109
+ const teamList = sortTeams(filteredData);
110
+ return /*#__PURE__*/React.createElement(DataList, {
111
+ title: t`Teams`,
112
+ actions: /*#__PURE__*/React.createElement(Button, {
113
+ text: t`New`,
114
+ icon: /*#__PURE__*/React.createElement(AddIcon, null),
115
+ size: "sm",
116
+ className: "wby-ml-xs",
117
+ "data-testid": "new-record-button",
118
+ onClick: () => history.push("/access-management/teams?new=true")
119
+ }),
120
+ data: teamList,
121
+ loading: listLoading || deleteLoading,
122
+ search: /*#__PURE__*/React.createElement(SearchUI, {
123
+ value: filter,
124
+ onChange: setFilter,
125
+ inputPlaceholder: t`Search teams...`
126
+ }),
127
+ modalOverlay: teamsDataListModalOverlay,
128
+ modalOverlayAction: /*#__PURE__*/React.createElement(DataListModalOverlayAction, {
129
+ "data-testid": "default-data-list.filter"
130
+ })
131
+ }, ({
132
+ data
133
+ }) => /*#__PURE__*/React.createElement(ScrollList, {
134
+ "data-testid": "default-data-list"
135
+ }, data.map(item => /*#__PURE__*/React.createElement(ListItem, {
136
+ key: item.id,
137
+ selected: item.id === id
138
+ }, /*#__PURE__*/React.createElement(ListItemText, {
139
+ onClick: () => history.push(`/access-management/teams?id=${item.id}`)
140
+ }, /*#__PURE__*/React.createElement(ListItemTextPrimary, null, item.name), /*#__PURE__*/React.createElement(ListItemTextSecondary, null, item.description)), /*#__PURE__*/React.createElement(ListItemMeta, null, /*#__PURE__*/React.createElement(ListActions, null, item.system || item.plugin ? /*#__PURE__*/React.createElement(Tooltip, {
141
+ content: /*#__PURE__*/React.createElement("span", null, item.system ? t`Cannot delete system teams.` : t`Cannot delete teams created via extensions.`),
142
+ trigger: /*#__PURE__*/React.createElement(DeleteIcon, {
143
+ disabled: true
144
+ })
145
+ }) : /*#__PURE__*/React.createElement(DeleteIcon, {
146
+ onClick: () => deleteItem(item),
147
+ "data-testid": "default-data-list.delete"
148
+ })))))));
149
+ };
150
+
151
+ //# sourceMappingURL=TeamsDataList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","useCallback","useMemo","useState","orderBy","Button","Grid","Select","Tooltip","ReactComponent","AddIcon","i18n","DataList","ScrollList","ListItem","ListItemText","ListItemTextSecondary","ListItemMeta","DataListModalOverlayAction","DataListModalOverlay","ListItemTextPrimary","ListActions","DeleteIcon","useRouter","useSnackbar","useQuery","useMutation","useConfirmationDialog","LIST_TEAMS","DELETE_TEAM","SearchUI","deserializeSorters","t","ns","SORTERS","label","sorter","TeamsDataList","filter","setFilter","sort","setSort","history","location","showSnackbar","showConfirmation","dataTestId","data","listResponse","loading","listLoading","deleteIt","deleteLoading","refetchQueries","query","security","teams","id","URLSearchParams","search","get","filterTeam","name","slug","description","toLowerCase","includes","sortTeams","key","sortBy","deleteItem","item","variables","error","deleteTeam","message","push","teamsDataListModalOverlay","createElement","Column","span","value","onChange","options","map","filteredData","teamList","title","actions","text","icon","size","className","onClick","inputPlaceholder","modalOverlay","modalOverlayAction","selected","system","plugin","content","trigger","disabled"],"sources":["TeamsDataList.tsx"],"sourcesContent":["import React, { useCallback, useMemo, useState } from \"react\";\nimport orderBy from \"lodash/orderBy\";\nimport { Button, Grid, Select, Tooltip } from \"@webiny/admin-ui\";\nimport { ReactComponent as AddIcon } from \"@webiny/icons/add.svg\";\nimport { i18n } from \"@webiny/app/i18n\";\nimport {\n DataList,\n ScrollList,\n ListItem,\n ListItemText,\n ListItemTextSecondary,\n ListItemMeta,\n DataListModalOverlayAction,\n DataListModalOverlay,\n ListItemTextPrimary,\n ListActions\n} from \"@webiny/ui/List\";\nimport { DeleteIcon } from \"@webiny/ui/List/DataList/icons\";\nimport { useRouter } from \"@webiny/react-router\";\nimport { useSnackbar } from \"@webiny/app-admin/hooks/useSnackbar\";\nimport { useQuery, useMutation } from \"@apollo/react-hooks\";\nimport { useConfirmationDialog } from \"@webiny/app-admin/hooks/useConfirmationDialog\";\nimport type { ListTeamsResponse } from \"./graphql\";\nimport { LIST_TEAMS, DELETE_TEAM } from \"./graphql\";\nimport SearchUI from \"@webiny/app-admin/components/SearchUI\";\nimport { deserializeSorters } from \"../utils\";\nimport type { Team } from \"~/types\";\n\nconst t = i18n.ns(\"app-security/admin/teams/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];\n\nexport interface TeamsDataListProps {\n // TODO @ts-refactor delete and go up the tree and sort it out\n [key: string]: any;\n}\n\nexport const TeamsDataList = () => {\n const [filter, setFilter] = useState(\"\");\n const [sort, setSort] = useState(SORTERS[0].sorter);\n const { history, location } = useRouter();\n const { showSnackbar } = useSnackbar();\n const { showConfirmation } = useConfirmationDialog({\n dataTestId: \"default-data-list.delete-dialog\"\n });\n\n const { data: listResponse, loading: listLoading } = useQuery<ListTeamsResponse>(LIST_TEAMS);\n\n const [deleteIt, { loading: deleteLoading }] = useMutation(DELETE_TEAM, {\n refetchQueries: [{ query: LIST_TEAMS }]\n });\n\n const data = listLoading && !listResponse ? [] : listResponse?.security.teams.data || [];\n const id = new URLSearchParams(location.search).get(\"id\");\n\n const filterTeam = useCallback(\n ({ name, slug, description }: Team) => {\n return (\n name.toLowerCase().includes(filter) ||\n slug.toLowerCase().includes(filter) ||\n (description && description.toLowerCase().includes(filter))\n );\n },\n [filter]\n );\n\n const sortTeams = useCallback(\n (teams: Team[]) => {\n if (!sort) {\n return teams;\n }\n const [key, sortBy] = deserializeSorters(sort);\n return orderBy(teams, [key], [sortBy]);\n },\n [sort]\n );\n\n const deleteItem = useCallback(\n (item: Team) => {\n showConfirmation(async () => {\n const { data } = await deleteIt({\n variables: item\n });\n\n const { error } = data.security.deleteTeam;\n if (error) {\n return showSnackbar(error.message);\n }\n\n showSnackbar(t`Team \"{slug}\" deleted.`({ slug: item.slug }));\n\n if (id === item.id) {\n history.push(`/access-management/teams`);\n }\n });\n },\n [id]\n );\n\n const teamsDataListModalOverlay = 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(filterTeam);\n const teamList = sortTeams(filteredData);\n\n return (\n <DataList\n title={t`Teams`}\n actions={\n <Button\n text={t`New`}\n icon={<AddIcon />}\n size={\"sm\"}\n className={\"wby-ml-xs\"}\n data-testid=\"new-record-button\"\n onClick={() => history.push(\"/access-management/teams?new=true\")}\n />\n }\n data={teamList}\n loading={listLoading || deleteLoading}\n search={\n <SearchUI\n value={filter}\n onChange={setFilter}\n inputPlaceholder={t`Search teams...`}\n />\n }\n modalOverlay={teamsDataListModalOverlay}\n modalOverlayAction={\n <DataListModalOverlayAction data-testid={\"default-data-list.filter\"} />\n }\n >\n {({ data }: { data: Team[] }) => (\n <ScrollList data-testid=\"default-data-list\">\n {data.map(item => (\n <ListItem key={item.id} selected={item.id === id}>\n <ListItemText\n onClick={() =>\n history.push(`/access-management/teams?id=${item.id}`)\n }\n >\n <ListItemTextPrimary>{item.name}</ListItemTextPrimary>\n <ListItemTextSecondary>{item.description}</ListItemTextSecondary>\n </ListItemText>\n\n <ListItemMeta>\n <ListActions>\n {item.system || item.plugin ? (\n <Tooltip\n content={\n <span>\n {item.system\n ? t`Cannot delete system teams.`\n : t`Cannot delete teams created via extensions.`}\n </span>\n }\n trigger={<DeleteIcon disabled />}\n />\n ) : (\n <DeleteIcon\n onClick={() => deleteItem(item)}\n data-testid={\"default-data-list.delete\"}\n />\n )}\n </ListActions>\n </ListItemMeta>\n </ListItem>\n ))}\n </ScrollList>\n )}\n </DataList>\n );\n};\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,5 @@
1
+ import React from "react";
2
+ export interface TeamsFormProps {
3
+ [key: string]: any;
4
+ }
5
+ export declare const TeamsForm: () => React.JSX.Element;
@@ -0,0 +1,173 @@
1
+ import React, { useCallback } from "react";
2
+ import { useMutation, useQuery } from "@apollo/react-hooks";
3
+ import pick from "lodash/pick";
4
+ import get from "lodash/get";
5
+ import { useRouter } from "@webiny/react-router";
6
+ import { i18n } from "@webiny/app/i18n";
7
+ import { Form } from "@webiny/form";
8
+ import { validation } from "@webiny/validation";
9
+ import { SimpleForm, SimpleFormFooter, SimpleFormContent, SimpleFormHeader } from "@webiny/app-admin/components/SimpleForm";
10
+ import { useSnackbar } from "@webiny/app-admin/hooks/useSnackbar";
11
+ import { CREATE_TEAM, LIST_TEAMS, READ_TEAM, UPDATE_TEAM } from "./graphql";
12
+ import isEmpty from "lodash/isEmpty";
13
+ import EmptyView from "@webiny/app-admin/components/EmptyView";
14
+ import { ReactComponent as AddIcon } from "@webiny/app-admin/assets/icons/add-18px.svg";
15
+ import { GroupsMultiAutocomplete } from "../../../components/GroupsMultiAutocomplete";
16
+ import { ReactComponent as SettingsIcon } from "@webiny/icons/settings.svg";
17
+ import { Alert, Button, Grid, Input, OverlayLoader, Textarea } from "@webiny/admin-ui";
18
+ const t = i18n.ns("app-security/admin/teams/form");
19
+ export const TeamsForm = () => {
20
+ const {
21
+ location,
22
+ history
23
+ } = useRouter();
24
+ const {
25
+ showSnackbar
26
+ } = useSnackbar();
27
+ const newTeam = new URLSearchParams(location.search).get("new") === "true";
28
+ const id = new URLSearchParams(location.search).get("id");
29
+ const getQuery = useQuery(READ_TEAM, {
30
+ variables: {
31
+ id
32
+ },
33
+ skip: !id,
34
+ onCompleted: data => {
35
+ if (!data) {
36
+ return;
37
+ }
38
+ const {
39
+ error
40
+ } = data.security.team;
41
+ if (error) {
42
+ history.push("/access-management/teams");
43
+ showSnackbar(error.message);
44
+ }
45
+ }
46
+ });
47
+ const [create, createMutation] = useMutation(CREATE_TEAM, {
48
+ refetchQueries: [{
49
+ query: LIST_TEAMS
50
+ }]
51
+ });
52
+ const [update, updateMutation] = useMutation(UPDATE_TEAM, {
53
+ refetchQueries: [{
54
+ query: LIST_TEAMS
55
+ }]
56
+ });
57
+ const loading = [getQuery, createMutation, updateMutation].find(item => item.loading);
58
+ const onSubmit = useCallback(async formData => {
59
+ const isUpdate = formData.createdOn;
60
+ const [operation, args] = isUpdate ? [update, {
61
+ variables: {
62
+ id: formData.id,
63
+ data: pick(formData, ["name", "description", "groups"])
64
+ }
65
+ }] : [create, {
66
+ variables: {
67
+ data: pick(formData, ["name", "slug", "description", "groups"])
68
+ }
69
+ }];
70
+ const response = await operation(args);
71
+ const {
72
+ data: team,
73
+ error
74
+ } = response.data.security.team;
75
+ if (error) {
76
+ return showSnackbar(error.message);
77
+ }
78
+ !isUpdate && history.push(`/access-management/teams?id=${team.id}`);
79
+ showSnackbar(t`Team saved successfully!`);
80
+ }, [id]);
81
+ const data = loading ? {} : get(getQuery, "data.security.team.data", {});
82
+ const systemTeam = data.system;
83
+ const pluginTeam = data.plugin;
84
+ const canModifyTeam = !systemTeam && !pluginTeam;
85
+ const showEmptyView = !newTeam && !loading && isEmpty(data);
86
+ // Render "No content" selected view.
87
+ if (showEmptyView) {
88
+ return /*#__PURE__*/React.createElement(EmptyView, {
89
+ icon: /*#__PURE__*/React.createElement(SettingsIcon, null),
90
+ title: t`Click on the left side list to display team details or create a...`,
91
+ action: /*#__PURE__*/React.createElement(Button, {
92
+ text: t`New Team`,
93
+ icon: /*#__PURE__*/React.createElement(AddIcon, null),
94
+ "data-testid": "new-record-button",
95
+ onClick: () => history.push("/access-management/teams?new=true")
96
+ })
97
+ });
98
+ }
99
+ return /*#__PURE__*/React.createElement(Form, {
100
+ data: data,
101
+ onSubmit: onSubmit
102
+ }, ({
103
+ data,
104
+ form,
105
+ Bind
106
+ }) => {
107
+ return /*#__PURE__*/React.createElement(SimpleForm, null, loading && /*#__PURE__*/React.createElement(OverlayLoader, null), /*#__PURE__*/React.createElement(SimpleFormHeader, {
108
+ title: data.name ? data.name : "Untitled"
109
+ }), /*#__PURE__*/React.createElement(SimpleFormContent, null, /*#__PURE__*/React.createElement(Grid, null, /*#__PURE__*/React.createElement(React.Fragment, null, systemTeam && /*#__PURE__*/React.createElement(Grid.Column, {
110
+ span: 12
111
+ }, /*#__PURE__*/React.createElement(Alert, {
112
+ type: "info",
113
+ title: "Permissions are locked"
114
+ }, "This is a protected system team and you can't modify its permissions.")), pluginTeam && /*#__PURE__*/React.createElement(Grid.Column, {
115
+ span: 12
116
+ }, /*#__PURE__*/React.createElement(Alert, {
117
+ type: "info",
118
+ title: "Important"
119
+ }, "This team is registered via an extension, and cannot be modified."))), /*#__PURE__*/React.createElement(Grid.Column, {
120
+ span: 6
121
+ }, /*#__PURE__*/React.createElement(Bind, {
122
+ name: "name",
123
+ validators: validation.create("required,minLength:3")
124
+ }, /*#__PURE__*/React.createElement(Input, {
125
+ size: "lg",
126
+ disabled: !canModifyTeam,
127
+ label: t`Name`,
128
+ "data-testid": "admin.am.team.new.name"
129
+ }))), /*#__PURE__*/React.createElement(Grid.Column, {
130
+ span: 6
131
+ }, /*#__PURE__*/React.createElement(Bind, {
132
+ name: "slug",
133
+ validators: validation.create("required,minLength:3")
134
+ }, /*#__PURE__*/React.createElement(Input, {
135
+ size: "lg",
136
+ disabled: !canModifyTeam || !newTeam,
137
+ label: t`Slug`,
138
+ "data-testid": "admin.am.team.new.slug"
139
+ }))), /*#__PURE__*/React.createElement(Grid.Column, {
140
+ span: 12
141
+ }, /*#__PURE__*/React.createElement(Bind, {
142
+ name: "description",
143
+ validators: validation.create("maxLength:500")
144
+ }, /*#__PURE__*/React.createElement(Textarea, {
145
+ size: "lg",
146
+ disabled: !canModifyTeam,
147
+ label: t`Description`,
148
+ rows: 3,
149
+ "data-testid": "admin.am.team.new.description"
150
+ }))), /*#__PURE__*/React.createElement(Grid.Column, {
151
+ span: 12
152
+ }, /*#__PURE__*/React.createElement(Bind, {
153
+ name: "groups",
154
+ validators: validation.create("required")
155
+ }, /*#__PURE__*/React.createElement(GroupsMultiAutocomplete, {
156
+ disabled: !canModifyTeam,
157
+ label: t`Roles`,
158
+ "data-testid": "admin.am.team.new.groups"
159
+ }))))), /*#__PURE__*/React.createElement(SimpleFormFooter, null, /*#__PURE__*/React.createElement(Button, {
160
+ variant: "secondary",
161
+ text: t`Cancel`,
162
+ onClick: () => history.push("/access-management/teams")
163
+ }), canModifyTeam && /*#__PURE__*/React.createElement(Button, {
164
+ text: t`Save`,
165
+ "data-testid": "admin.am.team.new.save",
166
+ onClick: ev => {
167
+ form.submit(ev);
168
+ }
169
+ })));
170
+ });
171
+ };
172
+
173
+ //# sourceMappingURL=TeamsForm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","useCallback","useMutation","useQuery","pick","get","useRouter","i18n","Form","validation","SimpleForm","SimpleFormFooter","SimpleFormContent","SimpleFormHeader","useSnackbar","CREATE_TEAM","LIST_TEAMS","READ_TEAM","UPDATE_TEAM","isEmpty","EmptyView","ReactComponent","AddIcon","GroupsMultiAutocomplete","SettingsIcon","Alert","Button","Grid","Input","OverlayLoader","Textarea","t","ns","TeamsForm","location","history","showSnackbar","newTeam","URLSearchParams","search","id","getQuery","variables","skip","onCompleted","data","error","security","team","push","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","form","Bind","name","Fragment","Column","span","type","validators","size","disabled","label","rows","variant","ev","submit"],"sources":["TeamsForm.tsx"],"sourcesContent":["import React, { useCallback } from \"react\";\nimport { useMutation, useQuery } from \"@apollo/react-hooks\";\nimport pick from \"lodash/pick\";\nimport get from \"lodash/get\";\nimport { useRouter } from \"@webiny/react-router\";\nimport { i18n } from \"@webiny/app/i18n\";\nimport { Form } from \"@webiny/form\";\nimport { validation } from \"@webiny/validation\";\nimport {\n SimpleForm,\n SimpleFormFooter,\n SimpleFormContent,\n SimpleFormHeader\n} from \"@webiny/app-admin/components/SimpleForm\";\nimport { useSnackbar } from \"@webiny/app-admin/hooks/useSnackbar\";\nimport { CREATE_TEAM, LIST_TEAMS, READ_TEAM, UPDATE_TEAM } from \"./graphql\";\nimport isEmpty from \"lodash/isEmpty\";\nimport EmptyView from \"@webiny/app-admin/components/EmptyView\";\nimport { ReactComponent as AddIcon } from \"@webiny/app-admin/assets/icons/add-18px.svg\";\nimport { GroupsMultiAutocomplete } from \"~/components/GroupsMultiAutocomplete\";\nimport type { Team } from \"~/types\";\nimport { ReactComponent as SettingsIcon } from \"@webiny/icons/settings.svg\";\nimport { Alert, Button, Grid, Input, OverlayLoader, Textarea } from \"@webiny/admin-ui\";\n\nconst t = i18n.ns(\"app-security/admin/teams/form\");\n\nexport interface TeamsFormProps {\n // TODO @ts-refactor delete and go up the tree and sort it out\n [key: string]: any;\n}\n\nexport const TeamsForm = () => {\n const { location, history } = useRouter();\n const { showSnackbar } = useSnackbar();\n const newTeam = new URLSearchParams(location.search).get(\"new\") === \"true\";\n const id = new URLSearchParams(location.search).get(\"id\");\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 history.push(\"/access-management/teams\");\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\", \"groups\"])\n }\n }\n ]\n : [\n create,\n {\n variables: {\n data: pick(formData, [\"name\", \"slug\", \"description\", \"groups\"])\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 !isUpdate && history.push(`/access-management/teams?id=${team.id}`);\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;\n const canModifyTeam = !systemTeam && !pluginTeam;\n\n const showEmptyView = !newTeam && !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={() => history.push(\"/access-management/teams?new=true\")}\n />\n }\n />\n );\n }\n\n return (\n <Form data={data} onSubmit={onSubmit}>\n {({ data, form, Bind }) => {\n return (\n <SimpleForm>\n {loading && <OverlayLoader />}\n <SimpleFormHeader title={data.name ? data.name : \"Untitled\"} />\n <SimpleFormContent>\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\n modify its 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\n be modified.\n </Alert>\n </Grid.Column>\n )}\n </>\n <Grid.Column span={6}>\n <Bind\n name=\"name\"\n validators={validation.create(\"required,minLength:3\")}\n >\n <Input\n size={\"lg\"}\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\n name=\"slug\"\n validators={validation.create(\"required,minLength:3\")}\n >\n <Input\n size={\"lg\"}\n disabled={!canModifyTeam || !newTeam}\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 >\n <Textarea\n size={\"lg\"}\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=\"groups\" validators={validation.create(\"required\")}>\n <GroupsMultiAutocomplete\n disabled={!canModifyTeam}\n label={t`Roles`}\n data-testid=\"admin.am.team.new.groups\"\n />\n </Bind>\n </Grid.Column>\n </Grid>\n </SimpleFormContent>\n <SimpleFormFooter>\n <Button\n variant={\"secondary\"}\n text={t`Cancel`}\n onClick={() => history.push(\"/access-management/teams\")}\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"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,13 @@
1
+ import type { Team } from "../../../types";
2
+ export interface ListTeamsResponse {
3
+ security: {
4
+ teams: {
5
+ data: Team[];
6
+ };
7
+ };
8
+ }
9
+ export declare const LIST_TEAMS: import("graphql").DocumentNode;
10
+ export declare const READ_TEAM: import("graphql").DocumentNode;
11
+ export declare const CREATE_TEAM: import("graphql").DocumentNode;
12
+ export declare const UPDATE_TEAM: import("graphql").DocumentNode;
13
+ export declare const DELETE_TEAM: import("graphql").DocumentNode;
@@ -0,0 +1,89 @@
1
+ import gql from "graphql-tag";
2
+ const fields = `
3
+ id
4
+ name
5
+ slug
6
+ description
7
+ groups {
8
+ id
9
+ slug
10
+ name
11
+ }
12
+ system
13
+ plugin
14
+ createdOn
15
+ `;
16
+ export const LIST_TEAMS = gql`
17
+ query listTeams {
18
+ security {
19
+ teams: listTeams {
20
+ data {
21
+ ${fields}
22
+ }
23
+ }
24
+ }
25
+ }
26
+ `;
27
+ export const READ_TEAM = gql`
28
+ query getTeam($id: ID!) {
29
+ security {
30
+ team: getTeam(where: { id: $id }){
31
+ data {
32
+ ${fields}
33
+ }
34
+ error {
35
+ code
36
+ message
37
+ }
38
+ }
39
+ }
40
+ }
41
+ `;
42
+ export const CREATE_TEAM = gql`
43
+ mutation createTeam($data: SecurityTeamCreateInput!){
44
+ security {
45
+ team: createTeam(data: $data) {
46
+ data {
47
+ ${fields}
48
+ }
49
+ error {
50
+ code
51
+ message
52
+ data
53
+ }
54
+ }
55
+ }
56
+ }
57
+ `;
58
+ export const UPDATE_TEAM = gql`
59
+ mutation updateTeam($id: ID!, $data: SecurityTeamUpdateInput!){
60
+ security {
61
+ team: updateTeam(id: $id, data: $data) {
62
+ data {
63
+ ${fields}
64
+ }
65
+ error {
66
+ code
67
+ message
68
+ data
69
+ }
70
+ }
71
+ }
72
+ }
73
+ `;
74
+ export const DELETE_TEAM = gql`
75
+ mutation deleteTeam($id: ID!) {
76
+ security {
77
+ deleteTeam(id: $id) {
78
+ data
79
+ error {
80
+ code
81
+ message
82
+ data
83
+ }
84
+ }
85
+ }
86
+ }
87
+ `;
88
+
89
+ //# sourceMappingURL=graphql.js.map
@@ -0,0 +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\";\n\nconst fields = `\n id\n name\n slug\n description\n groups {\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":[]}
@@ -0,0 +1 @@
1
+ export * from "./Teams";
@@ -0,0 +1,3 @@
1
+ export * from "./Teams";
2
+
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["index.ts"],"sourcesContent":["export * from \"./Teams\";\n"],"mappings":"AAAA","ignoreList":[]}
@@ -1,2 +1,3 @@
1
- export declare const serializeSorters: (data: any) => any;
2
- export declare const deserializeSorters: (data: string) => Record<string, "asc" | "desc" | boolean>;
1
+ type SortTypes = "asc" | "desc";
2
+ export declare const deserializeSorters: (data: string) => [string, SortTypes];
3
+ export {};
package/ui/views/utils.js CHANGED
@@ -1,27 +1,10 @@
1
- import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
- import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
3
- export var serializeSorters = function serializeSorters(data) {
4
- if (!data) {
5
- return data;
6
- }
7
-
8
- var _Object$entries = Object.entries(data),
9
- _Object$entries2 = _slicedToArray(_Object$entries, 1),
10
- _Object$entries2$ = _slicedToArray(_Object$entries2[0], 2),
11
- key = _Object$entries2$[0],
12
- value = _Object$entries2$[1];
13
-
14
- return "".concat(key, ":").concat(value);
15
- };
16
- export var deserializeSorters = function deserializeSorters(data) {
1
+ export const deserializeSorters = data => {
17
2
  if (typeof data !== "string") {
18
3
  return data;
19
4
  }
5
+ const [field, orderBy] = data.split("_");
6
+ const order = String(orderBy).toLowerCase() === "asc" ? "asc" : "desc";
7
+ return [field, order];
8
+ };
20
9
 
21
- var _ref = data.split(":"),
22
- _ref2 = _slicedToArray(_ref, 2),
23
- key = _ref2[0],
24
- value = _ref2[1];
25
-
26
- return _defineProperty({}, key, value);
27
- };
10
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +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,4 +0,0 @@
1
- import { UIViewPlugin } from "@webiny/app-admin/ui/UIView";
2
- import { NavigationView } from "@webiny/app-admin/ui/views/NavigationView";
3
- declare const _default: UIViewPlugin<NavigationView>;
4
- export default _default;
package/plugins/menus.js DELETED
@@ -1,61 +0,0 @@
1
- import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
2
- import _regeneratorRuntime from "@babel/runtime/regenerator";
3
- import { NavigationMenuElement, TAGS } from "@webiny/app-admin/ui/elements/NavigationMenuElement";
4
- import { Permission } from "./constants";
5
- import { UIViewPlugin } from "@webiny/app-admin/ui/UIView";
6
- import { NavigationView } from "@webiny/app-admin/ui/views/NavigationView";
7
- export default new UIViewPlugin(NavigationView, /*#__PURE__*/function () {
8
- var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(view) {
9
- var _view$getSecurityHook, identity, groups, apiKeys, mainMenu;
10
-
11
- return _regeneratorRuntime.wrap(function _callee$(_context) {
12
- while (1) {
13
- switch (_context.prev = _context.next) {
14
- case 0:
15
- _context.next = 2;
16
- return view.isRendered();
17
-
18
- case 2:
19
- _view$getSecurityHook = view.getSecurityHook(), identity = _view$getSecurityHook.identity;
20
- groups = identity.getPermission(Permission.Groups);
21
- apiKeys = identity.getPermission(Permission.ApiKeys);
22
-
23
- if (!(!groups && !apiKeys)) {
24
- _context.next = 7;
25
- break;
26
- }
27
-
28
- return _context.abrupt("return");
29
-
30
- case 7:
31
- mainMenu = view.getSettingsMenuElement().addElement(new NavigationMenuElement("accessManagement", {
32
- label: "Access Management",
33
- tags: [TAGS.UTILS]
34
- }));
35
-
36
- if (groups) {
37
- mainMenu.addElement(new NavigationMenuElement("groups", {
38
- label: "Groups",
39
- path: "/access-management/groups"
40
- }));
41
- }
42
-
43
- if (apiKeys) {
44
- mainMenu.addElement(new NavigationMenuElement("apiKeys", {
45
- label: "API Keys",
46
- path: "/access-management/api-keys"
47
- }));
48
- }
49
-
50
- case 10:
51
- case "end":
52
- return _context.stop();
53
- }
54
- }
55
- }, _callee);
56
- }));
57
-
58
- return function (_x) {
59
- return _ref.apply(this, arguments);
60
- };
61
- }());