From d8f8daa60392a38bc01592465398ccff2c77a201 Mon Sep 17 00:00:00 2001 From: Abhi Kalra <99718513+abhivka7@users.noreply.github.com> Date: Tue, 18 Apr 2023 01:05:37 +0530 Subject: [PATCH] Dynamic tenancy configurations (#1394) * Dynamic multitenancy feature. Signed-off-by: Abhi Kalra * Dynamic multitenancy feature -PR feedback Signed-off-by: Abhi Kalra --------- Signed-off-by: Abhi Kalra Co-authored-by: Abhi Kalra Signed-off-by: leanneeliatra --- public/apps/account/account-nav-button.tsx | 19 +++----------- .../account/test/account-nav-button.test.tsx | 2 +- .../panels/tenant-list/manage_tab.tsx | 25 +++++++++++-------- public/plugin.ts | 6 +---- 4 files changed, 21 insertions(+), 31 deletions(-) diff --git a/public/apps/account/account-nav-button.tsx b/public/apps/account/account-nav-button.tsx index 5ab6703ec..02e04f3af 100644 --- a/public/apps/account/account-nav-button.tsx +++ b/public/apps/account/account-nav-button.tsx @@ -62,18 +62,7 @@ export function AccountNavButton(props: { }} handleSwitchAndClose={() => { setModal(null); - const lastUrls = []; - for (let i = 0; i < sessionStorage.length; i++) { - const key = sessionStorage.key(i); - if (key?.startsWith('lastUrl')) { - lastUrls.push(key); - } - } - for (let i = 0; i < lastUrls.length; i++) { - sessionStorage.removeItem(lastUrls[i]); - } - - window.location.href = window.location.pathname; + reloadAfterTenantSwitch(); }} tenant={props.tenant!} /> @@ -83,9 +72,9 @@ export function AccountNavButton(props: { React.useEffect(() => { const fetchData = async () => { try { - // setIsMultiTenancyEnabled( - // (await getDashboardsInfo(props.coreStart.http)).multitenancy_enabled - // ); + setIsMultiTenancyEnabled( + (await getDashboardsInfo(props.coreStart.http)).multitenancy_enabled + ); } catch (e) { // TODO: switch to better error display. console.error(e); diff --git a/public/apps/account/test/account-nav-button.test.tsx b/public/apps/account/test/account-nav-button.test.tsx index ff20b0f25..8baccd78e 100644 --- a/public/apps/account/test/account-nav-button.test.tsx +++ b/public/apps/account/test/account-nav-button.test.tsx @@ -171,7 +171,7 @@ describe('Account navigation button, multitenancy disabled', () => { currAuthType={'dummy'} /> ); - expect(setState).toBeCalledTimes(0); + expect(setState).toBeCalledTimes(1); }); }); diff --git a/public/apps/configuration/panels/tenant-list/manage_tab.tsx b/public/apps/configuration/panels/tenant-list/manage_tab.tsx index 8f813f82b..8dc956abf 100644 --- a/public/apps/configuration/panels/tenant-list/manage_tab.tsx +++ b/public/apps/configuration/panels/tenant-list/manage_tab.tsx @@ -67,6 +67,7 @@ import { showTableStatusMessage } from '../../utils/loading-spinner-utils'; import { useContextMenuState } from '../../utils/context-menu'; import { generateResourceName } from '../../utils/resource-utils'; import { DocLinks } from '../../constants'; +import { TenantInstructionView } from './tenant-instruction-view'; import { TenantList } from './tenant-list'; import { getBreadcrumbs, Route_MAP } from '../../app-router'; import { buildUrl } from '../../utils/url-builder'; @@ -91,29 +92,30 @@ export function ManageTab(props: AppDependencies) { const [isPrivateTenantEnabled, setIsPrivateTenantEnabled] = useState(false); const [dashboardsDefaultTenant, setDashboardsDefaultTenant] = useState(''); - const { http } = props.coreStart; - const fetchData = useCallback(async () => { try { setLoading(true); - const rawTenantData = await fetchTenants(http); + const rawTenantData = await fetchTenants(props.coreStart.http); const processedTenantData = transformTenantData(rawTenantData); - const activeTenant = await fetchCurrentTenant(http); - const currentUser = await getCurrentUser(http); + const activeTenant = await fetchCurrentTenant(props.coreStart.http); + const currentUser = await getCurrentUser(props.coreStart.http); setCurrentUsername(currentUser); setCurrentTenant(resolveTenantName(activeTenant, currentUser)); setTenantData(processedTenantData); - const tenancyConfig = await getDashboardsInfo(http); - setIsMultiTenancyEnabled(tenancyConfig.multitenancy_enabled); - setIsPrivateTenantEnabled(tenancyConfig.private_tenant_enabled); - setDashboardsDefaultTenant(tenancyConfig.default_tenant); + setIsMultiTenancyEnabled( + (await getDashboardsInfo(props.coreStart.http)).multitenancy_enabled + ); + setIsPrivateTenantEnabled( + (await getDashboardsInfo(props.coreStart.http)).private_tenant_enabled + ); + setDashboardsDefaultTenant((await getDashboardsInfo(props.coreStart.http)).default_tenant); } catch (e) { console.log(e); setErrorFlag(true); } finally { setLoading(false); } - }, [http]); + }, [props.coreStart.http]); React.useEffect(() => { fetchData(); @@ -477,6 +479,9 @@ export function ManageTab(props: AppDependencies) { ); }; + if (!props.config.multitenancy.enabled) { + return ; + } /* eslint-disable */ return ( <> diff --git a/public/plugin.ts b/public/plugin.ts index 991c00834..d627bcece 100644 --- a/public/plugin.ts +++ b/public/plugin.ts @@ -155,11 +155,7 @@ export class SecurityPlugin }) ); - if ( - multitenancyEnabled && - config.multitenancy.enabled && - config.multitenancy.enable_aggregation_view - ) { + if (multitenancyEnabled && config.multitenancy.enable_aggregation_view) { deps.savedObjectsManagement.columns.register( (tenantColumn as unknown) as SavedObjectsManagementColumn );