diff --git a/.buildkite/ftr_configs.yml b/.buildkite/ftr_configs.yml index 51a64ba204a97..003dbe3fd22f6 100644 --- a/.buildkite/ftr_configs.yml +++ b/.buildkite/ftr_configs.yml @@ -124,7 +124,6 @@ enabled: - test/functional/apps/kibana_overview/config.ts - test/functional/apps/management/config.ts - test/functional/apps/saved_objects_management/config.ts - - test/functional/apps/sharing/config.ts - test/functional/apps/status_page/config.ts - test/functional/apps/visualize/group1/config.ts - test/functional/apps/visualize/group2/config.ts diff --git a/src/plugins/share/public/lib/get_home_href.ts b/src/plugins/share/public/lib/get_home_href.ts deleted file mode 100644 index 6c2cc4e695290..0000000000000 --- a/src/plugins/share/public/lib/get_home_href.ts +++ /dev/null @@ -1,13 +0,0 @@ -/* - * 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 and the Server Side Public License, v 1; you may not use this file except - * in compliance with, at your election, the Elastic License 2.0 or the Server - * Side Public License, v 1. - */ - -import type { HttpSetup, IUiSettingsClient } from '@kbn/core/public'; - -export function getHomeHref(http: HttpSetup, uiSettings: IUiSettingsClient) { - return http.basePath.prepend(uiSettings.get('defaultRoute')); -} diff --git a/src/plugins/share/public/url_service/redirect/components/empty_prompt.tsx b/src/plugins/share/public/url_service/redirect/components/empty_prompt.tsx deleted file mode 100644 index a2ba5a26fede7..0000000000000 --- a/src/plugins/share/public/url_service/redirect/components/empty_prompt.tsx +++ /dev/null @@ -1,68 +0,0 @@ -/* - * 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 and the Server Side Public License, v 1; you may not use this file except - * in compliance with, at your election, the Elastic License 2.0 or the Server - * Side Public License, v 1. - */ - -import * as React from 'react'; - -import { EuiButtonEmpty } from '@elastic/eui'; -import { i18n } from '@kbn/i18n'; - -import { ChromeDocTitle } from '@kbn/core-chrome-browser'; -import { NotFoundPrompt } from '@kbn/shared-ux-prompt-not-found'; - -const defaultTitle = i18n.translate('share.urlService.redirect.components.Error.title', { - defaultMessage: 'Unable to open URL', - description: - 'Title displayed to user in redirect endpoint when redirection cannot be performed successfully.', -}); - -const defaultBody = i18n.translate('share.urlService.redirect.components.Error.body', { - defaultMessage: - `Sorry, the object you're looking for can't be found at this URL.` + - ` It might have been removed or maybe it never existed.`, -}); - -export interface ErrorProps { - title?: string; - body?: string; - homeHref: string; - docTitle: ChromeDocTitle; - error: Error; -} - -export const RedirectEmptyPrompt: React.FC = ({ - title = defaultTitle, - body = defaultBody, - homeHref, - docTitle, - error, -}) => { - // eslint-disable-next-line no-console - console.error('Short URL redirect error', error); - - docTitle.change( - i18n.translate('share.urlService.redirect.components.docTitle', { defaultMessage: 'Not Found' }) - ); - - return ( - {title}} - body={

{body}

} - actions={ - - {i18n.translate('share.urlService.redirect.components.Error.homeButton', { - defaultMessage: 'Back to home', - })} - - } - /> - ); -}; diff --git a/src/plugins/share/public/url_service/redirect/components/error.tsx b/src/plugins/share/public/url_service/redirect/components/error.tsx new file mode 100644 index 0000000000000..c7e9e1a9f1095 --- /dev/null +++ b/src/plugins/share/public/url_service/redirect/components/error.tsx @@ -0,0 +1,53 @@ +/* + * 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 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import * as React from 'react'; +import { + EuiEmptyPrompt, + EuiCallOut, + EuiCodeBlock, + EuiSpacer, + EuiFlexGroup, + EuiFlexItem, + EuiText, +} from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; + +const defaultTitle = i18n.translate('share.urlService.redirect.components.Error.title', { + defaultMessage: 'Redirection error', + description: + 'Title displayed to user in redirect endpoint when redirection cannot be performed successfully.', +}); + +export interface ErrorProps { + title?: string; + error: Error; +} + +export const Error: React.FC = ({ title = defaultTitle, error }) => { + return ( + {title}} + body={ + + + + {error.message} + + + + + {error.stack ? error.stack : ''} + + + } + /> + ); +}; diff --git a/src/plugins/share/public/url_service/redirect/components/page.tsx b/src/plugins/share/public/url_service/redirect/components/page.tsx index e06461a91b64c..b64c87cd374cc 100644 --- a/src/plugins/share/public/url_service/redirect/components/page.tsx +++ b/src/plugins/share/public/url_service/redirect/components/page.tsx @@ -8,31 +8,21 @@ import * as React from 'react'; import useObservable from 'react-use/lib/useObservable'; - import { EuiPageTemplate } from '@elastic/eui'; -import type { CustomBrandingSetup } from '@kbn/core-custom-branding-browser'; -import type { ChromeDocTitle, ThemeServiceSetup } from '@kbn/core/public'; +import { ThemeServiceSetup } from '@kbn/core/public'; import { KibanaThemeProvider } from '@kbn/react-kibana-context-theme'; - -import type { RedirectManager } from '../redirect_manager'; -import { RedirectEmptyPrompt } from './empty_prompt'; +import { CustomBrandingStart } from '@kbn/core-custom-branding-browser'; +import { Error } from './error'; +import { RedirectManager } from '../redirect_manager'; import { Spinner } from './spinner'; export interface PageProps { - homeHref: string; - docTitle: ChromeDocTitle; - customBranding: CustomBrandingSetup; manager: Pick; theme: ThemeServiceSetup; + customBranding: CustomBrandingStart; } -export const Page: React.FC = ({ - manager, - homeHref, - customBranding, - docTitle, - theme, -}) => { +export const Page: React.FC = ({ manager, theme, customBranding }) => { const error = useObservable(manager.error$); const hasCustomBranding = useObservable(customBranding.hasCustomBranding$); @@ -40,7 +30,7 @@ export const Page: React.FC = ({ return ( - + ); diff --git a/src/plugins/share/public/url_service/redirect/redirect_manager.ts b/src/plugins/share/public/url_service/redirect/redirect_manager.ts index 54c58ee3a6263..330ded65a5b82 100644 --- a/src/plugins/share/public/url_service/redirect/redirect_manager.ts +++ b/src/plugins/share/public/url_service/redirect/redirect_manager.ts @@ -8,16 +8,15 @@ import type { CoreSetup } from '@kbn/core/public'; import { i18n } from '@kbn/i18n'; -import { migrateToLatest } from '@kbn/kibana-utils-plugin/common'; -import type { Location } from 'history'; import { BehaviorSubject } from 'rxjs'; +import type { Location } from 'history'; +import { migrateToLatest } from '@kbn/kibana-utils-plugin/common'; import type { UrlService } from '../../../common/url_service'; +import { parseSearchParams, RedirectOptions } from '../../../common/url_service/locators/redirect'; import { LEGACY_SHORT_URL_LOCATOR_ID, LegacyShortUrlLocatorParams, } from '../../../common/url_service/locators/legacy_short_url_locator'; -import { parseSearchParams, RedirectOptions } from '../../../common/url_service/locators/redirect'; -import { getHomeHref } from '../../lib/get_home_href'; export interface RedirectManagerDependencies { url: UrlService; @@ -29,27 +28,18 @@ export class RedirectManager { constructor(public readonly deps: RedirectManagerDependencies) {} public registerLocatorRedirectApp(core: CoreSetup) { - const { application, customBranding, http, theme } = core; - - application.register({ + core.application.register({ id: 'r', title: 'Redirect endpoint', chromeless: true, mount: async (params) => { const { render } = await import('./render'); - const [start] = await core.getStartServices(); - const { chrome, uiSettings } = start; - const unmount = render(params.element, { manager: this, - customBranding, - docTitle: chrome.docTitle, - theme, - homeHref: getHomeHref(http, uiSettings), + theme: core.theme, + customBranding: core.customBranding, }); - this.onMount(params.history.location); - return () => { unmount(); }; diff --git a/src/plugins/share/tsconfig.json b/src/plugins/share/tsconfig.json index afbf9641579b1..e6100a773081c 100644 --- a/src/plugins/share/tsconfig.json +++ b/src/plugins/share/tsconfig.json @@ -17,8 +17,6 @@ "@kbn/react-kibana-context-theme", "@kbn/core-analytics-browser", "@kbn/shared-ux-error-boundary", - "@kbn/core-chrome-browser", - "@kbn/shared-ux-prompt-not-found", ], "exclude": [ "target/**/*", diff --git a/test/functional/apps/sharing/_short_urls.ts b/test/functional/apps/sharing/_short_urls.ts deleted file mode 100644 index 9d8994a773a3a..0000000000000 --- a/test/functional/apps/sharing/_short_urls.ts +++ /dev/null @@ -1,51 +0,0 @@ -/* - * 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 and the Server Side Public License, v 1; you may not use this file except - * in compliance with, at your election, the Elastic License 2.0 or the Server - * Side Public License, v 1. - */ - -import expect from '@kbn/expect'; -import { FtrProviderContext } from '../../ftr_provider_context'; - -export default function ({ getPageObjects, getService }: FtrProviderContext) { - describe('Short URLs', () => { - const PageObjects = getPageObjects(['common']); - const browser = getService('browser'); - const log = getService('log'); - const testSubjects = getService('testSubjects'); - const retry = getService('retry'); - - it('shows Page for missing short URL', async () => { - await PageObjects.common.navigateToApp('home'); - - // go to 404 - const currentUrl = await browser.getCurrentUrl(); - log.info('Changing URL to missing short URL...'); - const newUrl = currentUrl.replace(/\/app\/home/, '/app/r/s/foofoo'); - await browser.get(newUrl); - - // check the page for 404 contents - log.info('Checking page title...'); - await retry.try(async () => { - const title = await browser.getTitle(); - expect(title).to.be('Not Found - Elastic'); - }); - - await retry.try(async () => { - await testSubjects.existOrFail('redirectErrorEmptyPromptBody'); - }); - - // click "back to home" button - log.info('Clicking the prompt button...'); - await testSubjects.click('redirectErrorEmptyPromptButton'); - - // check the page - await retry.try(async () => { - const title = await browser.getTitle(); - expect(title).to.be('Home - Elastic'); - }); - }); - }); -} diff --git a/test/functional/apps/sharing/config.ts b/test/functional/apps/sharing/config.ts deleted file mode 100644 index e487d31dcb657..0000000000000 --- a/test/functional/apps/sharing/config.ts +++ /dev/null @@ -1,18 +0,0 @@ -/* - * 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 and the Server Side Public License, v 1; you may not use this file except - * in compliance with, at your election, the Elastic License 2.0 or the Server - * Side Public License, v 1. - */ - -import { FtrConfigProviderContext } from '@kbn/test'; - -export default async function ({ readConfigFile }: FtrConfigProviderContext) { - const functionalConfig = await readConfigFile(require.resolve('../../config.base.js')); - - return { - ...functionalConfig.getAll(), - testFiles: [require.resolve('.')], - }; -} diff --git a/test/functional/apps/sharing/index.ts b/test/functional/apps/sharing/index.ts deleted file mode 100644 index 9cbd715398e7b..0000000000000 --- a/test/functional/apps/sharing/index.ts +++ /dev/null @@ -1,15 +0,0 @@ -/* - * 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 and the Server Side Public License, v 1; you may not use this file except - * in compliance with, at your election, the Elastic License 2.0 or the Server - * Side Public License, v 1. - */ - -import { FtrProviderContext } from '../../ftr_provider_context'; - -export default function ({ loadTestFile }: FtrProviderContext) { - describe('Sharing features', () => { - loadTestFile(require.resolve('./_short_urls')); - }); -}