[Enterprise Search] Rename top-level plugin to "Overview" in prep for new "Content" plugin (#126738)

This commit is contained in:
Scotty Bollinger 2022-03-03 10:33:20 -06:00 committed by GitHub
parent be1028c345
commit a1c1cf5f0b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
52 changed files with 136 additions and 101 deletions

View file

@ -45,7 +45,7 @@ export const PROJECTS = [
{ name: 'enterprise_search/shared/cypress' }
),
createProject(
'x-pack/plugins/enterprise_search/public/applications/enterprise_search/cypress/tsconfig.json',
'x-pack/plugins/enterprise_search/public/applications/enterprise_search_overview/cypress/tsconfig.json',
{ name: 'enterprise_search/overview/cypress' }
),
createProject(

View file

@ -7,21 +7,37 @@
import { i18n } from '@kbn/i18n';
export const ENTERPRISE_SEARCH_PLUGIN = {
export const ENTERPRISE_SEARCH_OVERVIEW_PLUGIN = {
ID: 'enterpriseSearch',
NAME: i18n.translate('xpack.enterpriseSearch.productName', {
NAME: i18n.translate('xpack.enterpriseSearch.overview.productName', {
defaultMessage: 'Enterprise Search',
}),
NAV_TITLE: i18n.translate('xpack.enterpriseSearch.navTitle', {
NAV_TITLE: i18n.translate('xpack.enterpriseSearch.overview.navTitle', {
defaultMessage: 'Overview',
}),
DESCRIPTION: i18n.translate('xpack.enterpriseSearch.FeatureCatalogue.description', {
DESCRIPTION: i18n.translate('xpack.enterpriseSearch.overview.description', {
defaultMessage: 'Create search experiences with a refined set of APIs and tools.',
}),
URL: '/app/enterprise_search/overview',
LOGO: 'logoEnterpriseSearch',
};
export const ENTERPRISE_SEARCH_CONTENT_PLUGIN = {
ID: 'enterpriseSearchContent',
NAME: i18n.translate('xpack.enterpriseSearch.content.productName', {
defaultMessage: 'Enterprise Search',
}),
NAV_TITLE: i18n.translate('xpack.enterpriseSearch.content.navTitle', {
defaultMessage: 'Content',
}),
DESCRIPTION: i18n.translate('xpack.enterpriseSearch.content.description', {
defaultMessage:
'Enterprise search offers a number of ways to easily make your data searchable. Choose from the web crawler, Elasticsearch indices, API, direct uploads, or thrid party connectors.', // TODO: Make sure this content is correct.
}),
URL: '/app/enterprise_search/content',
LOGO: 'logoEnterpriseSearch',
};
export const APP_SEARCH_PLUGIN = {
ID: 'appSearch',
NAME: i18n.translate('xpack.enterpriseSearch.appSearch.productName', {

View file

@ -14,7 +14,7 @@ import React from 'react';
import { shallow } from 'enzyme';
import { EnterpriseSearchPageTemplate } from '../../../../shared/layout';
import { EnterpriseSearchPageTemplateWrapper } from '../../../../shared/layout';
import { rerender } from '../../../../test_helpers';
jest.mock('./curation_logic', () => ({ CurationLogic: jest.fn() }));
@ -55,7 +55,7 @@ describe('Curation', () => {
setMockValues({ dataLoading: true });
const wrapper = shallow(<Curation />);
expect(wrapper.is(EnterpriseSearchPageTemplate)).toBe(true);
expect(wrapper.is(EnterpriseSearchPageTemplateWrapper)).toBe(true);
});
it('renders a view for automated curations', () => {

View file

@ -10,7 +10,7 @@ import { useParams } from 'react-router-dom';
import { useValues, useActions } from 'kea';
import { EnterpriseSearchPageTemplate } from '../../../../shared/layout';
import { EnterpriseSearchPageTemplateWrapper } from '../../../../shared/layout';
import { AutomatedCuration } from './automated_curation';
import { CurationLogic } from './curation_logic';
@ -26,7 +26,7 @@ export const Curation: React.FC = () => {
}, [curationId]);
if (dataLoading) {
return <EnterpriseSearchPageTemplate isLoading />;
return <EnterpriseSearchPageTemplateWrapper isLoading />;
}
return isAutomated ? <AutomatedCuration /> : <ManualCuration />;
};

View file

@ -14,7 +14,7 @@ import React from 'react';
import { shallow } from 'enzyme';
import { SetAppSearchChrome } from '../../../shared/kibana_chrome';
import { EnterpriseSearchPageTemplate } from '../../../shared/layout';
import { EnterpriseSearchPageTemplateWrapper } from '../../../shared/layout';
import { SendAppSearchTelemetry } from '../../../shared/telemetry';
import { AppSearchPageTemplate } from './page_template';
@ -27,7 +27,7 @@ describe('AppSearchPageTemplate', () => {
</AppSearchPageTemplate>
);
expect(wrapper.type()).toEqual(EnterpriseSearchPageTemplate);
expect(wrapper.type()).toEqual(EnterpriseSearchPageTemplateWrapper);
expect(wrapper.prop('solutionNav')).toEqual({ name: 'App Search', items: [] });
expect(wrapper.find('.hello').text()).toEqual('world');
});
@ -35,7 +35,9 @@ describe('AppSearchPageTemplate', () => {
describe('page chrome', () => {
it('takes a breadcrumb array & renders a product-specific page chrome', () => {
const wrapper = shallow(<AppSearchPageTemplate pageChrome={['Some page']} />);
const setPageChrome = wrapper.find(EnterpriseSearchPageTemplate).prop('setPageChrome') as any;
const setPageChrome = wrapper
.find(EnterpriseSearchPageTemplateWrapper)
.prop('setPageChrome') as any;
expect(setPageChrome.type).toEqual(SetAppSearchChrome);
expect(setPageChrome.props.trail).toEqual(['Some page']);
@ -51,7 +53,7 @@ describe('AppSearchPageTemplate', () => {
});
});
it('passes down any ...pageTemplateProps that EnterpriseSearchPageTemplate accepts', () => {
it('passes down any ...pageTemplateProps that EnterpriseSearchPageTemplateWrapper accepts', () => {
const wrapper = shallow(
<AppSearchPageTemplate
pageHeader={{ pageTitle: 'hello world' }}
@ -60,10 +62,10 @@ describe('AppSearchPageTemplate', () => {
/>
);
expect(wrapper.find(EnterpriseSearchPageTemplate).prop('pageHeader')!.pageTitle).toEqual(
expect(wrapper.find(EnterpriseSearchPageTemplateWrapper).prop('pageHeader')!.pageTitle).toEqual(
'hello world'
);
expect(wrapper.find(EnterpriseSearchPageTemplate).prop('isLoading')).toEqual(false);
expect(wrapper.find(EnterpriseSearchPageTemplate).prop('emptyState')).toEqual(<div />);
expect(wrapper.find(EnterpriseSearchPageTemplateWrapper).prop('isLoading')).toEqual(false);
expect(wrapper.find(EnterpriseSearchPageTemplateWrapper).prop('emptyState')).toEqual(<div />);
});
});

View file

@ -9,7 +9,7 @@ import React from 'react';
import { APP_SEARCH_PLUGIN } from '../../../../../common/constants';
import { SetAppSearchChrome } from '../../../shared/kibana_chrome';
import { EnterpriseSearchPageTemplate, PageTemplateProps } from '../../../shared/layout';
import { EnterpriseSearchPageTemplateWrapper, PageTemplateProps } from '../../../shared/layout';
import { SendAppSearchTelemetry } from '../../../shared/telemetry';
import { useAppSearchNav } from './nav';
@ -21,7 +21,7 @@ export const AppSearchPageTemplate: React.FC<PageTemplateProps> = ({
...pageTemplateProps
}) => {
return (
<EnterpriseSearchPageTemplate
<EnterpriseSearchPageTemplateWrapper
{...pageTemplateProps}
solutionNav={{
name: APP_SEARCH_PLUGIN.NAME,
@ -31,6 +31,6 @@ export const AppSearchPageTemplate: React.FC<PageTemplateProps> = ({
>
{pageViewTelemetry && <SendAppSearchTelemetry action="viewed" metric={pageViewTelemetry} />}
{children}
</EnterpriseSearchPageTemplate>
</EnterpriseSearchPageTemplateWrapper>
);
};

View file

@ -11,7 +11,7 @@ import { EuiSpacer, EuiTitle, EuiText } from '@elastic/eui';
import { i18n } from '@kbn/i18n';
import { FormattedMessage } from '@kbn/i18n-react';
import { ENTERPRISE_SEARCH_PLUGIN } from '../../../../../common/constants';
import { ENTERPRISE_SEARCH_OVERVIEW_PLUGIN } from '../../../../../common/constants';
import { SetEnterpriseSearchChrome as SetPageChrome } from '../../../shared/kibana_chrome';
import { SetupGuideLayout, SETUP_GUIDE_TITLE } from '../../../shared/setup_guide';
import { SendEnterpriseSearchTelemetry as SendTelemetry } from '../../../shared/telemetry';
@ -20,7 +20,7 @@ import GettingStarted from './assets/getting_started.png';
export const SetupGuide: React.FC = () => (
<SetupGuideLayout
productName={ENTERPRISE_SEARCH_PLUGIN.NAME}
productName={ENTERPRISE_SEARCH_OVERVIEW_PLUGIN.NAME}
productEuiIcon="logoEnterpriseSearch"
>
<SetPageChrome trail={[SETUP_GUIDE_TITLE]} />

View file

@ -18,15 +18,15 @@ import { ErrorConnecting } from './components/error_connecting';
import { ProductSelector } from './components/product_selector';
import { SetupGuide } from './components/setup_guide';
import { EnterpriseSearch } from './';
import { EnterpriseSearchOverview } from './';
describe('EnterpriseSearch', () => {
describe('EnterpriseSearchOverview', () => {
it('renders the Setup Guide and Product Selector', () => {
setMockValues({
errorConnectingMessage: '',
config: { host: 'localhost' },
});
const wrapper = shallow(<EnterpriseSearch />);
const wrapper = shallow(<EnterpriseSearchOverview />);
expect(wrapper.find(SetupGuide)).toHaveLength(1);
expect(wrapper.find(ProductSelector)).toHaveLength(1);
@ -37,7 +37,7 @@ describe('EnterpriseSearch', () => {
errorConnectingMessage: '502 Bad Gateway',
config: { host: 'localhost' },
});
const wrapper = shallow(<EnterpriseSearch />);
const wrapper = shallow(<EnterpriseSearchOverview />);
expect(wrapper.find(VersionMismatchPage)).toHaveLength(0);
const errorConnecting = wrapper.find(ErrorConnecting);
@ -61,7 +61,7 @@ describe('EnterpriseSearch', () => {
config: { host: 'localhost' },
});
const wrapper = shallow(
<EnterpriseSearch enterpriseSearchVersion="7.15.0" kibanaVersion="7.16.0" />
<EnterpriseSearchOverview enterpriseSearchVersion="7.15.0" kibanaVersion="7.16.0" />
);
expect(wrapper.find(VersionMismatchPage)).toHaveLength(1);

View file

@ -21,7 +21,7 @@ import { ProductSelector } from './components/product_selector';
import { SetupGuide } from './components/setup_guide';
import { ROOT_PATH, SETUP_GUIDE_PATH } from './routes';
export const EnterpriseSearch: React.FC<InitialAppData> = ({
export const EnterpriseSearchOverview: React.FC<InitialAppData> = ({
access = {},
workplaceSearch,
enterpriseSearchVersion,

View file

@ -15,7 +15,7 @@ import { licensingMock } from '../../../licensing/public/mocks';
import { securityMock } from '../../../security/public/mocks';
import { AppSearch } from './app_search';
import { EnterpriseSearch } from './enterprise_search';
import { EnterpriseSearchOverview } from './enterprise_search_overview';
import { KibanaLogic } from './shared/kibana';
import { WorkplaceSearch } from './workplace_search';
@ -62,8 +62,8 @@ describe('renderApp', () => {
describe('Enterprise Search apps', () => {
afterEach(() => unmount());
it('renders EnterpriseSearch', () => {
mount(EnterpriseSearch);
it('renders EnterpriseSearchOverview', () => {
mount(EnterpriseSearchOverview);
expect(mockContainer.querySelector('.kbnPageTemplate')).not.toBeNull();
});

View file

@ -10,7 +10,7 @@ import { useValues } from 'kea';
import { EuiBreadcrumb } from '@elastic/eui';
import {
ENTERPRISE_SEARCH_PLUGIN,
ENTERPRISE_SEARCH_OVERVIEW_PLUGIN,
APP_SEARCH_PLUGIN,
WORKPLACE_SEARCH_PLUGIN,
} from '../../../../common/constants';
@ -97,8 +97,8 @@ export const useEuiBreadcrumbs = (breadcrumbs: Breadcrumbs): EuiBreadcrumb[] =>
export const useEnterpriseSearchBreadcrumbs = (breadcrumbs: Breadcrumbs = []) =>
useEuiBreadcrumbs([
{
text: ENTERPRISE_SEARCH_PLUGIN.NAME,
path: ENTERPRISE_SEARCH_PLUGIN.URL,
text: ENTERPRISE_SEARCH_OVERVIEW_PLUGIN.NAME,
path: ENTERPRISE_SEARCH_OVERVIEW_PLUGIN.URL,
shouldNotCreateHref: true,
},
...breadcrumbs,

View file

@ -6,7 +6,7 @@
*/
import {
ENTERPRISE_SEARCH_PLUGIN,
ENTERPRISE_SEARCH_OVERVIEW_PLUGIN,
APP_SEARCH_PLUGIN,
WORKPLACE_SEARCH_PLUGIN,
} from '../../../../common/constants';
@ -30,7 +30,7 @@ export const generateTitle = (pages: Title) => pages.join(' - ');
*/
export const enterpriseSearchTitle = (page: Title = []) =>
generateTitle([...page, ENTERPRISE_SEARCH_PLUGIN.NAME]);
generateTitle([...page, ENTERPRISE_SEARCH_OVERVIEW_PLUGIN.NAME]);
export const appSearchTitle = (page: Title = []) =>
generateTitle([...page, APP_SEARCH_PLUGIN.NAME]);

View file

@ -6,5 +6,5 @@
*/
export type { PageTemplateProps } from './page_template';
export { EnterpriseSearchPageTemplate } from './page_template';
export { EnterpriseSearchPageTemplateWrapper } from './page_template';
export { generateNavLink } from './nav_link_helpers';

View file

@ -17,25 +17,25 @@ import { KibanaPageTemplate } from '../../../../../../../src/plugins/kibana_reac
import { FlashMessages } from '../flash_messages';
import { Loading } from '../loading';
import { EnterpriseSearchPageTemplate } from './page_template';
import { EnterpriseSearchPageTemplateWrapper } from './page_template';
describe('EnterpriseSearchPageTemplate', () => {
describe('EnterpriseSearchPageTemplateWrapper', () => {
beforeEach(() => {
jest.clearAllMocks();
setMockValues({ readOnlyMode: false });
});
it('renders', () => {
const wrapper = shallow(<EnterpriseSearchPageTemplate />);
const wrapper = shallow(<EnterpriseSearchPageTemplateWrapper />);
expect(wrapper.type()).toEqual(KibanaPageTemplate);
});
it('renders children', () => {
const wrapper = shallow(
<EnterpriseSearchPageTemplate>
<EnterpriseSearchPageTemplateWrapper>
<div className="hello">world</div>
</EnterpriseSearchPageTemplate>
</EnterpriseSearchPageTemplateWrapper>
);
expect(wrapper.find('.hello').text()).toEqual('world');
@ -44,9 +44,9 @@ describe('EnterpriseSearchPageTemplate', () => {
describe('loading state', () => {
it('renders a loading icon in place of children', () => {
const wrapper = shallow(
<EnterpriseSearchPageTemplate isLoading>
<EnterpriseSearchPageTemplateWrapper isLoading>
<div className="test" />
</EnterpriseSearchPageTemplate>
</EnterpriseSearchPageTemplateWrapper>
);
expect(wrapper.find(Loading).exists()).toBe(true);
@ -55,9 +55,9 @@ describe('EnterpriseSearchPageTemplate', () => {
it('renders children & does not render a loading icon when the page is done loading', () => {
const wrapper = shallow(
<EnterpriseSearchPageTemplate isLoading={false}>
<EnterpriseSearchPageTemplateWrapper isLoading={false}>
<div className="test" />
</EnterpriseSearchPageTemplate>
</EnterpriseSearchPageTemplateWrapper>
);
expect(wrapper.find(Loading).exists()).toBe(false);
@ -68,12 +68,12 @@ describe('EnterpriseSearchPageTemplate', () => {
describe('empty state', () => {
it('renders a custom empty state in place of children', () => {
const wrapper = shallow(
<EnterpriseSearchPageTemplate
<EnterpriseSearchPageTemplateWrapper
isEmptyState
emptyState={<div className="emptyState">Nothing here yet!</div>}
>
<div className="test" />
</EnterpriseSearchPageTemplate>
</EnterpriseSearchPageTemplateWrapper>
);
expect(wrapper.find('.emptyState').exists()).toBe(true);
@ -85,12 +85,12 @@ describe('EnterpriseSearchPageTemplate', () => {
it('does not render the custom empty state if the page is not empty', () => {
const wrapper = shallow(
<EnterpriseSearchPageTemplate
<EnterpriseSearchPageTemplateWrapper
isEmptyState={false}
emptyState={<div className="emptyState">Nothing here yet!</div>}
>
<div className="test" />
</EnterpriseSearchPageTemplate>
</EnterpriseSearchPageTemplateWrapper>
);
expect(wrapper.find('.emptyState').exists()).toBe(false);
@ -99,7 +99,7 @@ describe('EnterpriseSearchPageTemplate', () => {
it('does not render an empty state if the page is still loading', () => {
const wrapper = shallow(
<EnterpriseSearchPageTemplate
<EnterpriseSearchPageTemplateWrapper
isLoading
isEmptyState
emptyState={<div className="emptyState" />}
@ -114,14 +114,14 @@ describe('EnterpriseSearchPageTemplate', () => {
describe('read-only mode', () => {
it('renders a callout if in read-only mode', () => {
setMockValues({ readOnlyMode: true });
const wrapper = shallow(<EnterpriseSearchPageTemplate />);
const wrapper = shallow(<EnterpriseSearchPageTemplateWrapper />);
expect(wrapper.find(EuiCallOut).exists()).toBe(true);
});
it('does not render a callout if not in read-only mode', () => {
setMockValues({ readOnlyMode: false });
const wrapper = shallow(<EnterpriseSearchPageTemplate />);
const wrapper = shallow(<EnterpriseSearchPageTemplateWrapper />);
expect(wrapper.find(EuiCallOut).exists()).toBe(false);
});
@ -129,7 +129,7 @@ describe('EnterpriseSearchPageTemplate', () => {
describe('flash messages', () => {
it('renders FlashMessages by default', () => {
const wrapper = shallow(<EnterpriseSearchPageTemplate />);
const wrapper = shallow(<EnterpriseSearchPageTemplateWrapper />);
expect(wrapper.find(FlashMessages).exists()).toBe(true);
});
@ -137,7 +137,7 @@ describe('EnterpriseSearchPageTemplate', () => {
it('does not render FlashMessages if hidden', () => {
// Example use case: manually showing flash messages in an open flyout or modal
// and not wanting to duplicate flash messages on the overlayed page
const wrapper = shallow(<EnterpriseSearchPageTemplate hideFlashMessages />);
const wrapper = shallow(<EnterpriseSearchPageTemplateWrapper hideFlashMessages />);
expect(wrapper.find(FlashMessages).exists()).toBe(false);
});
@ -147,14 +147,16 @@ describe('EnterpriseSearchPageTemplate', () => {
const SetPageChrome = () => <div />;
it('renders a product-specific <SetPageChrome />', () => {
const wrapper = shallow(<EnterpriseSearchPageTemplate setPageChrome={<SetPageChrome />} />);
const wrapper = shallow(
<EnterpriseSearchPageTemplateWrapper setPageChrome={<SetPageChrome />} />
);
expect(wrapper.find(SetPageChrome).exists()).toBe(true);
});
it('invokes page chrome immediately (without waiting for isLoading to be finished)', () => {
const wrapper = shallow(
<EnterpriseSearchPageTemplate setPageChrome={<SetPageChrome />} isLoading />
<EnterpriseSearchPageTemplateWrapper setPageChrome={<SetPageChrome />} isLoading />
);
expect(wrapper.find(SetPageChrome).exists()).toBe(true);
@ -166,14 +168,14 @@ describe('EnterpriseSearchPageTemplate', () => {
describe('EuiPageTemplate props', () => {
it('overrides the restrictWidth prop', () => {
const wrapper = shallow(<EnterpriseSearchPageTemplate restrictWidth />);
const wrapper = shallow(<EnterpriseSearchPageTemplateWrapper restrictWidth />);
expect(wrapper.find(KibanaPageTemplate).prop('restrictWidth')).toEqual(true);
});
it('passes down any ...pageTemplateProps that EuiPageTemplate accepts', () => {
const wrapper = shallow(
<EnterpriseSearchPageTemplate
<EnterpriseSearchPageTemplateWrapper
template="empty"
paddingSize="s"
pageHeader={{ pageTitle: 'hello world' }}
@ -187,7 +189,10 @@ describe('EnterpriseSearchPageTemplate', () => {
it('sets enterpriseSearchPageTemplate classNames while still accepting custom classNames', () => {
const wrapper = shallow(
<EnterpriseSearchPageTemplate className="hello" pageContentProps={{ className: 'world' }} />
<EnterpriseSearchPageTemplateWrapper
className="hello"
pageContentProps={{ className: 'world' }}
/>
);
expect(wrapper.find(KibanaPageTemplate).prop('className')).toEqual(
@ -200,7 +205,9 @@ describe('EnterpriseSearchPageTemplate', () => {
it('automatically sets the Enterprise Search logo onto passed solution navs', () => {
const wrapper = shallow(
<EnterpriseSearchPageTemplate solutionNav={{ name: 'Enterprise Search', items: [] }} />
<EnterpriseSearchPageTemplateWrapper
solutionNav={{ name: 'Enterprise Search', items: [] }}
/>
);
expect(wrapper.find(KibanaPageTemplate).prop('solutionNav')).toEqual({

View file

@ -26,7 +26,7 @@ import { Loading } from '../loading';
import './page_template.scss';
/*
* EnterpriseSearchPageTemplate is a light wrapper for KibanaPageTemplate (which
* EnterpriseSearchPageTemplateWrapper is a light wrapper for KibanaPageTemplate (which
* is a light wrapper for EuiPageTemplate). It should contain only concerns shared
* between both AS & WS, which should have their own AppSearchPageTemplate &
* WorkplaceSearchPageTemplate sitting on top of this template (:nesting_dolls:),
@ -46,7 +46,7 @@ export type PageTemplateProps = KibanaPageTemplateProps & {
pageViewTelemetry?: string;
};
export const EnterpriseSearchPageTemplate: React.FC<PageTemplateProps> = ({
export const EnterpriseSearchPageTemplateWrapper: React.FC<PageTemplateProps> = ({
children,
className,
hideFlashMessages,

View file

@ -14,7 +14,7 @@ import React from 'react';
import { shallow } from 'enzyme';
import { SetWorkplaceSearchChrome } from '../../../shared/kibana_chrome';
import { EnterpriseSearchPageTemplate } from '../../../shared/layout';
import { EnterpriseSearchPageTemplateWrapper } from '../../../shared/layout';
import { SendWorkplaceSearchTelemetry } from '../../../shared/telemetry';
import { WorkplaceSearchPageTemplate } from './page_template';
@ -27,7 +27,7 @@ describe('WorkplaceSearchPageTemplate', () => {
</WorkplaceSearchPageTemplate>
);
expect(wrapper.type()).toEqual(EnterpriseSearchPageTemplate);
expect(wrapper.type()).toEqual(EnterpriseSearchPageTemplateWrapper);
expect(wrapper.prop('solutionNav')).toEqual({ name: 'Workplace Search', items: [] });
expect(wrapper.find('.hello').text()).toEqual('world');
});
@ -35,7 +35,9 @@ describe('WorkplaceSearchPageTemplate', () => {
describe('page chrome', () => {
it('takes a breadcrumb array & renders a product-specific page chrome', () => {
const wrapper = shallow(<WorkplaceSearchPageTemplate pageChrome={['Some page']} />);
const setPageChrome = wrapper.find(EnterpriseSearchPageTemplate).prop('setPageChrome') as any;
const setPageChrome = wrapper
.find(EnterpriseSearchPageTemplateWrapper)
.prop('setPageChrome') as any;
expect(setPageChrome.type).toEqual(SetWorkplaceSearchChrome);
expect(setPageChrome.props.trail).toEqual(['Some page']);
@ -54,13 +56,15 @@ describe('WorkplaceSearchPageTemplate', () => {
describe('props', () => {
it('allows overriding the restrictWidth default', () => {
const wrapper = shallow(<WorkplaceSearchPageTemplate />);
expect(wrapper.find(EnterpriseSearchPageTemplate).prop('restrictWidth')).toEqual(true);
expect(wrapper.find(EnterpriseSearchPageTemplateWrapper).prop('restrictWidth')).toEqual(true);
wrapper.setProps({ restrictWidth: false });
expect(wrapper.find(EnterpriseSearchPageTemplate).prop('restrictWidth')).toEqual(false);
expect(wrapper.find(EnterpriseSearchPageTemplateWrapper).prop('restrictWidth')).toEqual(
false
);
});
it('passes down any ...pageTemplateProps that EnterpriseSearchPageTemplate accepts', () => {
it('passes down any ...pageTemplateProps that EnterpriseSearchPageTemplateWrapper accepts', () => {
const wrapper = shallow(
<WorkplaceSearchPageTemplate
pageHeader={{ pageTitle: 'hello world' }}
@ -69,11 +73,11 @@ describe('WorkplaceSearchPageTemplate', () => {
/>
);
expect(wrapper.find(EnterpriseSearchPageTemplate).prop('pageHeader')!.pageTitle).toEqual(
'hello world'
);
expect(wrapper.find(EnterpriseSearchPageTemplate).prop('isLoading')).toEqual(false);
expect(wrapper.find(EnterpriseSearchPageTemplate).prop('emptyState')).toEqual(<div />);
expect(
wrapper.find(EnterpriseSearchPageTemplateWrapper).prop('pageHeader')!.pageTitle
).toEqual('hello world');
expect(wrapper.find(EnterpriseSearchPageTemplateWrapper).prop('isLoading')).toEqual(false);
expect(wrapper.find(EnterpriseSearchPageTemplateWrapper).prop('emptyState')).toEqual(<div />);
});
});
});

View file

@ -9,7 +9,7 @@ import React from 'react';
import { WORKPLACE_SEARCH_PLUGIN } from '../../../../../common/constants';
import { SetWorkplaceSearchChrome } from '../../../shared/kibana_chrome';
import { EnterpriseSearchPageTemplate, PageTemplateProps } from '../../../shared/layout';
import { EnterpriseSearchPageTemplateWrapper, PageTemplateProps } from '../../../shared/layout';
import { SendWorkplaceSearchTelemetry } from '../../../shared/telemetry';
import { useWorkplaceSearchNav } from './nav';
@ -21,7 +21,7 @@ export const WorkplaceSearchPageTemplate: React.FC<PageTemplateProps> = ({
...pageTemplateProps
}) => {
return (
<EnterpriseSearchPageTemplate
<EnterpriseSearchPageTemplateWrapper
restrictWidth
{...pageTemplateProps}
solutionNav={{
@ -34,6 +34,6 @@ export const WorkplaceSearchPageTemplate: React.FC<PageTemplateProps> = ({
<SendWorkplaceSearchTelemetry action="viewed" metric={pageViewTelemetry} />
)}
{children}
</EnterpriseSearchPageTemplate>
</EnterpriseSearchPageTemplateWrapper>
);
};

View file

@ -26,7 +26,7 @@ import { SecurityPluginSetup, SecurityPluginStart } from '../../security/public'
import {
APP_SEARCH_PLUGIN,
ENTERPRISE_SEARCH_PLUGIN,
ENTERPRISE_SEARCH_OVERVIEW_PLUGIN,
WORKPLACE_SEARCH_PLUGIN,
} from '../common/constants';
import { InitialAppData } from '../common/types';
@ -67,30 +67,32 @@ export class EnterpriseSearchPlugin implements Plugin {
const { cloud } = plugins;
core.application.register({
id: ENTERPRISE_SEARCH_PLUGIN.ID,
title: ENTERPRISE_SEARCH_PLUGIN.NAV_TITLE,
euiIconType: ENTERPRISE_SEARCH_PLUGIN.LOGO,
appRoute: ENTERPRISE_SEARCH_PLUGIN.URL,
id: ENTERPRISE_SEARCH_OVERVIEW_PLUGIN.ID,
title: ENTERPRISE_SEARCH_OVERVIEW_PLUGIN.NAV_TITLE,
euiIconType: ENTERPRISE_SEARCH_OVERVIEW_PLUGIN.LOGO,
appRoute: ENTERPRISE_SEARCH_OVERVIEW_PLUGIN.URL,
category: DEFAULT_APP_CATEGORIES.enterpriseSearch,
mount: async (params: AppMountParameters) => {
const kibanaDeps = await this.getKibanaDeps(core, params, cloud);
const { chrome, http } = kibanaDeps.core;
chrome.docTitle.change(ENTERPRISE_SEARCH_PLUGIN.NAME);
chrome.docTitle.change(ENTERPRISE_SEARCH_OVERVIEW_PLUGIN.NAME);
await this.getInitialData(http);
const pluginData = this.getPluginData();
const { renderApp } = await import('./applications');
const { EnterpriseSearch } = await import('./applications/enterprise_search');
const { EnterpriseSearchOverview } = await import(
'./applications/enterprise_search_overview'
);
return renderApp(EnterpriseSearch, kibanaDeps, pluginData);
return renderApp(EnterpriseSearchOverview, kibanaDeps, pluginData);
},
});
core.application.register({
id: APP_SEARCH_PLUGIN.ID,
title: APP_SEARCH_PLUGIN.NAME,
euiIconType: ENTERPRISE_SEARCH_PLUGIN.LOGO,
euiIconType: ENTERPRISE_SEARCH_OVERVIEW_PLUGIN.LOGO,
appRoute: APP_SEARCH_PLUGIN.URL,
category: DEFAULT_APP_CATEGORIES.enterpriseSearch,
mount: async (params: AppMountParameters) => {
@ -111,7 +113,7 @@ export class EnterpriseSearchPlugin implements Plugin {
core.application.register({
id: WORKPLACE_SEARCH_PLUGIN.ID,
title: WORKPLACE_SEARCH_PLUGIN.NAME,
euiIconType: ENTERPRISE_SEARCH_PLUGIN.LOGO,
euiIconType: ENTERPRISE_SEARCH_OVERVIEW_PLUGIN.LOGO,
appRoute: WORKPLACE_SEARCH_PLUGIN.URL,
category: DEFAULT_APP_CATEGORIES.enterpriseSearch,
mount: async (params: AppMountParameters) => {
@ -134,11 +136,11 @@ export class EnterpriseSearchPlugin implements Plugin {
if (plugins.home) {
plugins.home.featureCatalogue.registerSolution({
id: ENTERPRISE_SEARCH_PLUGIN.ID,
title: ENTERPRISE_SEARCH_PLUGIN.NAME,
id: ENTERPRISE_SEARCH_OVERVIEW_PLUGIN.ID,
title: ENTERPRISE_SEARCH_OVERVIEW_PLUGIN.NAME,
icon: 'logoEnterpriseSearch',
description: ENTERPRISE_SEARCH_PLUGIN.DESCRIPTION,
path: ENTERPRISE_SEARCH_PLUGIN.URL,
description: ENTERPRISE_SEARCH_OVERVIEW_PLUGIN.DESCRIPTION,
path: ENTERPRISE_SEARCH_OVERVIEW_PLUGIN.URL,
order: 100,
});

View file

@ -23,7 +23,7 @@ import { SecurityPluginSetup } from '../../security/server';
import { SpacesPluginStart } from '../../spaces/server';
import {
ENTERPRISE_SEARCH_PLUGIN,
ENTERPRISE_SEARCH_OVERVIEW_PLUGIN,
APP_SEARCH_PLUGIN,
WORKPLACE_SEARCH_PLUGIN,
LOGS_SOURCE_ID,
@ -101,17 +101,21 @@ export class EnterpriseSearchPlugin implements Plugin {
* Register space/feature control
*/
features.registerKibanaFeature({
id: ENTERPRISE_SEARCH_PLUGIN.ID,
name: ENTERPRISE_SEARCH_PLUGIN.NAME,
id: ENTERPRISE_SEARCH_OVERVIEW_PLUGIN.ID,
name: ENTERPRISE_SEARCH_OVERVIEW_PLUGIN.NAME,
order: 0,
category: DEFAULT_APP_CATEGORIES.enterpriseSearch,
app: [
'kibana',
ENTERPRISE_SEARCH_PLUGIN.ID,
ENTERPRISE_SEARCH_OVERVIEW_PLUGIN.ID,
APP_SEARCH_PLUGIN.ID,
WORKPLACE_SEARCH_PLUGIN.ID,
],
catalogue: [
ENTERPRISE_SEARCH_OVERVIEW_PLUGIN.ID,
APP_SEARCH_PLUGIN.ID,
WORKPLACE_SEARCH_PLUGIN.ID,
],
catalogue: [ENTERPRISE_SEARCH_PLUGIN.ID, APP_SEARCH_PLUGIN.ID, WORKPLACE_SEARCH_PLUGIN.ID],
privileges: null,
});

View file

@ -10859,13 +10859,13 @@
"xpack.enterpriseSearch.errorConnectingState.troubleshootAuth": "ユーザー認証を確認してください。",
"xpack.enterpriseSearch.errorConnectingState.troubleshootAuthNative": "Elasticsearchネイティブ認証、SSO/SAML、またはOpenID Connectを使用して認証する必要があります。",
"xpack.enterpriseSearch.errorConnectingState.troubleshootAuthSAML": "SAMLやOpenID Connectなどの外部SSOプロバイダーを使用している場合は、エンタープライズ サーチでSAML/OIDCレルムを設定できる必要があります。",
"xpack.enterpriseSearch.FeatureCatalogue.description": "厳選されたAPIとツールを使用して検索エクスペリエンスを作成します。",
"xpack.enterpriseSearch.overview.description": "厳選されたAPIとツールを使用して検索エクスペリエンスを作成します。",
"xpack.enterpriseSearch.hiddenText": "非表示のテキスト",
"xpack.enterpriseSearch.inlineEditableTable.newRowButtonLabel": "新しい行",
"xpack.enterpriseSearch.licenseCalloutBody": "SAML経由のエンタープライズ認証、ドキュメントレベルのアクセス権と許可サポート、カスタム検索経験などは有効なPlatinumライセンスで提供されます。",
"xpack.enterpriseSearch.licenseDocumentationLink": "ライセンス機能の詳細",
"xpack.enterpriseSearch.licenseManagementLink": "ライセンスを更新",
"xpack.enterpriseSearch.navTitle": "概要",
"xpack.enterpriseSearch.overview.navTitle": "概要",
"xpack.enterpriseSearch.notFound.action1": "ダッシュボードに戻す",
"xpack.enterpriseSearch.notFound.action2": "サポートに問い合わせる",
"xpack.enterpriseSearch.notFound.description": "お探しのページは見つかりませんでした。",
@ -10882,7 +10882,7 @@
"xpack.enterpriseSearch.overview.setupCta.description": "Elastic App Search および Workplace Search を使用して、アプリまたは社内組織に検索を追加できます。検索が簡単になるとどのような利点があるのかについては、動画をご覧ください。",
"xpack.enterpriseSearch.overview.setupHeading": "セットアップする製品を選択し、開始してください。",
"xpack.enterpriseSearch.overview.subheading": "アプリまたは組織に検索機能を追加できます。",
"xpack.enterpriseSearch.productName": "Enterprise Search",
"xpack.enterpriseSearch.overview.productName": "Enterprise Search",
"xpack.enterpriseSearch.productSelectorCalloutTitle": "あらゆる規模のチームに対応するエンタープライズ級の機能",
"xpack.enterpriseSearch.readOnlyMode.warning": "エンタープライズ サーチは読み取り専用モードです。作成、編集、削除などの変更を実行できません。",
"xpack.enterpriseSearch.roleMapping.addRoleMappingButtonLabel": "マッピングを追加",

View file

@ -10880,13 +10880,13 @@
"xpack.enterpriseSearch.errorConnectingState.troubleshootAuth": "检查您的用户身份验证:",
"xpack.enterpriseSearch.errorConnectingState.troubleshootAuthNative": "必须使用 Elasticsearch 本机身份验证、SSO/SAML 或 OpenID Connect 执行身份验证。",
"xpack.enterpriseSearch.errorConnectingState.troubleshootAuthSAML": "如果使用外部 SSO 提供程序,如 SAML 或 OpenID Connect还必须在 Enterprise Search 上设置 SAML/OIDC Realm。",
"xpack.enterpriseSearch.FeatureCatalogue.description": "使用一组优化的 API 和工具打造搜索体验。",
"xpack.enterpriseSearch.overview.description": "使用一组优化的 API 和工具打造搜索体验。",
"xpack.enterpriseSearch.hiddenText": "隐藏文本",
"xpack.enterpriseSearch.inlineEditableTable.newRowButtonLabel": "新行",
"xpack.enterpriseSearch.licenseCalloutBody": "使用有效的白金级许可证,可获得通过 SAML 实现的企业验证、文档级别权限和授权支持、定制搜索体验等等。",
"xpack.enterpriseSearch.licenseDocumentationLink": "详细了解许可证功能",
"xpack.enterpriseSearch.licenseManagementLink": "管理您的许可",
"xpack.enterpriseSearch.navTitle": "概览",
"xpack.enterpriseSearch.overview.navTitle": "概览",
"xpack.enterpriseSearch.notFound.action1": "返回到您的仪表板",
"xpack.enterpriseSearch.notFound.action2": "联系支持人员",
"xpack.enterpriseSearch.notFound.description": "找不到您要查找的页面。",
@ -10903,7 +10903,7 @@
"xpack.enterpriseSearch.overview.setupCta.description": "通过 Elastic App Search 和 Workplace Search将搜索添加到您的应用或内部组织中。观看视频了解方便易用的搜索功能可以帮您做些什么。",
"xpack.enterpriseSearch.overview.setupHeading": "选择产品进行设置并开始使用。",
"xpack.enterpriseSearch.overview.subheading": "将搜索功能添加到您的应用或组织。",
"xpack.enterpriseSearch.productName": "Enterprise Search",
"xpack.enterpriseSearch.overview.productName": "Enterprise Search",
"xpack.enterpriseSearch.productSelectorCalloutTitle": "适用于大型和小型团队的企业级功能",
"xpack.enterpriseSearch.readOnlyMode.warning": "企业搜索处于只读模式。您将无法执行更改,例如创建、编辑或删除。",
"xpack.enterpriseSearch.roleMapping.addRoleMappingButtonLabel": "添加映射",