@webiny/tenant-manager 6.4.11 → 6.6.0-alpha.1
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/TenantManager.js +2 -2
- package/TenantManager.js.map +1 -1
- package/admin/CurrentTenant/CurrentTenant.d.ts +6 -2
- package/admin/DisableTenant/DisableTenantRepository.d.ts +3 -1
- package/admin/DisableTenant/DisableTenantRepository.js +17 -2
- package/admin/DisableTenant/DisableTenantRepository.js.map +1 -1
- package/admin/DisableTenant/useDisableTenant.js +0 -9
- package/admin/DisableTenant/useDisableTenant.js.map +1 -1
- package/admin/EnableTenant/EnableTenantRepository.d.ts +3 -1
- package/admin/EnableTenant/EnableTenantRepository.js +17 -2
- package/admin/EnableTenant/EnableTenantRepository.js.map +1 -1
- package/admin/Extension.js +3 -0
- package/admin/Extension.js.map +1 -1
- package/admin/InstallTenant/InstallTenantGateway.d.ts +11 -0
- package/admin/InstallTenant/InstallTenantGateway.js +42 -0
- package/admin/InstallTenant/InstallTenantGateway.js.map +1 -0
- package/admin/InstallTenant/InstallTenantRepository.d.ts +12 -0
- package/admin/InstallTenant/InstallTenantRepository.js +34 -0
- package/admin/InstallTenant/InstallTenantRepository.js.map +1 -0
- package/admin/InstallTenant/InstallTenantUseCase.d.ts +10 -0
- package/admin/InstallTenant/InstallTenantUseCase.js +18 -0
- package/admin/InstallTenant/InstallTenantUseCase.js.map +1 -0
- package/admin/InstallTenant/abstractions.d.ts +21 -0
- package/admin/InstallTenant/abstractions.js +7 -0
- package/admin/InstallTenant/abstractions.js.map +1 -0
- package/admin/InstallTenant/feature.d.ts +3 -0
- package/admin/InstallTenant/feature.js +21 -0
- package/admin/InstallTenant/feature.js.map +1 -0
- package/admin/InstallTenant/index.d.ts +2 -0
- package/admin/InstallTenant/index.js +2 -0
- package/admin/InstallTenant/useInstallTenant.d.ts +4 -0
- package/admin/InstallTenant/useInstallTenant.js +24 -0
- package/admin/InstallTenant/useInstallTenant.js.map +1 -0
- package/admin/TenantEntryList/DisableTenant/useDisableTenantDialog.js.map +1 -1
- package/admin/TenantEntryList/EnableTenant/useEnableTenant.js +0 -9
- package/admin/TenantEntryList/EnableTenant/useEnableTenant.js.map +1 -1
- package/admin/TenantEntryList/FolderNameCell.d.ts +1 -1
- package/admin/TenantEntryList/FolderNameCell.js +3 -3
- package/admin/TenantEntryList/FolderNameCell.js.map +1 -1
- package/admin/TenantEntryList/InstallTenantButton/useInstallTenant.js +15 -26
- package/admin/TenantEntryList/InstallTenantButton/useInstallTenant.js.map +1 -1
- package/admin/TenantEntryList/ManageTenant.js +0 -1
- package/admin/TenantEntryList/ManageTenant.js.map +1 -1
- package/admin/TenantEntryList/TenantNameCell.js +11 -4
- package/admin/TenantEntryList/TenantNameCell.js.map +1 -1
- package/admin/TenantEntryList.js +7 -2
- package/admin/TenantEntryList.js.map +1 -1
- package/admin/features/permissions/feature.d.ts +1 -1
- package/api/features/AddCmsPermissions/AddCmsPermissions.d.ts +1 -1
- package/api/graphql/CreateTenantSchema.d.ts +2 -2
- package/api/graphql/CreateTenantSchema.js +8 -2
- package/api/graphql/CreateTenantSchema.js.map +1 -1
- package/api/graphql/DisableTenantSchema.d.ts +2 -2
- package/api/graphql/DisableTenantSchema.js +2 -2
- package/api/graphql/DisableTenantSchema.js.map +1 -1
- package/api/graphql/EnableTenantSchema.d.ts +2 -2
- package/api/graphql/EnableTenantSchema.js +2 -2
- package/api/graphql/EnableTenantSchema.js.map +1 -1
- package/api/graphql/GetCurrentTenantSchema.d.ts +2 -2
- package/api/graphql/GetCurrentTenantSchema.js +2 -2
- package/api/graphql/GetCurrentTenantSchema.js.map +1 -1
- package/api/graphql/InstallTenantSchema.d.ts +2 -2
- package/api/graphql/InstallTenantSchema.js +2 -2
- package/api/graphql/InstallTenantSchema.js.map +1 -1
- package/package.json +17 -19
- package/admin/TenantEntryList/InstallTenantButton/installTenant.gql.d.ts +0 -16
- package/admin/TenantEntryList/InstallTenantButton/installTenant.gql.js +0 -18
- package/admin/TenantEntryList/InstallTenantButton/installTenant.gql.js.map +0 -1
package/TenantManager.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import react from "react";
|
|
2
2
|
import { Admin, Api } from "@webiny/project-aws";
|
|
3
|
-
import {
|
|
4
|
-
const TenantManager = ()=>/*#__PURE__*/ react.createElement(
|
|
3
|
+
import { FeatureFlag } from "@webiny/project";
|
|
4
|
+
const TenantManager = ()=>/*#__PURE__*/ react.createElement(FeatureFlag.CanUseMultiTenancy, null, /*#__PURE__*/ react.createElement(Api.Extension, {
|
|
5
5
|
src: import.meta.dirname + "/api/Extension.js"
|
|
6
6
|
}), /*#__PURE__*/ react.createElement(Admin.Extension, {
|
|
7
7
|
src: import.meta.dirname + "/admin/Extension.js"
|
package/TenantManager.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TenantManager.js","sources":["../src/TenantManager.tsx"],"sourcesContent":["import React from \"react\";\nimport { Api, Admin } from \"@webiny/project-aws\";\nimport {
|
|
1
|
+
{"version":3,"file":"TenantManager.js","sources":["../src/TenantManager.tsx"],"sourcesContent":["import React from \"react\";\nimport { Api, Admin } from \"@webiny/project-aws\";\nimport { FeatureFlag } from \"@webiny/project\";\n\nexport const TenantManager = () => {\n return (\n <FeatureFlag.CanUseMultiTenancy>\n {/* Api extensions */}\n <Api.Extension src={import.meta.dirname + \"/api/Extension.js\"} />\n\n {/* Admin extensions */}\n <Admin.Extension src={import.meta.dirname + \"/admin/Extension.js\"} />\n </FeatureFlag.CanUseMultiTenancy>\n );\n};\n"],"names":["TenantManager","FeatureFlag","Api","Admin"],"mappings":";;;AAIO,MAAMA,gBAAgB,IAClB,WAAP,GACI,oBAACC,YAAY,kBAAkB,sBAE3B,oBAACC,IAAI,SAAS;QAAC,KAAK,YAAY,OAAO,GAAG;sBAG1C,oBAACC,MAAM,SAAS;QAAC,KAAK,YAAY,OAAO,GAAG"}
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
export declare const CurrentTenant: (({ children }: {
|
|
3
3
|
children: React.ReactNode;
|
|
4
|
-
}) => React.JSX.Element) & {
|
|
5
|
-
|
|
4
|
+
}) => React.JSX.Element) & React.NamedExoticComponent<{
|
|
5
|
+
children: React.ReactNode;
|
|
6
|
+
}> & {
|
|
7
|
+
readonly type: ({ children }: {
|
|
8
|
+
children: React.ReactNode;
|
|
9
|
+
}) => React.JSX.Element;
|
|
6
10
|
};
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { DisableTenantRepository as RepositoryAbstraction, DisableTenantGateway } from "./abstractions.js";
|
|
2
|
+
import { ContentEntriesCacheProvider } from "@webiny/app-headless-cms/features/contentEntry/abstractions.js";
|
|
2
3
|
declare class DisableTenantRepositoryImpl implements RepositoryAbstraction.Interface {
|
|
3
4
|
private gateway;
|
|
4
|
-
|
|
5
|
+
private cacheProvider;
|
|
6
|
+
constructor(gateway: DisableTenantGateway.Interface, cacheProvider: ContentEntriesCacheProvider.Interface);
|
|
5
7
|
execute(tenantId: string): Promise<void>;
|
|
6
8
|
}
|
|
7
9
|
export declare const DisableTenantRepository: typeof DisableTenantRepositoryImpl & {
|
|
@@ -1,16 +1,31 @@
|
|
|
1
1
|
import { DisableTenantGateway, DisableTenantRepository } from "./abstractions.js";
|
|
2
|
+
import { ContentEntriesCacheProvider } from "@webiny/app-headless-cms/features/contentEntry/abstractions.js";
|
|
3
|
+
import { TENANT_MODEL_ID } from "../../shared/constants.js";
|
|
2
4
|
class DisableTenantRepositoryImpl {
|
|
3
|
-
constructor(gateway){
|
|
5
|
+
constructor(gateway, cacheProvider){
|
|
4
6
|
this.gateway = gateway;
|
|
7
|
+
this.cacheProvider = cacheProvider;
|
|
5
8
|
}
|
|
6
9
|
async execute(tenantId) {
|
|
7
10
|
await this.gateway.disableTenant(tenantId);
|
|
11
|
+
const cache = this.cacheProvider.get(TENANT_MODEL_ID);
|
|
12
|
+
cache.updateItems((item)=>{
|
|
13
|
+
if (item.entryId === tenantId) return {
|
|
14
|
+
...item,
|
|
15
|
+
values: {
|
|
16
|
+
...item.values,
|
|
17
|
+
status: "disabled"
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
return item;
|
|
21
|
+
});
|
|
8
22
|
}
|
|
9
23
|
}
|
|
10
24
|
const DisableTenantRepository_DisableTenantRepository = DisableTenantRepository.createImplementation({
|
|
11
25
|
implementation: DisableTenantRepositoryImpl,
|
|
12
26
|
dependencies: [
|
|
13
|
-
DisableTenantGateway
|
|
27
|
+
DisableTenantGateway,
|
|
28
|
+
ContentEntriesCacheProvider
|
|
14
29
|
]
|
|
15
30
|
});
|
|
16
31
|
export { DisableTenantRepository_DisableTenantRepository as DisableTenantRepository };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin/DisableTenant/DisableTenantRepository.js","sources":["../../../src/admin/DisableTenant/DisableTenantRepository.ts"],"sourcesContent":["import {\n DisableTenantRepository as RepositoryAbstraction,\n DisableTenantGateway\n} from \"./abstractions.js\";\n\nclass DisableTenantRepositoryImpl implements RepositoryAbstraction.Interface {\n constructor(private gateway: DisableTenantGateway.Interface) {}\n\n async execute(tenantId: string): Promise<void> {\n await this.gateway.disableTenant(tenantId);\n }\n}\n\nexport const DisableTenantRepository = RepositoryAbstraction.createImplementation({\n implementation: DisableTenantRepositoryImpl,\n dependencies: [DisableTenantGateway]\n});\n"],"names":["DisableTenantRepositoryImpl","gateway","tenantId","DisableTenantRepository","RepositoryAbstraction","DisableTenantGateway"],"mappings":"
|
|
1
|
+
{"version":3,"file":"admin/DisableTenant/DisableTenantRepository.js","sources":["../../../src/admin/DisableTenant/DisableTenantRepository.ts"],"sourcesContent":["import {\n DisableTenantRepository as RepositoryAbstraction,\n DisableTenantGateway\n} from \"./abstractions.js\";\nimport { ContentEntriesCacheProvider } from \"@webiny/app-headless-cms/features/contentEntry/abstractions.js\";\nimport { TENANT_MODEL_ID } from \"~/shared/constants.js\";\n\nclass DisableTenantRepositoryImpl implements RepositoryAbstraction.Interface {\n constructor(\n private gateway: DisableTenantGateway.Interface,\n private cacheProvider: ContentEntriesCacheProvider.Interface\n ) {}\n\n async execute(tenantId: string): Promise<void> {\n await this.gateway.disableTenant(tenantId);\n\n const cache = this.cacheProvider.get(TENANT_MODEL_ID);\n cache.updateItems(item => {\n if (item.entryId === tenantId) {\n return { ...item, values: { ...item.values, status: \"disabled\" } };\n }\n return item;\n });\n }\n}\n\nexport const DisableTenantRepository = RepositoryAbstraction.createImplementation({\n implementation: DisableTenantRepositoryImpl,\n dependencies: [DisableTenantGateway, ContentEntriesCacheProvider]\n});\n"],"names":["DisableTenantRepositoryImpl","gateway","cacheProvider","tenantId","cache","TENANT_MODEL_ID","item","DisableTenantRepository","RepositoryAbstraction","DisableTenantGateway","ContentEntriesCacheProvider"],"mappings":";;;AAOA,MAAMA;IACF,YACYC,OAAuC,EACvCC,aAAoD,CAC9D;aAFUD,OAAO,GAAPA;aACAC,aAAa,GAAbA;IACT;IAEH,MAAM,QAAQC,QAAgB,EAAiB;QAC3C,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,CAACA;QAEjC,MAAMC,QAAQ,IAAI,CAAC,aAAa,CAAC,GAAG,CAACC;QACrCD,MAAM,WAAW,CAACE,CAAAA;YACd,IAAIA,KAAK,OAAO,KAAKH,UACjB,OAAO;gBAAE,GAAGG,IAAI;gBAAE,QAAQ;oBAAE,GAAGA,KAAK,MAAM;oBAAE,QAAQ;gBAAW;YAAE;YAErE,OAAOA;QACX;IACJ;AACJ;AAEO,MAAMC,kDAA0BC,wBAAAA,oBAA0C,CAAC;IAC9E,gBAAgBR;IAChB,cAAc;QAACS;QAAsBC;KAA4B;AACrE"}
|
|
@@ -1,19 +1,10 @@
|
|
|
1
1
|
import { useCallback } from "react";
|
|
2
2
|
import { useFeature } from "@webiny/app-admin";
|
|
3
3
|
import { DisableTenantFeature } from "./feature.js";
|
|
4
|
-
import { useRecords } from "@webiny/app-aco";
|
|
5
4
|
const useDisableTenant = (tenant)=>{
|
|
6
5
|
const { useCase } = useFeature(DisableTenantFeature);
|
|
7
|
-
const { updateRecordInCache } = useRecords();
|
|
8
6
|
const disableTenant = useCallback(async ()=>{
|
|
9
7
|
await useCase.execute(tenant.entryId);
|
|
10
|
-
updateRecordInCache({
|
|
11
|
-
...tenant,
|
|
12
|
-
values: {
|
|
13
|
-
...tenant.values,
|
|
14
|
-
status: "disabled"
|
|
15
|
-
}
|
|
16
|
-
});
|
|
17
8
|
}, [
|
|
18
9
|
useCase,
|
|
19
10
|
tenant
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin/DisableTenant/useDisableTenant.js","sources":["../../../src/admin/DisableTenant/useDisableTenant.ts"],"sourcesContent":["import { useCallback } from \"react\";\nimport { useFeature } from \"@webiny/app-admin\";\nimport { DisableTenantFeature } from \"./feature.js\";\nimport
|
|
1
|
+
{"version":3,"file":"admin/DisableTenant/useDisableTenant.js","sources":["../../../src/admin/DisableTenant/useDisableTenant.ts"],"sourcesContent":["import { useCallback } from \"react\";\nimport { useFeature } from \"@webiny/app-admin\";\nimport { DisableTenantFeature } from \"./feature.js\";\nimport type { TenantEntry } from \"~/admin/types.js\";\n\nexport const useDisableTenant = (tenant: TenantEntry) => {\n const { useCase } = useFeature(DisableTenantFeature);\n\n const disableTenant = useCallback(async () => {\n await useCase.execute(tenant.entryId);\n }, [useCase, tenant]);\n\n return { disableTenant };\n};\n"],"names":["useDisableTenant","tenant","useCase","useFeature","DisableTenantFeature","disableTenant","useCallback"],"mappings":";;;AAKO,MAAMA,mBAAmB,CAACC;IAC7B,MAAM,EAAEC,OAAO,EAAE,GAAGC,WAAWC;IAE/B,MAAMC,gBAAgBC,YAAY;QAC9B,MAAMJ,QAAQ,OAAO,CAACD,OAAO,OAAO;IACxC,GAAG;QAACC;QAASD;KAAO;IAEpB,OAAO;QAAEI;IAAc;AAC3B"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { EnableTenantRepository as RepositoryAbstraction, EnableTenantGateway } from "./abstractions.js";
|
|
2
|
+
import { ContentEntriesCacheProvider } from "@webiny/app-headless-cms/features/contentEntry/abstractions.js";
|
|
2
3
|
declare class EnableTenantRepositoryImpl implements RepositoryAbstraction.Interface {
|
|
3
4
|
private gateway;
|
|
4
|
-
|
|
5
|
+
private cacheProvider;
|
|
6
|
+
constructor(gateway: EnableTenantGateway.Interface, cacheProvider: ContentEntriesCacheProvider.Interface);
|
|
5
7
|
execute(tenantId: string): Promise<void>;
|
|
6
8
|
}
|
|
7
9
|
export declare const EnableTenantRepository: typeof EnableTenantRepositoryImpl & {
|
|
@@ -1,16 +1,31 @@
|
|
|
1
1
|
import { EnableTenantGateway, EnableTenantRepository } from "./abstractions.js";
|
|
2
|
+
import { ContentEntriesCacheProvider } from "@webiny/app-headless-cms/features/contentEntry/abstractions.js";
|
|
3
|
+
import { TENANT_MODEL_ID } from "../../shared/constants.js";
|
|
2
4
|
class EnableTenantRepositoryImpl {
|
|
3
|
-
constructor(gateway){
|
|
5
|
+
constructor(gateway, cacheProvider){
|
|
4
6
|
this.gateway = gateway;
|
|
7
|
+
this.cacheProvider = cacheProvider;
|
|
5
8
|
}
|
|
6
9
|
async execute(tenantId) {
|
|
7
10
|
await this.gateway.enableTenant(tenantId);
|
|
11
|
+
const cache = this.cacheProvider.get(TENANT_MODEL_ID);
|
|
12
|
+
cache.updateItems((item)=>{
|
|
13
|
+
if (item.entryId === tenantId) return {
|
|
14
|
+
...item,
|
|
15
|
+
values: {
|
|
16
|
+
...item.values,
|
|
17
|
+
status: "enabled"
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
return item;
|
|
21
|
+
});
|
|
8
22
|
}
|
|
9
23
|
}
|
|
10
24
|
const EnableTenantRepository_EnableTenantRepository = EnableTenantRepository.createImplementation({
|
|
11
25
|
implementation: EnableTenantRepositoryImpl,
|
|
12
26
|
dependencies: [
|
|
13
|
-
EnableTenantGateway
|
|
27
|
+
EnableTenantGateway,
|
|
28
|
+
ContentEntriesCacheProvider
|
|
14
29
|
]
|
|
15
30
|
});
|
|
16
31
|
export { EnableTenantRepository_EnableTenantRepository as EnableTenantRepository };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin/EnableTenant/EnableTenantRepository.js","sources":["../../../src/admin/EnableTenant/EnableTenantRepository.ts"],"sourcesContent":["import {\n EnableTenantRepository as RepositoryAbstraction,\n EnableTenantGateway\n} from \"./abstractions.js\";\n\nclass EnableTenantRepositoryImpl implements RepositoryAbstraction.Interface {\n constructor(private gateway: EnableTenantGateway.Interface) {}\n\n async execute(tenantId: string): Promise<void> {\n await this.gateway.enableTenant(tenantId);\n }\n}\n\nexport const EnableTenantRepository = RepositoryAbstraction.createImplementation({\n implementation: EnableTenantRepositoryImpl,\n dependencies: [EnableTenantGateway]\n});\n"],"names":["EnableTenantRepositoryImpl","gateway","tenantId","EnableTenantRepository","RepositoryAbstraction","EnableTenantGateway"],"mappings":"
|
|
1
|
+
{"version":3,"file":"admin/EnableTenant/EnableTenantRepository.js","sources":["../../../src/admin/EnableTenant/EnableTenantRepository.ts"],"sourcesContent":["import {\n EnableTenantRepository as RepositoryAbstraction,\n EnableTenantGateway\n} from \"./abstractions.js\";\nimport { ContentEntriesCacheProvider } from \"@webiny/app-headless-cms/features/contentEntry/abstractions.js\";\nimport { TENANT_MODEL_ID } from \"~/shared/constants.js\";\n\nclass EnableTenantRepositoryImpl implements RepositoryAbstraction.Interface {\n constructor(\n private gateway: EnableTenantGateway.Interface,\n private cacheProvider: ContentEntriesCacheProvider.Interface\n ) {}\n\n async execute(tenantId: string): Promise<void> {\n await this.gateway.enableTenant(tenantId);\n\n const cache = this.cacheProvider.get(TENANT_MODEL_ID);\n cache.updateItems(item => {\n if (item.entryId === tenantId) {\n return { ...item, values: { ...item.values, status: \"enabled\" } };\n }\n return item;\n });\n }\n}\n\nexport const EnableTenantRepository = RepositoryAbstraction.createImplementation({\n implementation: EnableTenantRepositoryImpl,\n dependencies: [EnableTenantGateway, ContentEntriesCacheProvider]\n});\n"],"names":["EnableTenantRepositoryImpl","gateway","cacheProvider","tenantId","cache","TENANT_MODEL_ID","item","EnableTenantRepository","RepositoryAbstraction","EnableTenantGateway","ContentEntriesCacheProvider"],"mappings":";;;AAOA,MAAMA;IACF,YACYC,OAAsC,EACtCC,aAAoD,CAC9D;aAFUD,OAAO,GAAPA;aACAC,aAAa,GAAbA;IACT;IAEH,MAAM,QAAQC,QAAgB,EAAiB;QAC3C,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAACA;QAEhC,MAAMC,QAAQ,IAAI,CAAC,aAAa,CAAC,GAAG,CAACC;QACrCD,MAAM,WAAW,CAACE,CAAAA;YACd,IAAIA,KAAK,OAAO,KAAKH,UACjB,OAAO;gBAAE,GAAGG,IAAI;gBAAE,QAAQ;oBAAE,GAAGA,KAAK,MAAM;oBAAE,QAAQ;gBAAU;YAAE;YAEpE,OAAOA;QACX;IACJ;AACJ;AAEO,MAAMC,gDAAyBC,uBAAAA,oBAA0C,CAAC;IAC7E,gBAAgBR;IAChB,cAAc;QAACS;QAAqBC;KAA4B;AACpE"}
|
package/admin/Extension.js
CHANGED
|
@@ -12,6 +12,7 @@ import { IsRootTenant } from "./IsRootTenant.js";
|
|
|
12
12
|
import { TENANT_MODEL_ID } from "../shared/constants.js";
|
|
13
13
|
import { SecurityPermission } from "./SecurityPermission.js";
|
|
14
14
|
import { TmPermissionsFeature } from "./features/permissions/feature.js";
|
|
15
|
+
import { InstallTenantFeature } from "./InstallTenant/index.js";
|
|
15
16
|
const { Menu: Menu } = AdminConfig;
|
|
16
17
|
const Extension = ()=>{
|
|
17
18
|
const { getLink } = useRouter();
|
|
@@ -26,6 +27,8 @@ const Extension = ()=>{
|
|
|
26
27
|
feature: CurrentTenantFeature
|
|
27
28
|
}), /*#__PURE__*/ react.createElement(RegisterFeature, {
|
|
28
29
|
feature: TmPermissionsFeature
|
|
30
|
+
}), /*#__PURE__*/ react.createElement(RegisterFeature, {
|
|
31
|
+
feature: InstallTenantFeature
|
|
29
32
|
}), /*#__PURE__*/ react.createElement(CurrentTenantProvider, null), /*#__PURE__*/ react.createElement(TenantSelector, null), /*#__PURE__*/ react.createElement(TenantEntryList, null), /*#__PURE__*/ react.createElement(SecurityPermission, null), /*#__PURE__*/ react.createElement(AdminConfig, null, /*#__PURE__*/ react.createElement(IsRootTenant, null, /*#__PURE__*/ react.createElement(RegisterFeature, {
|
|
30
33
|
feature: DisableTenantFeature
|
|
31
34
|
}), /*#__PURE__*/ react.createElement(RegisterFeature, {
|
package/admin/Extension.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin/Extension.js","sources":["../../src/admin/Extension.tsx"],"sourcesContent":["import React from \"react\";\nimport { AdminConfig, HasPermission, RegisterFeature } from \"@webiny/app-admin\";\nimport { useRouter } from \"@webiny/app-admin\";\nimport { Routes } from \"@webiny/app-headless-cms\";\nimport { ReactComponent as TenantIcon } from \"@webiny/icons/business.svg\";\n\nimport { TenantEntryList } from \"./TenantEntryList.js\";\nimport { CurrentTenantProvider } from \"./CurrentTenantProvider.js\";\nimport { CurrentTenantFeature } from \"./CurrentTenant/feature.js\";\nimport { DisableTenantFeature } from \"./DisableTenant/index.js\";\nimport { EnableTenantFeature } from \"./EnableTenant/index.js\";\nimport { TenantSelector } from \"./TenantSelector.js\";\nimport { IsRootTenant } from \"./IsRootTenant.js\";\nimport { TENANT_MODEL_ID } from \"~/shared/constants.js\";\nimport { SecurityPermission } from \"./SecurityPermission.js\";\nimport { TmPermissionsFeature } from \"./features/permissions/feature.js\";\n\nconst { Menu } = AdminConfig;\n\nexport const Extension = () => {\n const { getLink } = useRouter();\n\n const link = getLink(Routes.ContentEntries.List, { modelId: TENANT_MODEL_ID });\n\n const icon = <Menu.Link.Icon element={<TenantIcon />} label={\"Tenant\"} />;\n\n return (\n <>\n <RegisterFeature feature={CurrentTenantFeature} />\n <RegisterFeature feature={TmPermissionsFeature} />\n <CurrentTenantProvider />\n <TenantSelector />\n <TenantEntryList />\n <SecurityPermission />\n <AdminConfig>\n <IsRootTenant>\n <RegisterFeature feature={DisableTenantFeature} />\n <RegisterFeature feature={EnableTenantFeature} />\n <HasPermission name={\"tm.tenant\"}>\n <Menu\n name=\"tenantManager\"\n element={<Menu.Link text=\"Tenant Manager\" icon={icon} to={link} />}\n />\n </HasPermission>\n </IsRootTenant>\n </AdminConfig>\n </>\n );\n};\n"],"names":["Menu","AdminConfig","Extension","getLink","useRouter","link","Routes","TENANT_MODEL_ID","icon","TenantIcon","RegisterFeature","CurrentTenantFeature","TmPermissionsFeature","CurrentTenantProvider","TenantSelector","TenantEntryList","SecurityPermission","IsRootTenant","DisableTenantFeature","EnableTenantFeature","HasPermission"],"mappings":"
|
|
1
|
+
{"version":3,"file":"admin/Extension.js","sources":["../../src/admin/Extension.tsx"],"sourcesContent":["import React from \"react\";\nimport { AdminConfig, HasPermission, RegisterFeature } from \"@webiny/app-admin\";\nimport { useRouter } from \"@webiny/app-admin\";\nimport { Routes } from \"@webiny/app-headless-cms\";\nimport { ReactComponent as TenantIcon } from \"@webiny/icons/business.svg\";\n\nimport { TenantEntryList } from \"./TenantEntryList.js\";\nimport { CurrentTenantProvider } from \"./CurrentTenantProvider.js\";\nimport { CurrentTenantFeature } from \"./CurrentTenant/feature.js\";\nimport { DisableTenantFeature } from \"./DisableTenant/index.js\";\nimport { EnableTenantFeature } from \"./EnableTenant/index.js\";\nimport { TenantSelector } from \"./TenantSelector.js\";\nimport { IsRootTenant } from \"./IsRootTenant.js\";\nimport { TENANT_MODEL_ID } from \"~/shared/constants.js\";\nimport { SecurityPermission } from \"./SecurityPermission.js\";\nimport { TmPermissionsFeature } from \"./features/permissions/feature.js\";\nimport { InstallTenantFeature } from \"./InstallTenant/index.js\";\n\nconst { Menu } = AdminConfig;\n\nexport const Extension = () => {\n const { getLink } = useRouter();\n\n const link = getLink(Routes.ContentEntries.List, { modelId: TENANT_MODEL_ID });\n\n const icon = <Menu.Link.Icon element={<TenantIcon />} label={\"Tenant\"} />;\n\n return (\n <>\n <RegisterFeature feature={CurrentTenantFeature} />\n <RegisterFeature feature={TmPermissionsFeature} />\n <RegisterFeature feature={InstallTenantFeature} />\n <CurrentTenantProvider />\n <TenantSelector />\n <TenantEntryList />\n <SecurityPermission />\n <AdminConfig>\n <IsRootTenant>\n <RegisterFeature feature={DisableTenantFeature} />\n <RegisterFeature feature={EnableTenantFeature} />\n <HasPermission name={\"tm.tenant\"}>\n <Menu\n name=\"tenantManager\"\n element={<Menu.Link text=\"Tenant Manager\" icon={icon} to={link} />}\n />\n </HasPermission>\n </IsRootTenant>\n </AdminConfig>\n </>\n );\n};\n"],"names":["Menu","AdminConfig","Extension","getLink","useRouter","link","Routes","TENANT_MODEL_ID","icon","TenantIcon","RegisterFeature","CurrentTenantFeature","TmPermissionsFeature","InstallTenantFeature","CurrentTenantProvider","TenantSelector","TenantEntryList","SecurityPermission","IsRootTenant","DisableTenantFeature","EnableTenantFeature","HasPermission"],"mappings":";;;;;;;;;;;;;;;AAkBA,MAAM,EAAEA,MAAAA,IAAI,EAAE,GAAGC;AAEV,MAAMC,YAAY;IACrB,MAAM,EAAEC,OAAO,EAAE,GAAGC;IAEpB,MAAMC,OAAOF,QAAQG,OAAO,cAAc,CAAC,IAAI,EAAE;QAAE,SAASC;IAAgB;IAE5E,MAAMC,OAAO,WAAPA,GAAO,oBAACR,KAAK,IAAI,CAAC,IAAI;QAAC,uBAAS,oBAACS,gBAAUA;QAAK,OAAO;;IAE7D,OAAO,WAAP,GACI,wDACI,oBAACC,iBAAeA;QAAC,SAASC;sBAC1B,oBAACD,iBAAeA;QAAC,SAASE;sBAC1B,oBAACF,iBAAeA;QAAC,SAASG;sBAC1B,oBAACC,uBAAqBA,OAAAA,WAAAA,GACtB,oBAACC,gBAAcA,OAAAA,WAAAA,GACf,oBAACC,iBAAeA,OAAAA,WAAAA,GAChB,oBAACC,oBAAkBA,OAAAA,WAAAA,GACnB,oBAAChB,aAAWA,MAAAA,WAAAA,GACR,oBAACiB,cAAYA,MAAAA,WAAAA,GACT,oBAACR,iBAAeA;QAAC,SAASS;sBAC1B,oBAACT,iBAAeA;QAAC,SAASU;sBAC1B,oBAACC,eAAaA;QAAC,MAAM;qBACjB,oBAACrB,MAAIA;QACD,MAAK;QACL,uBAAS,oBAACA,KAAK,IAAI;YAAC,MAAK;YAAiB,MAAMQ;YAAM,IAAIH;;;AAOtF"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { MainGraphQLClient } from "@webiny/app/features/mainGraphQLClient/index.js";
|
|
2
|
+
import { InstallTenantGateway as GatewayAbstraction } from "./abstractions.js";
|
|
3
|
+
declare class InstallTenantGraphQLGateway implements GatewayAbstraction.Interface {
|
|
4
|
+
private client;
|
|
5
|
+
constructor(client: MainGraphQLClient.Interface);
|
|
6
|
+
installTenant(tenantId: string): Promise<boolean>;
|
|
7
|
+
}
|
|
8
|
+
export declare const InstallTenantGateway: typeof InstallTenantGraphQLGateway & {
|
|
9
|
+
__abstraction: import("@webiny/di").Abstraction<import("./abstractions.js").IInstallTenantGateway>;
|
|
10
|
+
};
|
|
11
|
+
export {};
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { MainGraphQLClient } from "@webiny/app/features/mainGraphQLClient/index.js";
|
|
2
|
+
import { InstallTenantGateway } from "./abstractions.js";
|
|
3
|
+
const INSTALL_TENANT = `
|
|
4
|
+
mutation InstallTenant($tenantId: ID!) {
|
|
5
|
+
tenantManager {
|
|
6
|
+
installTenant(tenantId: $tenantId) {
|
|
7
|
+
data
|
|
8
|
+
error {
|
|
9
|
+
code
|
|
10
|
+
message
|
|
11
|
+
data
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
`;
|
|
17
|
+
class InstallTenantGraphQLGateway {
|
|
18
|
+
constructor(client){
|
|
19
|
+
this.client = client;
|
|
20
|
+
}
|
|
21
|
+
async installTenant(tenantId) {
|
|
22
|
+
const response = await this.client.execute({
|
|
23
|
+
query: INSTALL_TENANT,
|
|
24
|
+
variables: {
|
|
25
|
+
tenantId
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
const envelope = response.tenantManager.installTenant;
|
|
29
|
+
if (envelope.error) throw new Error(envelope.error.message);
|
|
30
|
+
if (!envelope.data) throw new Error("Unable to install tenant");
|
|
31
|
+
return envelope.data;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
const InstallTenantGateway_InstallTenantGateway = InstallTenantGateway.createImplementation({
|
|
35
|
+
implementation: InstallTenantGraphQLGateway,
|
|
36
|
+
dependencies: [
|
|
37
|
+
MainGraphQLClient
|
|
38
|
+
]
|
|
39
|
+
});
|
|
40
|
+
export { InstallTenantGateway_InstallTenantGateway as InstallTenantGateway };
|
|
41
|
+
|
|
42
|
+
//# sourceMappingURL=InstallTenantGateway.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin/InstallTenant/InstallTenantGateway.js","sources":["../../../src/admin/InstallTenant/InstallTenantGateway.ts"],"sourcesContent":["import { MainGraphQLClient } from \"@webiny/app/features/mainGraphQLClient/index.js\";\nimport { InstallTenantGateway as GatewayAbstraction } from \"./abstractions.js\";\n\nconst INSTALL_TENANT = /* GraphQL */ `\n mutation InstallTenant($tenantId: ID!) {\n tenantManager {\n installTenant(tenantId: $tenantId) {\n data\n error {\n code\n message\n data\n }\n }\n }\n }\n`;\n\ntype InstallTenantResponse = {\n tenantManager: {\n installTenant:\n | {\n data: boolean;\n error: null;\n }\n | {\n data: null;\n error: {\n code: string;\n message: string;\n data: Record<string, any>;\n };\n };\n };\n};\n\nclass InstallTenantGraphQLGateway implements GatewayAbstraction.Interface {\n constructor(private client: MainGraphQLClient.Interface) {}\n\n async installTenant(tenantId: string): Promise<boolean> {\n const response = await this.client.execute<InstallTenantResponse>({\n query: INSTALL_TENANT,\n variables: { tenantId }\n });\n\n const envelope = response.tenantManager.installTenant;\n if (envelope.error) {\n throw new Error(envelope.error.message);\n }\n\n if (!envelope.data) {\n throw new Error(\"Unable to install tenant\");\n }\n\n return envelope.data;\n }\n}\n\nexport const InstallTenantGateway = GatewayAbstraction.createImplementation({\n implementation: InstallTenantGraphQLGateway,\n dependencies: [MainGraphQLClient]\n});\n"],"names":["INSTALL_TENANT","InstallTenantGraphQLGateway","client","tenantId","response","envelope","Error","InstallTenantGateway","GatewayAbstraction","MainGraphQLClient"],"mappings":";;AAGA,MAAMA,iBAA+B,CAAC;;;;;;;;;;;;;AAatC,CAAC;AAoBD,MAAMC;IACF,YAAoBC,MAAmC,CAAE;aAArCA,MAAM,GAANA;IAAsC;IAE1D,MAAM,cAAcC,QAAgB,EAAoB;QACpD,MAAMC,WAAW,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAwB;YAC9D,OAAOJ;YACP,WAAW;gBAAEG;YAAS;QAC1B;QAEA,MAAME,WAAWD,SAAS,aAAa,CAAC,aAAa;QACrD,IAAIC,SAAS,KAAK,EACd,MAAM,IAAIC,MAAMD,SAAS,KAAK,CAAC,OAAO;QAG1C,IAAI,CAACA,SAAS,IAAI,EACd,MAAM,IAAIC,MAAM;QAGpB,OAAOD,SAAS,IAAI;IACxB;AACJ;AAEO,MAAME,4CAAuBC,qBAAAA,oBAAuC,CAAC;IACxE,gBAAgBP;IAChB,cAAc;QAACQ;KAAkB;AACrC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { InstallTenantRepository as RepositoryAbstraction, InstallTenantGateway } from "./abstractions.js";
|
|
2
|
+
import { ContentEntriesCacheProvider } from "@webiny/app-headless-cms/features/contentEntry/abstractions.js";
|
|
3
|
+
declare class InstallTenantRepositoryImpl implements RepositoryAbstraction.Interface {
|
|
4
|
+
private gateway;
|
|
5
|
+
private cacheProvider;
|
|
6
|
+
constructor(gateway: InstallTenantGateway.Interface, cacheProvider: ContentEntriesCacheProvider.Interface);
|
|
7
|
+
execute(tenantId: string): Promise<void>;
|
|
8
|
+
}
|
|
9
|
+
export declare const InstallTenantRepository: typeof InstallTenantRepositoryImpl & {
|
|
10
|
+
__abstraction: import("@webiny/di").Abstraction<import("./abstractions.js").IInstallTenantRepository>;
|
|
11
|
+
};
|
|
12
|
+
export {};
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { InstallTenantGateway, InstallTenantRepository } from "./abstractions.js";
|
|
2
|
+
import { ContentEntriesCacheProvider } from "@webiny/app-headless-cms/features/contentEntry/abstractions.js";
|
|
3
|
+
import { TENANT_MODEL_ID } from "../../shared/constants.js";
|
|
4
|
+
class InstallTenantRepositoryImpl {
|
|
5
|
+
constructor(gateway, cacheProvider){
|
|
6
|
+
this.gateway = gateway;
|
|
7
|
+
this.cacheProvider = cacheProvider;
|
|
8
|
+
}
|
|
9
|
+
async execute(tenantId) {
|
|
10
|
+
await this.gateway.installTenant(tenantId);
|
|
11
|
+
const cache = this.cacheProvider.get(TENANT_MODEL_ID);
|
|
12
|
+
cache.updateItems((item)=>{
|
|
13
|
+
if (item.entryId === tenantId) return {
|
|
14
|
+
...item,
|
|
15
|
+
values: {
|
|
16
|
+
...item.values,
|
|
17
|
+
status: "enabled",
|
|
18
|
+
isInstalled: true
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
return item;
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
const InstallTenantRepository_InstallTenantRepository = InstallTenantRepository.createImplementation({
|
|
26
|
+
implementation: InstallTenantRepositoryImpl,
|
|
27
|
+
dependencies: [
|
|
28
|
+
InstallTenantGateway,
|
|
29
|
+
ContentEntriesCacheProvider
|
|
30
|
+
]
|
|
31
|
+
});
|
|
32
|
+
export { InstallTenantRepository_InstallTenantRepository as InstallTenantRepository };
|
|
33
|
+
|
|
34
|
+
//# sourceMappingURL=InstallTenantRepository.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin/InstallTenant/InstallTenantRepository.js","sources":["../../../src/admin/InstallTenant/InstallTenantRepository.ts"],"sourcesContent":["import {\n InstallTenantRepository as RepositoryAbstraction,\n InstallTenantGateway\n} from \"./abstractions.js\";\nimport { ContentEntriesCacheProvider } from \"@webiny/app-headless-cms/features/contentEntry/abstractions.js\";\nimport { TENANT_MODEL_ID } from \"~/shared/constants.js\";\n\nclass InstallTenantRepositoryImpl implements RepositoryAbstraction.Interface {\n constructor(\n private gateway: InstallTenantGateway.Interface,\n private cacheProvider: ContentEntriesCacheProvider.Interface\n ) {}\n\n async execute(tenantId: string): Promise<void> {\n await this.gateway.installTenant(tenantId);\n\n const cache = this.cacheProvider.get(TENANT_MODEL_ID);\n cache.updateItems(item => {\n if (item.entryId === tenantId) {\n return {\n ...item,\n values: { ...item.values, status: \"enabled\", isInstalled: true }\n };\n }\n return item;\n });\n }\n}\n\nexport const InstallTenantRepository = RepositoryAbstraction.createImplementation({\n implementation: InstallTenantRepositoryImpl,\n dependencies: [InstallTenantGateway, ContentEntriesCacheProvider]\n});\n"],"names":["InstallTenantRepositoryImpl","gateway","cacheProvider","tenantId","cache","TENANT_MODEL_ID","item","InstallTenantRepository","RepositoryAbstraction","InstallTenantGateway","ContentEntriesCacheProvider"],"mappings":";;;AAOA,MAAMA;IACF,YACYC,OAAuC,EACvCC,aAAoD,CAC9D;aAFUD,OAAO,GAAPA;aACAC,aAAa,GAAbA;IACT;IAEH,MAAM,QAAQC,QAAgB,EAAiB;QAC3C,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,CAACA;QAEjC,MAAMC,QAAQ,IAAI,CAAC,aAAa,CAAC,GAAG,CAACC;QACrCD,MAAM,WAAW,CAACE,CAAAA;YACd,IAAIA,KAAK,OAAO,KAAKH,UACjB,OAAO;gBACH,GAAGG,IAAI;gBACP,QAAQ;oBAAE,GAAGA,KAAK,MAAM;oBAAE,QAAQ;oBAAW,aAAa;gBAAK;YACnE;YAEJ,OAAOA;QACX;IACJ;AACJ;AAEO,MAAMC,kDAA0BC,wBAAAA,oBAA0C,CAAC;IAC9E,gBAAgBR;IAChB,cAAc;QAACS;QAAsBC;KAA4B;AACrE"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { InstallTenantUseCase as UseCaseAbstraction, InstallTenantRepository } from "./abstractions.js";
|
|
2
|
+
declare class InstallTenantUseCaseImpl implements UseCaseAbstraction.Interface {
|
|
3
|
+
private repository;
|
|
4
|
+
constructor(repository: InstallTenantRepository.Interface);
|
|
5
|
+
execute(tenantId: string): Promise<void>;
|
|
6
|
+
}
|
|
7
|
+
export declare const InstallTenantUseCase: typeof InstallTenantUseCaseImpl & {
|
|
8
|
+
__abstraction: import("@webiny/di").Abstraction<import("./abstractions.js").IInstallTenantUseCase>;
|
|
9
|
+
};
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { InstallTenantRepository, InstallTenantUseCase } from "./abstractions.js";
|
|
2
|
+
class InstallTenantUseCaseImpl {
|
|
3
|
+
constructor(repository){
|
|
4
|
+
this.repository = repository;
|
|
5
|
+
}
|
|
6
|
+
async execute(tenantId) {
|
|
7
|
+
return this.repository.execute(tenantId);
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
const InstallTenantUseCase_InstallTenantUseCase = InstallTenantUseCase.createImplementation({
|
|
11
|
+
implementation: InstallTenantUseCaseImpl,
|
|
12
|
+
dependencies: [
|
|
13
|
+
InstallTenantRepository
|
|
14
|
+
]
|
|
15
|
+
});
|
|
16
|
+
export { InstallTenantUseCase_InstallTenantUseCase as InstallTenantUseCase };
|
|
17
|
+
|
|
18
|
+
//# sourceMappingURL=InstallTenantUseCase.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin/InstallTenant/InstallTenantUseCase.js","sources":["../../../src/admin/InstallTenant/InstallTenantUseCase.ts"],"sourcesContent":["import {\n InstallTenantUseCase as UseCaseAbstraction,\n InstallTenantRepository\n} from \"./abstractions.js\";\n\nclass InstallTenantUseCaseImpl implements UseCaseAbstraction.Interface {\n constructor(private repository: InstallTenantRepository.Interface) {}\n\n async execute(tenantId: string): Promise<void> {\n return this.repository.execute(tenantId);\n }\n}\n\nexport const InstallTenantUseCase = UseCaseAbstraction.createImplementation({\n implementation: InstallTenantUseCaseImpl,\n dependencies: [InstallTenantRepository]\n});\n"],"names":["InstallTenantUseCaseImpl","repository","tenantId","InstallTenantUseCase","UseCaseAbstraction","InstallTenantRepository"],"mappings":";AAKA,MAAMA;IACF,YAAoBC,UAA6C,CAAE;aAA/CA,UAAU,GAAVA;IAAgD;IAEpE,MAAM,QAAQC,QAAgB,EAAiB;QAC3C,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAACA;IACnC;AACJ;AAEO,MAAMC,4CAAuBC,qBAAAA,oBAAuC,CAAC;IACxE,gBAAgBJ;IAChB,cAAc;QAACK;KAAwB;AAC3C"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export interface IInstallTenantUseCase {
|
|
2
|
+
execute(tenantId: string): Promise<void>;
|
|
3
|
+
}
|
|
4
|
+
export declare const InstallTenantUseCase: import("@webiny/di").Abstraction<IInstallTenantUseCase>;
|
|
5
|
+
export declare namespace InstallTenantUseCase {
|
|
6
|
+
type Interface = IInstallTenantUseCase;
|
|
7
|
+
}
|
|
8
|
+
export interface IInstallTenantRepository {
|
|
9
|
+
execute(tenantId: string): Promise<void>;
|
|
10
|
+
}
|
|
11
|
+
export declare const InstallTenantRepository: import("@webiny/di").Abstraction<IInstallTenantRepository>;
|
|
12
|
+
export declare namespace InstallTenantRepository {
|
|
13
|
+
type Interface = IInstallTenantRepository;
|
|
14
|
+
}
|
|
15
|
+
export interface IInstallTenantGateway {
|
|
16
|
+
installTenant(tenantId: string): Promise<boolean>;
|
|
17
|
+
}
|
|
18
|
+
export declare const InstallTenantGateway: import("@webiny/di").Abstraction<IInstallTenantGateway>;
|
|
19
|
+
export declare namespace InstallTenantGateway {
|
|
20
|
+
type Interface = IInstallTenantGateway;
|
|
21
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { createAbstraction } from "@webiny/feature/admin";
|
|
2
|
+
const InstallTenantUseCase = createAbstraction("InstallTenantUseCase");
|
|
3
|
+
const InstallTenantRepository = createAbstraction("InstallTenantRepository");
|
|
4
|
+
const InstallTenantGateway = createAbstraction("InstallTenantGateway");
|
|
5
|
+
export { InstallTenantGateway, InstallTenantRepository, InstallTenantUseCase };
|
|
6
|
+
|
|
7
|
+
//# sourceMappingURL=abstractions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin/InstallTenant/abstractions.js","sources":["../../../src/admin/InstallTenant/abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/admin\";\n\nexport interface IInstallTenantUseCase {\n execute(tenantId: string): Promise<void>;\n}\n\nexport const InstallTenantUseCase =\n createAbstraction<IInstallTenantUseCase>(\"InstallTenantUseCase\");\n\nexport namespace InstallTenantUseCase {\n export type Interface = IInstallTenantUseCase;\n}\n\nexport interface IInstallTenantRepository {\n execute(tenantId: string): Promise<void>;\n}\n\nexport const InstallTenantRepository =\n createAbstraction<IInstallTenantRepository>(\"InstallTenantRepository\");\n\nexport namespace InstallTenantRepository {\n export type Interface = IInstallTenantRepository;\n}\n\nexport interface IInstallTenantGateway {\n installTenant(tenantId: string): Promise<boolean>;\n}\n\nexport const InstallTenantGateway =\n createAbstraction<IInstallTenantGateway>(\"InstallTenantGateway\");\n\nexport namespace InstallTenantGateway {\n export type Interface = IInstallTenantGateway;\n}\n"],"names":["InstallTenantUseCase","createAbstraction","InstallTenantRepository","InstallTenantGateway"],"mappings":";AAMO,MAAMA,uBACTC,kBAAyC;AAUtC,MAAMC,0BACTD,kBAA4C;AAUzC,MAAME,uBACTF,kBAAyC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { createFeature } from "@webiny/feature/admin";
|
|
2
|
+
import { InstallTenantUseCase } from "./abstractions.js";
|
|
3
|
+
import { InstallTenantUseCase as external_InstallTenantUseCase_js_InstallTenantUseCase } from "./InstallTenantUseCase.js";
|
|
4
|
+
import { InstallTenantRepository } from "./InstallTenantRepository.js";
|
|
5
|
+
import { InstallTenantGateway } from "./InstallTenantGateway.js";
|
|
6
|
+
const InstallTenantFeature = createFeature({
|
|
7
|
+
name: "InstallTenant",
|
|
8
|
+
register (container) {
|
|
9
|
+
container.register(external_InstallTenantUseCase_js_InstallTenantUseCase);
|
|
10
|
+
container.register(InstallTenantRepository).inSingletonScope();
|
|
11
|
+
container.register(InstallTenantGateway).inSingletonScope();
|
|
12
|
+
},
|
|
13
|
+
resolve (container) {
|
|
14
|
+
return {
|
|
15
|
+
useCase: container.resolve(InstallTenantUseCase)
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
export { InstallTenantFeature };
|
|
20
|
+
|
|
21
|
+
//# sourceMappingURL=feature.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin/InstallTenant/feature.js","sources":["../../../src/admin/InstallTenant/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/admin\";\nimport { InstallTenantUseCase as UseCaseAbstraction } from \"./abstractions.js\";\nimport { InstallTenantUseCase } from \"./InstallTenantUseCase.js\";\nimport { InstallTenantRepository } from \"./InstallTenantRepository.js\";\nimport { InstallTenantGateway } from \"./InstallTenantGateway.js\";\n\nexport const InstallTenantFeature = createFeature({\n name: \"InstallTenant\",\n register(container) {\n container.register(InstallTenantUseCase);\n container.register(InstallTenantRepository).inSingletonScope();\n container.register(InstallTenantGateway).inSingletonScope();\n },\n resolve(container) {\n return {\n useCase: container.resolve(UseCaseAbstraction)\n };\n }\n});\n"],"names":["InstallTenantFeature","createFeature","container","InstallTenantUseCase","InstallTenantRepository","InstallTenantGateway","UseCaseAbstraction"],"mappings":";;;;;AAMO,MAAMA,uBAAuBC,cAAc;IAC9C,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC;QACnBD,UAAU,QAAQ,CAACE,yBAAyB,gBAAgB;QAC5DF,UAAU,QAAQ,CAACG,sBAAsB,gBAAgB;IAC7D;IACA,SAAQH,SAAS;QACb,OAAO;YACH,SAASA,UAAU,OAAO,CAACI;QAC/B;IACJ;AACJ"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { useCallback, useState } from "react";
|
|
2
|
+
import { useFeature } from "@webiny/app-admin";
|
|
3
|
+
import { InstallTenantFeature } from "./feature.js";
|
|
4
|
+
const useInstallTenant = ()=>{
|
|
5
|
+
const { useCase } = useFeature(InstallTenantFeature);
|
|
6
|
+
const [loading, setLoading] = useState(false);
|
|
7
|
+
const installTenant = useCallback(async (tenantId)=>{
|
|
8
|
+
setLoading(true);
|
|
9
|
+
try {
|
|
10
|
+
await useCase.execute(tenantId);
|
|
11
|
+
} finally{
|
|
12
|
+
setLoading(false);
|
|
13
|
+
}
|
|
14
|
+
}, [
|
|
15
|
+
useCase
|
|
16
|
+
]);
|
|
17
|
+
return {
|
|
18
|
+
installTenant,
|
|
19
|
+
loading
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
export { useInstallTenant };
|
|
23
|
+
|
|
24
|
+
//# sourceMappingURL=useInstallTenant.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin/InstallTenant/useInstallTenant.js","sources":["../../../src/admin/InstallTenant/useInstallTenant.ts"],"sourcesContent":["import { useState, useCallback } from \"react\";\nimport { useFeature } from \"@webiny/app-admin\";\nimport { InstallTenantFeature } from \"./feature.js\";\n\nexport const useInstallTenant = () => {\n const { useCase } = useFeature(InstallTenantFeature);\n const [loading, setLoading] = useState(false);\n\n const installTenant = useCallback(\n async (tenantId: string) => {\n setLoading(true);\n\n try {\n await useCase.execute(tenantId);\n } finally {\n setLoading(false);\n }\n },\n [useCase]\n );\n\n return { installTenant, loading };\n};\n"],"names":["useInstallTenant","useCase","useFeature","InstallTenantFeature","loading","setLoading","useState","installTenant","useCallback","tenantId"],"mappings":";;;AAIO,MAAMA,mBAAmB;IAC5B,MAAM,EAAEC,OAAO,EAAE,GAAGC,WAAWC;IAC/B,MAAM,CAACC,SAASC,WAAW,GAAGC,SAAS;IAEvC,MAAMC,gBAAgBC,YAClB,OAAOC;QACHJ,WAAW;QAEX,IAAI;YACA,MAAMJ,QAAQ,OAAO,CAACQ;QAC1B,SAAU;YACNJ,WAAW;QACf;IACJ,GACA;QAACJ;KAAQ;IAGb,OAAO;QAAEM;QAAeH;IAAQ;AACpC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin/TenantEntryList/DisableTenant/useDisableTenantDialog.js","sources":["../../../../src/admin/TenantEntryList/DisableTenant/useDisableTenantDialog.tsx"],"sourcesContent":["import React, { useCallback } from \"react\";\nimport type { TenantEntry } from \"~/admin/types.js\";\nimport { useToast, Text } from \"@webiny/admin-ui\";\nimport { useDialogs } from \"@webiny/app-admin\";\nimport { useDisableTenant } from \"~/admin/DisableTenant/index.js\";\n\ninterface UseDisableTenantDialog {\n record: TenantEntry;\n}\n\nexport function useDisableTenantDialog({ record }: UseDisableTenantDialog) {\n const toast = useToast();\n const dialogs = useDialogs();\n const { disableTenant } = useDisableTenant(record);\n\n const disableEntry = useCallback(() => {\n dialogs.showDialog({\n title: \"Are you sure you want to disable this tenant?\",\n content: (\n <>\n <Text as={\"div\"}>\n Users won't be able to sign in, and all API access will stop working\n immediately. Don't worry - you can re-enable it later if needed.\n </Text>\n </>\n ),\n acceptLabel: \"Yes, disable!\",\n loadingLabel: \"Disabling tenant...\",\n async onAccept() {\n try {\n await disableTenant();\n toast.showSuccessToast({\n title: \"Tenant was disabled successfully!\"\n });\n } catch (e) {\n toast.showWarningToast({\n title: \"Tenant could not be disabled!\",\n description: e.message,\n duration: Infinity\n });\n }\n }\n });\n }, [record.id]);\n\n return { disableEntry };\n}\n"],"names":["useDisableTenantDialog","record","toast","useToast","dialogs","useDialogs","disableTenant","useDisableTenant","disableEntry","useCallback","Text","e","Infinity"],"mappings":";;;;AAUO,SAASA,uBAAuB,EAAEC,MAAM,EAA0B;IACrE,MAAMC,QAAQC;IACd,MAAMC,UAAUC;IAChB,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAiBN;IAE3C,MAAMO,eAAeC,YAAY;QAC7BL,QAAQ,UAAU,CAAC;YACf,OAAO;YACP,SAAS,WAAT,GACI,wDACI,oBAACM,MAAIA;gBAAC,IAAI;eAAO;YAMzB,aAAa;YACb,cAAc;YACd,MAAM;gBACF,IAAI;oBACA,MAAMJ;oBACNJ,MAAM,gBAAgB,CAAC;wBACnB,OAAO;oBACX;gBACJ,EAAE,OAAOS,GAAG;oBACRT,MAAM,gBAAgB,CAAC;wBACnB,OAAO;wBACP,aAAaS,EAAE,OAAO;wBACtB,UAAUC;
|
|
1
|
+
{"version":3,"file":"admin/TenantEntryList/DisableTenant/useDisableTenantDialog.js","sources":["../../../../src/admin/TenantEntryList/DisableTenant/useDisableTenantDialog.tsx"],"sourcesContent":["import React, { useCallback } from \"react\";\nimport type { TenantEntry } from \"~/admin/types.js\";\nimport { useToast, Text } from \"@webiny/admin-ui\";\nimport { useDialogs } from \"@webiny/app-admin\";\nimport { useDisableTenant } from \"~/admin/DisableTenant/index.js\";\n\ninterface UseDisableTenantDialog {\n record: TenantEntry;\n}\n\nexport function useDisableTenantDialog({ record }: UseDisableTenantDialog) {\n const toast = useToast();\n const dialogs = useDialogs();\n const { disableTenant } = useDisableTenant(record);\n\n const disableEntry = useCallback(() => {\n dialogs.showDialog({\n title: \"Are you sure you want to disable this tenant?\",\n content: (\n <>\n <Text as={\"div\"}>\n Users won't be able to sign in, and all API access will stop working\n immediately. Don't worry - you can re-enable it later if needed.\n </Text>\n </>\n ),\n acceptLabel: \"Yes, disable!\",\n loadingLabel: \"Disabling tenant...\",\n async onAccept() {\n try {\n await disableTenant();\n toast.showSuccessToast({\n title: \"Tenant was disabled successfully!\"\n });\n } catch (e) {\n toast.showWarningToast({\n title: \"Tenant could not be disabled!\",\n description: e.message,\n duration: Infinity\n });\n }\n }\n });\n }, [record.id]);\n\n return { disableEntry };\n}\n"],"names":["useDisableTenantDialog","record","toast","useToast","dialogs","useDialogs","disableTenant","useDisableTenant","disableEntry","useCallback","Text","e","Infinity"],"mappings":";;;;AAUO,SAASA,uBAAuB,EAAEC,MAAM,EAA0B;IACrE,MAAMC,QAAQC;IACd,MAAMC,UAAUC;IAChB,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAiBN;IAE3C,MAAMO,eAAeC,YAAY;QAC7BL,QAAQ,UAAU,CAAC;YACf,OAAO;YACP,SAAS,WAAT,GACI,wDACI,oBAACM,MAAIA;gBAAC,IAAI;eAAO;YAMzB,aAAa;YACb,cAAc;YACd,MAAM;gBACF,IAAI;oBACA,MAAMJ;oBACNJ,MAAM,gBAAgB,CAAC;wBACnB,OAAO;oBACX;gBACJ,EAAE,OAAOS,GAAG;oBACRT,MAAM,gBAAgB,CAAC;wBACnB,OAAO;wBACP,aAAaS,EAAE,OAAO;wBACtB,UAAUC,KAAQ;oBACtB;gBACJ;YACJ;QACJ;IACJ,GAAG;QAACX,OAAO,EAAE;KAAC;IAEd,OAAO;QAAEO;IAAa;AAC1B"}
|
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
import { useCallback } from "react";
|
|
2
2
|
import { useToast } from "@webiny/admin-ui";
|
|
3
|
-
import { useRecords } from "@webiny/app-aco";
|
|
4
3
|
import { useEnableTenant } from "../../EnableTenant/index.js";
|
|
5
4
|
const useEnableTenant_useEnableTenant = (tenant)=>{
|
|
6
5
|
const toast = useToast();
|
|
7
|
-
const { updateRecordInCache } = useRecords();
|
|
8
6
|
const useCase = useEnableTenant();
|
|
9
7
|
const enableTenant = useCallback(async ()=>{
|
|
10
8
|
try {
|
|
@@ -20,13 +18,6 @@ const useEnableTenant_useEnableTenant = (tenant)=>{
|
|
|
20
18
|
toast.showSuccessToast({
|
|
21
19
|
title: "Tenant was enabled successfully!"
|
|
22
20
|
});
|
|
23
|
-
updateRecordInCache({
|
|
24
|
-
...tenant,
|
|
25
|
-
values: {
|
|
26
|
-
...tenant.values,
|
|
27
|
-
status: "enabled"
|
|
28
|
-
}
|
|
29
|
-
});
|
|
30
21
|
}, [
|
|
31
22
|
tenant
|
|
32
23
|
]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin/TenantEntryList/EnableTenant/useEnableTenant.js","sources":["../../../../src/admin/TenantEntryList/EnableTenant/useEnableTenant.ts"],"sourcesContent":["import { useCallback } from \"react\";\nimport { useToast } from \"@webiny/admin-ui\";\nimport {
|
|
1
|
+
{"version":3,"file":"admin/TenantEntryList/EnableTenant/useEnableTenant.js","sources":["../../../../src/admin/TenantEntryList/EnableTenant/useEnableTenant.ts"],"sourcesContent":["import { useCallback } from \"react\";\nimport { useToast } from \"@webiny/admin-ui\";\nimport { TenantEntry } from \"../../types.js\";\nimport { useEnableTenant as baseEnableTenant } from \"~/admin/EnableTenant/index.js\";\n\nexport const useEnableTenant = (tenant: TenantEntry) => {\n const toast = useToast();\n const useCase = baseEnableTenant();\n\n const enableTenant = useCallback(async () => {\n try {\n await useCase.enableTenant(tenant.entryId);\n } catch (error) {\n toast.showWarningToast({\n title: \"Could not enable tenant\",\n description: error.message,\n duration: Infinity\n });\n return;\n }\n\n toast.showSuccessToast({ title: \"Tenant was enabled successfully!\" });\n }, [tenant]);\n\n return { enableTenant, loading: useCase.loading };\n};\n"],"names":["useEnableTenant","tenant","toast","useToast","useCase","baseEnableTenant","enableTenant","useCallback","error","Infinity"],"mappings":";;;AAKO,MAAMA,kCAAkB,CAACC;IAC5B,MAAMC,QAAQC;IACd,MAAMC,UAAUC;IAEhB,MAAMC,eAAeC,YAAY;QAC7B,IAAI;YACA,MAAMH,QAAQ,YAAY,CAACH,OAAO,OAAO;QAC7C,EAAE,OAAOO,OAAO;YACZN,MAAM,gBAAgB,CAAC;gBACnB,OAAO;gBACP,aAAaM,MAAM,OAAO;gBAC1B,UAAUC,KAAQ;YACtB;YACA;QACJ;QAEAP,MAAM,gBAAgB,CAAC;YAAE,OAAO;QAAmC;IACvE,GAAG;QAACD;KAAO;IAEX,OAAO;QAAEK;QAAc,SAASF,QAAQ,OAAO;IAAC;AACpD"}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import react from "react";
|
|
2
|
-
import { useNavigateFolder } from "@webiny/app-aco";
|
|
3
2
|
import { Icon, Text } from "@webiny/admin-ui";
|
|
4
3
|
import { ReactComponent } from "@webiny/icons/folder.svg";
|
|
5
4
|
import { ReactComponent as folder_shared_svg_ReactComponent } from "@webiny/icons/folder_shared.svg";
|
|
5
|
+
import { useContentEntriesPresenter } from "@webiny/app-headless-cms/exports/admin/cms/entry/list.js";
|
|
6
6
|
const FolderNameCell = ({ folder })=>{
|
|
7
|
-
const
|
|
7
|
+
const presenter = useContentEntriesPresenter();
|
|
8
8
|
let icon = /*#__PURE__*/ react.createElement(ReactComponent, null);
|
|
9
9
|
if (folder.hasNonInheritedPermissions && folder.canManagePermissions) icon = /*#__PURE__*/ react.createElement(folder_shared_svg_ReactComponent, null);
|
|
10
10
|
return /*#__PURE__*/ react.createElement("div", {
|
|
11
11
|
className: "flex items-center gap-sm truncate cursor-pointer font-semibold hover:underline",
|
|
12
|
-
onClick: ()=>
|
|
12
|
+
onClick: ()=>presenter.folders.selectFolder(folder.id)
|
|
13
13
|
}, /*#__PURE__*/ react.createElement(Icon, {
|
|
14
14
|
size: "sm",
|
|
15
15
|
color: "neutral-strong",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin/TenantEntryList/FolderNameCell.js","sources":["../../../src/admin/TenantEntryList/FolderNameCell.tsx"],"sourcesContent":["import React from \"react\";\nimport {
|
|
1
|
+
{"version":3,"file":"admin/TenantEntryList/FolderNameCell.js","sources":["../../../src/admin/TenantEntryList/FolderNameCell.tsx"],"sourcesContent":["import React from \"react\";\nimport type { FolderTableRow } from \"@webiny/app-aco\";\nimport { Icon, Text } from \"@webiny/admin-ui\";\nimport { ReactComponent as Folder } from \"@webiny/icons/folder.svg\";\nimport { ReactComponent as FolderShared } from \"@webiny/icons/folder_shared.svg\";\nimport { useContentEntriesPresenter } from \"@webiny/app-headless-cms/exports/admin/cms/entry/list.js\";\n\ninterface FolderNameCellProps {\n folder: FolderTableRow[\"data\"];\n}\n\nexport const FolderNameCell = ({ folder }: FolderNameCellProps) => {\n const presenter = useContentEntriesPresenter();\n\n let icon = <Folder />;\n if (folder.hasNonInheritedPermissions && folder.canManagePermissions) {\n icon = <FolderShared />;\n }\n\n return (\n <div\n className={\n \"flex items-center gap-sm truncate cursor-pointer font-semibold hover:underline\"\n }\n onClick={() => presenter.folders.selectFolder(folder.id)}\n >\n <Icon\n size={\"sm\"}\n color={\"neutral-strong\"}\n icon={icon}\n label={`Folder - ${folder.title}`}\n />\n <Text className={\"truncate min-w-0 shrink\"}>{folder.title}</Text>\n </div>\n );\n};\n"],"names":["FolderNameCell","folder","presenter","useContentEntriesPresenter","icon","Folder","FolderShared","Icon","Text"],"mappings":";;;;;AAWO,MAAMA,iBAAiB,CAAC,EAAEC,MAAM,EAAuB;IAC1D,MAAMC,YAAYC;IAElB,IAAIC,OAAO,WAAPA,GAAO,oBAACC,gBAAMA;IAClB,IAAIJ,OAAO,0BAA0B,IAAIA,OAAO,oBAAoB,EAChEG,OAAO,WAAPA,GAAO,oBAACE,kCAAYA;IAGxB,OAAO,WAAP,GACI,oBAAC;QACG,WACI;QAEJ,SAAS,IAAMJ,UAAU,OAAO,CAAC,YAAY,CAACD,OAAO,EAAE;qBAEvD,oBAACM,MAAIA;QACD,MAAM;QACN,OAAO;QACP,MAAMH;QACN,OAAO,CAAC,SAAS,EAAEH,OAAO,KAAK,EAAE;sBAErC,oBAACO,MAAIA;QAAC,WAAW;OAA4BP,OAAO,KAAK;AAGrE"}
|