From 90f2d094ce1a1262b5af63ad354ec6fefe062b9f Mon Sep 17 00:00:00 2001 From: Byron Hulcher Date: Wed, 2 Jun 2021 11:36:40 -0400 Subject: [PATCH] [App Search] Crawler Landing Page (#100822) * New CrawlerLanding component * New CrawlerRouter component * Adding CrawlerRouter to EngineRouter * Using internal route for Crawler link in EngineNav * Rename crawler landing background * Fix CrawlerLanding css * Fix crawler documentation link * Add Crawler title to breadcrumbs * Reduce png filesize * Improve CrawlerLanding copy * Update x-pack/plugins/enterprise_search/public/applications/app_search/components/crawler/crawler_landing.scss Co-authored-by: Constance Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> Co-authored-by: Constance --- .../crawler/assets/bg_crawler_landing.png | Bin 0 -> 14495 bytes .../components/crawler/constants.ts | 2 +- .../components/crawler/crawler_landing.scss | 13 +++ .../crawler/crawler_landing.test.tsx | 43 +++++++++ .../components/crawler/crawler_landing.tsx | 85 ++++++++++++++++++ .../crawler/crawler_router.test.tsx | 34 +++++++ .../components/crawler/crawler_router.tsx | 27 ++++++ .../app_search/components/crawler/index.ts | 1 + .../components/engine/engine_nav.tsx | 4 +- .../components/engine/engine_router.test.tsx | 8 ++ .../components/engine/engine_router.tsx | 10 ++- 11 files changed, 221 insertions(+), 6 deletions(-) create mode 100644 x-pack/plugins/enterprise_search/public/applications/app_search/components/crawler/assets/bg_crawler_landing.png create mode 100644 x-pack/plugins/enterprise_search/public/applications/app_search/components/crawler/crawler_landing.scss create mode 100644 x-pack/plugins/enterprise_search/public/applications/app_search/components/crawler/crawler_landing.test.tsx create mode 100644 x-pack/plugins/enterprise_search/public/applications/app_search/components/crawler/crawler_landing.tsx create mode 100644 x-pack/plugins/enterprise_search/public/applications/app_search/components/crawler/crawler_router.test.tsx create mode 100644 x-pack/plugins/enterprise_search/public/applications/app_search/components/crawler/crawler_router.tsx diff --git a/x-pack/plugins/enterprise_search/public/applications/app_search/components/crawler/assets/bg_crawler_landing.png b/x-pack/plugins/enterprise_search/public/applications/app_search/components/crawler/assets/bg_crawler_landing.png new file mode 100644 index 0000000000000000000000000000000000000000..e1f14ac26f353bd601d36f9e436c2faf164c24ff GIT binary patch literal 14495 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 J$XR{<{{WQ~4N?FA literal 0 HcmV?d00001 diff --git a/x-pack/plugins/enterprise_search/public/applications/app_search/components/crawler/constants.ts b/x-pack/plugins/enterprise_search/public/applications/app_search/components/crawler/constants.ts index 0c1bf051747b58..7e95bf8fb8e45a 100644 --- a/x-pack/plugins/enterprise_search/public/applications/app_search/components/crawler/constants.ts +++ b/x-pack/plugins/enterprise_search/public/applications/app_search/components/crawler/constants.ts @@ -9,5 +9,5 @@ import { i18n } from '@kbn/i18n'; export const CRAWLER_TITLE = i18n.translate( 'xpack.enterpriseSearch.appSearch.engine.crawler.title', - { defaultMessage: 'Crawler' } + { defaultMessage: 'Web Crawler' } ); diff --git a/x-pack/plugins/enterprise_search/public/applications/app_search/components/crawler/crawler_landing.scss b/x-pack/plugins/enterprise_search/public/applications/app_search/components/crawler/crawler_landing.scss new file mode 100644 index 00000000000000..3ace4064008b6d --- /dev/null +++ b/x-pack/plugins/enterprise_search/public/applications/app_search/components/crawler/crawler_landing.scss @@ -0,0 +1,13 @@ +.crawlerLanding { + &__panel { + overflow: hidden; + background-image: url('./assets/bg_crawler_landing.png'); + background-size: 45%; + background-repeat: no-repeat; + background-position: right -2rem; + } + + &__wrapper { + max-width: 50rem; + } +} diff --git a/x-pack/plugins/enterprise_search/public/applications/app_search/components/crawler/crawler_landing.test.tsx b/x-pack/plugins/enterprise_search/public/applications/app_search/components/crawler/crawler_landing.test.tsx new file mode 100644 index 00000000000000..9591b82773b9fe --- /dev/null +++ b/x-pack/plugins/enterprise_search/public/applications/app_search/components/crawler/crawler_landing.test.tsx @@ -0,0 +1,43 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import { setMockValues } from '../../../__mocks__'; +import { mockEngineValues } from '../../__mocks__'; + +import React from 'react'; + +import { shallow, ShallowWrapper } from 'enzyme'; + +import { docLinks } from '../../../shared/doc_links'; + +import { CrawlerLanding } from './crawler_landing'; + +describe('CrawlerLanding', () => { + let wrapper: ShallowWrapper; + + beforeEach(() => { + setMockValues({ ...mockEngineValues }); + wrapper = shallow(); + }); + + afterEach(() => { + jest.clearAllMocks(); + }); + + it('contains an external documentation link', () => { + const externalDocumentationLink = wrapper.find('[data-test-subj="CrawlerDocumentationLink"]'); + + expect(externalDocumentationLink.prop('href')).toBe( + `${docLinks.appSearchBase}/web-crawler.html` + ); + }); + + it('contains a link to standalone App Search', () => { + const externalDocumentationLink = wrapper.find('[data-test-subj="CrawlerStandaloneLink"]'); + + expect(externalDocumentationLink.prop('href')).toBe('/as/engines/some-engine/crawler'); + }); +}); diff --git a/x-pack/plugins/enterprise_search/public/applications/app_search/components/crawler/crawler_landing.tsx b/x-pack/plugins/enterprise_search/public/applications/app_search/components/crawler/crawler_landing.tsx new file mode 100644 index 00000000000000..a2993b4d86d5a1 --- /dev/null +++ b/x-pack/plugins/enterprise_search/public/applications/app_search/components/crawler/crawler_landing.tsx @@ -0,0 +1,85 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; + +import { + EuiButton, + EuiLink, + EuiPageHeader, + EuiPanel, + EuiSpacer, + EuiText, + EuiTitle, +} from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; + +import { getAppSearchUrl } from '../../../shared/enterprise_search_url'; +import { DOCS_PREFIX, ENGINE_CRAWLER_PATH } from '../../routes'; +import { generateEnginePath } from '../engine'; + +import './crawler_landing.scss'; +import { CRAWLER_TITLE } from '.'; + +export const CrawlerLanding: React.FC = () => ( +
+ + + +
+ +

+ {i18n.translate('xpack.enterpriseSearch.appSearch.engine.crawler.landingPage.title', { + defaultMessage: 'Setup the Web Crawler', + })} +

+
+ + +

+ {i18n.translate( + 'xpack.enterpriseSearch.appSearch.engine.crawler.landingPage.description', + { + defaultMessage: + "Easily index your website's content. To get started, enter your domain name, provide optional entry points and crawl rules, and we will handle the rest.", + } + )}{' '} + + {i18n.translate( + 'xpack.enterpriseSearch.appSearch.engine.crawler.landingPage.documentationLinkLabel', + { + defaultMessage: 'Learn more about the web crawler.', + } + )} + +

+
+ + + {i18n.translate( + 'xpack.enterpriseSearch.appSearch.engine.crawler.landingPage.standaloneLinkLabel', + { + defaultMessage: 'Configure the web crawler', + } + )} + + +
+
+
+); diff --git a/x-pack/plugins/enterprise_search/public/applications/app_search/components/crawler/crawler_router.test.tsx b/x-pack/plugins/enterprise_search/public/applications/app_search/components/crawler/crawler_router.test.tsx new file mode 100644 index 00000000000000..6aa9ca8c4feb1d --- /dev/null +++ b/x-pack/plugins/enterprise_search/public/applications/app_search/components/crawler/crawler_router.test.tsx @@ -0,0 +1,34 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import { setMockValues } from '../../../__mocks__'; + +import { mockEngineValues } from '../../__mocks__'; + +import React from 'react'; +import { Switch } from 'react-router-dom'; + +import { shallow } from 'enzyme'; + +import { CrawlerLanding } from './crawler_landing'; +import { CrawlerRouter } from './crawler_router'; + +describe('CrawlerRouter', () => { + beforeEach(() => { + setMockValues({ ...mockEngineValues }); + }); + + afterEach(() => { + jest.clearAllMocks(); + }); + + it('renders a landing page', () => { + const wrapper = shallow(); + + expect(wrapper.find(Switch)).toHaveLength(1); + expect(wrapper.find(CrawlerLanding)).toHaveLength(1); + }); +}); diff --git a/x-pack/plugins/enterprise_search/public/applications/app_search/components/crawler/crawler_router.tsx b/x-pack/plugins/enterprise_search/public/applications/app_search/components/crawler/crawler_router.tsx new file mode 100644 index 00000000000000..fcc949de7d8b4b --- /dev/null +++ b/x-pack/plugins/enterprise_search/public/applications/app_search/components/crawler/crawler_router.tsx @@ -0,0 +1,27 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { Route, Switch } from 'react-router-dom'; + +import { SetAppSearchChrome as SetPageChrome } from '../../../shared/kibana_chrome'; + +import { getEngineBreadcrumbs } from '../engine'; + +import { CRAWLER_TITLE } from './constants'; +import { CrawlerLanding } from './crawler_landing'; + +export const CrawlerRouter: React.FC = () => { + return ( + + + + + + + ); +}; diff --git a/x-pack/plugins/enterprise_search/public/applications/app_search/components/crawler/index.ts b/x-pack/plugins/enterprise_search/public/applications/app_search/components/crawler/index.ts index edb7e43aee35e6..58fb0a7cebb1a7 100644 --- a/x-pack/plugins/enterprise_search/public/applications/app_search/components/crawler/index.ts +++ b/x-pack/plugins/enterprise_search/public/applications/app_search/components/crawler/index.ts @@ -6,3 +6,4 @@ */ export { CRAWLER_TITLE } from './constants'; +export { CrawlerRouter } from './crawler_router'; diff --git a/x-pack/plugins/enterprise_search/public/applications/app_search/components/engine/engine_nav.tsx b/x-pack/plugins/enterprise_search/public/applications/app_search/components/engine/engine_nav.tsx index 4738209cee4a23..0edf01bada9381 100644 --- a/x-pack/plugins/enterprise_search/public/applications/app_search/components/engine/engine_nav.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/app_search/components/engine/engine_nav.tsx @@ -12,7 +12,6 @@ import { useValues } from 'kea'; import { EuiText, EuiBadge, EuiIcon, EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; -import { getAppSearchUrl } from '../../../shared/enterprise_search_url'; import { SideNavLink, SideNavItem } from '../../../shared/layout'; import { AppLogic } from '../../app_logic'; import { @@ -170,8 +169,7 @@ export const EngineNav: React.FC = () => { )} {canViewEngineCrawler && !isMetaEngine && ( {CRAWLER_TITLE} diff --git a/x-pack/plugins/enterprise_search/public/applications/app_search/components/engine/engine_router.test.tsx b/x-pack/plugins/enterprise_search/public/applications/app_search/components/engine/engine_router.test.tsx index 39055e772bcf93..3eab209d706fad 100644 --- a/x-pack/plugins/enterprise_search/public/applications/app_search/components/engine/engine_router.test.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/app_search/components/engine/engine_router.test.tsx @@ -18,6 +18,7 @@ import { shallow } from 'enzyme'; import { Loading } from '../../../shared/loading'; import { AnalyticsRouter } from '../analytics'; import { ApiLogs } from '../api_logs'; +import { CrawlerRouter } from '../crawler'; import { CurationsRouter } from '../curations'; import { Documents, DocumentDetail } from '../documents'; import { EngineOverview } from '../engine_overview'; @@ -168,4 +169,11 @@ describe('EngineRouter', () => { expect(wrapper.find(SourceEngines)).toHaveLength(1); }); + + it('renders a crawler view', () => { + setMockValues({ ...values, myRole: { canViewEngineCrawler: true } }); + const wrapper = shallow(); + + expect(wrapper.find(CrawlerRouter)).toHaveLength(1); + }); }); diff --git a/x-pack/plugins/enterprise_search/public/applications/app_search/components/engine/engine_router.tsx b/x-pack/plugins/enterprise_search/public/applications/app_search/components/engine/engine_router.tsx index 387f8cf1b9837f..40cc2ef0368c05 100644 --- a/x-pack/plugins/enterprise_search/public/applications/app_search/components/engine/engine_router.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/app_search/components/engine/engine_router.tsx @@ -23,7 +23,7 @@ import { ENGINE_DOCUMENTS_PATH, ENGINE_DOCUMENT_DETAIL_PATH, ENGINE_SCHEMA_PATH, - // ENGINE_CRAWLER_PATH, + ENGINE_CRAWLER_PATH, META_ENGINE_SOURCE_ENGINES_PATH, ENGINE_RELEVANCE_TUNING_PATH, ENGINE_SYNONYMS_PATH, @@ -34,6 +34,7 @@ import { } from '../../routes'; import { AnalyticsRouter } from '../analytics'; import { ApiLogs } from '../api_logs'; +import { CrawlerRouter } from '../crawler'; import { CurationsRouter } from '../curations'; import { DocumentDetail, Documents } from '../documents'; import { EngineOverview } from '../engine_overview'; @@ -52,7 +53,7 @@ export const EngineRouter: React.FC = () => { canViewEngineAnalytics, canViewEngineDocuments, canViewEngineSchema, - // canViewEngineCrawler, + canViewEngineCrawler, canViewMetaEngineSourceEngines, canManageEngineRelevanceTuning, canManageEngineSynonyms, @@ -143,6 +144,11 @@ export const EngineRouter: React.FC = () => { )} + {canViewEngineCrawler && ( + + + + )}