@webiny/app-tenancy 0.0.0-ee-vpcs.549378cf03

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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) Webiny
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,15 @@
1
+ # @webiny/app-security-tenancy
2
+
3
+ [![](https://img.shields.io/npm/dw/@webiny/app-security-tenancy.svg)](https://www.npmjs.com/package/@webiny/app-security-tenancy)
4
+ [![](https://img.shields.io/npm/v/@webiny/app-security-tenancy.svg)](https://www.npmjs.com/package/@webiny/app-security-tenancy)
5
+ [![code style: prettier](https://img.shields.io/badge/code_style-prettier-ff69b4.svg?style=flat-square)](https://github.com/prettier/prettier)
6
+ [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](http://makeapullrequest.com)
7
+
8
+ Adds a Security module in the Admin area. Contains the following
9
+ submodules:
10
+
11
+ - Users
12
+ - Groups
13
+ - Roles
14
+
15
+ Use together with [@webiny/api-security-user-management](../api-security-user-management) package.
package/Tenancy.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ import React from "react";
2
+ export declare const TenancyExtension: React.FC;
3
+ export declare const Tenancy: React.NamedExoticComponent<{}>;
package/Tenancy.js ADDED
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+
5
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
6
+
7
+ Object.defineProperty(exports, "__esModule", {
8
+ value: true
9
+ });
10
+ exports.TenancyExtension = exports.Tenancy = void 0;
11
+
12
+ var _react = _interopRequireWildcard(require("react"));
13
+
14
+ var _plugins = require("@webiny/plugins");
15
+
16
+ var _appAdmin = require("@webiny/app-admin");
17
+
18
+ var _installation = _interopRequireDefault(require("./plugins/installation"));
19
+
20
+ var _Tenancy = require("./contexts/Tenancy");
21
+
22
+ var TenancyProviderHOC = function TenancyProviderHOC(Component) {
23
+ return function TenancyProvider(_ref) {
24
+ var children = _ref.children;
25
+ return /*#__PURE__*/_react.default.createElement(_Tenancy.TenancyProvider, null, /*#__PURE__*/_react.default.createElement(Component, null, children));
26
+ };
27
+ };
28
+
29
+ var TenancyExtension = function TenancyExtension() {
30
+ _plugins.plugins.register(_installation.default);
31
+
32
+ return /*#__PURE__*/_react.default.createElement(_appAdmin.Provider, {
33
+ hoc: TenancyProviderHOC
34
+ });
35
+ };
36
+
37
+ exports.TenancyExtension = TenancyExtension;
38
+ var Tenancy = /*#__PURE__*/(0, _react.memo)(TenancyExtension);
39
+ exports.Tenancy = Tenancy;
package/Tenancy.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"names":["TenancyProviderHOC","Component","TenancyProvider","children","TenancyExtension","plugins","register","installation","Tenancy","memo"],"sources":["Tenancy.tsx"],"sourcesContent":["import React, { memo } from \"react\";\nimport { plugins } from \"@webiny/plugins\";\nimport { Provider } from \"@webiny/app-admin\";\nimport installation from \"./plugins/installation\";\nimport { TenancyProvider as ContextProvider } from \"./contexts/Tenancy\";\n\nconst TenancyProviderHOC = (Component: React.FC): React.FC => {\n return function TenancyProvider({ children }) {\n return (\n <ContextProvider>\n <Component>{children}</Component>\n </ContextProvider>\n );\n };\n};\n\nexport const TenancyExtension: React.FC = () => {\n plugins.register(installation);\n\n return <Provider hoc={TenancyProviderHOC} />;\n};\n\nexport const Tenancy = memo(TenancyExtension);\n"],"mappings":";;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AAEA,IAAMA,kBAAkB,GAAG,SAArBA,kBAAqB,CAACC,SAAD,EAAmC;EAC1D,OAAO,SAASC,eAAT,OAAuC;IAAA,IAAZC,QAAY,QAAZA,QAAY;IAC1C,oBACI,6BAAC,wBAAD,qBACI,6BAAC,SAAD,QAAYA,QAAZ,CADJ,CADJ;EAKH,CAND;AAOH,CARD;;AAUO,IAAMC,gBAA0B,GAAG,SAA7BA,gBAA6B,GAAM;EAC5CC,gBAAA,CAAQC,QAAR,CAAiBC,qBAAjB;;EAEA,oBAAO,6BAAC,kBAAD;IAAU,GAAG,EAAEP;EAAf,EAAP;AACH,CAJM;;;AAMA,IAAMQ,OAAO,gBAAG,IAAAC,WAAA,EAAKL,gBAAL,CAAhB"}
@@ -0,0 +1,12 @@
1
+ import React from "react";
2
+ export interface Tenant {
3
+ id: string;
4
+ name: string;
5
+ }
6
+ export interface TenancyContextValue {
7
+ tenant: string | null;
8
+ setTenant(tenant: string | null): void;
9
+ isMultiTenant: boolean;
10
+ }
11
+ export declare const TenancyContext: React.Context<TenancyContextValue>;
12
+ export declare const TenancyProvider: React.FC;
@@ -0,0 +1,98 @@
1
+ "use strict";
2
+
3
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
4
+
5
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
6
+
7
+ Object.defineProperty(exports, "__esModule", {
8
+ value: true
9
+ });
10
+ exports.TenancyProvider = exports.TenancyContext = void 0;
11
+
12
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
13
+
14
+ var _react = _interopRequireWildcard(require("react"));
15
+
16
+ var _store = _interopRequireDefault(require("store"));
17
+
18
+ var _plugins = require("@webiny/plugins");
19
+
20
+ var _TenantHeaderLinkPlugin = require("@webiny/app/plugins/TenantHeaderLinkPlugin");
21
+
22
+ var _appAdmin = require("@webiny/app-admin");
23
+
24
+ var TenancyContext = /*#__PURE__*/_react.default.createContext({
25
+ tenant: null,
26
+ setTenant: function setTenant() {
27
+ return void 0;
28
+ },
29
+ isMultiTenant: false
30
+ });
31
+
32
+ exports.TenancyContext = TenancyContext;
33
+ var LOCAL_STORAGE_KEY = "webiny_tenant";
34
+
35
+ function loadState() {
36
+ return _store.default.get(LOCAL_STORAGE_KEY) || null;
37
+ }
38
+
39
+ function storeState(state) {
40
+ _store.default.set(LOCAL_STORAGE_KEY, state);
41
+ }
42
+
43
+ var getInitialTenant = function getInitialTenant() {
44
+ // Check if `tenantId` query parameter is set. If it is, it takes precedence over any other source.
45
+ var searchParams = new URLSearchParams(location.search);
46
+ var tenantId = searchParams.get("tenantId");
47
+
48
+ if (tenantId) {
49
+ storeState(tenantId);
50
+ }
51
+
52
+ var currentTenant = loadState() || "root";
53
+
54
+ _plugins.plugins.register(new _TenantHeaderLinkPlugin.TenantHeaderLinkPlugin(currentTenant));
55
+
56
+ return currentTenant;
57
+ };
58
+
59
+ var TenancyProvider = function TenancyProvider(props) {
60
+ var _useState = (0, _react.useState)(getInitialTenant),
61
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
62
+ currentTenant = _useState2[0],
63
+ setTenant = _useState2[1];
64
+
65
+ var _useWcp = (0, _appAdmin.useWcp)(),
66
+ canUseFeature = _useWcp.canUseFeature;
67
+
68
+ var changeTenant = (0, _react.useCallback)(function (tenant) {
69
+ if (!tenant) {
70
+ _store.default.remove(LOCAL_STORAGE_KEY);
71
+
72
+ window.location.pathname = "/";
73
+ }
74
+
75
+ if (!currentTenant) {
76
+ _plugins.plugins.register(new _TenantHeaderLinkPlugin.TenantHeaderLinkPlugin(tenant));
77
+
78
+ setTenant(tenant);
79
+ storeState(tenant);
80
+ return;
81
+ }
82
+
83
+ storeState(tenant);
84
+ window.location.pathname = "/";
85
+ }, [currentTenant]);
86
+ var value = (0, _react.useMemo)(function () {
87
+ return {
88
+ tenant: currentTenant,
89
+ setTenant: changeTenant,
90
+ isMultiTenant: canUseFeature("multiTenancy")
91
+ };
92
+ }, [currentTenant]);
93
+ return /*#__PURE__*/_react.default.createElement(TenancyContext.Provider, {
94
+ value: value
95
+ }, /*#__PURE__*/_react.default.createElement(_react.Fragment, null, props.children));
96
+ };
97
+
98
+ exports.TenancyProvider = TenancyProvider;
@@ -0,0 +1 @@
1
+ {"version":3,"names":["TenancyContext","React","createContext","tenant","setTenant","isMultiTenant","LOCAL_STORAGE_KEY","loadState","localStorage","get","storeState","state","set","getInitialTenant","searchParams","URLSearchParams","location","search","tenantId","currentTenant","plugins","register","TenantHeaderLinkPlugin","TenancyProvider","props","useState","useWcp","canUseFeature","changeTenant","useCallback","remove","window","pathname","value","useMemo","children"],"sources":["Tenancy.tsx"],"sourcesContent":["import React, { useMemo, useCallback, Fragment, useState } from \"react\";\nimport { default as localStorage } from \"store\";\nimport { plugins } from \"@webiny/plugins\";\nimport { TenantHeaderLinkPlugin } from \"@webiny/app/plugins/TenantHeaderLinkPlugin\";\nimport { useWcp } from \"@webiny/app-admin\";\n\nexport interface Tenant {\n id: string;\n name: string;\n}\n\nexport interface TenancyContextValue {\n tenant: string | null;\n setTenant(tenant: string | null): void;\n isMultiTenant: boolean;\n}\n\nexport const TenancyContext = React.createContext<TenancyContextValue>({\n tenant: null,\n setTenant: () => {\n return void 0;\n },\n isMultiTenant: false\n});\n\nconst LOCAL_STORAGE_KEY = \"webiny_tenant\";\n\nfunction loadState(): string | null {\n return localStorage.get(LOCAL_STORAGE_KEY) || null;\n}\n\nfunction storeState(state: string) {\n localStorage.set(LOCAL_STORAGE_KEY, state);\n}\n\nconst getInitialTenant = (): string | null => {\n // Check if `tenantId` query parameter is set. If it is, it takes precedence over any other source.\n const searchParams = new URLSearchParams(location.search);\n const tenantId = searchParams.get(\"tenantId\");\n if (tenantId) {\n storeState(tenantId);\n }\n\n const currentTenant = loadState() || \"root\";\n plugins.register(new TenantHeaderLinkPlugin(currentTenant));\n return currentTenant;\n};\n\nexport const TenancyProvider: React.FC = props => {\n const [currentTenant, setTenant] = useState(getInitialTenant);\n const { canUseFeature } = useWcp();\n\n const changeTenant = useCallback(\n (tenant: string): void => {\n if (!tenant) {\n localStorage.remove(LOCAL_STORAGE_KEY);\n\n window.location.pathname = \"/\";\n }\n\n if (!currentTenant) {\n plugins.register(new TenantHeaderLinkPlugin(tenant));\n setTenant(tenant);\n storeState(tenant);\n return;\n }\n\n storeState(tenant);\n window.location.pathname = \"/\";\n },\n [currentTenant]\n );\n\n const value = useMemo<TenancyContextValue>(\n () => ({\n tenant: currentTenant,\n setTenant: changeTenant,\n isMultiTenant: canUseFeature(\"multiTenancy\")\n }),\n [currentTenant]\n );\n\n return (\n <TenancyContext.Provider value={value}>\n <Fragment>{props.children}</Fragment>\n </TenancyContext.Provider>\n );\n};\n"],"mappings":";;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AAaO,IAAMA,cAAc,gBAAGC,cAAA,CAAMC,aAAN,CAAyC;EACnEC,MAAM,EAAE,IAD2D;EAEnEC,SAAS,EAAE,qBAAM;IACb,OAAO,KAAK,CAAZ;EACH,CAJkE;EAKnEC,aAAa,EAAE;AALoD,CAAzC,CAAvB;;;AAQP,IAAMC,iBAAiB,GAAG,eAA1B;;AAEA,SAASC,SAAT,GAAoC;EAChC,OAAOC,cAAA,CAAaC,GAAb,CAAiBH,iBAAjB,KAAuC,IAA9C;AACH;;AAED,SAASI,UAAT,CAAoBC,KAApB,EAAmC;EAC/BH,cAAA,CAAaI,GAAb,CAAiBN,iBAAjB,EAAoCK,KAApC;AACH;;AAED,IAAME,gBAAgB,GAAG,SAAnBA,gBAAmB,GAAqB;EAC1C;EACA,IAAMC,YAAY,GAAG,IAAIC,eAAJ,CAAoBC,QAAQ,CAACC,MAA7B,CAArB;EACA,IAAMC,QAAQ,GAAGJ,YAAY,CAACL,GAAb,CAAiB,UAAjB,CAAjB;;EACA,IAAIS,QAAJ,EAAc;IACVR,UAAU,CAACQ,QAAD,CAAV;EACH;;EAED,IAAMC,aAAa,GAAGZ,SAAS,MAAM,MAArC;;EACAa,gBAAA,CAAQC,QAAR,CAAiB,IAAIC,8CAAJ,CAA2BH,aAA3B,CAAjB;;EACA,OAAOA,aAAP;AACH,CAXD;;AAaO,IAAMI,eAAyB,GAAG,SAA5BA,eAA4B,CAAAC,KAAK,EAAI;EAC9C,gBAAmC,IAAAC,eAAA,EAASZ,gBAAT,CAAnC;EAAA;EAAA,IAAOM,aAAP;EAAA,IAAsBf,SAAtB;;EACA,cAA0B,IAAAsB,gBAAA,GAA1B;EAAA,IAAQC,aAAR,WAAQA,aAAR;;EAEA,IAAMC,YAAY,GAAG,IAAAC,kBAAA,EACjB,UAAC1B,MAAD,EAA0B;IACtB,IAAI,CAACA,MAAL,EAAa;MACTK,cAAA,CAAasB,MAAb,CAAoBxB,iBAApB;;MAEAyB,MAAM,CAACf,QAAP,CAAgBgB,QAAhB,GAA2B,GAA3B;IACH;;IAED,IAAI,CAACb,aAAL,EAAoB;MAChBC,gBAAA,CAAQC,QAAR,CAAiB,IAAIC,8CAAJ,CAA2BnB,MAA3B,CAAjB;;MACAC,SAAS,CAACD,MAAD,CAAT;MACAO,UAAU,CAACP,MAAD,CAAV;MACA;IACH;;IAEDO,UAAU,CAACP,MAAD,CAAV;IACA4B,MAAM,CAACf,QAAP,CAAgBgB,QAAhB,GAA2B,GAA3B;EACH,CAjBgB,EAkBjB,CAACb,aAAD,CAlBiB,CAArB;EAqBA,IAAMc,KAAK,GAAG,IAAAC,cAAA,EACV;IAAA,OAAO;MACH/B,MAAM,EAAEgB,aADL;MAEHf,SAAS,EAAEwB,YAFR;MAGHvB,aAAa,EAAEsB,aAAa,CAAC,cAAD;IAHzB,CAAP;EAAA,CADU,EAMV,CAACR,aAAD,CANU,CAAd;EASA,oBACI,6BAAC,cAAD,CAAgB,QAAhB;IAAyB,KAAK,EAAEc;EAAhC,gBACI,6BAAC,eAAD,QAAWT,KAAK,CAACW,QAAjB,CADJ,CADJ;AAKH,CAvCM"}
@@ -0,0 +1,2 @@
1
+ import { TenancyContextValue } from "../contexts/Tenancy";
2
+ export declare function useTenancy(): TenancyContextValue;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.useTenancy = useTenancy;
7
+
8
+ var _react = require("react");
9
+
10
+ var _Tenancy = require("../contexts/Tenancy");
11
+
12
+ function useTenancy() {
13
+ return (0, _react.useContext)(_Tenancy.TenancyContext);
14
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useTenancy","useContext","TenancyContext"],"sources":["useTenancy.ts"],"sourcesContent":["import { useContext } from \"react\";\nimport { TenancyContext, TenancyContextValue } from \"~/contexts/Tenancy\";\n\nexport function useTenancy() {\n return useContext<TenancyContextValue>(TenancyContext);\n}\n"],"mappings":";;;;;;;AAAA;;AACA;;AAEO,SAASA,UAAT,GAAsB;EACzB,OAAO,IAAAC,iBAAA,EAAgCC,uBAAhC,CAAP;AACH"}
package/index.d.ts ADDED
@@ -0,0 +1,5 @@
1
+ export * from "./contexts/Tenancy";
2
+ export * from "./hooks/useTenancy";
3
+ export * from "./withTenant";
4
+ export * from "./Tenancy";
5
+ export declare const plugins: () => import("@webiny/app-admin/types").AdminInstallationPlugin[];
package/index.js ADDED
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ var _exportNames = {
9
+ plugins: true
10
+ };
11
+ exports.plugins = void 0;
12
+
13
+ var _installation = _interopRequireDefault(require("./plugins/installation"));
14
+
15
+ var _Tenancy = require("./contexts/Tenancy");
16
+
17
+ Object.keys(_Tenancy).forEach(function (key) {
18
+ if (key === "default" || key === "__esModule") return;
19
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
20
+ if (key in exports && exports[key] === _Tenancy[key]) return;
21
+ Object.defineProperty(exports, key, {
22
+ enumerable: true,
23
+ get: function get() {
24
+ return _Tenancy[key];
25
+ }
26
+ });
27
+ });
28
+
29
+ var _useTenancy = require("./hooks/useTenancy");
30
+
31
+ Object.keys(_useTenancy).forEach(function (key) {
32
+ if (key === "default" || key === "__esModule") return;
33
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
34
+ if (key in exports && exports[key] === _useTenancy[key]) return;
35
+ Object.defineProperty(exports, key, {
36
+ enumerable: true,
37
+ get: function get() {
38
+ return _useTenancy[key];
39
+ }
40
+ });
41
+ });
42
+
43
+ var _withTenant = require("./withTenant");
44
+
45
+ Object.keys(_withTenant).forEach(function (key) {
46
+ if (key === "default" || key === "__esModule") return;
47
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
48
+ if (key in exports && exports[key] === _withTenant[key]) return;
49
+ Object.defineProperty(exports, key, {
50
+ enumerable: true,
51
+ get: function get() {
52
+ return _withTenant[key];
53
+ }
54
+ });
55
+ });
56
+
57
+ var _Tenancy2 = require("./Tenancy");
58
+
59
+ Object.keys(_Tenancy2).forEach(function (key) {
60
+ if (key === "default" || key === "__esModule") return;
61
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
62
+ if (key in exports && exports[key] === _Tenancy2[key]) return;
63
+ Object.defineProperty(exports, key, {
64
+ enumerable: true,
65
+ get: function get() {
66
+ return _Tenancy2[key];
67
+ }
68
+ });
69
+ });
70
+
71
+ var plugins = function plugins() {
72
+ return [_installation.default];
73
+ };
74
+
75
+ exports.plugins = plugins;
package/index.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"names":["plugins","installation"],"sources":["index.ts"],"sourcesContent":["import installation from \"~/plugins/installation\";\nexport * from \"./contexts/Tenancy\";\nexport * from \"./hooks/useTenancy\";\nexport * from \"./withTenant\";\nexport * from \"./Tenancy\";\n\nexport const plugins = () => [installation];\n"],"mappings":";;;;;;;;;;;;AAAA;;AACA;;AAAA;EAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;;AACA;;AAAA;EAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;;AACA;;AAAA;EAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;;AACA;;AAAA;EAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;;AAEO,IAAMA,OAAO,GAAG,SAAVA,OAAU;EAAA,OAAM,CAACC,qBAAD,CAAN;AAAA,CAAhB"}
package/package.json ADDED
@@ -0,0 +1,54 @@
1
+ {
2
+ "name": "@webiny/app-tenancy",
3
+ "version": "0.0.0-ee-vpcs.549378cf03",
4
+ "main": "index.js",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "https://github.com/webiny/webiny-js.git"
8
+ },
9
+ "contributors": [
10
+ "Pavel Denisjuk <pavel@webiny.com>",
11
+ "Sven Al Hamad <sven@webiny.com>",
12
+ "Adrian Smijulj <adrian@webiny.com>"
13
+ ],
14
+ "license": "MIT",
15
+ "dependencies": {
16
+ "@apollo/react-hooks": "3.1.5",
17
+ "@babel/runtime": "7.19.0",
18
+ "@emotion/styled": "10.3.0",
19
+ "@types/react": "17.0.39",
20
+ "@webiny/app": "0.0.0-ee-vpcs.549378cf03",
21
+ "@webiny/app-admin": "0.0.0-ee-vpcs.549378cf03",
22
+ "@webiny/plugins": "0.0.0-ee-vpcs.549378cf03",
23
+ "@webiny/ui": "0.0.0-ee-vpcs.549378cf03",
24
+ "apollo-client": "2.6.10",
25
+ "graphql-tag": "2.12.6",
26
+ "react": "17.0.2",
27
+ "react-dom": "17.0.2",
28
+ "store": "2.0.12"
29
+ },
30
+ "devDependencies": {
31
+ "@babel/cli": "^7.19.3",
32
+ "@babel/core": "^7.19.3",
33
+ "@babel/plugin-proposal-class-properties": "^7.16.0",
34
+ "@babel/preset-env": "^7.19.4",
35
+ "@babel/preset-react": "^7.16.0",
36
+ "@babel/preset-typescript": "^7.18.6",
37
+ "@webiny/cli": "^0.0.0-ee-vpcs.549378cf03",
38
+ "@webiny/project-utils": "^0.0.0-ee-vpcs.549378cf03",
39
+ "babel-plugin-emotion": "^9.2.8",
40
+ "babel-plugin-lodash": "^3.3.4",
41
+ "rimraf": "^3.0.2",
42
+ "ttypescript": "^1.3.2",
43
+ "typescript": "4.7.4"
44
+ },
45
+ "publishConfig": {
46
+ "access": "public",
47
+ "directory": "dist"
48
+ },
49
+ "scripts": {
50
+ "build": "yarn webiny run build",
51
+ "watch": "yarn webiny run watch"
52
+ },
53
+ "gitHead": "549378cf03fcd27845fc3fa23d1dc6b32896f630"
54
+ }
@@ -0,0 +1,3 @@
1
+ import { AdminInstallationPlugin } from "@webiny/app-admin/types";
2
+ declare const plugin: AdminInstallationPlugin;
3
+ export default plugin;
@@ -0,0 +1,121 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+
5
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
6
+
7
+ Object.defineProperty(exports, "__esModule", {
8
+ value: true
9
+ });
10
+ exports.default = void 0;
11
+
12
+ var _regeneratorRuntime2 = _interopRequireDefault(require("@babel/runtime/helpers/regeneratorRuntime"));
13
+
14
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
15
+
16
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
17
+
18
+ var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
19
+
20
+ var _react = _interopRequireWildcard(require("react"));
21
+
22
+ var _graphqlTag = _interopRequireDefault(require("graphql-tag"));
23
+
24
+ var _reactHooks = require("@apollo/react-hooks");
25
+
26
+ var _Alert = require("@webiny/ui/Alert");
27
+
28
+ var _Progress = require("@webiny/ui/Progress");
29
+
30
+ var _SimpleForm = require("@webiny/app-admin/components/SimpleForm");
31
+
32
+ var _styled = _interopRequireDefault(require("@emotion/styled"));
33
+
34
+ var _templateObject, _templateObject2;
35
+
36
+ var SimpleFormPlaceholder = /*#__PURE__*/(0, _styled.default)("div", {
37
+ target: "ewob5260",
38
+ label: "SimpleFormPlaceholder"
39
+ })({
40
+ minHeight: 300,
41
+ minWidth: 400
42
+ });
43
+ var IS_INSTALLED = (0, _graphqlTag.default)(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n query IsTenancyInstalled {\n tenancy {\n version\n }\n }\n"])));
44
+ var INSTALL = (0, _graphqlTag.default)(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2.default)(["\n mutation InstallTenancy {\n tenancy {\n install {\n data\n error {\n code\n message\n }\n }\n }\n }\n"])));
45
+
46
+ var TenancyInstaller = function TenancyInstaller(_ref) {
47
+ var onInstalled = _ref.onInstalled;
48
+ var client = (0, _reactHooks.useApolloClient)();
49
+
50
+ var _useState = (0, _react.useState)(null),
51
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
52
+ error = _useState2[0],
53
+ setError = _useState2[1];
54
+
55
+ (0, _react.useEffect)(function () {
56
+ client.mutate({
57
+ mutation: INSTALL
58
+ }).then(function (_ref2) {
59
+ var data = _ref2.data;
60
+ var error = data.tenancy.install.error;
61
+
62
+ if (error) {
63
+ setError(error.message);
64
+ return;
65
+ } // Just so the user sees the actual message.
66
+
67
+
68
+ setTimeout(onInstalled, 3000);
69
+ });
70
+ }, []);
71
+ var label = error ? /*#__PURE__*/_react.default.createElement(_Alert.Alert, {
72
+ title: "Something went wrong",
73
+ type: "danger"
74
+ }, error) : "Installing Tenancy...";
75
+ return /*#__PURE__*/_react.default.createElement(_SimpleForm.SimpleForm, null, /*#__PURE__*/_react.default.createElement(_Progress.CircularProgress, {
76
+ label: label
77
+ }), /*#__PURE__*/_react.default.createElement(_SimpleForm.SimpleFormContent, null, /*#__PURE__*/_react.default.createElement(SimpleFormPlaceholder, null)));
78
+ };
79
+
80
+ var plugin = {
81
+ name: "admin-installation-tenancy",
82
+ type: "admin-installation",
83
+ title: "Tenancy",
84
+ dependencies: [],
85
+ secure: false,
86
+ getInstalledVersion: function getInstalledVersion(_ref3) {
87
+ return (0, _asyncToGenerator2.default)( /*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee() {
88
+ var client, _yield$client$query, data;
89
+
90
+ return (0, _regeneratorRuntime2.default)().wrap(function _callee$(_context) {
91
+ while (1) {
92
+ switch (_context.prev = _context.next) {
93
+ case 0:
94
+ client = _ref3.client;
95
+ _context.next = 3;
96
+ return client.query({
97
+ query: IS_INSTALLED
98
+ });
99
+
100
+ case 3:
101
+ _yield$client$query = _context.sent;
102
+ data = _yield$client$query.data;
103
+ return _context.abrupt("return", data.tenancy.version);
104
+
105
+ case 6:
106
+ case "end":
107
+ return _context.stop();
108
+ }
109
+ }
110
+ }, _callee);
111
+ }))();
112
+ },
113
+ render: function render(_ref4) {
114
+ var onInstalled = _ref4.onInstalled;
115
+ return /*#__PURE__*/_react.default.createElement(TenancyInstaller, {
116
+ onInstalled: onInstalled
117
+ });
118
+ }
119
+ };
120
+ var _default = plugin;
121
+ exports.default = _default;
@@ -0,0 +1 @@
1
+ {"version":3,"names":["SimpleFormPlaceholder","styled","minHeight","minWidth","IS_INSTALLED","gql","INSTALL","TenancyInstaller","onInstalled","client","useApolloClient","useState","error","setError","useEffect","mutate","mutation","then","data","tenancy","install","message","setTimeout","label","plugin","name","type","title","dependencies","secure","getInstalledVersion","query","version","render"],"sources":["installation.tsx"],"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 IsTenancyInstalled {\n tenancy {\n version\n }\n }\n`;\n\nconst INSTALL = gql`\n mutation InstallTenancy {\n tenancy {\n install {\n data\n error {\n code\n message\n }\n }\n }\n }\n`;\n\ninterface TenancyInstallerProps {\n onInstalled: () => Promise<void>;\n}\nconst TenancyInstaller: React.FC<TenancyInstallerProps> = ({ 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.tenancy.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 Tenancy...`\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-tenancy\",\n type: \"admin-installation\",\n title: `Tenancy`,\n dependencies: [],\n secure: false,\n async getInstalledVersion({ client }) {\n const { data } = await client.query({ query: IS_INSTALLED });\n return data.tenancy.version;\n },\n render({ onInstalled }) {\n return <TenancyInstaller onInstalled={onInstalled} />;\n }\n};\n\nexport default plugin;\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;AAGA,IAAMA,qBAAqB,oBAAGC,eAAH;EAAA;EAAA;AAAA,GAAc;EACrCC,SAAS,EAAE,GAD0B;EAErCC,QAAQ,EAAE;AAF2B,CAAd,CAA3B;AAKA,IAAMC,YAAY,OAAGC,mBAAH,gLAAlB;AAQA,IAAMC,OAAO,OAAGD,mBAAH,2TAAb;;AAiBA,IAAME,gBAAiD,GAAG,SAApDA,gBAAoD,OAAqB;EAAA,IAAlBC,WAAkB,QAAlBA,WAAkB;EAC3E,IAAMC,MAAM,GAAG,IAAAC,2BAAA,GAAf;;EACA,gBAA0B,IAAAC,eAAA,EAAS,IAAT,CAA1B;EAAA;EAAA,IAAOC,KAAP;EAAA,IAAcC,QAAd;;EAEA,IAAAC,gBAAA,EAAU,YAAM;IACZL,MAAM,CAACM,MAAP,CAAc;MAAEC,QAAQ,EAAEV;IAAZ,CAAd,EAAqCW,IAArC,CAA0C,iBAAc;MAAA,IAAXC,IAAW,SAAXA,IAAW;MACpD,IAAQN,KAAR,GAAkBM,IAAI,CAACC,OAAL,CAAaC,OAA/B,CAAQR,KAAR;;MACA,IAAIA,KAAJ,EAAW;QACPC,QAAQ,CAACD,KAAK,CAACS,OAAP,CAAR;QACA;MACH,CALmD,CAOpD;;;MACAC,UAAU,CAACd,WAAD,EAAc,IAAd,CAAV;IACH,CATD;EAUH,CAXD,EAWG,EAXH;EAaA,IAAMe,KAAK,GAAGX,KAAK,gBACf,6BAAC,YAAD;IAAO,KAAK,wBAAZ;IAAsC,IAAI,EAAE;EAA5C,GACKA,KADL,CADe,0BAAnB;EAQA,oBACI,6BAAC,sBAAD,qBACI,6BAAC,0BAAD;IAAkB,KAAK,EAAEW;EAAzB,EADJ,eAEI,6BAAC,6BAAD,qBACI,6BAAC,qBAAD,OADJ,CAFJ,CADJ;AAQH,CAjCD;;AAmCA,IAAMC,MAA+B,GAAG;EACpCC,IAAI,EAAE,4BAD8B;EAEpCC,IAAI,EAAE,oBAF8B;EAGpCC,KAAK,WAH+B;EAIpCC,YAAY,EAAE,EAJsB;EAKpCC,MAAM,EAAE,KAL4B;EAM9BC,mBAN8B,sCAME;IAAA;MAAA;;MAAA;QAAA;UAAA;YAAA;cAAVrB,MAAU,SAAVA,MAAU;cAAA;cAAA,OACXA,MAAM,CAACsB,KAAP,CAAa;gBAAEA,KAAK,EAAE3B;cAAT,CAAb,CADW;;YAAA;cAAA;cAC1Bc,IAD0B,uBAC1BA,IAD0B;cAAA,iCAE3BA,IAAI,CAACC,OAAL,CAAaa,OAFc;;YAAA;YAAA;cAAA;UAAA;QAAA;MAAA;IAAA;EAGrC,CATmC;EAUpCC,MAVoC,yBAUZ;IAAA,IAAfzB,WAAe,SAAfA,WAAe;IACpB,oBAAO,6BAAC,gBAAD;MAAkB,WAAW,EAAEA;IAA/B,EAAP;EACH;AAZmC,CAAxC;eAeegB,M"}
@@ -0,0 +1,12 @@
1
+ import React from "react";
2
+ import ApolloClient from "apollo-client";
3
+ export declare const GET_DEFAULT_TENANT: import("graphql").DocumentNode;
4
+ interface GetIdentityWithTenantParams {
5
+ client: ApolloClient<any>;
6
+ }
7
+ interface WithTenantProps {
8
+ getIdentityData: (params: GetIdentityWithTenantParams) => Promise<Record<string, string>>;
9
+ children: React.ReactNode;
10
+ }
11
+ export declare const withTenant: (Component: React.FC<WithTenantProps>) => React.FC<WithTenantProps>;
12
+ export {};
package/withTenant.js ADDED
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.withTenant = exports.GET_DEFAULT_TENANT = void 0;
9
+
10
+ var _regeneratorRuntime2 = _interopRequireDefault(require("@babel/runtime/helpers/regeneratorRuntime"));
11
+
12
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
13
+
14
+ var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
15
+
16
+ var _react = _interopRequireDefault(require("react"));
17
+
18
+ var _graphqlTag = require("graphql-tag");
19
+
20
+ var _useTenancy2 = require("./hooks/useTenancy");
21
+
22
+ var _templateObject;
23
+
24
+ var GET_DEFAULT_TENANT = (0, _graphqlTag.gql)(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n query GetDefaultTenant {\n tenancy {\n getDefaultTenant {\n data {\n id\n name\n description\n }\n error {\n code\n message\n }\n }\n }\n }\n"])));
25
+ exports.GET_DEFAULT_TENANT = GET_DEFAULT_TENANT;
26
+
27
+ var withTenant = function withTenant(Component) {
28
+ return function WithTenant(_ref) {
29
+ var getIdentityData = _ref.getIdentityData,
30
+ children = _ref.children;
31
+
32
+ var _useTenancy = (0, _useTenancy2.useTenancy)(),
33
+ tenant = _useTenancy.tenant,
34
+ setTenant = _useTenancy.setTenant,
35
+ isMultiTenant = _useTenancy.isMultiTenant;
36
+
37
+ var getIdentityWithTenant = /*#__PURE__*/function () {
38
+ var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee(params) {
39
+ var response, defaultTenantId;
40
+ return (0, _regeneratorRuntime2.default)().wrap(function _callee$(_context) {
41
+ while (1) {
42
+ switch (_context.prev = _context.next) {
43
+ case 0:
44
+ if (!(tenant || !isMultiTenant)) {
45
+ _context.next = 2;
46
+ break;
47
+ }
48
+
49
+ return _context.abrupt("return", getIdentityData(params));
50
+
51
+ case 2:
52
+ _context.next = 4;
53
+ return params.client.query({
54
+ query: GET_DEFAULT_TENANT,
55
+ context: {
56
+ headers: {
57
+ "x-tenant": tenant || "root"
58
+ }
59
+ }
60
+ });
61
+
62
+ case 4:
63
+ response = _context.sent;
64
+ defaultTenantId = response.data.tenancy.getDefaultTenant.data.id;
65
+ setTenant(defaultTenantId);
66
+ return _context.abrupt("return", getIdentityData(params));
67
+
68
+ case 8:
69
+ case "end":
70
+ return _context.stop();
71
+ }
72
+ }
73
+ }, _callee);
74
+ }));
75
+
76
+ return function getIdentityWithTenant(_x) {
77
+ return _ref2.apply(this, arguments);
78
+ };
79
+ }();
80
+
81
+ return /*#__PURE__*/_react.default.createElement(Component, {
82
+ getIdentityData: getIdentityWithTenant
83
+ }, children);
84
+ };
85
+ };
86
+
87
+ exports.withTenant = withTenant;
@@ -0,0 +1 @@
1
+ {"version":3,"names":["GET_DEFAULT_TENANT","gql","withTenant","Component","WithTenant","getIdentityData","children","useTenancy","tenant","setTenant","isMultiTenant","getIdentityWithTenant","params","client","query","context","headers","response","defaultTenantId","data","tenancy","getDefaultTenant","id"],"sources":["withTenant.tsx"],"sourcesContent":["import React from \"react\";\nimport { gql } from \"graphql-tag\";\nimport { useTenancy } from \"~/hooks/useTenancy\";\nimport ApolloClient from \"apollo-client\";\n\nexport const GET_DEFAULT_TENANT = gql`\n query GetDefaultTenant {\n tenancy {\n getDefaultTenant {\n data {\n id\n name\n description\n }\n error {\n code\n message\n }\n }\n }\n }\n`;\n\ninterface GetIdentityWithTenantParams {\n client: ApolloClient<any>;\n}\ninterface WithTenantProps {\n getIdentityData: (params: GetIdentityWithTenantParams) => Promise<Record<string, string>>;\n children: React.ReactNode;\n}\nexport const withTenant = (Component: React.FC<WithTenantProps>): React.FC<WithTenantProps> => {\n return function WithTenant({ getIdentityData, children }) {\n const { tenant, setTenant, isMultiTenant } = useTenancy();\n\n const getIdentityWithTenant = async (params: GetIdentityWithTenantParams) => {\n if (tenant || !isMultiTenant) {\n return getIdentityData(params);\n }\n\n // Get default tenant\n const response = await params.client.query({\n query: GET_DEFAULT_TENANT,\n context: { headers: { \"x-tenant\": tenant || \"root\" } }\n });\n\n const defaultTenantId = response.data.tenancy.getDefaultTenant.data.id;\n\n setTenant(defaultTenantId);\n\n return getIdentityData(params);\n };\n\n return <Component getIdentityData={getIdentityWithTenant}>{children}</Component>;\n };\n};\n"],"mappings":";;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;;;AAGO,IAAMA,kBAAkB,OAAGC,eAAH,yaAAxB;;;AAyBA,IAAMC,UAAU,GAAG,SAAbA,UAAa,CAACC,SAAD,EAAqE;EAC3F,OAAO,SAASC,UAAT,OAAmD;IAAA,IAA7BC,eAA6B,QAA7BA,eAA6B;IAAA,IAAZC,QAAY,QAAZA,QAAY;;IACtD,kBAA6C,IAAAC,uBAAA,GAA7C;IAAA,IAAQC,MAAR,eAAQA,MAAR;IAAA,IAAgBC,SAAhB,eAAgBA,SAAhB;IAAA,IAA2BC,aAA3B,eAA2BA,aAA3B;;IAEA,IAAMC,qBAAqB;MAAA,mGAAG,iBAAOC,MAAP;QAAA;QAAA;UAAA;YAAA;cAAA;gBAAA,MACtBJ,MAAM,IAAI,CAACE,aADW;kBAAA;kBAAA;gBAAA;;gBAAA,iCAEfL,eAAe,CAACO,MAAD,CAFA;;cAAA;gBAAA;gBAAA,OAMHA,MAAM,CAACC,MAAP,CAAcC,KAAd,CAAoB;kBACvCA,KAAK,EAAEd,kBADgC;kBAEvCe,OAAO,EAAE;oBAAEC,OAAO,EAAE;sBAAE,YAAYR,MAAM,IAAI;oBAAxB;kBAAX;gBAF8B,CAApB,CANG;;cAAA;gBAMpBS,QANoB;gBAWpBC,eAXoB,GAWFD,QAAQ,CAACE,IAAT,CAAcC,OAAd,CAAsBC,gBAAtB,CAAuCF,IAAvC,CAA4CG,EAX1C;gBAa1Bb,SAAS,CAACS,eAAD,CAAT;gBAb0B,iCAenBb,eAAe,CAACO,MAAD,CAfI;;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,CAAH;;MAAA,gBAArBD,qBAAqB;QAAA;MAAA;IAAA,GAA3B;;IAkBA,oBAAO,6BAAC,SAAD;MAAW,eAAe,EAAEA;IAA5B,GAAoDL,QAApD,CAAP;EACH,CAtBD;AAuBH,CAxBM"}