diff --git a/x-pack/plugins/enterprise_search/public/applications/workplace_search/app_logic.test.ts b/x-pack/plugins/enterprise_search/public/applications/workplace_search/app_logic.test.ts index 974e07069ddba..d77faf471facc 100644 --- a/x-pack/plugins/enterprise_search/public/applications/workplace_search/app_logic.test.ts +++ b/x-pack/plugins/enterprise_search/public/applications/workplace_search/app_logic.test.ts @@ -19,6 +19,7 @@ describe('AppLogic', () => { account: {}, hasInitialized: false, isFederatedAuth: true, + isOrganization: false, organization: {}, }; @@ -34,6 +35,7 @@ describe('AppLogic', () => { }, hasInitialized: true, isFederatedAuth: false, + isOrganization: false, organization: { defaultOrgName: 'My Organization', name: 'ACME Donuts', @@ -61,4 +63,12 @@ describe('AppLogic', () => { }); }); }); + + describe('setContext()', () => { + it('sets context', () => { + AppLogic.actions.setContext(true); + + expect(AppLogic.values.isOrganization).toEqual(true); + }); + }); }); diff --git a/x-pack/plugins/enterprise_search/public/applications/workplace_search/app_logic.ts b/x-pack/plugins/enterprise_search/public/applications/workplace_search/app_logic.ts index b7476a5187749..f5f534807fabf 100644 --- a/x-pack/plugins/enterprise_search/public/applications/workplace_search/app_logic.ts +++ b/x-pack/plugins/enterprise_search/public/applications/workplace_search/app_logic.ts @@ -16,9 +16,11 @@ import { interface AppValues extends WorkplaceSearchInitialData { hasInitialized: boolean; isFederatedAuth: boolean; + isOrganization: boolean; } interface AppActions { initializeAppData(props: InitialAppData): InitialAppData; + setContext(isOrganization: boolean): boolean; } const emptyOrg = {} as Organization; @@ -31,6 +33,7 @@ export const AppLogic = kea>({ workplaceSearch, isFederatedAuth, }), + setContext: (isOrganization) => isOrganization, }, reducers: { hasInitialized: [ @@ -45,6 +48,12 @@ export const AppLogic = kea>({ initializeAppData: (_, { isFederatedAuth }) => !!isFederatedAuth, }, ], + isOrganization: [ + false, + { + setContext: (_, isOrganization) => isOrganization, + }, + ], organization: [ emptyOrg, { diff --git a/x-pack/plugins/enterprise_search/public/applications/workplace_search/index.test.tsx b/x-pack/plugins/enterprise_search/public/applications/workplace_search/index.test.tsx index 25544b4a9bb68..5f1e2dd18d3b6 100644 --- a/x-pack/plugins/enterprise_search/public/applications/workplace_search/index.test.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/workplace_search/index.test.tsx @@ -46,9 +46,12 @@ describe('WorkplaceSearchUnconfigured', () => { }); describe('WorkplaceSearchConfigured', () => { + const initializeAppData = jest.fn(); + const setContext = jest.fn(); + beforeEach(() => { jest.clearAllMocks(); - setMockActions({ initializeAppData: () => {} }); + setMockActions({ initializeAppData, setContext }); }); it('renders layout and header actions', () => { @@ -60,17 +63,12 @@ describe('WorkplaceSearchConfigured', () => { }); it('initializes app data with passed props', () => { - const initializeAppData = jest.fn(); - setMockActions({ initializeAppData }); - shallow(); expect(initializeAppData).toHaveBeenCalledWith({ isFederatedAuth: true }); }); it('does not re-initialize app data or re-render header actions', () => { - const initializeAppData = jest.fn(); - setMockActions({ initializeAppData }); setMockValues({ hasInitialized: true }); shallow(); diff --git a/x-pack/plugins/enterprise_search/public/applications/workplace_search/index.tsx b/x-pack/plugins/enterprise_search/public/applications/workplace_search/index.tsx index 311f30a891eb9..776cae24dfdfb 100644 --- a/x-pack/plugins/enterprise_search/public/applications/workplace_search/index.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/workplace_search/index.tsx @@ -5,7 +5,7 @@ */ import React, { useEffect } from 'react'; -import { Route, Redirect, Switch } from 'react-router-dom'; +import { Route, Redirect, Switch, useLocation } from 'react-router-dom'; import { useActions, useValues } from 'kea'; import { WORKPLACE_SEARCH_PLUGIN } from '../../../common/constants'; @@ -31,10 +31,21 @@ export const WorkplaceSearch: React.FC = (props) => { export const WorkplaceSearchConfigured: React.FC = (props) => { const { hasInitialized } = useValues(AppLogic); - const { initializeAppData } = useActions(AppLogic); + const { initializeAppData, setContext } = useActions(AppLogic); const { renderHeaderActions } = useValues(KibanaLogic); const { errorConnecting, readOnlyMode } = useValues(HttpLogic); + const { pathname } = useLocation(); + + /** + * Personal dashboard urls begin with /p/ + * EX: http://localhost:5601/app/enterprise_search/workplace_search/p/sources + */ + const personalSourceUrlRegex = /^\/p\//g; // matches '/p/*' + + // TODO: Once auth is figured out, we need to have a check for the equivilent of `isAdmin`. + const isOrganization = !pathname.match(personalSourceUrlRegex); + useEffect(() => { if (!hasInitialized) { initializeAppData(props); @@ -42,6 +53,10 @@ export const WorkplaceSearchConfigured: React.FC = (props) => { } }, [hasInitialized]); + useEffect(() => { + setContext(isOrganization); + }, [isOrganization]); + return (