@webiny/app-security-access-management 5.24.0 → 5.25.0-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/components/GroupAutocomplete/graphql.js.map +1 -0
  2. package/components/GroupAutocomplete/index.js +2 -2
  3. package/components/GroupAutocomplete/index.js.map +1 -0
  4. package/components/NotAuthorizedError/NotAuthorizedError.js.map +1 -0
  5. package/components/NotAuthorizedError/index.js.map +1 -0
  6. package/index.d.ts +1 -1
  7. package/index.js.map +1 -0
  8. package/package.json +13 -13
  9. package/plugins/constants.js.map +1 -0
  10. package/plugins/index.js.map +1 -0
  11. package/plugins/installation.js.map +1 -0
  12. package/plugins/permissionRenderer/SecurityPermissions.js.map +1 -0
  13. package/plugins/permissionRenderer/index.js.map +1 -0
  14. package/plugins/routes.js.map +1 -0
  15. package/plugins/secureRouteError.js.map +1 -0
  16. package/types.js.map +1 -0
  17. package/ui/elements/GroupAutocompleteElement.js +14 -1
  18. package/ui/elements/GroupAutocompleteElement.js.map +1 -0
  19. package/ui/views/ApiKeys/ApiKeyForm.js +3 -1
  20. package/ui/views/ApiKeys/ApiKeyForm.js.map +1 -0
  21. package/ui/views/ApiKeys/ApiKeys.js.map +1 -0
  22. package/ui/views/ApiKeys/ApiKeysDataList.js.map +1 -0
  23. package/ui/views/ApiKeys/graphql.js.map +1 -0
  24. package/ui/views/ApiKeys/index.js.map +1 -0
  25. package/ui/views/ApiKeys/utils.js.map +1 -0
  26. package/ui/views/Groups/Groups.js.map +1 -0
  27. package/ui/views/Groups/GroupsDataList.js.map +1 -0
  28. package/ui/views/Groups/GroupsForm.js +3 -1
  29. package/ui/views/Groups/GroupsForm.js.map +1 -0
  30. package/ui/views/Groups/graphql.js.map +1 -0
  31. package/ui/views/Groups/index.js.map +1 -0
  32. package/ui/views/utils.js.map +1 -0
@@ -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"]}
@@ -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 && !data ? [] : data.security.groups.data;
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 ? null : props.value
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"]}
@@ -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,5 @@
1
1
  import React from "react";
2
- declare const _default: () => any[];
2
+ declare const _default: () => never[];
3
3
  /**
4
4
  * TODO @ts-refactor
5
5
  * Find out why is there empty default export
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.24.0",
3
+ "version": "5.25.0-beta.2",
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.24.0",
19
- "@webiny/app-admin": "5.24.0",
20
- "@webiny/app-security": "5.24.0",
21
- "@webiny/form": "5.24.0",
22
- "@webiny/plugins": "5.24.0",
23
- "@webiny/react-router": "5.24.0",
24
- "@webiny/ui": "5.24.0",
25
- "@webiny/validation": "5.24.0",
18
+ "@webiny/app": "5.25.0-beta.2",
19
+ "@webiny/app-admin": "5.25.0-beta.2",
20
+ "@webiny/app-security": "5.25.0-beta.2",
21
+ "@webiny/form": "5.25.0-beta.2",
22
+ "@webiny/plugins": "5.25.0-beta.2",
23
+ "@webiny/react-router": "5.25.0-beta.2",
24
+ "@webiny/ui": "5.25.0-beta.2",
25
+ "@webiny/validation": "5.25.0-beta.2",
26
26
  "emotion": "10.0.27",
27
27
  "graphql-tag": "2.12.6",
28
28
  "lodash": "4.17.21",
@@ -38,13 +38,13 @@
38
38
  "@babel/preset-react": "^7.16.0",
39
39
  "@babel/preset-typescript": "^7.16.0",
40
40
  "@types/react-helmet": "^6.1.5",
41
- "@webiny/cli": "^5.24.0",
42
- "@webiny/project-utils": "^5.24.0",
41
+ "@webiny/cli": "^5.25.0-beta.2",
42
+ "@webiny/project-utils": "^5.25.0-beta.2",
43
43
  "babel-plugin-emotion": "^9.2.8",
44
44
  "babel-plugin-lodash": "^3.3.4",
45
45
  "rimraf": "^3.0.2",
46
46
  "ttypescript": "^1.5.12",
47
- "typescript": "^4.1.3"
47
+ "typescript": "4.5.5"
48
48
  },
49
49
  "publishConfig": {
50
50
  "access": "public",
@@ -61,5 +61,5 @@
61
61
  ]
62
62
  }
63
63
  },
64
- "gitHead": "be0cbfcaa9247c658c44179af7943cc5d6d71bc7"
64
+ "gitHead": "ed2f22976af47aea0b6b5d638f8afdc39951b014"
65
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"]}
@@ -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":"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","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.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[]}
@@ -22,9 +22,22 @@ export var GroupAutocompleteElement = /*#__PURE__*/function (_InputElement) {
22
22
  var formProps = props.formProps;
23
23
  var _ref = formProps,
24
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: this.config.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"]}
@@ -235,7 +235,9 @@ export var ApiKeyForm = function ApiKeyForm() {
235
235
  return history.push("/access-management/api-keys");
236
236
  }
237
237
  }, t(_templateObject9 || (_templateObject9 = _taggedTemplateLiteral(["Cancel"])))), /*#__PURE__*/React.createElement(ButtonPrimary, {
238
- onClick: form.submit
238
+ onClick: function onClick(ev) {
239
+ form.submit(ev);
240
+ }
239
241
  }, t(_templateObject10 || (_templateObject10 = _taggedTemplateLiteral(["Save API key"])))))));
240
242
  });
241
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"]}
@@ -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"]}
@@ -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"]}
@@ -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"]}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["index.ts"],"names":[],"mappings":"AAAA","sourcesContent":["export * from \"./ApiKeys\";\n"]}
@@ -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"]}
@@ -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"]}
@@ -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"]}
@@ -225,7 +225,9 @@ export var GroupsForm = function GroupsForm() {
225
225
  return history.push("/access-management/groups");
226
226
  }
227
227
  }, t(_templateObject9 || (_templateObject9 = _taggedTemplateLiteral(["Cancel"])))), /*#__PURE__*/React.createElement(ButtonPrimary, {
228
- onClick: form.submit
228
+ onClick: function onClick(ev) {
229
+ form.submit(ev);
230
+ }
229
231
  }, t(_templateObject10 || (_templateObject10 = _taggedTemplateLiteral(["Save group"])))))));
230
232
  });
231
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":"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","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&apos;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"]}
@@ -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"]}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["index.ts"],"names":[],"mappings":"AAAA","sourcesContent":["export * from \"./Groups\";\n"]}
@@ -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"]}