@webiny/tenant-manager 0.0.0-unstable.3c5210ad37
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 +36 -0
- package/README.md +11 -0
- package/TenantManager.d.ts +2 -0
- package/TenantManager.js +12 -0
- package/TenantManager.js.map +1 -0
- package/admin/CurrentTenant/CurrentTenant.d.ts +6 -0
- package/admin/CurrentTenant/CurrentTenant.js +34 -0
- package/admin/CurrentTenant/CurrentTenant.js.map +1 -0
- package/admin/CurrentTenant/CurrentTenantGateway.d.ts +12 -0
- package/admin/CurrentTenant/CurrentTenantGateway.js +44 -0
- package/admin/CurrentTenant/CurrentTenantGateway.js.map +1 -0
- package/admin/CurrentTenant/CurrentTenantPresenter.d.ts +12 -0
- package/admin/CurrentTenant/CurrentTenantPresenter.js +30 -0
- package/admin/CurrentTenant/CurrentTenantPresenter.js.map +1 -0
- package/admin/CurrentTenant/CurrentTenantRepository.d.ts +15 -0
- package/admin/CurrentTenant/CurrentTenantRepository.js +37 -0
- package/admin/CurrentTenant/CurrentTenantRepository.js.map +1 -0
- package/admin/CurrentTenant/abstractions.d.ts +31 -0
- package/admin/CurrentTenant/abstractions.js +15 -0
- package/admin/CurrentTenant/abstractions.js.map +1 -0
- package/admin/CurrentTenant/feature.d.ts +3 -0
- package/admin/CurrentTenant/feature.js +20 -0
- package/admin/CurrentTenant/feature.js.map +1 -0
- package/admin/CurrentTenant/useCurrentTenant.d.ts +4 -0
- package/admin/CurrentTenant/useCurrentTenant.js +23 -0
- package/admin/CurrentTenant/useCurrentTenant.js.map +1 -0
- package/admin/CurrentTenantProvider.d.ts +2 -0
- package/admin/CurrentTenantProvider.js +12 -0
- package/admin/CurrentTenantProvider.js.map +1 -0
- package/admin/DisableTenant/DisableTenantGateway.d.ts +11 -0
- package/admin/DisableTenant/DisableTenantGateway.js +43 -0
- package/admin/DisableTenant/DisableTenantGateway.js.map +1 -0
- package/admin/DisableTenant/DisableTenantRepository.d.ts +10 -0
- package/admin/DisableTenant/DisableTenantRepository.js +15 -0
- package/admin/DisableTenant/DisableTenantRepository.js.map +1 -0
- package/admin/DisableTenant/DisableTenantUseCase.d.ts +10 -0
- package/admin/DisableTenant/DisableTenantUseCase.js +15 -0
- package/admin/DisableTenant/DisableTenantUseCase.js.map +1 -0
- package/admin/DisableTenant/abstractions.d.ts +21 -0
- package/admin/DisableTenant/abstractions.js +15 -0
- package/admin/DisableTenant/abstractions.js.map +1 -0
- package/admin/DisableTenant/feature.d.ts +3 -0
- package/admin/DisableTenant/feature.js +20 -0
- package/admin/DisableTenant/feature.js.map +1 -0
- package/admin/DisableTenant/index.d.ts +2 -0
- package/admin/DisableTenant/index.js +4 -0
- package/admin/DisableTenant/index.js.map +1 -0
- package/admin/DisableTenant/useDisableTenant.d.ts +4 -0
- package/admin/DisableTenant/useDisableTenant.js +27 -0
- package/admin/DisableTenant/useDisableTenant.js.map +1 -0
- package/admin/EnableTenant/EnableTenantGateway.d.ts +11 -0
- package/admin/EnableTenant/EnableTenantGateway.js +43 -0
- package/admin/EnableTenant/EnableTenantGateway.js.map +1 -0
- package/admin/EnableTenant/EnableTenantRepository.d.ts +10 -0
- package/admin/EnableTenant/EnableTenantRepository.js +15 -0
- package/admin/EnableTenant/EnableTenantRepository.js.map +1 -0
- package/admin/EnableTenant/EnableTenantUseCase.d.ts +10 -0
- package/admin/EnableTenant/EnableTenantUseCase.js +15 -0
- package/admin/EnableTenant/EnableTenantUseCase.js.map +1 -0
- package/admin/EnableTenant/abstractions.d.ts +21 -0
- package/admin/EnableTenant/abstractions.js +15 -0
- package/admin/EnableTenant/abstractions.js.map +1 -0
- package/admin/EnableTenant/feature.d.ts +3 -0
- package/admin/EnableTenant/feature.js +20 -0
- package/admin/EnableTenant/feature.js.map +1 -0
- package/admin/EnableTenant/index.d.ts +2 -0
- package/admin/EnableTenant/index.js +4 -0
- package/admin/EnableTenant/index.js.map +1 -0
- package/admin/EnableTenant/useEnableTenant.d.ts +4 -0
- package/admin/EnableTenant/useEnableTenant.js +23 -0
- package/admin/EnableTenant/useEnableTenant.js.map +1 -0
- package/admin/Extension.d.ts +2 -0
- package/admin/Extension.js +47 -0
- package/admin/Extension.js.map +1 -0
- package/admin/IsRootTenant.d.ts +13 -0
- package/admin/IsRootTenant.js +37 -0
- package/admin/IsRootTenant.js.map +1 -0
- package/admin/SecurityPermission.d.ts +2 -0
- package/admin/SecurityPermission.js +20 -0
- package/admin/SecurityPermission.js.map +1 -0
- package/admin/TenantEntryList/DisableTenant/useDisableTenantDialog.d.ts +8 -0
- package/admin/TenantEntryList/DisableTenant/useDisableTenantDialog.js +42 -0
- package/admin/TenantEntryList/DisableTenant/useDisableTenantDialog.js.map +1 -0
- package/admin/TenantEntryList/EnableTenant/EnableTenant.d.ts +7 -0
- package/admin/TenantEntryList/EnableTenant/EnableTenant.js +19 -0
- package/admin/TenantEntryList/EnableTenant/EnableTenant.js.map +1 -0
- package/admin/TenantEntryList/EnableTenant/useEnableTenant.d.ts +5 -0
- package/admin/TenantEntryList/EnableTenant/useEnableTenant.js +39 -0
- package/admin/TenantEntryList/EnableTenant/useEnableTenant.js.map +1 -0
- package/admin/TenantEntryList/FolderNameCell.d.ts +7 -0
- package/admin/TenantEntryList/FolderNameCell.js +29 -0
- package/admin/TenantEntryList/FolderNameCell.js.map +1 -0
- package/admin/TenantEntryList/InstallTenantButton/InstallTenant.d.ts +7 -0
- package/admin/TenantEntryList/InstallTenantButton/InstallTenant.js +19 -0
- package/admin/TenantEntryList/InstallTenantButton/InstallTenant.js.map +1 -0
- package/admin/TenantEntryList/InstallTenantButton/installTenant.gql.d.ts +16 -0
- package/admin/TenantEntryList/InstallTenantButton/installTenant.gql.js +17 -0
- package/admin/TenantEntryList/InstallTenantButton/installTenant.gql.js.map +1 -0
- package/admin/TenantEntryList/InstallTenantButton/useInstallTenant.d.ts +5 -0
- package/admin/TenantEntryList/InstallTenantButton/useInstallTenant.js +46 -0
- package/admin/TenantEntryList/InstallTenantButton/useInstallTenant.js.map +1 -0
- package/admin/TenantEntryList/ManageTenant.d.ts +7 -0
- package/admin/TenantEntryList/ManageTenant.js +21 -0
- package/admin/TenantEntryList/ManageTenant.js.map +1 -0
- package/admin/TenantEntryList/TenantCell.d.ts +2 -0
- package/admin/TenantEntryList/TenantCell.js +39 -0
- package/admin/TenantEntryList/TenantCell.js.map +1 -0
- package/admin/TenantEntryList/TenantNameCell.d.ts +2 -0
- package/admin/TenantEntryList/TenantNameCell.js +54 -0
- package/admin/TenantEntryList/TenantNameCell.js.map +1 -0
- package/admin/TenantEntryList.d.ts +2 -0
- package/admin/TenantEntryList.js +71 -0
- package/admin/TenantEntryList.js.map +1 -0
- package/admin/TenantSelector.d.ts +2 -0
- package/admin/TenantSelector.js +39 -0
- package/admin/TenantSelector.js.map +1 -0
- package/admin/types.d.ts +7 -0
- package/admin/types.js +3 -0
- package/admin/types.js.map +1 -0
- package/api/Extension.d.ts +1 -0
- package/api/Extension.js +42 -0
- package/api/Extension.js.map +1 -0
- package/api/domain/TenantId.d.ts +3 -0
- package/api/domain/TenantId.js +12 -0
- package/api/domain/TenantId.js.map +1 -0
- package/api/domain/TenantModel.d.ts +11 -0
- package/api/domain/TenantModel.js +46 -0
- package/api/domain/TenantModel.js.map +1 -0
- package/api/domain/TenantModelExtension.d.ts +10 -0
- package/api/domain/TenantModelExtension.js +4 -0
- package/api/domain/TenantModelExtension.js.map +1 -0
- package/api/domain/errors.d.ts +33 -0
- package/api/domain/errors.js +63 -0
- package/api/domain/errors.js.map +1 -0
- package/api/features/AddCmsPermissions/AddCmsPermissions.d.ts +8 -0
- package/api/features/AddCmsPermissions/AddCmsPermissions.js +34 -0
- package/api/features/AddCmsPermissions/AddCmsPermissions.js.map +1 -0
- package/api/features/AddCmsPermissions/feature.d.ts +1 -0
- package/api/features/AddCmsPermissions/feature.js +10 -0
- package/api/features/AddCmsPermissions/feature.js.map +1 -0
- package/api/features/CreateAndInstallTenant/CreateAndInstallTenantUseCase.d.ts +24 -0
- package/api/features/CreateAndInstallTenant/CreateAndInstallTenantUseCase.js +99 -0
- package/api/features/CreateAndInstallTenant/CreateAndInstallTenantUseCase.js.map +1 -0
- package/api/features/CreateAndInstallTenant/abstractions.d.ts +26 -0
- package/api/features/CreateAndInstallTenant/abstractions.js +9 -0
- package/api/features/CreateAndInstallTenant/abstractions.js.map +1 -0
- package/api/features/CreateAndInstallTenant/feature.d.ts +1 -0
- package/api/features/CreateAndInstallTenant/feature.js +11 -0
- package/api/features/CreateAndInstallTenant/feature.js.map +1 -0
- package/api/features/CreateTenant/CreateTenantRepository.d.ts +15 -0
- package/api/features/CreateTenant/CreateTenantRepository.js +48 -0
- package/api/features/CreateTenant/CreateTenantRepository.js.map +1 -0
- package/api/features/CreateTenant/CreateTenantUseCase.d.ts +14 -0
- package/api/features/CreateTenant/CreateTenantUseCase.js +43 -0
- package/api/features/CreateTenant/CreateTenantUseCase.js.map +1 -0
- package/api/features/CreateTenant/abstractions.d.ts +41 -0
- package/api/features/CreateTenant/abstractions.js +11 -0
- package/api/features/CreateTenant/abstractions.js.map +1 -0
- package/api/features/CreateTenant/feature.d.ts +1 -0
- package/api/features/CreateTenant/feature.js +15 -0
- package/api/features/CreateTenant/feature.js.map +1 -0
- package/api/features/DeleteTenantOnEntryDelete/DeleteTenantOnEntryDeleteHandler.d.ts +11 -0
- package/api/features/DeleteTenantOnEntryDelete/DeleteTenantOnEntryDeleteHandler.js +37 -0
- package/api/features/DeleteTenantOnEntryDelete/DeleteTenantOnEntryDeleteHandler.js.map +1 -0
- package/api/features/DeleteTenantOnEntryDelete/feature.d.ts +1 -0
- package/api/features/DeleteTenantOnEntryDelete/feature.js +11 -0
- package/api/features/DeleteTenantOnEntryDelete/feature.js.map +1 -0
- package/api/features/DisableTenant/DisableTenantUseCase.d.ts +20 -0
- package/api/features/DisableTenant/DisableTenantUseCase.js +65 -0
- package/api/features/DisableTenant/DisableTenantUseCase.js.map +1 -0
- package/api/features/DisableTenant/abstractions.d.ts +19 -0
- package/api/features/DisableTenant/abstractions.js +4 -0
- package/api/features/DisableTenant/abstractions.js.map +1 -0
- package/api/features/DisableTenant/events.d.ts +27 -0
- package/api/features/DisableTenant/events.js +18 -0
- package/api/features/DisableTenant/events.js.map +1 -0
- package/api/features/DisableTenant/feature.d.ts +1 -0
- package/api/features/DisableTenant/feature.js +11 -0
- package/api/features/DisableTenant/feature.js.map +1 -0
- package/api/features/EnableTenant/EnableTenantUseCase.d.ts +20 -0
- package/api/features/EnableTenant/EnableTenantUseCase.js +67 -0
- package/api/features/EnableTenant/EnableTenantUseCase.js.map +1 -0
- package/api/features/EnableTenant/abstractions.d.ts +19 -0
- package/api/features/EnableTenant/abstractions.js +4 -0
- package/api/features/EnableTenant/abstractions.js.map +1 -0
- package/api/features/EnableTenant/events.d.ts +27 -0
- package/api/features/EnableTenant/events.js +18 -0
- package/api/features/EnableTenant/events.js.map +1 -0
- package/api/features/EnableTenant/feature.d.ts +1 -0
- package/api/features/EnableTenant/feature.js +11 -0
- package/api/features/EnableTenant/feature.js.map +1 -0
- package/api/features/GetCurrentTenant/GetCurrentTenantUseCase.d.ts +17 -0
- package/api/features/GetCurrentTenant/GetCurrentTenantUseCase.js +35 -0
- package/api/features/GetCurrentTenant/GetCurrentTenantUseCase.js.map +1 -0
- package/api/features/GetCurrentTenant/abstractions.d.ts +24 -0
- package/api/features/GetCurrentTenant/abstractions.js +10 -0
- package/api/features/GetCurrentTenant/abstractions.js.map +1 -0
- package/api/features/GetCurrentTenant/feature.d.ts +1 -0
- package/api/features/GetCurrentTenant/feature.js +11 -0
- package/api/features/GetCurrentTenant/feature.js.map +1 -0
- package/api/features/GetTenantById/GetTenantByIdRepository.d.ts +17 -0
- package/api/features/GetTenantById/GetTenantByIdRepository.js +49 -0
- package/api/features/GetTenantById/GetTenantByIdRepository.js.map +1 -0
- package/api/features/GetTenantById/GetTenantByIdUseCase.d.ts +12 -0
- package/api/features/GetTenantById/GetTenantByIdUseCase.js +27 -0
- package/api/features/GetTenantById/GetTenantByIdUseCase.js.map +1 -0
- package/api/features/GetTenantById/abstractions.d.ts +38 -0
- package/api/features/GetTenantById/abstractions.js +15 -0
- package/api/features/GetTenantById/abstractions.js.map +1 -0
- package/api/features/GetTenantById/feature.d.ts +1 -0
- package/api/features/GetTenantById/feature.js +15 -0
- package/api/features/GetTenantById/feature.js.map +1 -0
- package/api/features/UpdateTenant/UpdateTenantRepository.d.ts +17 -0
- package/api/features/UpdateTenant/UpdateTenantRepository.js +58 -0
- package/api/features/UpdateTenant/UpdateTenantRepository.js.map +1 -0
- package/api/features/UpdateTenant/UpdateTenantUseCase.d.ts +12 -0
- package/api/features/UpdateTenant/UpdateTenantUseCase.js +21 -0
- package/api/features/UpdateTenant/UpdateTenantUseCase.js.map +1 -0
- package/api/features/UpdateTenant/abstractions.d.ts +39 -0
- package/api/features/UpdateTenant/abstractions.js +15 -0
- package/api/features/UpdateTenant/abstractions.js.map +1 -0
- package/api/features/UpdateTenant/feature.d.ts +1 -0
- package/api/features/UpdateTenant/feature.js +15 -0
- package/api/features/UpdateTenant/feature.js.map +1 -0
- package/api/graphql/CreateTenantSchema.d.ts +14 -0
- package/api/graphql/CreateTenantSchema.js +77 -0
- package/api/graphql/CreateTenantSchema.js.map +1 -0
- package/api/graphql/DisableTenantSchema.d.ts +8 -0
- package/api/graphql/DisableTenantSchema.js +35 -0
- package/api/graphql/DisableTenantSchema.js.map +1 -0
- package/api/graphql/EnableTenantSchema.d.ts +8 -0
- package/api/graphql/EnableTenantSchema.js +35 -0
- package/api/graphql/EnableTenantSchema.js.map +1 -0
- package/api/graphql/GetCurrentTenantSchema.d.ts +8 -0
- package/api/graphql/GetCurrentTenantSchema.js +53 -0
- package/api/graphql/GetCurrentTenantSchema.js.map +1 -0
- package/api/graphql/InstallTenantSchema.d.ts +8 -0
- package/api/graphql/InstallTenantSchema.js +50 -0
- package/api/graphql/InstallTenantSchema.js.map +1 -0
- package/exports/admin/tenancy.d.ts +7 -0
- package/exports/admin/tenancy.js +8 -0
- package/exports/admin/tenancy.js.map +1 -0
- package/exports/api/tenant-manager.d.ts +2 -0
- package/exports/api/tenant-manager.js +3 -0
- package/exports/api/tenant-manager.js.map +1 -0
- package/index.d.ts +1 -0
- package/index.js +3 -0
- package/index.js.map +1 -0
- package/package.json +44 -0
- package/shared/Tenant.d.ts +21 -0
- package/shared/Tenant.js +26 -0
- package/shared/Tenant.js.map +1 -0
- package/shared/constants.d.ts +1 -0
- package/shared/constants.js +3 -0
- package/shared/constants.js.map +1 -0
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { useCallback } from "react";
|
|
2
|
+
import { useToast } from "@webiny/admin-ui";
|
|
3
|
+
import { useRecords } from "@webiny/app-aco";
|
|
4
|
+
import { useEnableTenant as baseEnableTenant } from "../../EnableTenant/index.js";
|
|
5
|
+
export const useEnableTenant = tenant => {
|
|
6
|
+
const toast = useToast();
|
|
7
|
+
const {
|
|
8
|
+
updateRecordInCache
|
|
9
|
+
} = useRecords();
|
|
10
|
+
const useCase = baseEnableTenant();
|
|
11
|
+
const enableTenant = useCallback(async () => {
|
|
12
|
+
try {
|
|
13
|
+
await useCase.enableTenant(tenant.entryId);
|
|
14
|
+
} catch (error) {
|
|
15
|
+
toast.showWarningToast({
|
|
16
|
+
title: "Could not enable tenant",
|
|
17
|
+
description: error.message,
|
|
18
|
+
duration: Infinity
|
|
19
|
+
});
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
toast.showSuccessToast({
|
|
23
|
+
title: "Tenant was enabled successfully!"
|
|
24
|
+
});
|
|
25
|
+
updateRecordInCache({
|
|
26
|
+
...tenant,
|
|
27
|
+
values: {
|
|
28
|
+
...tenant.values,
|
|
29
|
+
status: "enabled"
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
}, [tenant]);
|
|
33
|
+
return {
|
|
34
|
+
enableTenant,
|
|
35
|
+
loading: useCase.loading
|
|
36
|
+
};
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
//# sourceMappingURL=useEnableTenant.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useCallback","useToast","useRecords","useEnableTenant","baseEnableTenant","tenant","toast","updateRecordInCache","useCase","enableTenant","entryId","error","showWarningToast","title","description","message","duration","Infinity","showSuccessToast","values","status","loading"],"sources":["useEnableTenant.ts"],"sourcesContent":["import { useCallback } from \"react\";\nimport { useToast } from \"@webiny/admin-ui\";\nimport { useRecords } from \"@webiny/app-aco\";\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 { updateRecordInCache } = useRecords();\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\n updateRecordInCache({\n ...tenant,\n values: {\n ...tenant.values,\n status: \"enabled\"\n }\n });\n }, [tenant]);\n\n return { enableTenant, loading: useCase.loading };\n};\n"],"mappings":"AAAA,SAASA,WAAW,QAAQ,OAAO;AACnC,SAASC,QAAQ,QAAQ,kBAAkB;AAC3C,SAASC,UAAU,QAAQ,iBAAiB;AAE5C,SAASC,eAAe,IAAIC,gBAAgB;AAE5C,OAAO,MAAMD,eAAe,GAAIE,MAAmB,IAAK;EACpD,MAAMC,KAAK,GAAGL,QAAQ,CAAC,CAAC;EACxB,MAAM;IAAEM;EAAoB,CAAC,GAAGL,UAAU,CAAC,CAAC;EAC5C,MAAMM,OAAO,GAAGJ,gBAAgB,CAAC,CAAC;EAElC,MAAMK,YAAY,GAAGT,WAAW,CAAC,YAAY;IACzC,IAAI;MACA,MAAMQ,OAAO,CAACC,YAAY,CAACJ,MAAM,CAACK,OAAO,CAAC;IAC9C,CAAC,CAAC,OAAOC,KAAK,EAAE;MACZL,KAAK,CAACM,gBAAgB,CAAC;QACnBC,KAAK,EAAE,yBAAyB;QAChCC,WAAW,EAAEH,KAAK,CAACI,OAAO;QAC1BC,QAAQ,EAAEC;MACd,CAAC,CAAC;MACF;IACJ;IAEAX,KAAK,CAACY,gBAAgB,CAAC;MAAEL,KAAK,EAAE;IAAmC,CAAC,CAAC;IAErEN,mBAAmB,CAAC;MAChB,GAAGF,MAAM;MACTc,MAAM,EAAE;QACJ,GAAGd,MAAM,CAACc,MAAM;QAChBC,MAAM,EAAE;MACZ;IACJ,CAAC,CAAC;EACN,CAAC,EAAE,CAACf,MAAM,CAAC,CAAC;EAEZ,OAAO;IAAEI,YAAY;IAAEY,OAAO,EAAEb,OAAO,CAACa;EAAQ,CAAC;AACrD,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { useNavigateFolder } from "@webiny/app-aco";
|
|
3
|
+
import { Icon, Text } from "@webiny/admin-ui";
|
|
4
|
+
import { ReactComponent as Folder } from "@webiny/icons/folder.svg";
|
|
5
|
+
import { ReactComponent as FolderShared } from "@webiny/icons/folder_shared.svg";
|
|
6
|
+
export const FolderNameCell = ({
|
|
7
|
+
folder
|
|
8
|
+
}) => {
|
|
9
|
+
const {
|
|
10
|
+
navigateToFolder
|
|
11
|
+
} = useNavigateFolder();
|
|
12
|
+
let icon = /*#__PURE__*/React.createElement(Folder, null);
|
|
13
|
+
if (folder.hasNonInheritedPermissions && folder.canManagePermissions) {
|
|
14
|
+
icon = /*#__PURE__*/React.createElement(FolderShared, null);
|
|
15
|
+
}
|
|
16
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
17
|
+
className: "flex items-center gap-sm truncate cursor-pointer font-semibold hover:underline",
|
|
18
|
+
onClick: () => navigateToFolder(folder.id)
|
|
19
|
+
}, /*#__PURE__*/React.createElement(Icon, {
|
|
20
|
+
size: "sm",
|
|
21
|
+
color: "neutral-strong",
|
|
22
|
+
icon: icon,
|
|
23
|
+
label: `Folder - ${folder.title}`
|
|
24
|
+
}), /*#__PURE__*/React.createElement(Text, {
|
|
25
|
+
className: "truncate min-w-0 shrink"
|
|
26
|
+
}, folder.title));
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
//# sourceMappingURL=FolderNameCell.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","useNavigateFolder","Icon","Text","ReactComponent","Folder","FolderShared","FolderNameCell","folder","navigateToFolder","icon","createElement","hasNonInheritedPermissions","canManagePermissions","className","onClick","id","size","color","label","title"],"sources":["FolderNameCell.tsx"],"sourcesContent":["import React from \"react\";\nimport { type FolderTableRow, useNavigateFolder } 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\";\n\ninterface FolderNameCellProps {\n folder: FolderTableRow[\"data\"];\n}\n\nexport const FolderNameCell = ({ folder }: FolderNameCellProps) => {\n const { navigateToFolder } = useNavigateFolder();\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={() => navigateToFolder(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"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAA8BC,iBAAiB,QAAQ,iBAAiB;AACxE,SAASC,IAAI,EAAEC,IAAI,QAAQ,kBAAkB;AAC7C,SAASC,cAAc,IAAIC,MAAM,QAAQ,0BAA0B;AACnE,SAASD,cAAc,IAAIE,YAAY,QAAQ,iCAAiC;AAMhF,OAAO,MAAMC,cAAc,GAAGA,CAAC;EAAEC;AAA4B,CAAC,KAAK;EAC/D,MAAM;IAAEC;EAAiB,CAAC,GAAGR,iBAAiB,CAAC,CAAC;EAEhD,IAAIS,IAAI,gBAAGV,KAAA,CAAAW,aAAA,CAACN,MAAM,MAAE,CAAC;EACrB,IAAIG,MAAM,CAACI,0BAA0B,IAAIJ,MAAM,CAACK,oBAAoB,EAAE;IAClEH,IAAI,gBAAGV,KAAA,CAAAW,aAAA,CAACL,YAAY,MAAE,CAAC;EAC3B;EAEA,oBACIN,KAAA,CAAAW,aAAA;IACIG,SAAS,EACL,gFACH;IACDC,OAAO,EAAEA,CAAA,KAAMN,gBAAgB,CAACD,MAAM,CAACQ,EAAE;EAAE,gBAE3ChB,KAAA,CAAAW,aAAA,CAACT,IAAI;IACDe,IAAI,EAAE,IAAK;IACXC,KAAK,EAAE,gBAAiB;IACxBR,IAAI,EAAEA,IAAK;IACXS,KAAK,EAAE,YAAYX,MAAM,CAACY,KAAK;EAAG,CACrC,CAAC,eACFpB,KAAA,CAAAW,aAAA,CAACR,IAAI;IAACW,SAAS,EAAE;EAA0B,GAAEN,MAAM,CAACY,KAAY,CAC/D,CAAC;AAEd,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { Button } from "@webiny/admin-ui";
|
|
3
|
+
import { useInstallTenant } from "./useInstallTenant.js";
|
|
4
|
+
export const InstallTenant = ({
|
|
5
|
+
tenant
|
|
6
|
+
}) => {
|
|
7
|
+
const {
|
|
8
|
+
installTenant,
|
|
9
|
+
loading
|
|
10
|
+
} = useInstallTenant(tenant);
|
|
11
|
+
return /*#__PURE__*/React.createElement(Button, {
|
|
12
|
+
variant: "primary",
|
|
13
|
+
onClick: installTenant,
|
|
14
|
+
disabled: loading,
|
|
15
|
+
text: loading ? "Installing..." : "Install"
|
|
16
|
+
});
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
//# sourceMappingURL=InstallTenant.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","Button","useInstallTenant","InstallTenant","tenant","installTenant","loading","createElement","variant","onClick","disabled","text"],"sources":["InstallTenant.tsx"],"sourcesContent":["import React from \"react\";\nimport { Button } from \"@webiny/admin-ui\";\nimport { TenantEntry } from \"../../types.js\";\nimport { useInstallTenant } from \"./useInstallTenant.js\";\n\ninterface InstallTenantProps {\n tenant: TenantEntry;\n}\n\nexport const InstallTenant = ({ tenant }: InstallTenantProps) => {\n const { installTenant, loading } = useInstallTenant(tenant);\n\n return (\n <Button\n variant={\"primary\"}\n onClick={installTenant}\n disabled={loading}\n text={loading ? \"Installing...\" : \"Install\"}\n />\n );\n};\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,MAAM,QAAQ,kBAAkB;AAEzC,SAASC,gBAAgB;AAMzB,OAAO,MAAMC,aAAa,GAAGA,CAAC;EAAEC;AAA2B,CAAC,KAAK;EAC7D,MAAM;IAAEC,aAAa;IAAEC;EAAQ,CAAC,GAAGJ,gBAAgB,CAACE,MAAM,CAAC;EAE3D,oBACIJ,KAAA,CAAAO,aAAA,CAACN,MAAM;IACHO,OAAO,EAAE,SAAU;IACnBC,OAAO,EAAEJ,aAAc;IACvBK,QAAQ,EAAEJ,OAAQ;IAClBK,IAAI,EAAEL,OAAO,GAAG,eAAe,GAAG;EAAU,CAC/C,CAAC;AAEV,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export declare const INSTALL_TENANT: import("graphql").DocumentNode;
|
|
2
|
+
export interface InstallTenantResponse {
|
|
3
|
+
tenantManager: {
|
|
4
|
+
installTenant: {
|
|
5
|
+
data: boolean;
|
|
6
|
+
error?: null;
|
|
7
|
+
} | {
|
|
8
|
+
data: null;
|
|
9
|
+
error: {
|
|
10
|
+
code: string;
|
|
11
|
+
message: string;
|
|
12
|
+
data: Record<string, any>;
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
};
|
|
16
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import gql from "graphql-tag";
|
|
2
|
+
export const INSTALL_TENANT = gql`
|
|
3
|
+
mutation InstallTenant($tenantId: ID!) {
|
|
4
|
+
tenantManager {
|
|
5
|
+
installTenant(tenantId: $tenantId) {
|
|
6
|
+
data
|
|
7
|
+
error {
|
|
8
|
+
code
|
|
9
|
+
message
|
|
10
|
+
data
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
`;
|
|
16
|
+
|
|
17
|
+
//# sourceMappingURL=installTenant.gql.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["gql","INSTALL_TENANT"],"sources":["installTenant.gql.ts"],"sourcesContent":["import gql from \"graphql-tag\";\n\nexport const INSTALL_TENANT = gql`\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\nexport interface 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"],"mappings":"AAAA,OAAOA,GAAG,MAAM,aAAa;AAE7B,OAAO,MAAMC,cAAc,GAAGD,GAAG;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { useCallback } from "react";
|
|
2
|
+
import { useMutation } from "@apollo/react-hooks";
|
|
3
|
+
import { useToast } from "@webiny/admin-ui";
|
|
4
|
+
import { useRecords } from "@webiny/app-aco";
|
|
5
|
+
import { INSTALL_TENANT } from "./installTenant.gql.js";
|
|
6
|
+
export const useInstallTenant = tenant => {
|
|
7
|
+
const toast = useToast();
|
|
8
|
+
const {
|
|
9
|
+
updateRecordInCache
|
|
10
|
+
} = useRecords();
|
|
11
|
+
const [runMutation, mutation] = useMutation(INSTALL_TENANT);
|
|
12
|
+
const installTenant = useCallback(async () => {
|
|
13
|
+
const {
|
|
14
|
+
data
|
|
15
|
+
} = await runMutation({
|
|
16
|
+
variables: {
|
|
17
|
+
tenantId: tenant.entryId
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
if (data?.tenantManager.installTenant.error) {
|
|
21
|
+
toast.showWarningToast({
|
|
22
|
+
title: "Could not install tenant",
|
|
23
|
+
description: data?.tenantManager.installTenant.error.message,
|
|
24
|
+
duration: Infinity
|
|
25
|
+
});
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
toast.showSuccessToast({
|
|
29
|
+
title: "Tenant installed successfully!"
|
|
30
|
+
});
|
|
31
|
+
updateRecordInCache({
|
|
32
|
+
...tenant,
|
|
33
|
+
values: {
|
|
34
|
+
...tenant.values,
|
|
35
|
+
status: "enabled",
|
|
36
|
+
isInstalled: true
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
}, [tenant]);
|
|
40
|
+
return {
|
|
41
|
+
installTenant,
|
|
42
|
+
loading: mutation.loading
|
|
43
|
+
};
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
//# sourceMappingURL=useInstallTenant.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useCallback","useMutation","useToast","useRecords","INSTALL_TENANT","useInstallTenant","tenant","toast","updateRecordInCache","runMutation","mutation","installTenant","data","variables","tenantId","entryId","tenantManager","error","showWarningToast","title","description","message","duration","Infinity","showSuccessToast","values","status","isInstalled","loading"],"sources":["useInstallTenant.ts"],"sourcesContent":["import { useCallback } from \"react\";\nimport { useMutation } from \"@apollo/react-hooks\";\nimport { useToast } from \"@webiny/admin-ui\";\nimport { useRecords } from \"@webiny/app-aco\";\nimport { TenantEntry } from \"../../types.js\";\nimport { InstallTenantResponse, INSTALL_TENANT } from \"./installTenant.gql.js\";\n\nexport const useInstallTenant = (tenant: TenantEntry) => {\n const toast = useToast();\n const { updateRecordInCache } = useRecords();\n const [runMutation, mutation] = useMutation<InstallTenantResponse>(INSTALL_TENANT);\n\n const installTenant = useCallback(async () => {\n const { data } = await runMutation({ variables: { tenantId: tenant.entryId } });\n if (data?.tenantManager.installTenant.error) {\n toast.showWarningToast({\n title: \"Could not install tenant\",\n description: data?.tenantManager.installTenant.error.message,\n duration: Infinity\n });\n return;\n }\n\n toast.showSuccessToast({ title: \"Tenant installed successfully!\" });\n\n updateRecordInCache({\n ...tenant,\n values: {\n ...tenant.values,\n status: \"enabled\",\n isInstalled: true\n }\n });\n }, [tenant]);\n\n return { installTenant, loading: mutation.loading };\n};\n"],"mappings":"AAAA,SAASA,WAAW,QAAQ,OAAO;AACnC,SAASC,WAAW,QAAQ,qBAAqB;AACjD,SAASC,QAAQ,QAAQ,kBAAkB;AAC3C,SAASC,UAAU,QAAQ,iBAAiB;AAE5C,SAAgCC,cAAc;AAE9C,OAAO,MAAMC,gBAAgB,GAAIC,MAAmB,IAAK;EACrD,MAAMC,KAAK,GAAGL,QAAQ,CAAC,CAAC;EACxB,MAAM;IAAEM;EAAoB,CAAC,GAAGL,UAAU,CAAC,CAAC;EAC5C,MAAM,CAACM,WAAW,EAAEC,QAAQ,CAAC,GAAGT,WAAW,CAAwBG,cAAc,CAAC;EAElF,MAAMO,aAAa,GAAGX,WAAW,CAAC,YAAY;IAC1C,MAAM;MAAEY;IAAK,CAAC,GAAG,MAAMH,WAAW,CAAC;MAAEI,SAAS,EAAE;QAAEC,QAAQ,EAAER,MAAM,CAACS;MAAQ;IAAE,CAAC,CAAC;IAC/E,IAAIH,IAAI,EAAEI,aAAa,CAACL,aAAa,CAACM,KAAK,EAAE;MACzCV,KAAK,CAACW,gBAAgB,CAAC;QACnBC,KAAK,EAAE,0BAA0B;QACjCC,WAAW,EAAER,IAAI,EAAEI,aAAa,CAACL,aAAa,CAACM,KAAK,CAACI,OAAO;QAC5DC,QAAQ,EAAEC;MACd,CAAC,CAAC;MACF;IACJ;IAEAhB,KAAK,CAACiB,gBAAgB,CAAC;MAAEL,KAAK,EAAE;IAAiC,CAAC,CAAC;IAEnEX,mBAAmB,CAAC;MAChB,GAAGF,MAAM;MACTmB,MAAM,EAAE;QACJ,GAAGnB,MAAM,CAACmB,MAAM;QAChBC,MAAM,EAAE,SAAS;QACjBC,WAAW,EAAE;MACjB;IACJ,CAAC,CAAC;EACN,CAAC,EAAE,CAACrB,MAAM,CAAC,CAAC;EAEZ,OAAO;IAAEK,aAAa;IAAEiB,OAAO,EAAElB,QAAQ,CAACkB;EAAQ,CAAC;AACvD,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import React, { useCallback } from "react";
|
|
2
|
+
import { Button } from "@webiny/admin-ui";
|
|
3
|
+
import { useTenantContext } from "@webiny/app-admin";
|
|
4
|
+
export const ManageTenant = ({
|
|
5
|
+
tenant
|
|
6
|
+
}) => {
|
|
7
|
+
const {
|
|
8
|
+
setTenant
|
|
9
|
+
} = useTenantContext();
|
|
10
|
+
const switchToTenant = useCallback(() => {
|
|
11
|
+
localStorage.removeItem("webiny_wb_page_latest_visited_folder");
|
|
12
|
+
setTenant(tenant.entryId);
|
|
13
|
+
}, [tenant]);
|
|
14
|
+
return /*#__PURE__*/React.createElement(Button, {
|
|
15
|
+
variant: "secondary",
|
|
16
|
+
onClick: switchToTenant,
|
|
17
|
+
text: "Manage"
|
|
18
|
+
});
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
//# sourceMappingURL=ManageTenant.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","useCallback","Button","useTenantContext","ManageTenant","tenant","setTenant","switchToTenant","localStorage","removeItem","entryId","createElement","variant","onClick","text"],"sources":["ManageTenant.tsx"],"sourcesContent":["import React, { useCallback } from \"react\";\nimport { Button } from \"@webiny/admin-ui\";\nimport { useTenantContext } from \"@webiny/app-admin\";\nimport type { TenantEntry } from \"../types.js\";\n\ninterface ManageTenantProps {\n tenant: TenantEntry;\n}\n\nexport const ManageTenant = ({ tenant }: ManageTenantProps) => {\n const { setTenant } = useTenantContext();\n const switchToTenant = useCallback(() => {\n localStorage.removeItem(\"webiny_wb_page_latest_visited_folder\");\n setTenant(tenant.entryId);\n }, [tenant]);\n\n return <Button variant={\"secondary\"} onClick={switchToTenant} text={\"Manage\"} />;\n};\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,WAAW,QAAQ,OAAO;AAC1C,SAASC,MAAM,QAAQ,kBAAkB;AACzC,SAASC,gBAAgB,QAAQ,mBAAmB;AAOpD,OAAO,MAAMC,YAAY,GAAGA,CAAC;EAAEC;AAA0B,CAAC,KAAK;EAC3D,MAAM;IAAEC;EAAU,CAAC,GAAGH,gBAAgB,CAAC,CAAC;EACxC,MAAMI,cAAc,GAAGN,WAAW,CAAC,MAAM;IACrCO,YAAY,CAACC,UAAU,CAAC,sCAAsC,CAAC;IAC/DH,SAAS,CAACD,MAAM,CAACK,OAAO,CAAC;EAC7B,CAAC,EAAE,CAACL,MAAM,CAAC,CAAC;EAEZ,oBAAOL,KAAA,CAAAW,aAAA,CAACT,MAAM;IAACU,OAAO,EAAE,WAAY;IAACC,OAAO,EAAEN,cAAe;IAACO,IAAI,EAAE;EAAS,CAAE,CAAC;AACpF,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { ContentEntryListConfig } from "@webiny/app-headless-cms";
|
|
3
|
+
import { InstallTenant } from "./InstallTenantButton/InstallTenant.js";
|
|
4
|
+
import { ManageTenant } from "./ManageTenant.js";
|
|
5
|
+
import { EnableTenant } from "./EnableTenant/EnableTenant.js";
|
|
6
|
+
const {
|
|
7
|
+
Browser
|
|
8
|
+
} = ContentEntryListConfig;
|
|
9
|
+
const {
|
|
10
|
+
useTableRow,
|
|
11
|
+
isFolderRow
|
|
12
|
+
} = Browser.Table.Column;
|
|
13
|
+
export const TenantCell = () => {
|
|
14
|
+
// useTableRow() allows you to access the entire data of the current row.
|
|
15
|
+
const {
|
|
16
|
+
row
|
|
17
|
+
} = useTableRow();
|
|
18
|
+
|
|
19
|
+
// isFolderRow() allows for custom rendering when the current row is a folder.
|
|
20
|
+
if (isFolderRow(row)) {
|
|
21
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, "-");
|
|
22
|
+
}
|
|
23
|
+
const tenant = row.data;
|
|
24
|
+
if (!tenant.values.isInstalled) {
|
|
25
|
+
return /*#__PURE__*/React.createElement(InstallTenant, {
|
|
26
|
+
tenant: tenant
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
if (tenant.values.status === "disabled") {
|
|
30
|
+
return /*#__PURE__*/React.createElement(EnableTenant, {
|
|
31
|
+
tenant: tenant
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
return /*#__PURE__*/React.createElement(ManageTenant, {
|
|
35
|
+
tenant: tenant
|
|
36
|
+
});
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
//# sourceMappingURL=TenantCell.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","ContentEntryListConfig","InstallTenant","ManageTenant","EnableTenant","Browser","useTableRow","isFolderRow","Table","Column","TenantCell","row","createElement","Fragment","tenant","data","values","isInstalled","status"],"sources":["TenantCell.tsx"],"sourcesContent":["import React from \"react\";\nimport { ContentEntryListConfig } from \"@webiny/app-headless-cms\";\nimport { TenantEntry } from \"../types.js\";\nimport { InstallTenant } from \"./InstallTenantButton/InstallTenant.js\";\nimport { ManageTenant } from \"./ManageTenant.js\";\nimport { EnableTenant } from \"~/admin/TenantEntryList/EnableTenant/EnableTenant.js\";\n\nconst { Browser } = ContentEntryListConfig;\nconst { useTableRow, isFolderRow } = Browser.Table.Column;\n\nexport const TenantCell = () => {\n // useTableRow() allows you to access the entire data of the current row.\n const { row } = useTableRow<TenantEntry>();\n\n // isFolderRow() allows for custom rendering when the current row is a folder.\n if (isFolderRow(row)) {\n return <>{\"-\"}</>;\n }\n\n const tenant = row.data;\n\n if (!tenant.values.isInstalled) {\n return <InstallTenant tenant={tenant} />;\n }\n\n if (tenant.values.status === \"disabled\") {\n return <EnableTenant tenant={tenant} />;\n }\n\n return <ManageTenant tenant={tenant} />;\n};\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,sBAAsB,QAAQ,0BAA0B;AAEjE,SAASC,aAAa;AACtB,SAASC,YAAY;AACrB,SAASC,YAAY;AAErB,MAAM;EAAEC;AAAQ,CAAC,GAAGJ,sBAAsB;AAC1C,MAAM;EAAEK,WAAW;EAAEC;AAAY,CAAC,GAAGF,OAAO,CAACG,KAAK,CAACC,MAAM;AAEzD,OAAO,MAAMC,UAAU,GAAGA,CAAA,KAAM;EAC5B;EACA,MAAM;IAAEC;EAAI,CAAC,GAAGL,WAAW,CAAc,CAAC;;EAE1C;EACA,IAAIC,WAAW,CAACI,GAAG,CAAC,EAAE;IAClB,oBAAOX,KAAA,CAAAY,aAAA,CAAAZ,KAAA,CAAAa,QAAA,QAAG,GAAM,CAAC;EACrB;EAEA,MAAMC,MAAM,GAAGH,GAAG,CAACI,IAAI;EAEvB,IAAI,CAACD,MAAM,CAACE,MAAM,CAACC,WAAW,EAAE;IAC5B,oBAAOjB,KAAA,CAAAY,aAAA,CAACV,aAAa;MAACY,MAAM,EAAEA;IAAO,CAAE,CAAC;EAC5C;EAEA,IAAIA,MAAM,CAACE,MAAM,CAACE,MAAM,KAAK,UAAU,EAAE;IACrC,oBAAOlB,KAAA,CAAAY,aAAA,CAACR,YAAY;MAACU,MAAM,EAAEA;IAAO,CAAE,CAAC;EAC3C;EAEA,oBAAOd,KAAA,CAAAY,aAAA,CAACT,YAAY;IAACW,MAAM,EAAEA;EAAO,CAAE,CAAC;AAC3C,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { Icon, Link, Text } from "@webiny/admin-ui";
|
|
3
|
+
import { ReactComponent as File } from "@webiny/icons/description.svg";
|
|
4
|
+
import { ContentEntryListConfig } from "@webiny/app-headless-cms";
|
|
5
|
+
import { FolderNameCell } from "./FolderNameCell.js";
|
|
6
|
+
import { useContentEntriesList } from "@webiny/app-headless-cms/exports/admin/cms/entry/list.js";
|
|
7
|
+
const TenantName = ({
|
|
8
|
+
tenant
|
|
9
|
+
}) => {
|
|
10
|
+
const {
|
|
11
|
+
getEntryEditUrl
|
|
12
|
+
} = useContentEntriesList();
|
|
13
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
14
|
+
className: "flex flex-col gap-y-[3px]"
|
|
15
|
+
}, /*#__PURE__*/React.createElement(Link, {
|
|
16
|
+
to: getEntryEditUrl(tenant),
|
|
17
|
+
variant: "secondary",
|
|
18
|
+
className: "truncate no-underline!"
|
|
19
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
20
|
+
className: "flex w-full items-center"
|
|
21
|
+
}, /*#__PURE__*/React.createElement(Icon, {
|
|
22
|
+
size: "sm",
|
|
23
|
+
color: "neutral-strong",
|
|
24
|
+
className: "mr-xs",
|
|
25
|
+
icon: /*#__PURE__*/React.createElement(File, null),
|
|
26
|
+
label: `Tenant - ${tenant.values.name}`
|
|
27
|
+
}), /*#__PURE__*/React.createElement(Text, {
|
|
28
|
+
as: "div",
|
|
29
|
+
className: "truncate min-w-0 shrink"
|
|
30
|
+
}, tenant.values.name))), /*#__PURE__*/React.createElement(Text, {
|
|
31
|
+
as: "div",
|
|
32
|
+
size: "sm",
|
|
33
|
+
className: "text-neutral-dimmed"
|
|
34
|
+
}, "ID: ", tenant.entryId));
|
|
35
|
+
};
|
|
36
|
+
export const TenantNameCell = () => {
|
|
37
|
+
const {
|
|
38
|
+
useTableRow,
|
|
39
|
+
isFolderRow
|
|
40
|
+
} = ContentEntryListConfig.Browser.Table.Column;
|
|
41
|
+
const {
|
|
42
|
+
row
|
|
43
|
+
} = useTableRow();
|
|
44
|
+
if (isFolderRow(row)) {
|
|
45
|
+
return /*#__PURE__*/React.createElement(FolderNameCell, {
|
|
46
|
+
folder: row.data
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
return /*#__PURE__*/React.createElement(TenantName, {
|
|
50
|
+
tenant: row.data
|
|
51
|
+
});
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
//# sourceMappingURL=TenantNameCell.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","Icon","Link","Text","ReactComponent","File","ContentEntryListConfig","FolderNameCell","useContentEntriesList","TenantName","tenant","getEntryEditUrl","createElement","className","to","variant","size","color","icon","label","values","name","as","entryId","TenantNameCell","useTableRow","isFolderRow","Browser","Table","Column","row","folder","data"],"sources":["TenantNameCell.tsx"],"sourcesContent":["import React from \"react\";\nimport { Icon, Link, Text } from \"@webiny/admin-ui\";\nimport { ReactComponent as File } from \"@webiny/icons/description.svg\";\nimport { ContentEntryListConfig } from \"@webiny/app-headless-cms\";\nimport { FolderNameCell } from \"./FolderNameCell.js\";\nimport type { TenantEntry } from \"~/admin/types.js\";\nimport { useContentEntriesList } from \"@webiny/app-headless-cms/exports/admin/cms/entry/list.js\";\n\ninterface TenantNameProps {\n tenant: TenantEntry;\n}\n\nconst TenantName = ({ tenant }: TenantNameProps) => {\n const { getEntryEditUrl } = useContentEntriesList();\n\n return (\n <div className={\"flex flex-col gap-y-[3px]\"}>\n <Link\n to={getEntryEditUrl(tenant)}\n variant={\"secondary\"}\n className={\"truncate no-underline!\"}\n >\n <div className={\"flex w-full items-center\"}>\n <Icon\n size={\"sm\"}\n color={\"neutral-strong\"}\n className={\"mr-xs\"}\n icon={<File />}\n label={`Tenant - ${tenant.values.name}`}\n />\n <Text as={\"div\"} className={\"truncate min-w-0 shrink\"}>\n {tenant.values.name}\n </Text>\n </div>\n </Link>\n <Text as={\"div\"} size={\"sm\"} className={\"text-neutral-dimmed\"}>\n ID: {tenant.entryId}\n </Text>\n </div>\n );\n};\n\nexport const TenantNameCell = () => {\n const { useTableRow, isFolderRow } = ContentEntryListConfig.Browser.Table.Column;\n const { row } = useTableRow<TenantEntry>();\n\n if (isFolderRow(row)) {\n return <FolderNameCell folder={row.data} />;\n }\n\n return <TenantName tenant={row.data} />;\n};\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,IAAI,EAAEC,IAAI,EAAEC,IAAI,QAAQ,kBAAkB;AACnD,SAASC,cAAc,IAAIC,IAAI,QAAQ,+BAA+B;AACtE,SAASC,sBAAsB,QAAQ,0BAA0B;AACjE,SAASC,cAAc;AAEvB,SAASC,qBAAqB,QAAQ,0DAA0D;AAMhG,MAAMC,UAAU,GAAGA,CAAC;EAAEC;AAAwB,CAAC,KAAK;EAChD,MAAM;IAAEC;EAAgB,CAAC,GAAGH,qBAAqB,CAAC,CAAC;EAEnD,oBACIR,KAAA,CAAAY,aAAA;IAAKC,SAAS,EAAE;EAA4B,gBACxCb,KAAA,CAAAY,aAAA,CAACV,IAAI;IACDY,EAAE,EAAEH,eAAe,CAACD,MAAM,CAAE;IAC5BK,OAAO,EAAE,WAAY;IACrBF,SAAS,EAAE;EAAyB,gBAEpCb,KAAA,CAAAY,aAAA;IAAKC,SAAS,EAAE;EAA2B,gBACvCb,KAAA,CAAAY,aAAA,CAACX,IAAI;IACDe,IAAI,EAAE,IAAK;IACXC,KAAK,EAAE,gBAAiB;IACxBJ,SAAS,EAAE,OAAQ;IACnBK,IAAI,eAAElB,KAAA,CAAAY,aAAA,CAACP,IAAI,MAAE,CAAE;IACfc,KAAK,EAAE,YAAYT,MAAM,CAACU,MAAM,CAACC,IAAI;EAAG,CAC3C,CAAC,eACFrB,KAAA,CAAAY,aAAA,CAACT,IAAI;IAACmB,EAAE,EAAE,KAAM;IAACT,SAAS,EAAE;EAA0B,GACjDH,MAAM,CAACU,MAAM,CAACC,IACb,CACL,CACH,CAAC,eACPrB,KAAA,CAAAY,aAAA,CAACT,IAAI;IAACmB,EAAE,EAAE,KAAM;IAACN,IAAI,EAAE,IAAK;IAACH,SAAS,EAAE;EAAsB,GAAC,MACvD,EAACH,MAAM,CAACa,OACV,CACL,CAAC;AAEd,CAAC;AAED,OAAO,MAAMC,cAAc,GAAGA,CAAA,KAAM;EAChC,MAAM;IAAEC,WAAW;IAAEC;EAAY,CAAC,GAAGpB,sBAAsB,CAACqB,OAAO,CAACC,KAAK,CAACC,MAAM;EAChF,MAAM;IAAEC;EAAI,CAAC,GAAGL,WAAW,CAAc,CAAC;EAE1C,IAAIC,WAAW,CAACI,GAAG,CAAC,EAAE;IAClB,oBAAO9B,KAAA,CAAAY,aAAA,CAACL,cAAc;MAACwB,MAAM,EAAED,GAAG,CAACE;IAAK,CAAE,CAAC;EAC/C;EAEA,oBAAOhC,KAAA,CAAAY,aAAA,CAACH,UAAU;IAACC,MAAM,EAAEoB,GAAG,CAACE;EAAK,CAAE,CAAC;AAC3C,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { useModel } from "@webiny/app-headless-cms/exports/admin/cms.js";
|
|
3
|
+
import { ContentEntryListConfig } from "@webiny/app-headless-cms/exports/admin/cms/entry/list.js";
|
|
4
|
+
import { ReactComponent as DisableIcon } from "@webiny/icons/power_off.svg";
|
|
5
|
+
import { TenantCell } from "./TenantEntryList/TenantCell.js";
|
|
6
|
+
import { TENANT_MODEL_ID } from "../shared/constants.js";
|
|
7
|
+
import { useDisableTenantDialog } from "./TenantEntryList/DisableTenant/useDisableTenantDialog.js";
|
|
8
|
+
import { TenantNameCell } from "./TenantEntryList/TenantNameCell.js";
|
|
9
|
+
const {
|
|
10
|
+
Browser
|
|
11
|
+
} = ContentEntryListConfig;
|
|
12
|
+
const EntryAction = Browser.Entry.Action;
|
|
13
|
+
const {
|
|
14
|
+
useTableRow
|
|
15
|
+
} = Browser.Table.Column;
|
|
16
|
+
const WithDisableAction = ({
|
|
17
|
+
children
|
|
18
|
+
}) => {
|
|
19
|
+
// useTableRow() allows you to access the entire data of the current row.
|
|
20
|
+
const {
|
|
21
|
+
row
|
|
22
|
+
} = useTableRow();
|
|
23
|
+
const {
|
|
24
|
+
disableEntry
|
|
25
|
+
} = useDisableTenantDialog({
|
|
26
|
+
record: row.data
|
|
27
|
+
});
|
|
28
|
+
if (row.data.values.status === "enabled") {
|
|
29
|
+
return /*#__PURE__*/React.createElement(EntryAction.OptionsMenuItem, {
|
|
30
|
+
icon: /*#__PURE__*/React.createElement(DisableIcon, null),
|
|
31
|
+
label: "Disable",
|
|
32
|
+
onAction: disableEntry,
|
|
33
|
+
"data-testid": "aco.actions.entry.delete",
|
|
34
|
+
className: "text-destructive-primary! [&_svg]:fill-destructive"
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, children);
|
|
38
|
+
};
|
|
39
|
+
const DeleteActionDecorator = EntryAction.createDecorator(Original => {
|
|
40
|
+
return function DeleteAction(props) {
|
|
41
|
+
const {
|
|
42
|
+
model
|
|
43
|
+
} = useModel();
|
|
44
|
+
if (model.modelId !== TENANT_MODEL_ID) {
|
|
45
|
+
return /*#__PURE__*/React.createElement(Original, props);
|
|
46
|
+
}
|
|
47
|
+
if (props.name === "delete") {
|
|
48
|
+
return /*#__PURE__*/React.createElement(Original, Object.assign({}, props, {
|
|
49
|
+
element: /*#__PURE__*/React.createElement(WithDisableAction, null, props.element)
|
|
50
|
+
}));
|
|
51
|
+
}
|
|
52
|
+
return /*#__PURE__*/React.createElement(Original, props);
|
|
53
|
+
};
|
|
54
|
+
});
|
|
55
|
+
export const TenantEntryList = () => {
|
|
56
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(DeleteActionDecorator, null), /*#__PURE__*/React.createElement(ContentEntryListConfig, null, /*#__PURE__*/React.createElement(Browser.Table.Column, {
|
|
57
|
+
hideable: false,
|
|
58
|
+
name: "name",
|
|
59
|
+
header: "Name",
|
|
60
|
+
modelIds: [TENANT_MODEL_ID],
|
|
61
|
+
cell: /*#__PURE__*/React.createElement(TenantNameCell, null)
|
|
62
|
+
}), /*#__PURE__*/React.createElement(Browser.Table.Column, {
|
|
63
|
+
name: "tenant",
|
|
64
|
+
header: "Tenant",
|
|
65
|
+
modelIds: [TENANT_MODEL_ID],
|
|
66
|
+
cell: /*#__PURE__*/React.createElement(TenantCell, null),
|
|
67
|
+
before: "actions"
|
|
68
|
+
})));
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
//# sourceMappingURL=TenantEntryList.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","useModel","ContentEntryListConfig","ReactComponent","DisableIcon","TenantCell","TENANT_MODEL_ID","useDisableTenantDialog","TenantNameCell","Browser","EntryAction","Entry","Action","useTableRow","Table","Column","WithDisableAction","children","row","disableEntry","record","data","values","status","createElement","OptionsMenuItem","icon","label","onAction","className","Fragment","DeleteActionDecorator","createDecorator","Original","DeleteAction","props","model","modelId","name","Object","assign","element","TenantEntryList","hideable","header","modelIds","cell","before"],"sources":["TenantEntryList.tsx"],"sourcesContent":["import React from \"react\";\nimport { useModel } from \"@webiny/app-headless-cms/exports/admin/cms.js\";\nimport { ContentEntryListConfig } from \"@webiny/app-headless-cms/exports/admin/cms/entry/list.js\";\nimport { ReactComponent as DisableIcon } from \"@webiny/icons/power_off.svg\";\nimport { TenantCell } from \"./TenantEntryList/TenantCell.js\";\nimport { TENANT_MODEL_ID } from \"~/shared/constants.js\";\nimport type { TenantEntry } from \"~/admin/types.js\";\nimport { useDisableTenantDialog } from \"~/admin/TenantEntryList/DisableTenant/useDisableTenantDialog.js\";\nimport { TenantNameCell } from \"~/admin/TenantEntryList/TenantNameCell.js\";\n\nconst { Browser } = ContentEntryListConfig;\nconst EntryAction = Browser.Entry.Action;\nconst { useTableRow } = Browser.Table.Column;\n\ninterface WithDisableActionProps {\n children: React.ReactNode;\n}\n\nconst WithDisableAction = ({ children }: WithDisableActionProps) => {\n // useTableRow() allows you to access the entire data of the current row.\n const { row } = useTableRow<TenantEntry>();\n const { disableEntry } = useDisableTenantDialog({ record: row.data });\n\n if (row.data.values.status === \"enabled\") {\n return (\n <EntryAction.OptionsMenuItem\n icon={<DisableIcon />}\n label={\"Disable\"}\n onAction={disableEntry}\n data-testid={\"aco.actions.entry.delete\"}\n className={\"text-destructive-primary! [&_svg]:fill-destructive\"}\n />\n );\n }\n\n return <>{children}</>;\n};\n\nconst DeleteActionDecorator = EntryAction.createDecorator(Original => {\n return function DeleteAction(props) {\n const { model } = useModel();\n\n if (model.modelId !== TENANT_MODEL_ID) {\n return <Original {...props} />;\n }\n\n if (props.name === \"delete\") {\n return (\n <Original\n {...props}\n element={<WithDisableAction>{props.element}</WithDisableAction>}\n />\n );\n }\n\n return <Original {...props} />;\n };\n});\n\nexport const TenantEntryList = () => {\n return (\n <>\n <DeleteActionDecorator />\n <ContentEntryListConfig>\n <Browser.Table.Column\n hideable={false}\n name={\"name\"}\n header={\"Name\"}\n modelIds={[TENANT_MODEL_ID]}\n cell={<TenantNameCell />}\n />\n <Browser.Table.Column\n name={\"tenant\"}\n header={\"Tenant\"}\n modelIds={[TENANT_MODEL_ID]}\n cell={<TenantCell />}\n before={\"actions\"}\n />\n </ContentEntryListConfig>\n </>\n );\n};\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,QAAQ,QAAQ,+CAA+C;AACxE,SAASC,sBAAsB,QAAQ,0DAA0D;AACjG,SAASC,cAAc,IAAIC,WAAW,QAAQ,6BAA6B;AAC3E,SAASC,UAAU;AACnB,SAASC,eAAe;AAExB,SAASC,sBAAsB;AAC/B,SAASC,cAAc;AAEvB,MAAM;EAAEC;AAAQ,CAAC,GAAGP,sBAAsB;AAC1C,MAAMQ,WAAW,GAAGD,OAAO,CAACE,KAAK,CAACC,MAAM;AACxC,MAAM;EAAEC;AAAY,CAAC,GAAGJ,OAAO,CAACK,KAAK,CAACC,MAAM;AAM5C,MAAMC,iBAAiB,GAAGA,CAAC;EAAEC;AAAiC,CAAC,KAAK;EAChE;EACA,MAAM;IAAEC;EAAI,CAAC,GAAGL,WAAW,CAAc,CAAC;EAC1C,MAAM;IAAEM;EAAa,CAAC,GAAGZ,sBAAsB,CAAC;IAAEa,MAAM,EAAEF,GAAG,CAACG;EAAK,CAAC,CAAC;EAErE,IAAIH,GAAG,CAACG,IAAI,CAACC,MAAM,CAACC,MAAM,KAAK,SAAS,EAAE;IACtC,oBACIvB,KAAA,CAAAwB,aAAA,CAACd,WAAW,CAACe,eAAe;MACxBC,IAAI,eAAE1B,KAAA,CAAAwB,aAAA,CAACpB,WAAW,MAAE,CAAE;MACtBuB,KAAK,EAAE,SAAU;MACjBC,QAAQ,EAAET,YAAa;MACvB,eAAa,0BAA2B;MACxCU,SAAS,EAAE;IAAqD,CACnE,CAAC;EAEV;EAEA,oBAAO7B,KAAA,CAAAwB,aAAA,CAAAxB,KAAA,CAAA8B,QAAA,QAAGb,QAAW,CAAC;AAC1B,CAAC;AAED,MAAMc,qBAAqB,GAAGrB,WAAW,CAACsB,eAAe,CAACC,QAAQ,IAAI;EAClE,OAAO,SAASC,YAAYA,CAACC,KAAK,EAAE;IAChC,MAAM;MAAEC;IAAM,CAAC,GAAGnC,QAAQ,CAAC,CAAC;IAE5B,IAAImC,KAAK,CAACC,OAAO,KAAK/B,eAAe,EAAE;MACnC,oBAAON,KAAA,CAAAwB,aAAA,CAACS,QAAQ,EAAKE,KAAQ,CAAC;IAClC;IAEA,IAAIA,KAAK,CAACG,IAAI,KAAK,QAAQ,EAAE;MACzB,oBACItC,KAAA,CAAAwB,aAAA,CAACS,QAAQ,EAAAM,MAAA,CAAAC,MAAA,KACDL,KAAK;QACTM,OAAO,eAAEzC,KAAA,CAAAwB,aAAA,CAACR,iBAAiB,QAAEmB,KAAK,CAACM,OAA2B;MAAE,EACnE,CAAC;IAEV;IAEA,oBAAOzC,KAAA,CAAAwB,aAAA,CAACS,QAAQ,EAAKE,KAAQ,CAAC;EAClC,CAAC;AACL,CAAC,CAAC;AAEF,OAAO,MAAMO,eAAe,GAAGA,CAAA,KAAM;EACjC,oBACI1C,KAAA,CAAAwB,aAAA,CAAAxB,KAAA,CAAA8B,QAAA,qBACI9B,KAAA,CAAAwB,aAAA,CAACO,qBAAqB,MAAE,CAAC,eACzB/B,KAAA,CAAAwB,aAAA,CAACtB,sBAAsB,qBACnBF,KAAA,CAAAwB,aAAA,CAACf,OAAO,CAACK,KAAK,CAACC,MAAM;IACjB4B,QAAQ,EAAE,KAAM;IAChBL,IAAI,EAAE,MAAO;IACbM,MAAM,EAAE,MAAO;IACfC,QAAQ,EAAE,CAACvC,eAAe,CAAE;IAC5BwC,IAAI,eAAE9C,KAAA,CAAAwB,aAAA,CAAChB,cAAc,MAAE;EAAE,CAC5B,CAAC,eACFR,KAAA,CAAAwB,aAAA,CAACf,OAAO,CAACK,KAAK,CAACC,MAAM;IACjBuB,IAAI,EAAE,QAAS;IACfM,MAAM,EAAE,QAAS;IACjBC,QAAQ,EAAE,CAACvC,eAAe,CAAE;IAC5BwC,IAAI,eAAE9C,KAAA,CAAAwB,aAAA,CAACnB,UAAU,MAAE,CAAE;IACrB0C,MAAM,EAAE;EAAU,CACrB,CACmB,CAC1B,CAAC;AAEX,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { TenantSelector as BaseTenantSelector } from "@webiny/app-admin";
|
|
3
|
+
import { CopyButton, Icon, Tooltip, useToast } from "@webiny/admin-ui";
|
|
4
|
+
import { useAuthentication } from "@webiny/app-admin";
|
|
5
|
+
import { ReactComponent as TenantIcon } from "@webiny/icons/business.svg";
|
|
6
|
+
export const TenantSelector = BaseTenantSelector.createDecorator(() => {
|
|
7
|
+
return function TenantSelector() {
|
|
8
|
+
const {
|
|
9
|
+
identity
|
|
10
|
+
} = useAuthentication();
|
|
11
|
+
const currentTenant = identity.currentTenant;
|
|
12
|
+
const toast = useToast();
|
|
13
|
+
const confirmClipboard = () => {
|
|
14
|
+
toast.showSuccessToast({
|
|
15
|
+
title: "Tenant ID copied to clipboard!"
|
|
16
|
+
});
|
|
17
|
+
};
|
|
18
|
+
return /*#__PURE__*/React.createElement(Tooltip, {
|
|
19
|
+
content: /*#__PURE__*/React.createElement("div", {
|
|
20
|
+
className: "flex items-center gap-x-xs"
|
|
21
|
+
}, "ID: ", currentTenant.id, /*#__PURE__*/React.createElement(CopyButton, {
|
|
22
|
+
size: "sm",
|
|
23
|
+
value: currentTenant.id,
|
|
24
|
+
onCopy: confirmClipboard,
|
|
25
|
+
variant: "ghost-negative"
|
|
26
|
+
})),
|
|
27
|
+
side: "bottom",
|
|
28
|
+
trigger: /*#__PURE__*/React.createElement("div", {
|
|
29
|
+
className: "flex items-center gap-x-xs cursor-pointer"
|
|
30
|
+
}, /*#__PURE__*/React.createElement(Icon, {
|
|
31
|
+
label: "Root tenant",
|
|
32
|
+
icon: /*#__PURE__*/React.createElement(TenantIcon, null),
|
|
33
|
+
className: "fill-neutral-xstrong"
|
|
34
|
+
}), currentTenant.name)
|
|
35
|
+
});
|
|
36
|
+
};
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
//# sourceMappingURL=TenantSelector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","TenantSelector","BaseTenantSelector","CopyButton","Icon","Tooltip","useToast","useAuthentication","ReactComponent","TenantIcon","createDecorator","identity","currentTenant","toast","confirmClipboard","showSuccessToast","title","createElement","content","className","id","size","value","onCopy","variant","side","trigger","label","icon","name"],"sources":["TenantSelector.tsx"],"sourcesContent":["import React from \"react\";\nimport { TenantSelector as BaseTenantSelector } from \"@webiny/app-admin\";\nimport { CopyButton, Icon, Tooltip, useToast } from \"@webiny/admin-ui\";\nimport { useAuthentication } from \"@webiny/app-admin\";\nimport { ReactComponent as TenantIcon } from \"@webiny/icons/business.svg\";\n\nexport const TenantSelector = BaseTenantSelector.createDecorator(() => {\n return function TenantSelector() {\n const { identity } = useAuthentication();\n const currentTenant = identity.currentTenant;\n const toast = useToast();\n\n const confirmClipboard = () => {\n toast.showSuccessToast({\n title: \"Tenant ID copied to clipboard!\"\n });\n };\n\n return (\n <Tooltip\n content={\n <div className={\"flex items-center gap-x-xs\"}>\n ID: {currentTenant.id}\n <CopyButton\n size=\"sm\"\n value={currentTenant.id}\n onCopy={confirmClipboard}\n variant={\"ghost-negative\"}\n />\n </div>\n }\n side={\"bottom\"}\n trigger={\n <div className={\"flex items-center gap-x-xs cursor-pointer\"}>\n <Icon\n label=\"Root tenant\"\n icon={<TenantIcon />}\n className={\"fill-neutral-xstrong\"}\n />\n {currentTenant.name}\n </div>\n }\n />\n );\n };\n});\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,cAAc,IAAIC,kBAAkB,QAAQ,mBAAmB;AACxE,SAASC,UAAU,EAAEC,IAAI,EAAEC,OAAO,EAAEC,QAAQ,QAAQ,kBAAkB;AACtE,SAASC,iBAAiB,QAAQ,mBAAmB;AACrD,SAASC,cAAc,IAAIC,UAAU,QAAQ,4BAA4B;AAEzE,OAAO,MAAMR,cAAc,GAAGC,kBAAkB,CAACQ,eAAe,CAAC,MAAM;EACnE,OAAO,SAAST,cAAcA,CAAA,EAAG;IAC7B,MAAM;MAAEU;IAAS,CAAC,GAAGJ,iBAAiB,CAAC,CAAC;IACxC,MAAMK,aAAa,GAAGD,QAAQ,CAACC,aAAa;IAC5C,MAAMC,KAAK,GAAGP,QAAQ,CAAC,CAAC;IAExB,MAAMQ,gBAAgB,GAAGA,CAAA,KAAM;MAC3BD,KAAK,CAACE,gBAAgB,CAAC;QACnBC,KAAK,EAAE;MACX,CAAC,CAAC;IACN,CAAC;IAED,oBACIhB,KAAA,CAAAiB,aAAA,CAACZ,OAAO;MACJa,OAAO,eACHlB,KAAA,CAAAiB,aAAA;QAAKE,SAAS,EAAE;MAA6B,GAAC,MACtC,EAACP,aAAa,CAACQ,EAAE,eACrBpB,KAAA,CAAAiB,aAAA,CAACd,UAAU;QACPkB,IAAI,EAAC,IAAI;QACTC,KAAK,EAAEV,aAAa,CAACQ,EAAG;QACxBG,MAAM,EAAET,gBAAiB;QACzBU,OAAO,EAAE;MAAiB,CAC7B,CACA,CACR;MACDC,IAAI,EAAE,QAAS;MACfC,OAAO,eACH1B,KAAA,CAAAiB,aAAA;QAAKE,SAAS,EAAE;MAA4C,gBACxDnB,KAAA,CAAAiB,aAAA,CAACb,IAAI;QACDuB,KAAK,EAAC,aAAa;QACnBC,IAAI,eAAE5B,KAAA,CAAAiB,aAAA,CAACR,UAAU,MAAE,CAAE;QACrBU,SAAS,EAAE;MAAuB,CACrC,CAAC,EACDP,aAAa,CAACiB,IACd;IACR,CACJ,CAAC;EAEV,CAAC;AACL,CAAC,CAAC","ignoreList":[]}
|
package/admin/types.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { CmsContentEntry } from "@webiny/app-headless-cms/types.js";
|
|
2
|
+
import type { TenantValues } from "../shared/Tenant.js";
|
|
3
|
+
type BaseEntry = Omit<CmsContentEntry, "values">;
|
|
4
|
+
export interface TenantEntry extends BaseEntry {
|
|
5
|
+
values: TenantValues;
|
|
6
|
+
}
|
|
7
|
+
export {};
|
package/admin/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import { CmsContentEntry } from \"@webiny/app-headless-cms/types.js\";\nimport type { TenantValues } from \"../shared/Tenant.js\";\n\ntype BaseEntry = Omit<CmsContentEntry, \"values\">;\n\nexport interface TenantEntry extends BaseEntry {\n values: TenantValues;\n}\n"],"mappings":"","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const Extension: import("@webiny/feature/api/createFeature.js").FeatureDefinition<unknown>;
|
package/api/Extension.js
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { createFeature } from "@webiny/feature/api";
|
|
2
|
+
import TenantModel from "./domain/TenantModel.js";
|
|
3
|
+
import { CreateAndInstallTenantFeature } from "./features/CreateAndInstallTenant/feature.js";
|
|
4
|
+
import { CreateTenantFeature } from "./features/CreateTenant/feature.js";
|
|
5
|
+
import { DisableTenantFeature } from "./features/DisableTenant/feature.js";
|
|
6
|
+
import { EnableTenantFeature } from "./features/EnableTenant/feature.js";
|
|
7
|
+
import { GetTenantByIdFeature } from "./features/GetTenantById/feature.js";
|
|
8
|
+
import { GetCurrentTenantFeature } from "./features/GetCurrentTenant/feature.js";
|
|
9
|
+
import { UpdateTenantFeature } from "./features/UpdateTenant/feature.js";
|
|
10
|
+
import { DeleteTenantOnEntryDeleteFeature } from "./features/DeleteTenantOnEntryDelete/feature.js";
|
|
11
|
+
import InstallTenantSchema from "./graphql/InstallTenantSchema.js";
|
|
12
|
+
import CreateTenantSchema from "./graphql/CreateTenantSchema.js";
|
|
13
|
+
import DisableTenantSchema from "./graphql/DisableTenantSchema.js";
|
|
14
|
+
import EnableTenantSchema from "./graphql/EnableTenantSchema.js";
|
|
15
|
+
import GetCurrentTenantSchema from "./graphql/GetCurrentTenantSchema.js";
|
|
16
|
+
import { AddCmsPermissionsFeature } from "./features/AddCmsPermissions/feature.js";
|
|
17
|
+
export const Extension = createFeature({
|
|
18
|
+
name: "TenantManagement",
|
|
19
|
+
register(container) {
|
|
20
|
+
container.register(TenantModel);
|
|
21
|
+
|
|
22
|
+
//GraphQL
|
|
23
|
+
container.register(InstallTenantSchema);
|
|
24
|
+
container.register(CreateTenantSchema);
|
|
25
|
+
container.register(DisableTenantSchema);
|
|
26
|
+
container.register(EnableTenantSchema);
|
|
27
|
+
container.register(GetCurrentTenantSchema);
|
|
28
|
+
|
|
29
|
+
// Features
|
|
30
|
+
CreateAndInstallTenantFeature.register(container);
|
|
31
|
+
CreateTenantFeature.register(container);
|
|
32
|
+
DisableTenantFeature.register(container);
|
|
33
|
+
EnableTenantFeature.register(container);
|
|
34
|
+
GetTenantByIdFeature.register(container);
|
|
35
|
+
GetCurrentTenantFeature.register(container);
|
|
36
|
+
UpdateTenantFeature.register(container);
|
|
37
|
+
DeleteTenantOnEntryDeleteFeature.register(container);
|
|
38
|
+
AddCmsPermissionsFeature.register(container);
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
//# sourceMappingURL=Extension.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["createFeature","TenantModel","CreateAndInstallTenantFeature","CreateTenantFeature","DisableTenantFeature","EnableTenantFeature","GetTenantByIdFeature","GetCurrentTenantFeature","UpdateTenantFeature","DeleteTenantOnEntryDeleteFeature","InstallTenantSchema","CreateTenantSchema","DisableTenantSchema","EnableTenantSchema","GetCurrentTenantSchema","AddCmsPermissionsFeature","Extension","name","register","container"],"sources":["Extension.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport TenantModel from \"./domain/TenantModel.js\";\nimport { CreateAndInstallTenantFeature } from \"./features/CreateAndInstallTenant/feature.js\";\nimport { CreateTenantFeature } from \"./features/CreateTenant/feature.js\";\nimport { DisableTenantFeature } from \"./features/DisableTenant/feature.js\";\nimport { EnableTenantFeature } from \"./features/EnableTenant/feature.js\";\nimport { GetTenantByIdFeature } from \"./features/GetTenantById/feature.js\";\nimport { GetCurrentTenantFeature } from \"./features/GetCurrentTenant/feature.js\";\nimport { UpdateTenantFeature } from \"./features/UpdateTenant/feature.js\";\nimport { DeleteTenantOnEntryDeleteFeature } from \"./features/DeleteTenantOnEntryDelete/feature.js\";\nimport InstallTenantSchema from \"./graphql/InstallTenantSchema.js\";\nimport CreateTenantSchema from \"./graphql/CreateTenantSchema.js\";\nimport DisableTenantSchema from \"./graphql/DisableTenantSchema.js\";\nimport EnableTenantSchema from \"./graphql/EnableTenantSchema.js\";\nimport GetCurrentTenantSchema from \"./graphql/GetCurrentTenantSchema.js\";\nimport { AddCmsPermissionsFeature } from \"~/api/features/AddCmsPermissions/feature.js\";\n\nexport const Extension = createFeature({\n name: \"TenantManagement\",\n register(container) {\n container.register(TenantModel);\n\n //GraphQL\n container.register(InstallTenantSchema);\n container.register(CreateTenantSchema);\n container.register(DisableTenantSchema);\n container.register(EnableTenantSchema);\n container.register(GetCurrentTenantSchema);\n\n // Features\n CreateAndInstallTenantFeature.register(container);\n CreateTenantFeature.register(container);\n DisableTenantFeature.register(container);\n EnableTenantFeature.register(container);\n GetTenantByIdFeature.register(container);\n GetCurrentTenantFeature.register(container);\n UpdateTenantFeature.register(container);\n DeleteTenantOnEntryDeleteFeature.register(container);\n AddCmsPermissionsFeature.register(container);\n }\n});\n"],"mappings":"AAAA,SAASA,aAAa,QAAQ,qBAAqB;AACnD,OAAOC,WAAW;AAClB,SAASC,6BAA6B;AACtC,SAASC,mBAAmB;AAC5B,SAASC,oBAAoB;AAC7B,SAASC,mBAAmB;AAC5B,SAASC,oBAAoB;AAC7B,SAASC,uBAAuB;AAChC,SAASC,mBAAmB;AAC5B,SAASC,gCAAgC;AACzC,OAAOC,mBAAmB;AAC1B,OAAOC,kBAAkB;AACzB,OAAOC,mBAAmB;AAC1B,OAAOC,kBAAkB;AACzB,OAAOC,sBAAsB;AAC7B,SAASC,wBAAwB;AAEjC,OAAO,MAAMC,SAAS,GAAGhB,aAAa,CAAC;EACnCiB,IAAI,EAAE,kBAAkB;EACxBC,QAAQA,CAACC,SAAS,EAAE;IAChBA,SAAS,CAACD,QAAQ,CAACjB,WAAW,CAAC;;IAE/B;IACAkB,SAAS,CAACD,QAAQ,CAACR,mBAAmB,CAAC;IACvCS,SAAS,CAACD,QAAQ,CAACP,kBAAkB,CAAC;IACtCQ,SAAS,CAACD,QAAQ,CAACN,mBAAmB,CAAC;IACvCO,SAAS,CAACD,QAAQ,CAACL,kBAAkB,CAAC;IACtCM,SAAS,CAACD,QAAQ,CAACJ,sBAAsB,CAAC;;IAE1C;IACAZ,6BAA6B,CAACgB,QAAQ,CAACC,SAAS,CAAC;IACjDhB,mBAAmB,CAACe,QAAQ,CAACC,SAAS,CAAC;IACvCf,oBAAoB,CAACc,QAAQ,CAACC,SAAS,CAAC;IACxCd,mBAAmB,CAACa,QAAQ,CAACC,SAAS,CAAC;IACvCb,oBAAoB,CAACY,QAAQ,CAACC,SAAS,CAAC;IACxCZ,uBAAuB,CAACW,QAAQ,CAACC,SAAS,CAAC;IAC3CX,mBAAmB,CAACU,QAAQ,CAACC,SAAS,CAAC;IACvCV,gCAAgC,CAACS,QAAQ,CAACC,SAAS,CAAC;IACpDJ,wBAAwB,CAACG,QAAQ,CAACC,SAAS,CAAC;EAChD;AACJ,CAAC,CAAC","ignoreList":[]}
|