@webiny/app-security-access-management 5.23.1 → 5.25.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.
- package/components/GroupAutocomplete/graphql.d.ts +1 -1
- package/components/GroupAutocomplete/graphql.js.map +1 -0
- package/components/GroupAutocomplete/index.d.ts +5 -2
- package/components/GroupAutocomplete/index.js +2 -2
- package/components/GroupAutocomplete/index.js.map +1 -0
- package/components/NotAuthorizedError/NotAuthorizedError.d.ts +2 -2
- package/components/NotAuthorizedError/NotAuthorizedError.js.map +1 -0
- package/components/NotAuthorizedError/index.js.map +1 -0
- package/index.d.ts +5 -1
- package/index.js +6 -0
- package/index.js.map +1 -0
- package/package.json +14 -13
- package/plugins/constants.js.map +1 -0
- package/plugins/index.js.map +1 -0
- package/plugins/installation.js.map +1 -0
- package/plugins/permissionRenderer/SecurityPermissions.d.ts +8 -5
- package/plugins/permissionRenderer/SecurityPermissions.js.map +1 -0
- package/plugins/permissionRenderer/index.js.map +1 -0
- package/plugins/routes.js.map +1 -0
- package/plugins/secureRouteError.js.map +1 -0
- package/types.d.ts +15 -0
- package/types.js +1 -0
- package/types.js.map +1 -0
- package/ui/elements/GroupAutocompleteElement.d.ts +2 -1
- package/ui/elements/GroupAutocompleteElement.js +18 -5
- package/ui/elements/GroupAutocompleteElement.js.map +1 -0
- package/ui/views/ApiKeys/ApiKeyForm.d.ts +5 -3
- package/ui/views/ApiKeys/ApiKeyForm.js +5 -6
- package/ui/views/ApiKeys/ApiKeyForm.js.map +1 -0
- package/ui/views/ApiKeys/ApiKeys.d.ts +8 -3
- package/ui/views/ApiKeys/ApiKeys.js +8 -9
- package/ui/views/ApiKeys/ApiKeys.js.map +1 -0
- package/ui/views/ApiKeys/ApiKeysDataList.d.ts +5 -3
- package/ui/views/ApiKeys/ApiKeysDataList.js +14 -26
- package/ui/views/ApiKeys/ApiKeysDataList.js.map +1 -0
- package/ui/views/ApiKeys/graphql.d.ts +5 -5
- package/ui/views/ApiKeys/graphql.js.map +1 -0
- package/ui/views/ApiKeys/index.d.ts +1 -1
- package/ui/views/ApiKeys/index.js +1 -1
- package/ui/views/ApiKeys/index.js.map +1 -0
- package/ui/views/ApiKeys/utils.d.ts +2 -1
- package/ui/views/ApiKeys/utils.js.map +1 -0
- package/ui/views/Groups/Groups.d.ts +8 -3
- package/ui/views/Groups/Groups.js +9 -10
- package/ui/views/Groups/Groups.js.map +1 -0
- package/ui/views/Groups/GroupsDataList.d.ts +5 -3
- package/ui/views/Groups/GroupsDataList.js +15 -27
- package/ui/views/Groups/GroupsDataList.js.map +1 -0
- package/ui/views/Groups/GroupsForm.d.ts +5 -3
- package/ui/views/Groups/GroupsForm.js +5 -6
- package/ui/views/Groups/GroupsForm.js.map +1 -0
- package/ui/views/Groups/graphql.d.ts +5 -5
- package/ui/views/Groups/graphql.js.map +1 -0
- package/ui/views/Groups/index.d.ts +1 -1
- package/ui/views/Groups/index.js +1 -1
- package/ui/views/Groups/index.js.map +1 -0
- package/ui/views/utils.d.ts +3 -2
- package/ui/views/utils.js +5 -18
- package/ui/views/utils.js.map +1 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const LIST_GROUPS:
|
|
1
|
+
export declare const LIST_GROUPS: import("graphql").DocumentNode;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["graphql.ts"],"names":["gql","LIST_GROUPS"],"mappings":";;;;AAAA,OAAOA,GAAP,MAAgB,aAAhB;AAEA,OAAO,IAAMC,WAAW,GAAGD,GAAH,6WAAjB","sourcesContent":["import gql from \"graphql-tag\";\n\nexport const LIST_GROUPS = gql`\n query listGroups {\n security {\n groups: listGroups {\n data {\n id\n slug\n name\n description\n createdOn\n }\n }\n }\n }\n`;\n"]}
|
|
@@ -1,2 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { AutoCompleteProps } from "@webiny/ui/AutoComplete";
|
|
3
|
+
declare type GroupAutocompleteProps = Partial<AutoCompleteProps>;
|
|
4
|
+
export declare const GroupAutocomplete: React.FC<GroupAutocompleteProps>;
|
|
5
|
+
export {};
|
|
@@ -7,10 +7,10 @@ export var GroupAutocomplete = function GroupAutocomplete(props) {
|
|
|
7
7
|
data = _useQuery.data,
|
|
8
8
|
loading = _useQuery.loading;
|
|
9
9
|
|
|
10
|
-
var options = loading
|
|
10
|
+
var options = loading || !data ? [] : data.security.groups.data;
|
|
11
11
|
return /*#__PURE__*/React.createElement(AutoComplete, Object.assign({}, props, {
|
|
12
12
|
options: options,
|
|
13
13
|
valueProp: "id",
|
|
14
|
-
value: loading ?
|
|
14
|
+
value: loading ? undefined : props.value
|
|
15
15
|
}));
|
|
16
16
|
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["index.tsx"],"names":["React","AutoComplete","LIST_GROUPS","useQuery","GroupAutocomplete","props","data","loading","options","security","groups","undefined","value"],"mappings":"AAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,SAASC,YAAT,QAAgD,yBAAhD;AACA,SAASC,WAAT;AACA,SAASC,QAAT,QAAyB,qBAAzB;AAGA,OAAO,IAAMC,iBAAmD,GAAG,SAAtDA,iBAAsD,CAAAC,KAAK,EAAI;AACxE,kBAA0BF,QAAQ,CAACD,WAAD,CAAlC;AAAA,MAAQI,IAAR,aAAQA,IAAR;AAAA,MAAcC,OAAd,aAAcA,OAAd;;AAEA,MAAMC,OAAO,GAAGD,OAAO,IAAI,CAACD,IAAZ,GAAmB,EAAnB,GAAwBA,IAAI,CAACG,QAAL,CAAcC,MAAd,CAAqBJ,IAA7D;AAEA,sBACI,oBAAC,YAAD,oBACQD,KADR;AAEI,IAAA,OAAO,EAAEG,OAFb;AAGI,IAAA,SAAS,EAAE,IAHf;AAII,IAAA,KAAK,EAAED,OAAO,GAAGI,SAAH,GAAeN,KAAK,CAACO;AAJvC,KADJ;AAQH,CAbM","sourcesContent":["import React from \"react\";\nimport { AutoComplete, AutoCompleteProps } from \"@webiny/ui/AutoComplete\";\nimport { LIST_GROUPS } from \"./graphql\";\nimport { useQuery } from \"@apollo/react-hooks\";\n\ntype GroupAutocompleteProps = Partial<AutoCompleteProps>;\nexport const GroupAutocomplete: React.FC<GroupAutocompleteProps> = props => {\n const { data, loading } = useQuery(LIST_GROUPS);\n\n const options = loading || !data ? [] : data.security.groups.data;\n\n return (\n <AutoComplete\n {...props}\n options={options}\n valueProp={\"id\"}\n value={loading ? undefined : props.value}\n />\n );\n};\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
export declare const NotAuthorizedError:
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
export declare const NotAuthorizedError: React.FC;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["NotAuthorizedError.tsx"],"names":["React","Link","css","styled","Helmet","authErrorImg","Typography","ContentWrapper","display","paddingTop","textAlign","margin","styles","authErrorImgStyle","width","paddingBottom","bodyStyle","color","linkStyle","textDecoration","NotAuthorizedError"],"mappings":"AAAA,OAAO,KAAKA,KAAZ,MAAuB,OAAvB;AACA,SAASC,IAAT,QAAqB,sBAArB;AACA,SAASC,GAAT,QAAoB,SAApB;AACA,OAAOC,MAAP,MAAmB,iBAAnB;AACA,OAAOC,MAAP,MAAmB,cAAnB;AACA,OAAOC,YAAP;AACA,SAASC,UAAT,QAA2B,uBAA3B;AAEA,IAAMC,cAAc,gBAAGJ,MAAH,CAAU,KAAV;AAAA;AAAA;AAAA,GAAiB;AACjCK,EAAAA,OAAO,EAAE,OADwB;AAEjCC,EAAAA,UAAU,EAAE,KAFqB;AAGjCC,EAAAA,SAAS,EAAE,QAHsB;AAIjCC,EAAAA,MAAM,EAAE;AAJyB,CAAjB,CAApB;AAOA,IAAMC,MAAM,GAAG;AACXC,EAAAA,iBAAiB,eAAEX,GAAG,CAAC;AACnBY,IAAAA,KAAK,EAAE,OADY;AAEnBC,IAAAA,aAAa,EAAE;AAFI,GAAD,6BADX;AAKXC,EAAAA,SAAS,eAAEd,GAAG,CAAC;AACXe,IAAAA,KAAK,EAAE,6CADI;AAEXT,IAAAA,OAAO,EAAE;AAFE,GAAD,qBALH;AASXU,EAAAA,SAAS,eAAEhB,GAAG,CAAC;AACXiB,IAAAA,cAAc,EAAE,MADL;AAEX,eAAW;AACPA,MAAAA,cAAc,EAAE;AADT;AAFA,GAAD;AATH,CAAf;AAiBA,OAAO,IAAMC,kBAA4B,GAAG,SAA/BA,kBAA+B,GAAM;AAC9C,sBACI,oBAAC,cAAD,qBACI,oBAAC,MAAD;AAAQ,IAAA,KAAK,EAAE;AAAf,IADJ,eAGI;AAAK,IAAA,SAAS,EAAER,MAAM,CAACC,iBAAvB;AAA0C,IAAA,GAAG,EAAER,YAA/C;AAA6D,IAAA,GAAG,EAAC;AAAjE,IAHJ,eAKI,oBAAC,UAAD;AAAY,IAAA,GAAG,EAAE,OAAjB;AAA0B,IAAA,SAAS,EAAEO,MAAM,CAACI;AAA5C,kDALJ,eASI,oBAAC,UAAD;AAAY,IAAA,GAAG,EAAE,OAAjB;AAA0B,IAAA,SAAS,EAAEJ,MAAM,CAACI;AAA5C,4DATJ,eAaI,oBAAC,IAAD;AAAM,IAAA,EAAE,EAAC,GAAT;AAAa,IAAA,SAAS,EAAEJ,MAAM,CAACM;AAA/B,qBAbJ,CADJ;AAmBH,CApBM","sourcesContent":["import * as React from \"react\";\nimport { Link } from \"@webiny/react-router\";\nimport { css } from \"emotion\";\nimport styled from \"@emotion/styled\";\nimport Helmet from \"react-helmet\";\nimport authErrorImg from \"./SecureRouteError.svg\";\nimport { Typography } from \"@webiny/ui/Typography\";\n\nconst ContentWrapper = styled(\"div\")({\n display: \"block\",\n paddingTop: \"15%\",\n textAlign: \"center\",\n margin: \"auto\"\n});\n\nconst styles = {\n authErrorImgStyle: css({\n width: \"192px\",\n paddingBottom: \"24px\"\n }),\n bodyStyle: css({\n color: \"var(--mdc-theme-text-primary-on-background)\",\n display: \"block\"\n }),\n linkStyle: css({\n textDecoration: \"none\",\n \"&:hover\": {\n textDecoration: \"none\"\n }\n })\n};\n\nexport const NotAuthorizedError: React.FC = () => {\n return (\n <ContentWrapper>\n <Helmet title={\"Not authorized\"} />\n\n <img className={styles.authErrorImgStyle} src={authErrorImg} alt=\"Not Authorized\" />\n\n <Typography use={\"body1\"} className={styles.bodyStyle}>\n You are not authorized to view this route.\n </Typography>\n\n <Typography use={\"body1\"} className={styles.bodyStyle}>\n Please contact your administrator to request access.\n </Typography>\n\n <Link to=\"/\" className={styles.linkStyle}>\n Take me back.\n </Link>\n </ContentWrapper>\n );\n};\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["index.ts"],"names":["NotAuthorizedError"],"mappings":"AAAA,SAASA,kBAAT","sourcesContent":["export { NotAuthorizedError } from \"./NotAuthorizedError\";\n"]}
|
package/index.d.ts
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
declare const _default: () =>
|
|
2
|
+
declare const _default: () => never[];
|
|
3
|
+
/**
|
|
4
|
+
* TODO @ts-refactor
|
|
5
|
+
* Find out why is there empty default export
|
|
6
|
+
*/
|
|
3
7
|
export default _default;
|
|
4
8
|
export declare const AccessManagementExtension: () => JSX.Element;
|
|
5
9
|
export declare const AccessManagement: React.MemoExoticComponent<() => JSX.Element>;
|
package/index.js
CHANGED
|
@@ -6,6 +6,12 @@ import { Permission } from "./plugins/constants";
|
|
|
6
6
|
import { Groups } from "./ui/views/Groups";
|
|
7
7
|
import { ApiKeys } from "./ui/views/ApiKeys";
|
|
8
8
|
import accessManagementPugins from "./plugins";
|
|
9
|
+
/**
|
|
10
|
+
* TODO @ts-refactor
|
|
11
|
+
* Find out why is there empty default export
|
|
12
|
+
*/
|
|
13
|
+
// @ts-ignore
|
|
14
|
+
|
|
9
15
|
export default (function () {
|
|
10
16
|
return [];
|
|
11
17
|
});
|
package/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["index.tsx"],"names":["React","memo","plugins","Layout","Plugins","AddMenu","AddRoute","HasPermission","Permission","Groups","ApiKeys","accessManagementPugins","AccessManagementExtension","register","AccessManagement"],"mappings":"AAAA,OAAOA,KAAP,IAAgBC,IAAhB,QAA4B,OAA5B;AACA,SAASC,OAAT,QAAwB,iBAAxB;AACA,SAASC,MAAT,EAAiBC,OAAjB,EAA0BC,OAA1B,EAAmCC,QAAnC,QAAmD,mBAAnD;AACA,SAASC,aAAT,QAA8B,sBAA9B;AACA,SAASC,UAAT;AACA,SAASC,MAAT;AACA,SAASC,OAAT;AACA,OAAOC,sBAAP;AAEA;AACA;AACA;AACA;AACA;;AACA,gBAAe;AAAA,SAAM,EAAN;AAAA,CAAf;AAEA,OAAO,IAAMC,yBAAyB,GAAG,SAA5BA,yBAA4B,GAAM;AAC3CV,EAAAA,OAAO,CAACW,QAAR,CAAiBF,sBAAsB,EAAvC;AAEA,sBACI,oBAAC,OAAD,qBACI,oBAAC,aAAD;AAAe,IAAA,IAAI,EAAEH,UAAU,CAACC;AAAhC,kBACI,oBAAC,QAAD;AAAU,IAAA,KAAK,MAAf;AAAgB,IAAA,IAAI,EAAE;AAAtB,kBACI,oBAAC,MAAD;AAAQ,IAAA,KAAK,EAAE;AAAf,kBACI,oBAAC,MAAD,OADJ,CADJ,CADJ,CADJ,eAQI,oBAAC,aAAD;AAAe,IAAA,IAAI,EAAED,UAAU,CAACE;AAAhC,kBACI,oBAAC,QAAD;AAAU,IAAA,KAAK,MAAf;AAAgB,IAAA,IAAI,EAAE;AAAtB,kBACI,oBAAC,MAAD;AAAQ,IAAA,KAAK,EAAE;AAAf,kBACI,oBAAC,OAAD,OADJ,CADJ,CADJ,CARJ,eAeI,oBAAC,aAAD;AAAe,IAAA,GAAG,EAAE,CAACF,UAAU,CAACC,MAAZ,EAAoBD,UAAU,CAACE,OAA/B;AAApB,kBACI,oBAAC,OAAD;AAAS,IAAA,IAAI,EAAE;AAAf,kBACI,oBAAC,OAAD;AAAS,IAAA,IAAI,EAAE,2BAAf;AAA4C,IAAA,KAAK,EAAE;AAAnD,kBACI,oBAAC,aAAD;AAAe,IAAA,IAAI,EAAEF,UAAU,CAACC;AAAhC,kBACI,oBAAC,OAAD;AACI,IAAA,IAAI,EAAE,kCADV;AAEI,IAAA,KAAK,EAAE,QAFX;AAGI,IAAA,IAAI,EAAE;AAHV,IADJ,CADJ,eAQI,oBAAC,aAAD;AAAe,IAAA,IAAI,EAAED,UAAU,CAACE;AAAhC,kBACI,oBAAC,OAAD;AACI,IAAA,IAAI,EAAE,mCADV;AAEI,IAAA,KAAK,EAAE,UAFX;AAGI,IAAA,IAAI,EAAE;AAHV,IADJ,CARJ,CADJ,CADJ,CAfJ,CADJ;AAsCH,CAzCM;AA2CP,OAAO,IAAMI,gBAAgB,gBAAGb,IAAI,CAACW,yBAAD,CAA7B","sourcesContent":["import React, { memo } from \"react\";\nimport { plugins } from \"@webiny/plugins\";\nimport { Layout, Plugins, AddMenu, AddRoute } from \"@webiny/app-admin\";\nimport { HasPermission } from \"@webiny/app-security\";\nimport { Permission } from \"~/plugins/constants\";\nimport { Groups } from \"~/ui/views/Groups\";\nimport { ApiKeys } from \"~/ui/views/ApiKeys\";\nimport accessManagementPugins from \"./plugins\";\n\n/**\n * TODO @ts-refactor\n * Find out why is there empty default export\n */\n// @ts-ignore\nexport default () => [];\n\nexport const AccessManagementExtension = () => {\n plugins.register(accessManagementPugins());\n\n return (\n <Plugins>\n <HasPermission name={Permission.Groups}>\n <AddRoute exact path={\"/access-management/groups\"}>\n <Layout title={\"Access Management - Groups\"}>\n <Groups />\n </Layout>\n </AddRoute>\n </HasPermission>\n <HasPermission name={Permission.ApiKeys}>\n <AddRoute exact path={\"/access-management/api-keys\"}>\n <Layout title={\"Access Management - API Keys\"}>\n <ApiKeys />\n </Layout>\n </AddRoute>\n </HasPermission>\n <HasPermission any={[Permission.Groups, Permission.ApiKeys]}>\n <AddMenu name={\"settings\"}>\n <AddMenu name={\"settings.accessManagement\"} label={\"Access Management\"}>\n <HasPermission name={Permission.Groups}>\n <AddMenu\n name={\"settings.accessManagement.groups\"}\n label={\"Groups\"}\n path={\"/access-management/groups\"}\n />\n </HasPermission>\n <HasPermission name={Permission.ApiKeys}>\n <AddMenu\n name={\"settings.accessManagement.apiKeys\"}\n label={\"API Keys\"}\n path={\"/access-management/api-keys\"}\n />\n </HasPermission>\n </AddMenu>\n </AddMenu>\n </HasPermission>\n </Plugins>\n );\n};\n\nexport const AccessManagement = memo(AccessManagementExtension);\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webiny/app-security-access-management",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.25.0-beta.0",
|
|
4
4
|
"main": "index.js",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -15,14 +15,14 @@
|
|
|
15
15
|
"dependencies": {
|
|
16
16
|
"@apollo/react-hooks": "3.1.5",
|
|
17
17
|
"@emotion/styled": "10.3.0",
|
|
18
|
-
"@webiny/app": "5.
|
|
19
|
-
"@webiny/app-admin": "5.
|
|
20
|
-
"@webiny/app-security": "5.
|
|
21
|
-
"@webiny/form": "5.
|
|
22
|
-
"@webiny/plugins": "5.
|
|
23
|
-
"@webiny/react-router": "5.
|
|
24
|
-
"@webiny/ui": "5.
|
|
25
|
-
"@webiny/validation": "5.
|
|
18
|
+
"@webiny/app": "5.25.0-beta.0",
|
|
19
|
+
"@webiny/app-admin": "5.25.0-beta.0",
|
|
20
|
+
"@webiny/app-security": "5.25.0-beta.0",
|
|
21
|
+
"@webiny/form": "5.25.0-beta.0",
|
|
22
|
+
"@webiny/plugins": "5.25.0-beta.0",
|
|
23
|
+
"@webiny/react-router": "5.25.0-beta.0",
|
|
24
|
+
"@webiny/ui": "5.25.0-beta.0",
|
|
25
|
+
"@webiny/validation": "5.25.0-beta.0",
|
|
26
26
|
"emotion": "10.0.27",
|
|
27
27
|
"graphql-tag": "2.12.6",
|
|
28
28
|
"lodash": "4.17.21",
|
|
@@ -37,13 +37,14 @@
|
|
|
37
37
|
"@babel/preset-env": "^7.16.4",
|
|
38
38
|
"@babel/preset-react": "^7.16.0",
|
|
39
39
|
"@babel/preset-typescript": "^7.16.0",
|
|
40
|
-
"@
|
|
41
|
-
"@webiny/
|
|
40
|
+
"@types/react-helmet": "^6.1.5",
|
|
41
|
+
"@webiny/cli": "^5.25.0-beta.0",
|
|
42
|
+
"@webiny/project-utils": "^5.25.0-beta.0",
|
|
42
43
|
"babel-plugin-emotion": "^9.2.8",
|
|
43
44
|
"babel-plugin-lodash": "^3.3.4",
|
|
44
45
|
"rimraf": "^3.0.2",
|
|
45
46
|
"ttypescript": "^1.5.12",
|
|
46
|
-
"typescript": "
|
|
47
|
+
"typescript": "4.5.5"
|
|
47
48
|
},
|
|
48
49
|
"publishConfig": {
|
|
49
50
|
"access": "public",
|
|
@@ -60,5 +61,5 @@
|
|
|
60
61
|
]
|
|
61
62
|
}
|
|
62
63
|
},
|
|
63
|
-
"gitHead": "
|
|
64
|
+
"gitHead": "2d3e7833575e88fde77d84e5490e746933a5ec28"
|
|
64
65
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["constants.ts"],"names":["Permission"],"mappings":"AAAA,WAAYA,UAAZ;;WAAYA,U;AAAAA,EAAAA,U;AAAAA,EAAAA,U;GAAAA,U,KAAAA,U","sourcesContent":["export enum Permission {\n Groups = \"security.group\",\n ApiKeys = \"security.apiKey\"\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["index.ts"],"names":["installation","permissionRenderer","secureRouteError"],"mappings":"AACA,OAAOA,YAAP;AACA,OAAOC,kBAAP;AACA,OAAOC,gBAAP;AAEA,gBAAe;AAAA,SAAwB,CAACF,YAAD,EAAeC,kBAAf,EAAmCC,gBAAnC,CAAxB;AAAA,CAAf","sourcesContent":["import { PluginCollection } from \"@webiny/plugins/types\";\nimport installation from \"./installation\";\nimport permissionRenderer from \"./permissionRenderer\";\nimport secureRouteError from \"~/plugins/secureRouteError\";\n\nexport default (): PluginCollection => [installation, permissionRenderer, secureRouteError];\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["installation.tsx"],"names":["React","useState","useEffect","gql","useApolloClient","Alert","CircularProgress","SimpleForm","SimpleFormContent","styled","SimpleFormPlaceholder","minHeight","minWidth","IS_INSTALLED","INSTALL","SecurityInstaller","onInstalled","client","error","setError","mutate","mutation","then","data","security","install","message","setTimeout","label","plugin","name","type","title","dependencies","secure","getInstalledVersion","query","version","render"],"mappings":";;;;;;;AAAA,OAAOA,KAAP,IAAgBC,QAAhB,EAA0BC,SAA1B,QAA2C,OAA3C;AACA,OAAOC,GAAP,MAAgB,aAAhB;AACA,SAASC,eAAT,QAAgC,qBAAhC;AACA,SAASC,KAAT,QAAsB,kBAAtB;AACA,SAASC,gBAAT,QAAiC,qBAAjC;AACA,SAASC,UAAT,EAAqBC,iBAArB,QAA8C,yCAA9C;AACA,OAAOC,MAAP,MAAmB,iBAAnB;AAGA,IAAMC,qBAAqB,gBAAGD,MAAH;AAAA;AAAA;AAAA,GAAc;AACrCE,EAAAA,SAAS,EAAE,GAD0B;AAErCC,EAAAA,QAAQ,EAAE;AAF2B,CAAd,CAA3B;AAKA,IAAMC,YAAY,GAAGV,GAAH,mKAAlB;AAQA,IAAMW,OAAO,GAAGX,GAAH,8SAAb;;AAiBA,IAAMY,iBAAmD,GAAG,SAAtDA,iBAAsD,OAAqB;AAAA,MAAlBC,WAAkB,QAAlBA,WAAkB;AAC7E,MAAMC,MAAM,GAAGb,eAAe,EAA9B;;AACA,kBAA0BH,QAAQ,CAAC,IAAD,CAAlC;AAAA;AAAA,MAAOiB,KAAP;AAAA,MAAcC,QAAd;;AAEAjB,EAAAA,SAAS,CAAC,YAAM;AACZe,IAAAA,MAAM,CAACG,MAAP,CAAc;AAAEC,MAAAA,QAAQ,EAAEP;AAAZ,KAAd,EAAqCQ,IAArC,CAA0C,iBAAc;AAAA,UAAXC,IAAW,SAAXA,IAAW;AACpD,UAAQL,KAAR,GAAkBK,IAAI,CAACC,QAAL,CAAcC,OAAhC,CAAQP,KAAR;;AACA,UAAIA,KAAJ,EAAW;AACPC,QAAAA,QAAQ,CAACD,KAAK,CAACQ,OAAP,CAAR;AACA;AACH,OALmD,CAOpD;;;AACAC,MAAAA,UAAU,CAACX,WAAD,EAAc,IAAd,CAAV;AACH,KATD;AAUH,GAXQ,EAWN,EAXM,CAAT;AAaA,MAAMY,KAAK,GAAGV,KAAK,gBACf,oBAAC,KAAD;AAAO,IAAA,KAAK,wBAAZ;AAAsC,IAAA,IAAI,EAAE;AAA5C,KACKA,KADL,CADe,2BAAnB;AAQA,sBACI,oBAAC,UAAD,qBACI,oBAAC,gBAAD;AAAkB,IAAA,KAAK,EAAEU;AAAzB,IADJ,eAEI,oBAAC,iBAAD,qBACI,oBAAC,qBAAD,OADJ,CAFJ,CADJ;AAQH,CAjCD;;AAmCA,IAAMC,MAA+B,GAAG;AACpCC,EAAAA,IAAI,EAAE,6BAD8B;AAEpCC,EAAAA,IAAI,EAAE,oBAF8B;AAGpCC,EAAAA,KAAK,YAH+B;AAIpCC,EAAAA,YAAY,EAAE,8BAJsB;AAKpCC,EAAAA,MAAM,EAAE,KAL4B;AAM9BC,EAAAA,mBAN8B,sCAME;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAVlB,cAAAA,MAAU,SAAVA,MAAU;AAAA;AAAA,qBACXA,MAAM,CAACmB,KAAP,CAAa;AAAEA,gBAAAA,KAAK,EAAEvB;AAAT,eAAb,CADW;;AAAA;AAAA;AAC1BU,cAAAA,IAD0B,uBAC1BA,IAD0B;AAAA,+CAE3BA,IAAI,CAACC,QAAL,CAAca,OAFa;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGrC,GATmC;AAUpCC,EAAAA,MAVoC,yBAUZ;AAAA,QAAftB,WAAe,SAAfA,WAAe;AACpB,wBAAO,oBAAC,iBAAD;AAAmB,MAAA,WAAW,EAAEA;AAAhC,MAAP;AACH;AAZmC,CAAxC;AAeA,eAAea,MAAf","sourcesContent":["import React, { useState, useEffect } from \"react\";\nimport gql from \"graphql-tag\";\nimport { useApolloClient } from \"@apollo/react-hooks\";\nimport { Alert } from \"@webiny/ui/Alert\";\nimport { CircularProgress } from \"@webiny/ui/Progress\";\nimport { SimpleForm, SimpleFormContent } from \"@webiny/app-admin/components/SimpleForm\";\nimport styled from \"@emotion/styled\";\nimport { AdminInstallationPlugin } from \"@webiny/app-admin/types\";\n\nconst SimpleFormPlaceholder = styled.div({\n minHeight: 300,\n minWidth: 400\n});\n\nconst IS_INSTALLED = gql`\n query IsSecurityInstalled {\n security {\n version\n }\n }\n`;\n\nconst INSTALL = gql`\n mutation InstallSecurity {\n security {\n install {\n data\n error {\n code\n message\n }\n }\n }\n }\n`;\n\ninterface SecurityInstallerProps {\n onInstalled: () => void;\n}\nconst SecurityInstaller: React.FC<SecurityInstallerProps> = ({ onInstalled }) => {\n const client = useApolloClient();\n const [error, setError] = useState(null);\n\n useEffect(() => {\n client.mutate({ mutation: INSTALL }).then(({ data }) => {\n const { error } = data.security.install;\n if (error) {\n setError(error.message);\n return;\n }\n\n // Just so the user sees the actual message.\n setTimeout(onInstalled, 3000);\n });\n }, []);\n\n const label = error ? (\n <Alert title={`Something went wrong`} type={\"danger\"}>\n {error}\n </Alert>\n ) : (\n `Installing Security...`\n );\n\n return (\n <SimpleForm>\n <CircularProgress label={label} />\n <SimpleFormContent>\n <SimpleFormPlaceholder />\n </SimpleFormContent>\n </SimpleForm>\n );\n};\n\nconst plugin: AdminInstallationPlugin = {\n name: \"admin-installation-security\",\n type: \"admin-installation\",\n title: `Security`,\n dependencies: [`admin-installation-tenancy`],\n secure: false,\n async getInstalledVersion({ client }) {\n const { data } = await client.query({ query: IS_INSTALLED });\n return data.security.version;\n },\n render({ onInstalled }) {\n return <SecurityInstaller onInstalled={onInstalled} />;\n }\n};\n\nexport default plugin;\n"]}
|
|
@@ -1,5 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { SecurityPermission } from "@webiny/app-security/types";
|
|
3
|
+
interface SecurityPermissionsProps {
|
|
4
|
+
value: SecurityPermission[];
|
|
5
|
+
onChange: (value: SecurityPermission[]) => void;
|
|
6
|
+
}
|
|
7
|
+
export declare const SecurityPermissions: React.FC<SecurityPermissionsProps>;
|
|
8
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["SecurityPermissions.tsx"],"names":["React","Fragment","useCallback","useMemo","Grid","Cell","Select","i18n","PermissionInfo","gridNoPaddingClass","Form","Elevation","Typography","t","ns","SECURITY","SECURITY_FULL_ACCESS","SECURITY_GROUP_ACCESS","SECURITY_API_KEY_ACCESS","FULL_ACCESS","NO_ACCESS","CUSTOM_ACCESS","SecurityPermissions","value","onChange","onFormChange","data","newValue","Array","isArray","filter","item","name","startsWith","permissions","accessLevel","push","groupAccessScope","apiKeyAccessScope","length","formData","hasFullAccess","find","hasGroupAccess","hasApiKeyAccess","Bind","marginTop"],"mappings":";;;;AAAA,OAAOA,KAAP,IAAgBC,QAAhB,EAA0BC,WAA1B,EAAuCC,OAAvC,QAAsD,OAAtD;AACA,SAASC,IAAT,EAAeC,IAAf,QAA2B,iBAA3B;AACA,SAASC,MAAT,QAAuB,mBAAvB;AACA,SAASC,IAAT,QAAqB,kBAArB;AACA,SAASC,cAAT,EAAyBC,kBAAzB,QAAmD,0CAAnD;AACA,SAASC,IAAT,QAAqB,cAArB;AACA,SAASC,SAAT,QAA0B,sBAA1B;AACA,SAASC,UAAT,QAA2B,uBAA3B;AAGA,IAAMC,CAAC,GAAGN,IAAI,CAACO,EAAL,CAAQ,qDAAR,CAAV;AAEA,IAAMC,QAAQ,GAAG,UAAjB;AACA,IAAMC,oBAAoB,aAAMD,QAAN,OAA1B;AACA,IAAME,qBAAqB,aAAMF,QAAN,WAA3B;AACA,IAAMG,uBAAuB,aAAMH,QAAN,YAA7B;AACA,IAAMI,WAAW,GAAG,MAApB;AACA,IAAMC,SAAS,GAAG,IAAlB;AACA,IAAMC,aAAa,GAAG,QAAtB;AAMA,OAAO,IAAMC,mBAAuD,GAAG,SAA1DA,mBAA0D,OAAyB;AAAA,MAAtBC,KAAsB,QAAtBA,KAAsB;AAAA,MAAfC,QAAe,QAAfA,QAAe;AAC5F,MAAMC,YAAY,GAAGvB,WAAW,CAC5B,UAAAwB,IAAI,EAAI;AACJ,QAAIC,QAA8B,GAAG,EAArC;;AACA,QAAIC,KAAK,CAACC,OAAN,CAAcN,KAAd,CAAJ,EAA0B;AACtB;AACAI,MAAAA,QAAQ,GAAGJ,KAAK,CAACO,MAAN,CAAa,UAAAC,IAAI;AAAA,eAAI,CAACA,IAAI,CAACC,IAAL,CAAUC,UAAV,CAAqBlB,QAArB,CAAL;AAAA,OAAjB,CAAX;AACH;;AAED,QAAMmB,WAAW,GAAG,EAApB;;AACA,QAAIR,IAAI,CAACS,WAAL,KAAqBhB,WAAzB,EAAsC;AAClCe,MAAAA,WAAW,CAACE,IAAZ,CAAiB;AAAEJ,QAAAA,IAAI,EAAEhB;AAAR,OAAjB;AACH,KAFD,MAEO,IAAIU,IAAI,CAACS,WAAL,KAAqBd,aAAzB,EAAwC;AAC3C,UAAIK,IAAI,CAACW,gBAAL,KAA0BlB,WAA9B,EAA2C;AACvCe,QAAAA,WAAW,CAACE,IAAZ,CAAiB;AAAEJ,UAAAA,IAAI,EAAEf;AAAR,SAAjB;AACH;;AAED,UAAIS,IAAI,CAACY,iBAAL,KAA2BnB,WAA/B,EAA4C;AACxCe,QAAAA,WAAW,CAACE,IAAZ,CAAiB;AAAEJ,UAAAA,IAAI,EAAEd;AAAR,SAAjB;AACH;AACJ;;AAED,QAAIgB,WAAW,IAAIA,WAAW,CAACK,MAA/B,EAAuC;AAAA;;AACnC,mBAAAZ,QAAQ,EAACS,IAAT,kBAAiBF,WAAjB;AACH;;AAEDV,IAAAA,QAAQ,CAACG,QAAD,CAAR;AACH,GA1B2B,EA2B5B,CAACJ,KAAD,CA3B4B,CAAhC;AA8BA,MAAMiB,QAAQ,GAAGrC,OAAO,CAAC,YAAM;AAC3B,QAAI,CAACyB,KAAK,CAACC,OAAN,CAAcN,KAAd,CAAL,EAA2B;AACvB,aAAO;AAAEY,QAAAA,WAAW,EAAEf;AAAf,OAAP;AACH;;AAED,QAAMqB,aAAa,GAAGlB,KAAK,CAACmB,IAAN,CAClB,UAAAX,IAAI;AAAA,aAAIA,IAAI,CAACC,IAAL,KAAchB,oBAAd,IAAsCe,IAAI,CAACC,IAAL,KAAc,GAAxD;AAAA,KADc,CAAtB;;AAIA,QAAIS,aAAJ,EAAmB;AACf,aAAO;AAAEN,QAAAA,WAAW,EAAEhB;AAAf,OAAP;AACH;;AAED,QAAMe,WAAW,GAAGX,KAAK,CAACO,MAAN,CAAa,UAAAC,IAAI;AAAA,aAAIA,IAAI,CAACC,IAAL,CAAUC,UAAV,CAAqBlB,QAArB,CAAJ;AAAA,KAAjB,CAApB;;AACA,QAAImB,WAAW,CAACK,MAAZ,KAAuB,CAA3B,EAA8B;AAC1B,aAAO;AAAEJ,QAAAA,WAAW,EAAEf;AAAf,OAAP;AACH;;AAED,QAAMM,IAAI,GAAG;AACTS,MAAAA,WAAW,EAAEd,aADJ;AAETgB,MAAAA,gBAAgB,EAAEjB,SAFT;AAGTkB,MAAAA,iBAAiB,EAAElB;AAHV,KAAb;AAMA,QAAMuB,cAAc,GAAGT,WAAW,CAACQ,IAAZ,CAAiB,UAAAX,IAAI;AAAA,aAAIA,IAAI,CAACC,IAAL,KAAcf,qBAAlB;AAAA,KAArB,CAAvB;;AACA,QAAI0B,cAAJ,EAAoB;AAChBjB,MAAAA,IAAI,CAACW,gBAAL,GAAwBlB,WAAxB;AACH;;AAED,QAAMyB,eAAe,GAAGV,WAAW,CAACQ,IAAZ,CAAiB,UAAAX,IAAI;AAAA,aAAIA,IAAI,CAACC,IAAL,KAAcd,uBAAlB;AAAA,KAArB,CAAxB;;AACA,QAAI0B,eAAJ,EAAqB;AACjBlB,MAAAA,IAAI,CAACY,iBAAL,GAAyBnB,WAAzB;AACH;;AAED,WAAOO,IAAP;AACH,GAnCuB,EAmCrB,EAnCqB,CAAxB;AAqCA,sBACI,oBAAC,IAAD;AAAM,IAAA,IAAI,EAAEc,QAAZ;AAAsB,IAAA,QAAQ,EAAEf;AAAhC,KACK,iBAAoB;AAAA,QAAjBC,IAAiB,SAAjBA,IAAiB;AAAA,QAAXmB,IAAW,SAAXA,IAAW;AACjB,wBACI,oBAAC,QAAD,qBACI,oBAAC,IAAD;AAAM,MAAA,SAAS,EAAEpC;AAAjB,oBACI,oBAAC,IAAD;AAAM,MAAA,IAAI,EAAE;AAAZ,oBACI,oBAAC,cAAD;AAAgB,MAAA,KAAK,EAAEI,CAAF;AAArB,MADJ,CADJ,eAII,oBAAC,IAAD;AAAM,MAAA,IAAI,EAAE;AAAZ,oBACI,oBAAC,IAAD;AAAM,MAAA,IAAI,EAAE;AAAZ,oBACI,oBAAC,MAAD;AAAQ,MAAA,KAAK,EAAEA,CAAF;AAAb,oBACI;AAAQ,MAAA,KAAK,EAAEO;AAAf,OAA2BP,CAA3B,iFADJ,eAEI;AAAQ,MAAA,KAAK,EAAEM;AAAf,OAA6BN,CAA7B,mFAFJ,eAGI;AAAQ,MAAA,KAAK,EAAEQ;AAAf,OAA+BR,CAA/B,qFAHJ,CADJ,CADJ,CAJJ,CADJ,EAeKa,IAAI,CAACS,WAAL,KAAqBd,aAArB,iBACG,oBAAC,KAAD,CAAO,QAAP,qBACI,oBAAC,SAAD;AAAW,MAAA,CAAC,EAAE,CAAd;AAAiB,MAAA,KAAK,EAAE;AAAEyB,QAAAA,SAAS,EAAE;AAAb;AAAxB,oBACI,oBAAC,IAAD,qBACI,oBAAC,IAAD;AAAM,MAAA,IAAI,EAAE;AAAZ,oBACI,oBAAC,UAAD;AAAY,MAAA,GAAG,EAAE;AAAjB,OAA8BjC,CAA9B,gFADJ,CADJ,eAII,oBAAC,IAAD;AAAM,MAAA,IAAI,EAAE;AAAZ,oBACI,oBAAC,IAAD;AAAM,MAAA,IAAI,EAAE;AAAZ,oBACI,oBAAC,MAAD;AAAQ,MAAA,KAAK,EAAEA,CAAF;AAAb,oBACI;AACI,MAAA,KAAK,EAAEO;AADX,OAEEP,CAFF,iFADJ,eAII;AACI,MAAA,KAAK,EAAEM;AADX,OAEEN,CAFF,mFAJJ,CADJ,CADJ,CAJJ,CADJ,CADJ,eAoBI,oBAAC,SAAD;AAAW,MAAA,CAAC,EAAE,CAAd;AAAiB,MAAA,KAAK,EAAE;AAAEiC,QAAAA,SAAS,EAAE;AAAb;AAAxB,oBACI,oBAAC,IAAD,qBACI,oBAAC,IAAD;AAAM,MAAA,IAAI,EAAE;AAAZ,oBACI,oBAAC,UAAD;AAAY,MAAA,GAAG,EAAE;AAAjB,OAA8BjC,CAA9B,gFADJ,CADJ,eAII,oBAAC,IAAD;AAAM,MAAA,IAAI,EAAE;AAAZ,oBACI,oBAAC,IAAD;AAAM,MAAA,IAAI,EAAE;AAAZ,oBACI,oBAAC,MAAD;AAAQ,MAAA,KAAK,EAAEA,CAAF;AAAb,oBACI;AACI,MAAA,KAAK,EAAEO;AADX,OAEEP,CAFF,mFADJ,eAII;AACI,MAAA,KAAK,EAAEM;AADX,OAEEN,CAFF,qFAJJ,CADJ,CADJ,CAJJ,CADJ,CApBJ,CAhBR,CADJ;AA4DH,GA9DL,CADJ;AAkEH,CAtIM","sourcesContent":["import React, { Fragment, useCallback, useMemo } from \"react\";\nimport { Grid, Cell } from \"@webiny/ui/Grid\";\nimport { Select } from \"@webiny/ui/Select\";\nimport { i18n } from \"@webiny/app/i18n\";\nimport { PermissionInfo, gridNoPaddingClass } from \"@webiny/app-admin/components/Permissions\";\nimport { Form } from \"@webiny/form\";\nimport { Elevation } from \"@webiny/ui/Elevation\";\nimport { Typography } from \"@webiny/ui/Typography\";\nimport { SecurityPermission } from \"@webiny/app-security/types\";\n\nconst t = i18n.ns(\"app-security-admin-users/plugins/permissionRenderer\");\n\nconst SECURITY = \"security\";\nconst SECURITY_FULL_ACCESS = `${SECURITY}.*`;\nconst SECURITY_GROUP_ACCESS = `${SECURITY}.group`;\nconst SECURITY_API_KEY_ACCESS = `${SECURITY}.apiKey`;\nconst FULL_ACCESS = \"full\";\nconst NO_ACCESS = \"no\";\nconst CUSTOM_ACCESS = \"custom\";\n\ninterface SecurityPermissionsProps {\n value: SecurityPermission[];\n onChange: (value: SecurityPermission[]) => void;\n}\nexport const SecurityPermissions: React.FC<SecurityPermissionsProps> = ({ value, onChange }) => {\n const onFormChange = useCallback(\n data => {\n let newValue: SecurityPermission[] = [];\n if (Array.isArray(value)) {\n // Let's just filter out the `security*` permission objects, it's easier to build new ones from scratch.\n newValue = value.filter(item => !item.name.startsWith(SECURITY));\n }\n\n const permissions = [];\n if (data.accessLevel === FULL_ACCESS) {\n permissions.push({ name: SECURITY_FULL_ACCESS });\n } else if (data.accessLevel === CUSTOM_ACCESS) {\n if (data.groupAccessScope === FULL_ACCESS) {\n permissions.push({ name: SECURITY_GROUP_ACCESS });\n }\n\n if (data.apiKeyAccessScope === FULL_ACCESS) {\n permissions.push({ name: SECURITY_API_KEY_ACCESS });\n }\n }\n\n if (permissions && permissions.length) {\n newValue.push(...permissions);\n }\n\n onChange(newValue);\n },\n [value]\n );\n\n const formData = useMemo(() => {\n if (!Array.isArray(value)) {\n return { accessLevel: NO_ACCESS };\n }\n\n const hasFullAccess = value.find(\n item => item.name === SECURITY_FULL_ACCESS || item.name === \"*\"\n );\n\n if (hasFullAccess) {\n return { accessLevel: FULL_ACCESS };\n }\n\n const permissions = value.filter(item => item.name.startsWith(SECURITY));\n if (permissions.length === 0) {\n return { accessLevel: NO_ACCESS };\n }\n\n const data = {\n accessLevel: CUSTOM_ACCESS,\n groupAccessScope: NO_ACCESS,\n apiKeyAccessScope: NO_ACCESS\n };\n\n const hasGroupAccess = permissions.find(item => item.name === SECURITY_GROUP_ACCESS);\n if (hasGroupAccess) {\n data.groupAccessScope = FULL_ACCESS;\n }\n\n const hasApiKeyAccess = permissions.find(item => item.name === SECURITY_API_KEY_ACCESS);\n if (hasApiKeyAccess) {\n data.apiKeyAccessScope = FULL_ACCESS;\n }\n\n return data;\n }, []);\n\n return (\n <Form data={formData} onChange={onFormChange}>\n {({ data, Bind }) => {\n return (\n <Fragment>\n <Grid className={gridNoPaddingClass}>\n <Cell span={6}>\n <PermissionInfo title={t`Access Level`} />\n </Cell>\n <Cell span={6}>\n <Bind name={\"accessLevel\"}>\n <Select label={t`Access Level`}>\n <option value={NO_ACCESS}>{t`No access`}</option>\n <option value={FULL_ACCESS}>{t`Full access`}</option>\n <option value={CUSTOM_ACCESS}>{t`Custom access`}</option>\n </Select>\n </Bind>\n </Cell>\n </Grid>\n {data.accessLevel === CUSTOM_ACCESS && (\n <React.Fragment>\n <Elevation z={1} style={{ marginTop: 10 }}>\n <Grid>\n <Cell span={12}>\n <Typography use={\"overline\"}>{t`API Keys`}</Typography>\n </Cell>\n <Cell span={12}>\n <Bind name={\"apiKeyAccessScope\"}>\n <Select label={t`Access Scope`}>\n <option\n value={NO_ACCESS}\n >{t`No access`}</option>\n <option\n value={FULL_ACCESS}\n >{t`Full access`}</option>\n </Select>\n </Bind>\n </Cell>\n </Grid>\n </Elevation>\n <Elevation z={1} style={{ marginTop: 10 }}>\n <Grid>\n <Cell span={12}>\n <Typography use={\"overline\"}>{t`Groups`}</Typography>\n </Cell>\n <Cell span={12}>\n <Bind name={\"groupAccessScope\"}>\n <Select label={t`Access Scope`}>\n <option\n value={NO_ACCESS}\n >{t`No access`}</option>\n <option\n value={FULL_ACCESS}\n >{t`Full access`}</option>\n </Select>\n </Bind>\n </Cell>\n </Grid>\n </Elevation>\n </React.Fragment>\n )}\n </Fragment>\n );\n }}\n </Form>\n );\n};\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["index.tsx"],"names":["React","i18n","AccordionItem","ReactComponent","SecurityIcon","SecurityPermissions","PermissionRendererPlugin","t","ns","render","props"],"mappings":";;;;AAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,SAASC,IAAT,QAAqB,kBAArB;AACA,SAASC,aAAT,QAA8B,sBAA9B;AACA,SAASC,cAAc,IAAIC,YAA3B,QAA+C,2DAA/C;AACA,SAASC,mBAAT;AACA,SAASC,wBAAT,QAAyC,oDAAzC;AAEA,IAAMC,CAAC,GAAGN,IAAI,CAACO,EAAL,CAAQ,qDAAR,CAAV;AAEA,eAAe,IAAIF,wBAAJ,CAA6B;AACxCG,EAAAA,MADwC,kBACjCC,KADiC,EAC1B;AACV,wBACI,oBAAC,aAAD;AACI,MAAA,IAAI,eAAE,oBAAC,YAAD,OADV;AAEI,MAAA,KAAK,EAAEH,CAAF,6EAFT;AAGI,MAAA,WAAW,EAAEA,CAAF,8GAHf;AAII,qBAAa;AAJjB,oBAMI,oBAAC,mBAAD,EAAyBG,KAAzB,CANJ,CADJ;AAUH;AAZuC,CAA7B,CAAf","sourcesContent":["import React from \"react\";\nimport { i18n } from \"@webiny/app/i18n\";\nimport { AccordionItem } from \"@webiny/ui/Accordion\";\nimport { ReactComponent as SecurityIcon } from \"@webiny/app-admin/assets/icons/baseline-security-24px.svg\";\nimport { SecurityPermissions } from \"./SecurityPermissions\";\nimport { PermissionRendererPlugin } from \"@webiny/app-admin/plugins/PermissionRendererPlugin\";\n\nconst t = i18n.ns(\"app-security-admin-users/plugins/permissionRenderer\");\n\nexport default new PermissionRendererPlugin({\n render(props) {\n return (\n <AccordionItem\n icon={<SecurityIcon />}\n title={t`Security`}\n description={t`Manage Security app access permissions.`}\n data-testid={\"permission.security\"}\n >\n <SecurityPermissions {...props} />\n </AccordionItem>\n );\n }\n});\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["routes.tsx"],"names":["React","Helmet","Route","AdminLayout","SecureRoute","Groups","ApiKeys","Permission","plugins","name","type","route"],"mappings":"AAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,OAAOC,MAAP,MAAmB,cAAnB;AACA,SAASC,KAAT,QAAsB,sBAAtB;AACA,SAASC,WAAT,QAA4B,0CAA5B;AACA,SAASC,WAAT,QAA4B,iCAA5B;AAEA,SAASC,MAAT;AACA,SAASC,OAAT;AACA,SAASC,UAAT;AAEA,IAAMC,OAAsB,GAAG,CAC3B;AACIC,EAAAA,IAAI,EAAE,uBADV;AAEIC,EAAAA,IAAI,EAAE,OAFV;AAGIC,EAAAA,KAAK,eACD,oBAAC,KAAD;AACI,IAAA,KAAK,MADT;AAEI,IAAA,IAAI,EAAE,2BAFV;AAGI,IAAA,MAAM,EAAE;AAAA,0BACJ,oBAAC,WAAD;AAAa,QAAA,UAAU,EAAEJ,UAAU,CAACF;AAApC,sBACI,oBAAC,WAAD,qBACI,oBAAC,MAAD;AAAQ,QAAA,KAAK,EAAE;AAAf,QADJ,eAEI,oBAAC,MAAD,OAFJ,CADJ,CADI;AAAA;AAHZ;AAJR,CAD2B,EAmB3B;AACII,EAAAA,IAAI,EAAE,yBADV;AAEIC,EAAAA,IAAI,EAAE,OAFV;AAGIC,EAAAA,KAAK,eACD,oBAAC,KAAD;AACI,IAAA,KAAK,MADT;AAEI,IAAA,IAAI,EAAE,6BAFV;AAGI,IAAA,MAAM,EAAE;AAAA,0BACJ,oBAAC,WAAD;AAAa,QAAA,UAAU,EAAEJ,UAAU,CAACD;AAApC,sBACI,oBAAC,WAAD;AAAa,QAAA,KAAK,EAAE;AAApB,sBACI,oBAAC,OAAD,OADJ,CADJ,CADI;AAAA;AAHZ;AAJR,CAnB2B,CAA/B;AAsCA,eAAeE,OAAf","sourcesContent":["import React from \"react\";\nimport Helmet from \"react-helmet\";\nimport { Route } from \"@webiny/react-router\";\nimport { AdminLayout } from \"@webiny/app-admin/components/AdminLayout\";\nimport { SecureRoute } from \"@webiny/app-security/components\";\nimport { RoutePlugin } from \"@webiny/app/types\";\nimport { Groups } from \"~/ui/views/Groups\";\nimport { ApiKeys } from \"~/ui/views/ApiKeys\";\nimport { Permission } from \"./constants\";\n\nconst plugins: RoutePlugin[] = [\n {\n name: \"route-security-groups\",\n type: \"route\",\n route: (\n <Route\n exact\n path={\"/access-management/groups\"}\n render={() => (\n <SecureRoute permission={Permission.Groups}>\n <AdminLayout>\n <Helmet title={\"Access Management - Groups\"} />\n <Groups />\n </AdminLayout>\n </SecureRoute>\n )}\n />\n )\n },\n {\n name: \"route-security-api-keys\",\n type: \"route\",\n route: (\n <Route\n exact\n path={\"/access-management/api-keys\"}\n render={() => (\n <SecureRoute permission={Permission.ApiKeys}>\n <AdminLayout title={\"Access Management - API Keys\"}>\n <ApiKeys />\n </AdminLayout>\n </SecureRoute>\n )}\n />\n )\n }\n];\n\nexport default plugins;\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["secureRouteError.tsx"],"names":["React","NotAuthorizedError","plugin","type","name","render"],"mappings":"AAAA,OAAO,KAAKA,KAAZ,MAAuB,OAAvB;AAEA,SAASC,kBAAT;AAIA,IAAMC,MAA8B,GAAG;AACnCC,EAAAA,IAAI,EAAE,oBAD6B;AAEnCC,EAAAA,IAAI,EAAE,oBAF6B;AAGnCC,EAAAA,MAHmC,oBAGN;AACzB,wBAAO,oBAAC,kBAAD,OAAP;AACH;AALkC,CAAvC;AAQA,eAAeH,MAAf","sourcesContent":["import * as React from \"react\";\nimport { Plugin } from \"@webiny/plugins/types\";\nimport { NotAuthorizedError } from \"~/components/NotAuthorizedError\";\n\ntype SecureRouteErrorPlugin = Plugin & { render: () => React.ReactNode };\n\nconst plugin: SecureRouteErrorPlugin = {\n type: \"secure-route-error\",\n name: \"secure-route-error\",\n render(): React.ReactElement {\n return <NotAuthorizedError />;\n }\n};\n\nexport default plugin;\n"]}
|
package/types.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { SecurityPermission } from "@webiny/app-security/types";
|
|
2
|
+
export interface Group {
|
|
3
|
+
id: string;
|
|
4
|
+
name: string;
|
|
5
|
+
description: string;
|
|
6
|
+
slug: string;
|
|
7
|
+
system?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export interface ApiKey {
|
|
10
|
+
id: string;
|
|
11
|
+
token: string;
|
|
12
|
+
name: string;
|
|
13
|
+
description: string;
|
|
14
|
+
permissions: SecurityPermission[];
|
|
15
|
+
}
|
package/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/types.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[]}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import { InputElement } from "@webiny/app-admin/ui/elements/form/InputElement";
|
|
3
|
+
import { FormFieldElementRenderProps } from "@webiny/app-admin/ui/elements/form/FormFieldElement";
|
|
3
4
|
export declare class GroupAutocompleteElement extends InputElement {
|
|
4
|
-
render(
|
|
5
|
+
render(props: FormFieldElementRenderProps): React.ReactElement;
|
|
5
6
|
}
|
|
@@ -18,13 +18,26 @@ export var GroupAutocompleteElement = /*#__PURE__*/function (_InputElement) {
|
|
|
18
18
|
|
|
19
19
|
_createClass(GroupAutocompleteElement, [{
|
|
20
20
|
key: "render",
|
|
21
|
-
value: function render(
|
|
22
|
-
var formProps =
|
|
23
|
-
var
|
|
24
|
-
Bind =
|
|
21
|
+
value: function render(props) {
|
|
22
|
+
var formProps = props.formProps;
|
|
23
|
+
var _ref = formProps,
|
|
24
|
+
Bind = _ref.Bind;
|
|
25
|
+
var validators = this.config.validators;
|
|
26
|
+
/**
|
|
27
|
+
* TODO @ts-refactor @bruno
|
|
28
|
+
* Figure out what can validators be.
|
|
29
|
+
*/
|
|
30
|
+
|
|
31
|
+
if (validators && typeof validators !== "function") {
|
|
32
|
+
console.log("packages/app-security-access-management/src/ui/elements/GroupAutocompleteElement.tsx validators is set but not a function.");
|
|
33
|
+
console.log(validators);
|
|
34
|
+
}
|
|
35
|
+
|
|
25
36
|
return /*#__PURE__*/React.createElement(Bind, {
|
|
26
37
|
name: this.id,
|
|
27
|
-
validators:
|
|
38
|
+
validators: typeof validators === "function" ? validators({
|
|
39
|
+
formProps: formProps
|
|
40
|
+
}) : []
|
|
28
41
|
}, /*#__PURE__*/React.createElement(GroupAutocomplete, {
|
|
29
42
|
label: "Group"
|
|
30
43
|
}));
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["GroupAutocompleteElement.tsx"],"names":["React","InputElement","GroupAutocomplete","GroupAutocompleteElement","props","formProps","Bind","validators","config","console","log","id"],"mappings":";;;;AAAA,OAAOA,KAAP,MAAkB,OAAlB;AAEA,SAASC,YAAT,QAA6B,iDAA7B;AACA,SAASC,iBAAT;AAGA,WAAaC,wBAAb;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA,WACI,gBAAuBC,KAAvB,EAA+E;AAC3E,UAAQC,SAAR,GAAsBD,KAAtB,CAAQC,SAAR;AACA,iBAAiBA,SAAjB;AAAA,UAAQC,IAAR,QAAQA,IAAR;AACA,UAAMC,UAAU,GAAG,KAAKC,MAAL,CAAYD,UAA/B;AACA;AACR;AACA;AACA;;AACQ,UAAIA,UAAU,IAAI,OAAOA,UAAP,KAAsB,UAAxC,EAAoD;AAChDE,QAAAA,OAAO,CAACC,GAAR,CACI,4HADJ;AAGAD,QAAAA,OAAO,CAACC,GAAR,CAAYH,UAAZ;AACH;;AACD,0BACI,oBAAC,IAAD;AACI,QAAA,IAAI,EAAE,KAAKI,EADf;AAEI,QAAA,UAAU,EAAE,OAAOJ,UAAP,KAAsB,UAAtB,GAAmCA,UAAU,CAAC;AAAEF,UAAAA,SAAS,EAATA;AAAF,SAAD,CAA7C,GAA+D;AAF/E,sBAII,oBAAC,iBAAD;AAAmB,QAAA,KAAK,EAAE;AAA1B,QAJJ,CADJ;AAQH;AAvBL;;AAAA;AAAA,EAA8CJ,YAA9C","sourcesContent":["import React from \"react\";\nimport { FormRenderPropParams } from \"@webiny/form\";\nimport { InputElement } from \"@webiny/app-admin/ui/elements/form/InputElement\";\nimport { GroupAutocomplete } from \"~/components/GroupAutocomplete\";\nimport { FormFieldElementRenderProps } from \"@webiny/app-admin/ui/elements/form/FormFieldElement\";\n\nexport class GroupAutocompleteElement extends InputElement {\n public override render(props: FormFieldElementRenderProps): React.ReactElement {\n const { formProps } = props;\n const { Bind } = formProps as FormRenderPropParams;\n const validators = this.config.validators;\n /**\n * TODO @ts-refactor @bruno\n * Figure out what can validators be.\n */\n if (validators && typeof validators !== \"function\") {\n console.log(\n \"packages/app-security-access-management/src/ui/elements/GroupAutocompleteElement.tsx validators is set but not a function.\"\n );\n console.log(validators);\n }\n return (\n <Bind\n name={this.id}\n validators={typeof validators === \"function\" ? validators({ formProps }) : []}\n >\n <GroupAutocomplete label={\"Group\"} />\n </Bind>\n );\n }\n}\n"]}
|
|
@@ -36,8 +36,7 @@ var ButtonWrapper = /*#__PURE__*/styled("div", {
|
|
|
36
36
|
display: "flex",
|
|
37
37
|
justifyContent: "space-between"
|
|
38
38
|
});
|
|
39
|
-
|
|
40
|
-
var ApiKeyForm = function ApiKeyForm() {
|
|
39
|
+
export var ApiKeyForm = function ApiKeyForm() {
|
|
41
40
|
var _useRouter = useRouter(),
|
|
42
41
|
location = _useRouter.location,
|
|
43
42
|
history = _useRouter.history;
|
|
@@ -236,9 +235,9 @@ var ApiKeyForm = function ApiKeyForm() {
|
|
|
236
235
|
return history.push("/access-management/api-keys");
|
|
237
236
|
}
|
|
238
237
|
}, t(_templateObject9 || (_templateObject9 = _taggedTemplateLiteral(["Cancel"])))), /*#__PURE__*/React.createElement(ButtonPrimary, {
|
|
239
|
-
onClick:
|
|
238
|
+
onClick: function onClick(ev) {
|
|
239
|
+
form.submit(ev);
|
|
240
|
+
}
|
|
240
241
|
}, t(_templateObject10 || (_templateObject10 = _taggedTemplateLiteral(["Save API key"])))))));
|
|
241
242
|
});
|
|
242
|
-
};
|
|
243
|
-
|
|
244
|
-
export default ApiKeyForm;
|
|
243
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["ApiKeyForm.tsx"],"names":["React","useCallback","useMutation","useQuery","get","useRouter","i18n","Form","Grid","Cell","Input","ButtonDefault","ButtonIcon","ButtonPrimary","CopyButton","CircularProgress","FormElementMessage","Permissions","validation","SimpleForm","SimpleFormFooter","SimpleFormContent","SimpleFormHeader","Typography","useSnackbar","pickDataForAPI","GQL","SnackbarAction","isEmpty","EmptyView","ReactComponent","AddIcon","styled","t","ns","ButtonWrapper","display","justifyContent","ApiKeyForm","location","history","showSnackbar","newEntry","URLSearchParams","search","id","getQuery","READ_API_KEY","variables","skip","onCompleted","data","error","security","apiKey","push","message","CREATE_API_KEY","refetchQueries","query","LIST_API_KEYS","create","createMutation","UPDATE_API_KEY","update","updateMutation","loading","find","item","onSubmit","permissions","length","timeout","dismissesOnAction","action","isUpdate","createdOn","operation","args","response","showEmptyView","form","Bind","name","token","background","padding","paddingLeft","lineHeight","verticalAlign","position","right","bind","ev","submit"],"mappings":"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","sourcesContent":["import React, { useCallback } from \"react\";\nimport { useMutation, useQuery } from \"@apollo/react-hooks\";\nimport get from \"lodash/get\";\nimport { useRouter } from \"@webiny/react-router\";\nimport { i18n } from \"@webiny/app/i18n\";\nimport { Form } from \"@webiny/form\";\nimport { Grid, Cell } from \"@webiny/ui/Grid\";\nimport { Input } from \"@webiny/ui/Input\";\nimport { ButtonDefault, ButtonIcon, ButtonPrimary, CopyButton } from \"@webiny/ui/Button\";\nimport { CircularProgress } from \"@webiny/ui/Progress\";\nimport { FormElementMessage } from \"@webiny/ui/FormElementMessage\";\nimport { Permissions } from \"@webiny/app-admin/components/Permissions\";\nimport { validation } from \"@webiny/validation\";\nimport {\n SimpleForm,\n SimpleFormFooter,\n SimpleFormContent,\n SimpleFormHeader\n} from \"@webiny/app-admin/components/SimpleForm\";\nimport { Typography } from \"@webiny/ui/Typography\";\nimport { useSnackbar } from \"@webiny/app-admin/hooks/useSnackbar\";\nimport { pickDataForAPI } from \"./utils\";\nimport * as GQL from \"./graphql\";\nimport { SnackbarAction } from \"@webiny/ui/Snackbar\";\nimport isEmpty from \"lodash/isEmpty\";\nimport EmptyView from \"@webiny/app-admin/components/EmptyView\";\nimport { ReactComponent as AddIcon } from \"@webiny/app-admin/assets/icons/add-18px.svg\";\nimport styled from \"@emotion/styled\";\nimport { ApiKey } from \"~/types\";\n\nconst t = i18n.ns(\"app-security-admin-users/admin/api-keys/form\");\n\nconst ButtonWrapper = styled(\"div\")({\n display: \"flex\",\n justifyContent: \"space-between\"\n});\nexport interface ApiKeyFormProps {\n // TODO @ts-refactor delete and go up the tree and sort it out\n [key: string]: any;\n}\nexport const ApiKeyForm: React.FC<ApiKeyFormProps> = () => {\n const { location, history } = useRouter();\n const { showSnackbar } = useSnackbar();\n const newEntry = new URLSearchParams(location.search).get(\"new\") === \"true\";\n const id = new URLSearchParams(location.search).get(\"id\");\n\n const getQuery = useQuery(GQL.READ_API_KEY, {\n variables: { id },\n skip: !id,\n onCompleted: data => {\n if (!data) {\n return;\n }\n\n const { error } = data.security.apiKey;\n if (error) {\n history.push(\"/access-management/api-keys\");\n showSnackbar(error.message);\n }\n }\n });\n\n const [create, createMutation] = useMutation(GQL.CREATE_API_KEY, {\n refetchQueries: [{ query: GQL.LIST_API_KEYS }]\n });\n\n const [update, updateMutation] = useMutation(GQL.UPDATE_API_KEY, {\n refetchQueries: [{ query: GQL.LIST_API_KEYS }]\n });\n\n const loading = [getQuery, createMutation, updateMutation].find(item => item.loading);\n\n const onSubmit = useCallback(\n async data => {\n if (!data.permissions || !data.permissions.length) {\n showSnackbar(t`You must configure permissions before saving!`, {\n timeout: 60000,\n dismissesOnAction: true,\n action: <SnackbarAction label={\"OK\"} />\n });\n return;\n }\n\n const isUpdate = data.createdOn;\n const [operation, args] = isUpdate\n ? [update, { variables: { id: data.id, data: pickDataForAPI(data) } }]\n : [create, { variables: { data: pickDataForAPI(data) } }];\n\n const response = await operation(args);\n\n const { error } = response.data.security.apiKey;\n if (error) {\n return showSnackbar(error.message);\n }\n\n const { id } = response.data.security.apiKey.data;\n\n !isUpdate && history.push(`/access-management/api-keys?id=${id}`);\n showSnackbar(t`API key saved successfully.`);\n },\n [id]\n );\n\n const data: ApiKey[] = get(getQuery, \"data.security.apiKey.data\", {});\n\n const showEmptyView = !newEntry && !loading && isEmpty(data);\n // Render \"No content\" selected view.\n if (showEmptyView) {\n return (\n <EmptyView\n title={t`Click on the left side list to display API key details or create a...`}\n action={\n <ButtonDefault\n data-testid=\"new-record-button\"\n onClick={() => history.push(\"/access-management/api-keys?new=true\")}\n >\n <ButtonIcon icon={<AddIcon />} /> {t`New API Key`}\n </ButtonDefault>\n }\n />\n );\n }\n\n return (\n <Form data={data} onSubmit={onSubmit}>\n {({ data, form, Bind }) => {\n return (\n <SimpleForm>\n {loading && <CircularProgress />}\n <SimpleFormHeader title={data.name ? data.name : \"Untitled\"} />\n <SimpleFormContent>\n <Grid>\n <Cell span={12}>\n <Bind name=\"name\" validators={validation.create(\"required\")}>\n <Input label={t`Name`} />\n </Bind>\n </Cell>\n </Grid>\n <Grid>\n <Cell span={12}>\n <Bind\n name=\"description\"\n validators={validation.create(\"required\")}\n >\n <Input label={t`Description`} rows={4} />\n </Bind>\n </Cell>\n </Grid>\n <Grid>\n <Cell span={12}>\n <div>\n <Typography use={\"subtitle1\"}>{t`Token`}</Typography>\n {data.token ? (\n <div\n style={{\n background: \"var(--mdc-theme-background)\",\n padding: \"8px\",\n paddingLeft: \"16px\"\n }}\n >\n <span\n style={{\n lineHeight: \"48px\",\n verticalAlign: \"middle\"\n }}\n >\n {data.token}\n </span>\n <span\n style={{ position: \"absolute\", right: \"32px\" }}\n >\n <CopyButton\n value={data.token}\n onCopy={() =>\n showSnackbar(\"Successfully copied!\")\n }\n />\n </span>\n </div>\n ) : (\n <FormElementMessage>\n Your token will be shown once you submit the form.\n </FormElementMessage>\n )}\n </div>\n </Cell>\n </Grid>\n <Grid>\n <Cell span={12}>\n <Typography use={\"subtitle1\"}>{t`Permissions`}</Typography>\n </Cell>\n <Cell span={12}>\n <Bind name={\"permissions\"} defaultValue={[]}>\n {bind => <Permissions id={data.id || \"new\"} {...bind} />}\n </Bind>\n </Cell>\n </Grid>\n </SimpleFormContent>\n <SimpleFormFooter>\n <ButtonWrapper>\n <ButtonDefault\n onClick={() => history.push(\"/access-management/api-keys\")}\n >{t`Cancel`}</ButtonDefault>\n <ButtonPrimary\n onClick={ev => {\n form.submit(ev);\n }}\n >{t`Save API key`}</ButtonPrimary>\n </ButtonWrapper>\n </SimpleFormFooter>\n </SimpleForm>\n );\n }}\n </Form>\n );\n};\n"]}
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { ApiKeysDataListProps } from "./ApiKeysDataList";
|
|
3
|
+
import { ApiKeyFormProps } from "./ApiKeyForm";
|
|
4
|
+
export interface ApiKeysProps {
|
|
5
|
+
listProps?: ApiKeysDataListProps;
|
|
6
|
+
formProps?: ApiKeyFormProps;
|
|
7
|
+
}
|
|
8
|
+
export declare const ApiKeys: React.FC<ApiKeysProps>;
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
2
|
import { SplitView, LeftPanel, RightPanel } from "@webiny/app-admin/components/SplitView";
|
|
3
|
-
import ApiKeysDataList from "./ApiKeysDataList";
|
|
4
|
-
import ApiKeyForm from "./ApiKeyForm";
|
|
5
|
-
|
|
6
|
-
var
|
|
7
|
-
|
|
8
|
-
listProps = _ref.listProps
|
|
3
|
+
import { ApiKeysDataList } from "./ApiKeysDataList";
|
|
4
|
+
import { ApiKeyForm } from "./ApiKeyForm";
|
|
5
|
+
export var ApiKeys = function ApiKeys(_ref) {
|
|
6
|
+
var _ref$formProps = _ref.formProps,
|
|
7
|
+
formProps = _ref$formProps === void 0 ? {} : _ref$formProps,
|
|
8
|
+
_ref$listProps = _ref.listProps,
|
|
9
|
+
listProps = _ref$listProps === void 0 ? {} : _ref$listProps;
|
|
9
10
|
return /*#__PURE__*/React.createElement(SplitView, null, /*#__PURE__*/React.createElement(LeftPanel, null, /*#__PURE__*/React.createElement(ApiKeysDataList, listProps)), /*#__PURE__*/React.createElement(RightPanel, null, /*#__PURE__*/React.createElement(ApiKeyForm, formProps)));
|
|
10
|
-
};
|
|
11
|
-
|
|
12
|
-
export default ApiKeys;
|
|
11
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["ApiKeys.tsx"],"names":["React","SplitView","LeftPanel","RightPanel","ApiKeysDataList","ApiKeyForm","ApiKeys","formProps","listProps"],"mappings":"AAAA,OAAO,KAAKA,KAAZ,MAAuB,OAAvB;AACA,SAASC,SAAT,EAAoBC,SAApB,EAA+BC,UAA/B,QAAiD,wCAAjD;AACA,SAASC,eAAT;AACA,SAASC,UAAT;AAMA,OAAO,IAAMC,OAA+B,GAAG,SAAlCA,OAAkC,OAAwC;AAAA,4BAArCC,SAAqC;AAAA,MAArCA,SAAqC,+BAAzB,EAAyB;AAAA,4BAArBC,SAAqB;AAAA,MAArBA,SAAqB,+BAAT,EAAS;AACnF,sBACI,oBAAC,SAAD,qBACI,oBAAC,SAAD,qBACI,oBAAC,eAAD,EAAqBA,SAArB,CADJ,CADJ,eAII,oBAAC,UAAD,qBACI,oBAAC,UAAD,EAAgBD,SAAhB,CADJ,CAJJ,CADJ;AAUH,CAXM","sourcesContent":["import * as React from \"react\";\nimport { SplitView, LeftPanel, RightPanel } from \"@webiny/app-admin/components/SplitView\";\nimport { ApiKeysDataList, ApiKeysDataListProps } from \"./ApiKeysDataList\";\nimport { ApiKeyForm, ApiKeyFormProps } from \"./ApiKeyForm\";\n\nexport interface ApiKeysProps {\n listProps?: ApiKeysDataListProps;\n formProps?: ApiKeyFormProps;\n}\nexport const ApiKeys: React.FC<ApiKeysProps> = ({ formProps = {}, listProps = {} }) => {\n return (\n <SplitView>\n <LeftPanel>\n <ApiKeysDataList {...listProps} />\n </LeftPanel>\n <RightPanel>\n <ApiKeyForm {...formProps} />\n </RightPanel>\n </SplitView>\n );\n};\n"]}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import React from "react";
|
|
2
|
+
export interface ApiKeysDataListProps {
|
|
3
|
+
[key: string]: any;
|
|
4
|
+
}
|
|
5
|
+
export declare const ApiKeysDataList: React.FC<ApiKeysDataListProps>;
|
|
@@ -21,37 +21,28 @@ import { useConfirmationDialog } from "@webiny/app-admin/hooks/useConfirmationDi
|
|
|
21
21
|
import * as GQL from "./graphql";
|
|
22
22
|
import { ReactComponent as AddIcon } from "@webiny/app-admin/assets/icons/add-18px.svg";
|
|
23
23
|
import { ReactComponent as FilterIcon } from "@webiny/app-admin/assets/icons/filter-24px.svg";
|
|
24
|
-
import {
|
|
24
|
+
import { deserializeSorters } from "../utils";
|
|
25
25
|
var t = i18n.ns("app-security/admin/groups/data-list");
|
|
26
26
|
var SORTERS = [{
|
|
27
27
|
label: t(_templateObject || (_templateObject = _taggedTemplateLiteral(["Newest to oldest"]))),
|
|
28
|
-
|
|
29
|
-
createdOn: "desc"
|
|
30
|
-
}
|
|
28
|
+
sorter: "createdOn_DESC"
|
|
31
29
|
}, {
|
|
32
30
|
label: t(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["Oldest to newest"]))),
|
|
33
|
-
|
|
34
|
-
createdOn: "asc"
|
|
35
|
-
}
|
|
31
|
+
sorter: "createdOn_ASC"
|
|
36
32
|
}, {
|
|
37
33
|
label: t(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["Name A-Z"]))),
|
|
38
|
-
|
|
39
|
-
name: "asc"
|
|
40
|
-
}
|
|
34
|
+
sorter: "name_ASC"
|
|
41
35
|
}, {
|
|
42
36
|
label: t(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral(["Name Z-A"]))),
|
|
43
|
-
|
|
44
|
-
name: "desc"
|
|
45
|
-
}
|
|
37
|
+
sorter: "name_DESC"
|
|
46
38
|
}];
|
|
47
|
-
|
|
48
|
-
var ApiKeysDataList = function ApiKeysDataList() {
|
|
39
|
+
export var ApiKeysDataList = function ApiKeysDataList() {
|
|
49
40
|
var _useState = useState(""),
|
|
50
41
|
_useState2 = _slicedToArray(_useState, 2),
|
|
51
42
|
filter = _useState2[0],
|
|
52
43
|
setFilter = _useState2[1];
|
|
53
44
|
|
|
54
|
-
var _useState3 = useState(
|
|
45
|
+
var _useState3 = useState(SORTERS[0].sorter),
|
|
55
46
|
_useState4 = _slicedToArray(_useState3, 2),
|
|
56
47
|
sort = _useState4[0],
|
|
57
48
|
setSort = _useState4[1];
|
|
@@ -78,11 +69,10 @@ var ApiKeysDataList = function ApiKeysDataList() {
|
|
|
78
69
|
return list;
|
|
79
70
|
}
|
|
80
71
|
|
|
81
|
-
var
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
value = _Object$entries2$[1];
|
|
72
|
+
var _deserializeSorters = deserializeSorters(sort),
|
|
73
|
+
_deserializeSorters2 = _slicedToArray(_deserializeSorters, 2),
|
|
74
|
+
key = _deserializeSorters2[0],
|
|
75
|
+
value = _deserializeSorters2[1];
|
|
86
76
|
|
|
87
77
|
return orderBy(list, [key], [value]);
|
|
88
78
|
}, [sort]);
|
|
@@ -153,10 +143,10 @@ var ApiKeysDataList = function ApiKeysDataList() {
|
|
|
153
143
|
label: t(_templateObject6 || (_templateObject6 = _taggedTemplateLiteral(["Sort by"])))
|
|
154
144
|
}, SORTERS.map(function (_ref3) {
|
|
155
145
|
var label = _ref3.label,
|
|
156
|
-
|
|
146
|
+
sorter = _ref3.sorter;
|
|
157
147
|
return /*#__PURE__*/React.createElement("option", {
|
|
158
148
|
key: label,
|
|
159
|
-
value:
|
|
149
|
+
value: sorter
|
|
160
150
|
}, label);
|
|
161
151
|
})))));
|
|
162
152
|
}, [sort]);
|
|
@@ -204,6 +194,4 @@ var ApiKeysDataList = function ApiKeysDataList() {
|
|
|
204
194
|
}))));
|
|
205
195
|
}));
|
|
206
196
|
});
|
|
207
|
-
};
|
|
208
|
-
|
|
209
|
-
export default ApiKeysDataList;
|
|
197
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["ApiKeysDataList.tsx"],"names":["React","useCallback","useMemo","useState","orderBy","i18n","DataList","ScrollList","ListItem","ListItemText","ListItemTextSecondary","ListItemMeta","ListActions","DataListModalOverlayAction","DataListModalOverlay","ButtonIcon","ButtonSecondary","DeleteIcon","Cell","Grid","Select","useRouter","SearchUI","useSnackbar","useQuery","useMutation","useConfirmationDialog","GQL","ReactComponent","AddIcon","FilterIcon","deserializeSorters","t","ns","SORTERS","label","sorter","ApiKeysDataList","filter","setFilter","sort","setSort","history","location","showSnackbar","dataTestId","showConfirmation","filterAPIKey","description","name","toLowerCase","includes","sortKeys","list","key","value","LIST_API_KEYS","listResponse","data","listLoading","loading","DELETE_API_KEY","refetchQueries","query","deleteIt","deleteLoading","security","apiKeys","id","URLSearchParams","search","get","deleteItem","item","variables","error","deleteApiKey","message","push","groupsDataListModalOverlay","map","filteredData"],"mappings":"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","sourcesContent":["import React, { useCallback, useMemo, useState } from \"react\";\nimport orderBy from \"lodash/orderBy\";\nimport { i18n } from \"@webiny/app/i18n\";\nimport {\n DataList,\n ScrollList,\n ListItem,\n ListItemText,\n ListItemTextSecondary,\n ListItemMeta,\n ListActions,\n DataListModalOverlayAction,\n DataListModalOverlay\n} from \"@webiny/ui/List\";\nimport { ButtonIcon, ButtonSecondary } from \"@webiny/ui/Button\";\nimport { DeleteIcon } from \"@webiny/ui/List/DataList/icons\";\nimport { Cell, Grid } from \"@webiny/ui/Grid\";\nimport { Select } from \"@webiny/ui/Select\";\nimport { useRouter } from \"@webiny/react-router\";\nimport SearchUI from \"@webiny/app-admin/components/SearchUI\";\nimport { useSnackbar } from \"@webiny/app-admin/hooks/useSnackbar\";\nimport { useQuery, useMutation } from \"@apollo/react-hooks\";\nimport { useConfirmationDialog } from \"@webiny/app-admin/hooks/useConfirmationDialog\";\nimport * as GQL from \"./graphql\";\nimport { ReactComponent as AddIcon } from \"@webiny/app-admin/assets/icons/add-18px.svg\";\nimport { ReactComponent as FilterIcon } from \"@webiny/app-admin/assets/icons/filter-24px.svg\";\nimport { deserializeSorters } from \"../utils\";\nimport { ApiKey } from \"~/types\";\n\nconst t = i18n.ns(\"app-security/admin/groups/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 // TODO @ts-refactor delete and go up the tree and sort it out\n [key: string]: any;\n}\nexport const ApiKeysDataList: React.FC<ApiKeysDataListProps> = () => {\n const [filter, setFilter] = useState(\"\");\n const [sort, setSort] = useState<string>(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 filterAPIKey = useCallback(\n ({ description, name }) => {\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 => {\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.LIST_API_KEYS);\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 const id = new URLSearchParams(location.search).get(\"id\");\n\n const deleteItem = useCallback(\n item => {\n showConfirmation(async () => {\n const { data } = await deleteIt({\n variables: item\n });\n\n const { error } = data.security.deleteApiKey;\n if (error) {\n return showSnackbar(error.message);\n }\n\n showSnackbar(t`Api key \"{id}\" deleted.`({ id: item.id }));\n\n if (id === item.id) {\n history.push(`/access-management/api-keys`);\n }\n });\n },\n [id]\n );\n\n const groupsDataListModalOverlay = useMemo(\n () => (\n <DataListModalOverlay>\n <Grid>\n <Cell span={12}>\n <Select value={sort} onChange={setSort} label={t`Sort by`}>\n {SORTERS.map(({ label, sorter }) => {\n return (\n <option key={label} value={sorter}>\n {label}\n </option>\n );\n })}\n </Select>\n </Cell>\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 <ButtonSecondary\n data-testid=\"new-record-button\"\n onClick={() => history.push(\"/access-management/api-keys?new=true\")}\n >\n <ButtonIcon icon={<AddIcon />} /> {t`New API Key`}\n </ButtonSecondary>\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={groupsDataListModalOverlay}\n modalOverlayAction={\n <DataListModalOverlayAction\n icon={<FilterIcon />}\n data-testid={\"default-data-list.filter\"}\n />\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 === id}>\n <ListItemText\n onClick={() =>\n history.push(`/access-management/api-keys?id=${item.id}`)\n }\n >\n {item.name}\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"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export declare const LIST_API_KEYS:
|
|
2
|
-
export declare const READ_API_KEY:
|
|
3
|
-
export declare const CREATE_API_KEY:
|
|
4
|
-
export declare const UPDATE_API_KEY:
|
|
5
|
-
export declare const DELETE_API_KEY:
|
|
1
|
+
export declare const LIST_API_KEYS: import("graphql").DocumentNode;
|
|
2
|
+
export declare const READ_API_KEY: import("graphql").DocumentNode;
|
|
3
|
+
export declare const CREATE_API_KEY: import("graphql").DocumentNode;
|
|
4
|
+
export declare const UPDATE_API_KEY: import("graphql").DocumentNode;
|
|
5
|
+
export declare const DELETE_API_KEY: import("graphql").DocumentNode;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["graphql.ts"],"names":["gql","fields","LIST_API_KEYS","READ_API_KEY","CREATE_API_KEY","UPDATE_API_KEY","DELETE_API_KEY"],"mappings":";;;;AAAA,OAAOA,GAAP,MAAgB,aAAhB;AAEA,IAAMC,MAAM,qFAAZ;AASA,OAAO,IAAMC,aAAa,GAAGF,GAAH,8PAKLC,MALK,CAAnB;AAYP,OAAO,IAAME,YAAY,GAAGH,GAAH,iXAKHC,MALG,CAAlB;AAgBP,OAAO,IAAMG,cAAc,GAAGJ,GAAH,2aAKLC,MALK,CAApB;AAiBP,OAAO,IAAMI,cAAc,GAAGL,GAAH,8bAKLC,MALK,CAApB;AAiBP,OAAO,IAAMK,cAAc,GAAGN,GAAH,mUAApB","sourcesContent":["import gql from \"graphql-tag\";\n\nconst fields = `\n id\n name\n description\n token\n permissions\n createdOn\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"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export
|
|
1
|
+
export * from "./ApiKeys";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export
|
|
1
|
+
export * from "./ApiKeys";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["index.ts"],"names":[],"mappings":"AAAA","sourcesContent":["export * from \"./ApiKeys\";\n"]}
|
|
@@ -1 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
import { ApiKey } from "../../../types";
|
|
2
|
+
export declare const pickDataForAPI: (data: ApiKey) => Pick<ApiKey, "name" | "description" | "permissions">;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["utils.ts"],"names":["pickDataForAPI","data"],"mappings":";;AAGA,OAAO,IAAMA,cAAc,GAAG,SAAjBA,cAAiB,CAC1BC,IAD0B;AAAA,2BAGvB,MAAKA,IAAL,EAAW,CAAC,MAAD,EAAS,aAAT,EAAwB,aAAxB,CAAX,CAHuB;AAAA,CAAvB","sourcesContent":["import { pick } from \"lodash\";\nimport { ApiKey } from \"~/types\";\n\nexport const pickDataForAPI = (\n data: ApiKey\n): Pick<ApiKey, \"name\" | \"description\" | \"permissions\"> => ({\n ...pick(data, [\"name\", \"description\", \"permissions\"])\n});\n"]}
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { GroupsDataListProps } from "./GroupsDataList";
|
|
3
|
+
import { GroupsFormProps } from "./GroupsForm";
|
|
4
|
+
export interface GroupsProps {
|
|
5
|
+
listProps?: GroupsDataListProps;
|
|
6
|
+
formProps?: GroupsFormProps;
|
|
7
|
+
}
|
|
8
|
+
export declare const Groups: React.FC<GroupsProps>;
|
|
@@ -1,12 +1,11 @@
|
|
|
1
|
-
import
|
|
1
|
+
import React from "react";
|
|
2
2
|
import { SplitView, LeftPanel, RightPanel } from "@webiny/app-admin/components/SplitView";
|
|
3
|
-
import GroupsDataList from "./GroupsDataList";
|
|
4
|
-
import GroupsForm from "./GroupsForm";
|
|
5
|
-
|
|
6
|
-
var
|
|
7
|
-
|
|
8
|
-
listProps = _ref.listProps
|
|
3
|
+
import { GroupsDataList } from "./GroupsDataList";
|
|
4
|
+
import { GroupsForm } from "./GroupsForm";
|
|
5
|
+
export var Groups = function Groups(_ref) {
|
|
6
|
+
var _ref$formProps = _ref.formProps,
|
|
7
|
+
formProps = _ref$formProps === void 0 ? {} : _ref$formProps,
|
|
8
|
+
_ref$listProps = _ref.listProps,
|
|
9
|
+
listProps = _ref$listProps === void 0 ? {} : _ref$listProps;
|
|
9
10
|
return /*#__PURE__*/React.createElement(SplitView, null, /*#__PURE__*/React.createElement(LeftPanel, null, /*#__PURE__*/React.createElement(GroupsDataList, listProps)), /*#__PURE__*/React.createElement(RightPanel, null, /*#__PURE__*/React.createElement(GroupsForm, formProps)));
|
|
10
|
-
};
|
|
11
|
-
|
|
12
|
-
export default Groups;
|
|
11
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["Groups.tsx"],"names":["React","SplitView","LeftPanel","RightPanel","GroupsDataList","GroupsForm","Groups","formProps","listProps"],"mappings":"AAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,SAASC,SAAT,EAAoBC,SAApB,EAA+BC,UAA/B,QAAiD,wCAAjD;AACA,SAASC,cAAT;AACA,SAASC,UAAT;AAMA,OAAO,IAAMC,MAA6B,GAAG,SAAhCA,MAAgC,OAAwC;AAAA,4BAArCC,SAAqC;AAAA,MAArCA,SAAqC,+BAAzB,EAAyB;AAAA,4BAArBC,SAAqB;AAAA,MAArBA,SAAqB,+BAAT,EAAS;AACjF,sBACI,oBAAC,SAAD,qBACI,oBAAC,SAAD,qBACI,oBAAC,cAAD,EAAoBA,SAApB,CADJ,CADJ,eAII,oBAAC,UAAD,qBACI,oBAAC,UAAD,EAAgBD,SAAhB,CADJ,CAJJ,CADJ;AAUH,CAXM","sourcesContent":["import React from \"react\";\nimport { SplitView, LeftPanel, RightPanel } from \"@webiny/app-admin/components/SplitView\";\nimport { GroupsDataList, GroupsDataListProps } from \"./GroupsDataList\";\nimport { GroupsForm, GroupsFormProps } from \"./GroupsForm\";\n\nexport interface GroupsProps {\n listProps?: GroupsDataListProps;\n formProps?: GroupsFormProps;\n}\nexport const Groups: React.FC<GroupsProps> = ({ formProps = {}, listProps = {} }) => {\n return (\n <SplitView>\n <LeftPanel>\n <GroupsDataList {...listProps} />\n </LeftPanel>\n <RightPanel>\n <GroupsForm {...formProps} />\n </RightPanel>\n </SplitView>\n );\n};\n"]}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import React from "react";
|
|
2
|
+
export interface GroupsDataListProps {
|
|
3
|
+
[key: string]: any;
|
|
4
|
+
}
|
|
5
|
+
export declare const GroupsDataList: React.FC<GroupsDataListProps>;
|
|
@@ -22,37 +22,28 @@ import { Select } from "@webiny/ui/Select";
|
|
|
22
22
|
import SearchUI from "@webiny/app-admin/components/SearchUI";
|
|
23
23
|
import { ReactComponent as AddIcon } from "@webiny/app-admin/assets/icons/add-18px.svg";
|
|
24
24
|
import { ReactComponent as FilterIcon } from "@webiny/app-admin/assets/icons/filter-24px.svg";
|
|
25
|
-
import { deserializeSorters
|
|
25
|
+
import { deserializeSorters } from "../utils";
|
|
26
26
|
var t = i18n.ns("app-security/admin/groups/data-list");
|
|
27
27
|
var SORTERS = [{
|
|
28
28
|
label: t(_templateObject || (_templateObject = _taggedTemplateLiteral(["Newest to oldest"]))),
|
|
29
|
-
|
|
30
|
-
createdOn: "desc"
|
|
31
|
-
}
|
|
29
|
+
sorter: "createdOn_DESC"
|
|
32
30
|
}, {
|
|
33
31
|
label: t(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["Oldest to newest"]))),
|
|
34
|
-
|
|
35
|
-
createdOn: "asc"
|
|
36
|
-
}
|
|
32
|
+
sorter: "createdOn_ASC"
|
|
37
33
|
}, {
|
|
38
34
|
label: t(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["Name A-Z"]))),
|
|
39
|
-
|
|
40
|
-
name: "asc"
|
|
41
|
-
}
|
|
35
|
+
sorter: "name_ASC"
|
|
42
36
|
}, {
|
|
43
37
|
label: t(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral(["Name Z-A"]))),
|
|
44
|
-
|
|
45
|
-
name: "desc"
|
|
46
|
-
}
|
|
38
|
+
sorter: "name_DESC"
|
|
47
39
|
}];
|
|
48
|
-
|
|
49
|
-
var GroupsDataList = function GroupsDataList() {
|
|
40
|
+
export var GroupsDataList = function GroupsDataList() {
|
|
50
41
|
var _useState = useState(""),
|
|
51
42
|
_useState2 = _slicedToArray(_useState, 2),
|
|
52
43
|
filter = _useState2[0],
|
|
53
44
|
setFilter = _useState2[1];
|
|
54
45
|
|
|
55
|
-
var _useState3 = useState(
|
|
46
|
+
var _useState3 = useState(SORTERS[0].sorter),
|
|
56
47
|
_useState4 = _slicedToArray(_useState3, 2),
|
|
57
48
|
sort = _useState4[0],
|
|
58
49
|
setSort = _useState4[1];
|
|
@@ -95,13 +86,12 @@ var GroupsDataList = function GroupsDataList() {
|
|
|
95
86
|
return groups;
|
|
96
87
|
}
|
|
97
88
|
|
|
98
|
-
var
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
value = _Object$entries2$[1];
|
|
89
|
+
var _deserializeSorters = deserializeSorters(sort),
|
|
90
|
+
_deserializeSorters2 = _slicedToArray(_deserializeSorters, 2),
|
|
91
|
+
key = _deserializeSorters2[0],
|
|
92
|
+
sortBy = _deserializeSorters2[1];
|
|
103
93
|
|
|
104
|
-
return orderBy(groups, [key], [
|
|
94
|
+
return orderBy(groups, [key], [sortBy]);
|
|
105
95
|
}, [sort]);
|
|
106
96
|
var deleteItem = useCallback(function (item) {
|
|
107
97
|
showConfirmation( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
|
|
@@ -154,10 +144,10 @@ var GroupsDataList = function GroupsDataList() {
|
|
|
154
144
|
label: t(_templateObject6 || (_templateObject6 = _taggedTemplateLiteral(["Sort by"])))
|
|
155
145
|
}, SORTERS.map(function (_ref3) {
|
|
156
146
|
var label = _ref3.label,
|
|
157
|
-
|
|
147
|
+
sorter = _ref3.sorter;
|
|
158
148
|
return /*#__PURE__*/React.createElement("option", {
|
|
159
149
|
key: label,
|
|
160
|
-
value:
|
|
150
|
+
value: sorter
|
|
161
151
|
}, label);
|
|
162
152
|
})))));
|
|
163
153
|
}, [sort]);
|
|
@@ -210,6 +200,4 @@ var GroupsDataList = function GroupsDataList() {
|
|
|
210
200
|
})))));
|
|
211
201
|
}));
|
|
212
202
|
});
|
|
213
|
-
};
|
|
214
|
-
|
|
215
|
-
export default GroupsDataList;
|
|
203
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["GroupsDataList.tsx"],"names":["React","useCallback","useMemo","useState","orderBy","i18n","DataList","ScrollList","ListItem","ListItemText","ListItemTextSecondary","ListItemMeta","ListActions","DataListModalOverlayAction","DataListModalOverlay","DeleteIcon","useRouter","useSnackbar","useQuery","useMutation","useConfirmationDialog","LIST_GROUPS","DELETE_GROUP","Tooltip","ButtonIcon","ButtonSecondary","Cell","Grid","Select","SearchUI","ReactComponent","AddIcon","FilterIcon","deserializeSorters","t","ns","SORTERS","label","sorter","GroupsDataList","filter","setFilter","sort","setSort","history","location","showSnackbar","dataTestId","showConfirmation","listResponse","data","listLoading","loading","refetchQueries","query","deleteIt","deleteLoading","security","groups","id","URLSearchParams","search","get","filterGroup","name","slug","description","toLowerCase","includes","sortGroups","key","sortBy","deleteItem","item","variables","error","deleteGroup","message","push","groupsDataListModalOverlay","map","filteredData","groupList","system"],"mappings":"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","sourcesContent":["import React, { useCallback, useMemo, useState } from \"react\";\nimport orderBy from \"lodash/orderBy\";\nimport { i18n } from \"@webiny/app/i18n\";\nimport {\n DataList,\n ScrollList,\n ListItem,\n ListItemText,\n ListItemTextSecondary,\n ListItemMeta,\n ListActions,\n DataListModalOverlayAction,\n DataListModalOverlay\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 { LIST_GROUPS, DELETE_GROUP } from \"./graphql\";\nimport { Tooltip } from \"@webiny/ui/Tooltip\";\nimport { ButtonIcon, ButtonSecondary } from \"@webiny/ui/Button\";\nimport { Cell, Grid } from \"@webiny/ui/Grid\";\nimport { Select } from \"@webiny/ui/Select\";\nimport SearchUI from \"@webiny/app-admin/components/SearchUI\";\nimport { ReactComponent as AddIcon } from \"@webiny/app-admin/assets/icons/add-18px.svg\";\nimport { ReactComponent as FilterIcon } from \"@webiny/app-admin/assets/icons/filter-24px.svg\";\nimport { deserializeSorters } from \"../utils\";\nimport { Group } from \"~/types\";\n\nconst t = i18n.ns(\"app-security/admin/groups/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 GroupsDataListProps {\n // TODO @ts-refactor delete and go up the tree and sort it out\n [key: string]: any;\n}\nexport const GroupsDataList: React.FC<GroupsDataListProps> = () => {\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(LIST_GROUPS);\n\n const [deleteIt, { loading: deleteLoading }] = useMutation(DELETE_GROUP, {\n refetchQueries: [{ query: LIST_GROUPS }]\n });\n\n const data = listLoading && !listResponse ? [] : listResponse.security.groups.data;\n const id = new URLSearchParams(location.search).get(\"id\");\n\n const filterGroup = useCallback(\n ({ name, slug, description }) => {\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 sortGroups = useCallback(\n groups => {\n if (!sort) {\n return groups;\n }\n const [key, sortBy] = deserializeSorters(sort);\n return orderBy(groups, [key], [sortBy]);\n },\n [sort]\n );\n\n const deleteItem = useCallback(\n item => {\n showConfirmation(async () => {\n const { data } = await deleteIt({\n variables: item\n });\n\n const { error } = data.security.deleteGroup;\n if (error) {\n return showSnackbar(error.message);\n }\n\n showSnackbar(t`Group \"{slug}\" deleted.`({ slug: item.slug }));\n\n if (id === item.id) {\n history.push(`/access-management/groups`);\n }\n });\n },\n [id]\n );\n\n const groupsDataListModalOverlay = useMemo(\n () => (\n <DataListModalOverlay>\n <Grid>\n <Cell span={12}>\n <Select value={sort} onChange={setSort} label={t`Sort by`}>\n {SORTERS.map(({ label, sorter }) => {\n return (\n <option key={label} value={sorter}>\n {label}\n </option>\n );\n })}\n </Select>\n </Cell>\n </Grid>\n </DataListModalOverlay>\n ),\n [sort]\n );\n\n const filteredData = filter === \"\" ? data : data.filter(filterGroup);\n const groupList = sortGroups(filteredData);\n\n return (\n <DataList\n title={t`Groups`}\n actions={\n <ButtonSecondary\n data-testid=\"new-record-button\"\n onClick={() => history.push(\"/access-management/groups?new=true\")}\n >\n <ButtonIcon icon={<AddIcon />} /> {t`New Group`}\n </ButtonSecondary>\n }\n data={groupList}\n loading={listLoading || deleteLoading}\n search={\n <SearchUI value={filter} onChange={setFilter} inputPlaceholder={t`Search Groups`} />\n }\n modalOverlay={groupsDataListModalOverlay}\n modalOverlayAction={\n <DataListModalOverlayAction\n icon={<FilterIcon />}\n data-testid={\"default-data-list.filter\"}\n />\n }\n >\n {({ data }: { data: Group[] }) => (\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/groups?id=${item.id}`)\n }\n >\n {item.name}\n <ListItemTextSecondary>{item.description}</ListItemTextSecondary>\n </ListItemText>\n\n <ListItemMeta>\n <ListActions>\n {!item.system ? (\n <DeleteIcon\n onClick={() => deleteItem(item)}\n data-testid={\"default-data-list.delete\"}\n />\n ) : (\n <Tooltip\n placement={\"bottom\"}\n content={<span>{t`You can't delete this group.`}</span>}\n >\n <DeleteIcon disabled />\n </Tooltip>\n )}\n </ListActions>\n </ListItemMeta>\n </ListItem>\n ))}\n </ScrollList>\n )}\n </DataList>\n );\n};\n"]}
|
|
@@ -36,8 +36,7 @@ var ButtonWrapper = /*#__PURE__*/styled("div", {
|
|
|
36
36
|
display: "flex",
|
|
37
37
|
justifyContent: "space-between"
|
|
38
38
|
});
|
|
39
|
-
|
|
40
|
-
var GroupForm = function GroupForm() {
|
|
39
|
+
export var GroupsForm = function GroupsForm() {
|
|
41
40
|
var _useRouter = useRouter(),
|
|
42
41
|
location = _useRouter.location,
|
|
43
42
|
history = _useRouter.history;
|
|
@@ -226,9 +225,9 @@ var GroupForm = function GroupForm() {
|
|
|
226
225
|
return history.push("/access-management/groups");
|
|
227
226
|
}
|
|
228
227
|
}, t(_templateObject9 || (_templateObject9 = _taggedTemplateLiteral(["Cancel"])))), /*#__PURE__*/React.createElement(ButtonPrimary, {
|
|
229
|
-
onClick:
|
|
228
|
+
onClick: function onClick(ev) {
|
|
229
|
+
form.submit(ev);
|
|
230
|
+
}
|
|
230
231
|
}, t(_templateObject10 || (_templateObject10 = _taggedTemplateLiteral(["Save group"])))))));
|
|
231
232
|
});
|
|
232
|
-
};
|
|
233
|
-
|
|
234
|
-
export default GroupForm;
|
|
233
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["GroupsForm.tsx"],"names":["React","useCallback","useMutation","useQuery","styled","pick","get","useRouter","i18n","Form","Grid","Cell","Input","Alert","ButtonDefault","ButtonIcon","ButtonPrimary","CircularProgress","validation","SimpleForm","SimpleFormFooter","SimpleFormContent","SimpleFormHeader","Typography","Permissions","useSnackbar","CREATE_GROUP","LIST_GROUPS","READ_GROUP","UPDATE_GROUP","SnackbarAction","isEmpty","EmptyView","ReactComponent","AddIcon","t","ns","ButtonWrapper","display","justifyContent","GroupsForm","location","history","showSnackbar","newGroup","URLSearchParams","search","id","getQuery","variables","skip","onCompleted","data","error","security","group","push","message","refetchQueries","query","create","createMutation","update","updateMutation","loading","find","item","onSubmit","permissions","length","timeout","dismissesOnAction","action","isUpdate","createdOn","operation","args","response","systemGroup","slug","showEmptyView","form","Bind","name","Boolean","bind","ev","submit"],"mappings":";;;;;;;AAAA,OAAOA,KAAP,IAAgBC,WAAhB,QAAmC,OAAnC;AACA,SAASC,WAAT,EAAsBC,QAAtB,QAAsC,qBAAtC;AACA,OAAOC,MAAP,MAAmB,iBAAnB;AACA,OAAOC,IAAP,MAAiB,aAAjB;AACA,OAAOC,GAAP,MAAgB,YAAhB;AACA,SAASC,SAAT,QAA0B,sBAA1B;AACA,SAASC,IAAT,QAAqB,kBAArB;AACA,SAASC,IAAT,QAAqB,cAArB;AACA,SAASC,IAAT,EAAeC,IAAf,QAA2B,iBAA3B;AACA,SAASC,KAAT,QAAsB,kBAAtB;AACA,SAASC,KAAT,QAAsB,kBAAtB;AACA,SAASC,aAAT,EAAwBC,UAAxB,EAAoCC,aAApC,QAAyD,mBAAzD;AACA,SAASC,gBAAT,QAAiC,qBAAjC;AACA,SAASC,UAAT,QAA2B,oBAA3B;AACA,SACIC,UADJ,EAEIC,gBAFJ,EAGIC,iBAHJ,EAIIC,gBAJJ,QAKO,yCALP;AAMA,SAASC,UAAT,QAA2B,uBAA3B;AACA,SAASC,WAAT,QAA4B,0CAA5B;AACA,SAASC,WAAT,QAA4B,qCAA5B;AACA,SAASC,YAAT,EAAuBC,WAAvB,EAAoCC,UAApC,EAAgDC,YAAhD;AACA,SAASC,cAAT,QAA+B,qBAA/B;AACA,OAAOC,OAAP,MAAoB,gBAApB;AACA,OAAOC,SAAP,MAAsB,wCAAtB;AACA,SAASC,cAAc,IAAIC,OAA3B,QAA0C,6CAA1C;AAEA,IAAMC,CAAC,GAAG3B,IAAI,CAAC4B,EAAL,CAAQ,gCAAR,CAAV;AAEA,IAAMC,aAAa,gBAAGjC,MAAH,CAAU,KAAV;AAAA;AAAA;AAAA,GAAiB;AAChCkC,EAAAA,OAAO,EAAE,MADuB;AAEhCC,EAAAA,cAAc,EAAE;AAFgB,CAAjB,CAAnB;AASA,OAAO,IAAMC,UAAqC,GAAG,SAAxCA,UAAwC,GAAM;AACvD,mBAA8BjC,SAAS,EAAvC;AAAA,MAAQkC,QAAR,cAAQA,QAAR;AAAA,MAAkBC,OAAlB,cAAkBA,OAAlB;;AACA,qBAAyBjB,WAAW,EAApC;AAAA,MAAQkB,YAAR,gBAAQA,YAAR;;AACA,MAAMC,QAAQ,GAAG,IAAIC,eAAJ,CAAoBJ,QAAQ,CAACK,MAA7B,EAAqCxC,GAArC,CAAyC,KAAzC,MAAoD,MAArE;AACA,MAAMyC,EAAE,GAAG,IAAIF,eAAJ,CAAoBJ,QAAQ,CAACK,MAA7B,EAAqCxC,GAArC,CAAyC,IAAzC,CAAX;AAEA,MAAM0C,QAAQ,GAAG7C,QAAQ,CAACyB,UAAD,EAAa;AAClCqB,IAAAA,SAAS,EAAE;AAAEF,MAAAA,EAAE,EAAFA;AAAF,KADuB;AAElCG,IAAAA,IAAI,EAAE,CAACH,EAF2B;AAGlCI,IAAAA,WAAW,EAAE,qBAAAC,IAAI,EAAI;AACjB,UAAI,CAACA,IAAL,EAAW;AACP;AACH;;AAED,UAAQC,KAAR,GAAkBD,IAAI,CAACE,QAAL,CAAcC,KAAhC,CAAQF,KAAR;;AACA,UAAIA,KAAJ,EAAW;AACPX,QAAAA,OAAO,CAACc,IAAR,CAAa,2BAAb;AACAb,QAAAA,YAAY,CAACU,KAAK,CAACI,OAAP,CAAZ;AACH;AACJ;AAbiC,GAAb,CAAzB;;AAgBA,qBAAiCvD,WAAW,CAACwB,YAAD,EAAe;AACvDgC,IAAAA,cAAc,EAAE,CAAC;AAAEC,MAAAA,KAAK,EAAEhC;AAAT,KAAD;AADuC,GAAf,CAA5C;AAAA;AAAA,MAAOiC,MAAP;AAAA,MAAeC,cAAf;;AAIA,sBAAiC3D,WAAW,CAAC2B,YAAD,EAAe;AACvD6B,IAAAA,cAAc,EAAE,CAAC;AAAEC,MAAAA,KAAK,EAAEhC;AAAT,KAAD;AADuC,GAAf,CAA5C;AAAA;AAAA,MAAOmC,MAAP;AAAA,MAAeC,cAAf;;AAIA,MAAMC,OAAO,GAAG,CAAChB,QAAD,EAAWa,cAAX,EAA2BE,cAA3B,EAA2CE,IAA3C,CAAgD,UAAAC,IAAI;AAAA,WAAIA,IAAI,CAACF,OAAT;AAAA,GAApD,CAAhB;AAEA,MAAMG,QAAQ,GAAGlE,WAAW;AAAA,wEACxB,iBAAMmD,IAAN;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA,oBACQ,CAACA,IAAI,CAACgB,WAAN,IAAqB,CAAChB,IAAI,CAACgB,WAAL,CAAiBC,MAD/C;AAAA;AAAA;AAAA;;AAEQ1B,cAAAA,YAAY,CAACR,CAAD,oHAAmD;AAC3DmC,gBAAAA,OAAO,EAAE,KADkD;AAE3DC,gBAAAA,iBAAiB,EAAE,IAFwC;AAG3DC,gBAAAA,MAAM,eAAE,oBAAC,cAAD;AAAgB,kBAAA,KAAK,EAAE;AAAvB;AAHmD,eAAnD,CAAZ;AAFR;;AAAA;AAUUC,cAAAA,QAVV,GAUqBrB,IAAI,CAACsB,SAV1B;AAAA,sBAW8BD,QAAQ,GAC5B,CACIX,MADJ,EAEI;AACIb,gBAAAA,SAAS,EAAE;AACPF,kBAAAA,EAAE,EAAEK,IAAI,CAACL,EADF;AAEPK,kBAAAA,IAAI,EAAE/C,IAAI,CAAC+C,IAAD,EAAO,CAAC,MAAD,EAAS,aAAT,EAAwB,aAAxB,CAAP;AAFH;AADf,eAFJ,CAD4B,GAU5B,CACIQ,MADJ,EAEI;AACIX,gBAAAA,SAAS,EAAE;AACPG,kBAAAA,IAAI,EAAE/C,IAAI,CAAC+C,IAAD,EAAO,CAAC,MAAD,EAAS,MAAT,EAAiB,aAAjB,EAAgC,aAAhC,CAAP;AADH;AADf,eAFJ,CArBV,oCAWWuB,SAXX,aAWsBC,IAXtB;AAAA;AAAA,qBA8B2BD,SAAS,CAACC,IAAD,CA9BpC;;AAAA;AA8BUC,cAAAA,QA9BV;AAAA,sCAgCmCA,QAAQ,CAACzB,IAAT,CAAcE,QAAd,CAAuBC,KAhC1D,EAgCkBA,KAhClB,yBAgCYH,IAhCZ,EAgCyBC,KAhCzB,yBAgCyBA,KAhCzB;;AAAA,mBAiCQA,KAjCR;AAAA;AAAA;AAAA;;AAAA,+CAkCeV,YAAY,CAACU,KAAK,CAACI,OAAP,CAlC3B;;AAAA;AAqCI,eAACgB,QAAD,IAAa/B,OAAO,CAACc,IAAR,wCAA6CD,KAAK,CAACR,EAAnD,EAAb;AACAJ,cAAAA,YAAY,CAACR,CAAD,iGAAZ;;AAtCJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KADwB;;AAAA;AAAA;AAAA;AAAA,OAyCxB,CAACY,EAAD,CAzCwB,CAA5B;AA4CA,MAAMK,IAAI,GAAGY,OAAO,GAAG,EAAH,GAAQ1D,GAAG,CAAC0C,QAAD,EAAW,0BAAX,EAAuC,EAAvC,CAA/B;AAEA,MAAM8B,WAAW,GAAG1B,IAAI,CAAC2B,IAAL,KAAc,aAAlC;AAEA,MAAMC,aAAa,GAAG,CAACpC,QAAD,IAAa,CAACoB,OAAd,IAAyBjC,OAAO,CAACqB,IAAD,CAAtD,CAhFuD,CAiFvD;;AACA,MAAI4B,aAAJ,EAAmB;AACf,wBACI,oBAAC,SAAD;AACI,MAAA,KAAK,EAAE7C,CAAF,0IADT;AAEI,MAAA,MAAM,eACF,oBAAC,aAAD;AACI,uBAAY,mBADhB;AAEI,QAAA,OAAO,EAAE;AAAA,iBAAMO,OAAO,CAACc,IAAR,CAAa,oCAAb,CAAN;AAAA;AAFb,sBAII,oBAAC,UAAD;AAAY,QAAA,IAAI,eAAE,oBAAC,OAAD;AAAlB,QAJJ,EAKKrB,CALL;AAHR,MADJ;AAcH;;AAED,sBACI,oBAAC,IAAD;AAAM,IAAA,IAAI,EAAEiB,IAAZ;AAAkB,IAAA,QAAQ,EAAEe;AAA5B,KACK,iBAA0B;AAAA,QAAvBf,IAAuB,SAAvBA,IAAuB;AAAA,QAAjB6B,IAAiB,SAAjBA,IAAiB;AAAA,QAAXC,IAAW,SAAXA,IAAW;AACvB,wBACI,oBAAC,UAAD,QACKlB,OAAO,iBAAI,oBAAC,gBAAD,OADhB,eAEI,oBAAC,gBAAD;AAAkB,MAAA,KAAK,EAAEZ,IAAI,CAAC+B,IAAL,GAAY/B,IAAI,CAAC+B,IAAjB,GAAwB;AAAjD,MAFJ,eAGI,oBAAC,iBAAD,qBACI,oBAAC,IAAD,qBACI,oBAAC,IAAD;AAAM,MAAA,IAAI,EAAE;AAAZ,oBACI,oBAAC,IAAD;AACI,MAAA,IAAI,EAAC,MADT;AAEI,MAAA,UAAU,EAAEjE,UAAU,CAAC0C,MAAX,CAAkB,sBAAlB;AAFhB,oBAII,oBAAC,KAAD;AAAO,MAAA,KAAK,EAAEzB,CAAF,2EAAZ;AAAuB,MAAA,QAAQ,EAAE2C;AAAjC,MAJJ,CADJ,CADJ,eASI,oBAAC,IAAD;AAAM,MAAA,IAAI,EAAE;AAAZ,oBACI,oBAAC,IAAD;AACI,MAAA,IAAI,EAAC,MADT;AAEI,MAAA,UAAU,EAAE5D,UAAU,CAAC0C,MAAX,CAAkB,sBAAlB;AAFhB,oBAII,oBAAC,KAAD;AAAO,MAAA,QAAQ,EAAEwB,OAAO,CAAChC,IAAI,CAACL,EAAN,CAAxB;AAAmC,MAAA,KAAK,EAAEZ,CAAF;AAAxC,MAJJ,CADJ,CATJ,CADJ,eAmBI,oBAAC,IAAD,qBACI,oBAAC,IAAD;AAAM,MAAA,IAAI,EAAE;AAAZ,oBACI,oBAAC,IAAD;AACI,MAAA,IAAI,EAAC,aADT;AAEI,MAAA,UAAU,EAAEjB,UAAU,CAAC0C,MAAX,CAAkB,eAAlB;AAFhB,oBAII,oBAAC,KAAD;AACI,MAAA,KAAK,EAAEzB,CAAF,kFADT;AAEI,MAAA,IAAI,EAAE,CAFV;AAGI,MAAA,QAAQ,EAAE2C;AAHd,MAJJ,CADJ,CADJ,CAnBJ,EAiCKA,WAAW,iBACR,oBAAC,IAAD,qBACI,oBAAC,IAAD;AAAM,MAAA,IAAI,EAAE;AAAZ,oBACI,oBAAC,KAAD;AAAO,MAAA,IAAI,EAAE,MAAb;AAAqB,MAAA,KAAK,EAAE;AAA5B,gFADJ,CADJ,CAlCR,EA2CK,CAACA,WAAD,iBACG,oBAAC,IAAD,qBACI,oBAAC,IAAD;AAAM,MAAA,IAAI,EAAE;AAAZ,oBACI,oBAAC,UAAD;AAAY,MAAA,GAAG,EAAE;AAAjB,OAA+B3C,CAA/B,mFADJ,CADJ,eAII,oBAAC,IAAD;AAAM,MAAA,IAAI,EAAE;AAAZ,oBACI,oBAAC,IAAD;AAAM,MAAA,IAAI,EAAE,aAAZ;AAA2B,MAAA,YAAY,EAAE;AAAzC,OACK,UAAAkD,IAAI;AAAA,0BACD,oBAAC,WAAD;AAAa,QAAA,EAAE,EAAEjC,IAAI,CAACL,EAAL,IAAW;AAA5B,SAAuCsC,IAAvC,EADC;AAAA,KADT,CADJ,CAJJ,CA5CR,CAHJ,EA6DKP,WAAW,GAAG,IAAH,gBACR,oBAAC,gBAAD,qBACI,oBAAC,aAAD,qBACI,oBAAC,aAAD;AACI,MAAA,OAAO,EAAE;AAAA,eAAMpC,OAAO,CAACc,IAAR,CAAa,2BAAb,CAAN;AAAA;AADb,OAEErB,CAFF,8EADJ,eAII,oBAAC,aAAD;AACI,MAAA,OAAO,EAAE,iBAAAmD,EAAE,EAAI;AACXL,QAAAA,IAAI,CAACM,MAAL,CAAYD,EAAZ;AACH;AAHL,OAIEnD,CAJF,oFAJJ,CADJ,CA9DR,CADJ;AA8EH,GAhFL,CADJ;AAoFH,CAvLM","sourcesContent":["import React, { useCallback } from \"react\";\nimport { useMutation, useQuery } from \"@apollo/react-hooks\";\nimport styled from \"@emotion/styled\";\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 { Grid, Cell } from \"@webiny/ui/Grid\";\nimport { Input } from \"@webiny/ui/Input\";\nimport { Alert } from \"@webiny/ui/Alert\";\nimport { ButtonDefault, ButtonIcon, ButtonPrimary } from \"@webiny/ui/Button\";\nimport { CircularProgress } from \"@webiny/ui/Progress\";\nimport { validation } from \"@webiny/validation\";\nimport {\n SimpleForm,\n SimpleFormFooter,\n SimpleFormContent,\n SimpleFormHeader\n} from \"@webiny/app-admin/components/SimpleForm\";\nimport { Typography } from \"@webiny/ui/Typography\";\nimport { Permissions } from \"@webiny/app-admin/components/Permissions\";\nimport { useSnackbar } from \"@webiny/app-admin/hooks/useSnackbar\";\nimport { CREATE_GROUP, LIST_GROUPS, READ_GROUP, UPDATE_GROUP } from \"./graphql\";\nimport { SnackbarAction } from \"@webiny/ui/Snackbar\";\nimport isEmpty from \"lodash/isEmpty\";\nimport EmptyView from \"@webiny/app-admin/components/EmptyView\";\nimport { ReactComponent as AddIcon } from \"@webiny/app-admin/assets/icons/add-18px.svg\";\n\nconst t = i18n.ns(\"app-security/admin/groups/form\");\n\nconst ButtonWrapper = styled(\"div\")({\n display: \"flex\",\n justifyContent: \"space-between\"\n});\n\nexport interface GroupsFormProps {\n // TODO @ts-refactor delete and go up the tree and sort it out\n [key: string]: any;\n}\nexport const GroupsForm: React.FC<GroupsFormProps> = () => {\n const { location, history } = useRouter();\n const { showSnackbar } = useSnackbar();\n const newGroup = new URLSearchParams(location.search).get(\"new\") === \"true\";\n const id = new URLSearchParams(location.search).get(\"id\");\n\n const getQuery = useQuery(READ_GROUP, {\n variables: { id },\n skip: !id,\n onCompleted: data => {\n if (!data) {\n return;\n }\n\n const { error } = data.security.group;\n if (error) {\n history.push(\"/access-management/groups\");\n showSnackbar(error.message);\n }\n }\n });\n\n const [create, createMutation] = useMutation(CREATE_GROUP, {\n refetchQueries: [{ query: LIST_GROUPS }]\n });\n\n const [update, updateMutation] = useMutation(UPDATE_GROUP, {\n refetchQueries: [{ query: LIST_GROUPS }]\n });\n\n const loading = [getQuery, createMutation, updateMutation].find(item => item.loading);\n\n const onSubmit = useCallback(\n async data => {\n if (!data.permissions || !data.permissions.length) {\n showSnackbar(t`You must configure permissions before saving!`, {\n timeout: 60000,\n dismissesOnAction: true,\n action: <SnackbarAction label={\"OK\"} />\n });\n return;\n }\n\n const isUpdate = data.createdOn;\n const [operation, args] = isUpdate\n ? [\n update,\n {\n variables: {\n id: data.id,\n data: pick(data, [\"name\", \"description\", \"permissions\"])\n }\n }\n ]\n : [\n create,\n {\n variables: {\n data: pick(data, [\"name\", \"slug\", \"description\", \"permissions\"])\n }\n }\n ];\n\n const response = await operation(args);\n\n const { data: group, error } = response.data.security.group;\n if (error) {\n return showSnackbar(error.message);\n }\n\n !isUpdate && history.push(`/access-management/groups?id=${group.id}`);\n showSnackbar(t`Group saved successfully!`);\n },\n [id]\n );\n\n const data = loading ? {} : get(getQuery, \"data.security.group.data\", {});\n\n const systemGroup = data.slug === \"full-access\";\n\n const showEmptyView = !newGroup && !loading && isEmpty(data);\n // Render \"No content\" selected view.\n if (showEmptyView) {\n return (\n <EmptyView\n title={t`Click on the left side list to display group details or create a...`}\n action={\n <ButtonDefault\n data-testid=\"new-record-button\"\n onClick={() => history.push(\"/access-management/groups?new=true\")}\n >\n <ButtonIcon icon={<AddIcon />} />\n {t`New Group`}\n </ButtonDefault>\n }\n />\n );\n }\n\n return (\n <Form data={data} onSubmit={onSubmit}>\n {({ data, form, Bind }) => {\n return (\n <SimpleForm>\n {loading && <CircularProgress />}\n <SimpleFormHeader title={data.name ? data.name : \"Untitled\"} />\n <SimpleFormContent>\n <Grid>\n <Cell span={6}>\n <Bind\n name=\"name\"\n validators={validation.create(\"required,minLength:3\")}\n >\n <Input label={t`Name`} disabled={systemGroup} />\n </Bind>\n </Cell>\n <Cell span={6}>\n <Bind\n name=\"slug\"\n validators={validation.create(\"required,minLength:3\")}\n >\n <Input disabled={Boolean(data.id)} label={t`Slug`} />\n </Bind>\n </Cell>\n </Grid>\n <Grid>\n <Cell span={12}>\n <Bind\n name=\"description\"\n validators={validation.create(\"maxLength:500\")}\n >\n <Input\n label={t`Description`}\n rows={3}\n disabled={systemGroup}\n />\n </Bind>\n </Cell>\n </Grid>\n {systemGroup && (\n <Grid>\n <Cell span={12}>\n <Alert type={\"info\"} title={\"Permissions are locked\"}>\n This is a protected system group and you can't\n modify its permissions.\n </Alert>\n </Cell>\n </Grid>\n )}\n {!systemGroup && (\n <Grid>\n <Cell span={12}>\n <Typography use={\"subtitle1\"}>{t`Permissions`}</Typography>\n </Cell>\n <Cell span={12}>\n <Bind name={\"permissions\"} defaultValue={[]}>\n {bind => (\n <Permissions id={data.id || \"new\"} {...bind} />\n )}\n </Bind>\n </Cell>\n </Grid>\n )}\n </SimpleFormContent>\n {systemGroup ? null : (\n <SimpleFormFooter>\n <ButtonWrapper>\n <ButtonDefault\n onClick={() => history.push(\"/access-management/groups\")}\n >{t`Cancel`}</ButtonDefault>\n <ButtonPrimary\n onClick={ev => {\n form.submit(ev);\n }}\n >{t`Save group`}</ButtonPrimary>\n </ButtonWrapper>\n </SimpleFormFooter>\n )}\n </SimpleForm>\n );\n }}\n </Form>\n );\n};\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export declare const LIST_GROUPS:
|
|
2
|
-
export declare const READ_GROUP:
|
|
3
|
-
export declare const CREATE_GROUP:
|
|
4
|
-
export declare const UPDATE_GROUP:
|
|
5
|
-
export declare const DELETE_GROUP:
|
|
1
|
+
export declare const LIST_GROUPS: import("graphql").DocumentNode;
|
|
2
|
+
export declare const READ_GROUP: import("graphql").DocumentNode;
|
|
3
|
+
export declare const CREATE_GROUP: import("graphql").DocumentNode;
|
|
4
|
+
export declare const UPDATE_GROUP: import("graphql").DocumentNode;
|
|
5
|
+
export declare const DELETE_GROUP: import("graphql").DocumentNode;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["graphql.ts"],"names":["gql","fields","LIST_GROUPS","READ_GROUP","CREATE_GROUP","UPDATE_GROUP","DELETE_GROUP"],"mappings":";;;;AAAA,OAAOA,GAAP,MAAgB,aAAhB;AAEA,IAAMC,MAAM,gGAAZ;AAUA,OAAO,IAAMC,WAAW,GAAGF,GAAH,4PAKFC,MALE,CAAjB;AAYP,OAAO,IAAME,UAAU,GAAGH,GAAH,yXAKDC,MALC,CAAhB;AAgBP,OAAO,IAAMG,YAAY,GAAGJ,GAAH,6aAKHC,MALG,CAAlB;AAiBP,OAAO,IAAMI,YAAY,GAAGL,GAAH,gcAKHC,MALG,CAAlB;AAiBP,OAAO,IAAMK,YAAY,GAAGN,GAAH,iUAAlB","sourcesContent":["import gql from \"graphql-tag\";\n\nconst fields = `\n id\n name\n slug\n description\n permissions\n system\n createdOn\n`;\n\nexport const LIST_GROUPS = gql`\n query listGroups {\n security {\n groups: listGroups {\n data {\n ${fields}\n }\n }\n }\n }\n`;\n\nexport const READ_GROUP = gql`\n query getGroup($id: ID!) {\n security {\n group: getGroup(where: { id: $id }){\n data {\n ${fields}\n }\n error {\n code\n message\n }\n }\n }\n }\n`;\n\nexport const CREATE_GROUP = gql`\n mutation createGroup($data: SecurityGroupCreateInput!){\n security {\n group: createGroup(data: $data) {\n data {\n ${fields}\n }\n error {\n code\n message\n data\n }\n }\n }\n }\n`;\n\nexport const UPDATE_GROUP = gql`\n mutation updateGroup($id: ID!, $data: SecurityGroupUpdateInput!){\n security {\n group: updateGroup(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_GROUP = gql`\n mutation deleteGroup($id: ID!) {\n security {\n deleteGroup(id: $id) {\n data\n error {\n code\n message\n }\n }\n }\n }\n`;\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export
|
|
1
|
+
export * from "./Groups";
|
package/ui/views/Groups/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export
|
|
1
|
+
export * from "./Groups";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["index.ts"],"names":[],"mappings":"AAAA","sourcesContent":["export * from \"./Groups\";\n"]}
|
package/ui/views/utils.d.ts
CHANGED
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
export declare const deserializeSorters: (data: string) =>
|
|
1
|
+
declare type SortTypes = "asc" | "desc";
|
|
2
|
+
export declare const deserializeSorters: (data: string) => [string, SortTypes];
|
|
3
|
+
export {};
|
package/ui/views/utils.js
CHANGED
|
@@ -1,27 +1,14 @@
|
|
|
1
|
-
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
2
1
|
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
2
|
export var deserializeSorters = function deserializeSorters(data) {
|
|
17
3
|
if (typeof data !== "string") {
|
|
18
4
|
return data;
|
|
19
5
|
}
|
|
20
6
|
|
|
21
|
-
var _ref = data.split("
|
|
7
|
+
var _ref = data.split("_"),
|
|
22
8
|
_ref2 = _slicedToArray(_ref, 2),
|
|
23
|
-
|
|
24
|
-
|
|
9
|
+
field = _ref2[0],
|
|
10
|
+
orderBy = _ref2[1];
|
|
25
11
|
|
|
26
|
-
|
|
12
|
+
var order = String(orderBy).toLowerCase() === "asc" ? "asc" : "desc";
|
|
13
|
+
return [field, order];
|
|
27
14
|
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["utils.ts"],"names":["deserializeSorters","data","split","field","orderBy","order","String","toLowerCase"],"mappings":";AACA,OAAO,IAAMA,kBAAkB,GAAG,SAArBA,kBAAqB,CAACC,IAAD,EAAuC;AACrE,MAAI,OAAOA,IAAP,KAAgB,QAApB,EAA8B;AAC1B,WAAOA,IAAP;AACH;;AACD,aAAyBA,IAAI,CAACC,KAAL,CAAW,GAAX,CAAzB;AAAA;AAAA,MAAOC,KAAP;AAAA,MAAcC,OAAd;;AACA,MAAMC,KAAK,GAAGC,MAAM,CAACF,OAAD,CAAN,CAAgBG,WAAhB,OAAkC,KAAlC,GAA0C,KAA1C,GAAkD,MAAhE;AACA,SAAO,CAACJ,KAAD,EAAQE,KAAR,CAAP;AACH,CAPM","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"]}
|