diff --git a/src/plugins/share/public/index.ts b/src/plugins/share/public/index.ts
index 1f999b59ddb61..74e849948d418 100644
--- a/src/plugins/share/public/index.ts
+++ b/src/plugins/share/public/index.ts
@@ -31,6 +31,7 @@ export {
UrlGeneratorsService,
} from './url_generators';
+export { RedirectOptions } from './url_service';
export { useLocatorUrl } from '../common/url_service/locators/use_locator_url';
import { SharePlugin } from './plugin';
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 cc45e0d3126af..a5d895c7cbcf0 100644
--- a/src/plugins/share/public/url_service/redirect/redirect_manager.ts
+++ b/src/plugins/share/public/url_service/redirect/redirect_manager.ts
@@ -15,7 +15,15 @@ import type { UrlService } from '../../../common/url_service';
import { render } from './render';
import { parseSearchParams } from './util/parse_search_params';
-export interface RedirectOptions {
+/**
+ * @public
+ * Serializable locator parameters that can be used by the redirect service to navigate to a location
+ * in Kibana.
+ *
+ * When passed to the public {@link SharePluginSetup['navigate']} function, locator params will also be
+ * migrated.
+ */
+export interface RedirectOptions
{
/** Locator ID. */
id: string;
@@ -23,7 +31,7 @@ export interface RedirectOptions {
version: string;
/** Locator params. */
- params: unknown & SerializableRecord;
+ params: P;
}
export interface RedirectManagerDependencies {
diff --git a/x-pack/plugins/canvas/common/index.ts b/x-pack/plugins/canvas/common/index.ts
index 51a53586dee3c..5bae69e8601b2 100644
--- a/x-pack/plugins/canvas/common/index.ts
+++ b/x-pack/plugins/canvas/common/index.ts
@@ -8,3 +8,5 @@
export const UI_SETTINGS = {
ENABLE_LABS_UI: 'labs:canvas:enable_ui',
};
+
+export { CANVAS_APP_LOCATOR, CanvasAppLocator, CanvasAppLocatorParams } from './locator';
diff --git a/x-pack/plugins/canvas/common/locator.ts b/x-pack/plugins/canvas/common/locator.ts
new file mode 100644
index 0000000000000..147e4fd860982
--- /dev/null
+++ b/x-pack/plugins/canvas/common/locator.ts
@@ -0,0 +1,45 @@
+/*
+ * 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 type { LocatorDefinition, LocatorPublic } from 'src/plugins/share/common';
+
+import { CANVAS_APP } from './lib/constants';
+
+// eslint-disable-next-line @typescript-eslint/consistent-type-definitions
+export type CanvasAppLocatorParams = {
+ view: 'workpadPDF';
+ id: string;
+ page: number;
+};
+
+export type CanvasAppLocator = LocatorPublic;
+
+export const CANVAS_APP_LOCATOR = 'CANVAS_APP_LOCATOR';
+
+export class CanvasAppLocatorDefinition implements LocatorDefinition {
+ id = CANVAS_APP_LOCATOR;
+
+ public async getLocation(params: CanvasAppLocatorParams) {
+ const app = CANVAS_APP;
+
+ if (params.view === 'workpadPDF') {
+ const { id, page } = params;
+
+ return {
+ app,
+ path: `#/export/workpad/pdf/${id}/page/${page}`,
+ state: {},
+ };
+ }
+
+ return {
+ app,
+ path: '#/',
+ state: {},
+ };
+ }
+}
diff --git a/x-pack/plugins/canvas/kibana.json b/x-pack/plugins/canvas/kibana.json
index 201fb5ab8f78f..772c030e11539 100644
--- a/x-pack/plugins/canvas/kibana.json
+++ b/x-pack/plugins/canvas/kibana.json
@@ -25,7 +25,8 @@
"features",
"inspector",
"presentationUtil",
- "uiActions"
+ "uiActions",
+ "share"
],
"optionalPlugins": ["home", "reporting", "usageCollection"],
"requiredBundles": [
diff --git a/x-pack/plugins/canvas/public/components/workpad_header/share_menu/share_menu.tsx b/x-pack/plugins/canvas/public/components/workpad_header/share_menu/share_menu.tsx
index ca8f5fd4e3e45..50a3890673ffa 100644
--- a/x-pack/plugins/canvas/public/components/workpad_header/share_menu/share_menu.tsx
+++ b/x-pack/plugins/canvas/public/components/workpad_header/share_menu/share_menu.tsx
@@ -46,9 +46,7 @@ export const ShareMenu = () => {
ReportingPanelPDFComponent !== null
? ({ onClose }: { onClose: () => void }) => (
- getPdfJobParams(sharingData, platformService.getBasePathInterface())
- }
+ getJobParams={() => getPdfJobParams(sharingData, platformService.getKibanaVersion())}
layoutOption="canvas"
onClose={onClose}
/>
diff --git a/x-pack/plugins/canvas/public/components/workpad_header/share_menu/utils.test.ts b/x-pack/plugins/canvas/public/components/workpad_header/share_menu/utils.test.ts
index 51d1b9abc5664..18c348aec18ea 100644
--- a/x-pack/plugins/canvas/public/components/workpad_header/share_menu/utils.test.ts
+++ b/x-pack/plugins/canvas/public/components/workpad_header/share_menu/utils.test.ts
@@ -9,17 +9,11 @@ jest.mock('../../../../common/lib/fetch');
import { getPdfJobParams } from './utils';
import { workpads } from '../../../../__fixtures__/workpads';
-import { IBasePath } from 'kibana/public';
-const basePath = ({
- prepend: jest.fn().mockImplementation((s) => `basepath/s/spacey/${s}`),
- get: () => 'basepath/s/spacey',
- serverBasePath: `basepath`,
-} as unknown) as IBasePath;
const workpadSharingData = { workpad: workpads[0], pageCount: 12 };
test('getPdfJobParams returns the correct job params for canvas layout', () => {
- const jobParams = getPdfJobParams(workpadSharingData, basePath);
+ const jobParams = getPdfJobParams(workpadSharingData, 'v99.99.99');
expect(jobParams).toMatchInlineSnapshot(`
Object {
"layout": Object {
@@ -29,21 +23,117 @@ test('getPdfJobParams returns the correct job params for canvas layout', () => {
},
"id": "canvas",
},
- "objectType": "canvas workpad",
- "relativeUrls": Array [
- "/s/spacey/app/canvas#/export/workpad/pdf/base-workpad/page/1",
- "/s/spacey/app/canvas#/export/workpad/pdf/base-workpad/page/2",
- "/s/spacey/app/canvas#/export/workpad/pdf/base-workpad/page/3",
- "/s/spacey/app/canvas#/export/workpad/pdf/base-workpad/page/4",
- "/s/spacey/app/canvas#/export/workpad/pdf/base-workpad/page/5",
- "/s/spacey/app/canvas#/export/workpad/pdf/base-workpad/page/6",
- "/s/spacey/app/canvas#/export/workpad/pdf/base-workpad/page/7",
- "/s/spacey/app/canvas#/export/workpad/pdf/base-workpad/page/8",
- "/s/spacey/app/canvas#/export/workpad/pdf/base-workpad/page/9",
- "/s/spacey/app/canvas#/export/workpad/pdf/base-workpad/page/10",
- "/s/spacey/app/canvas#/export/workpad/pdf/base-workpad/page/11",
- "/s/spacey/app/canvas#/export/workpad/pdf/base-workpad/page/12",
+ "locatorParams": Array [
+ Object {
+ "id": "CANVAS_APP_LOCATOR",
+ "params": Object {
+ "id": "base-workpad",
+ "page": 1,
+ "view": "workpadPDF",
+ },
+ "version": "v99.99.99",
+ },
+ Object {
+ "id": "CANVAS_APP_LOCATOR",
+ "params": Object {
+ "id": "base-workpad",
+ "page": 2,
+ "view": "workpadPDF",
+ },
+ "version": "v99.99.99",
+ },
+ Object {
+ "id": "CANVAS_APP_LOCATOR",
+ "params": Object {
+ "id": "base-workpad",
+ "page": 3,
+ "view": "workpadPDF",
+ },
+ "version": "v99.99.99",
+ },
+ Object {
+ "id": "CANVAS_APP_LOCATOR",
+ "params": Object {
+ "id": "base-workpad",
+ "page": 4,
+ "view": "workpadPDF",
+ },
+ "version": "v99.99.99",
+ },
+ Object {
+ "id": "CANVAS_APP_LOCATOR",
+ "params": Object {
+ "id": "base-workpad",
+ "page": 5,
+ "view": "workpadPDF",
+ },
+ "version": "v99.99.99",
+ },
+ Object {
+ "id": "CANVAS_APP_LOCATOR",
+ "params": Object {
+ "id": "base-workpad",
+ "page": 6,
+ "view": "workpadPDF",
+ },
+ "version": "v99.99.99",
+ },
+ Object {
+ "id": "CANVAS_APP_LOCATOR",
+ "params": Object {
+ "id": "base-workpad",
+ "page": 7,
+ "view": "workpadPDF",
+ },
+ "version": "v99.99.99",
+ },
+ Object {
+ "id": "CANVAS_APP_LOCATOR",
+ "params": Object {
+ "id": "base-workpad",
+ "page": 8,
+ "view": "workpadPDF",
+ },
+ "version": "v99.99.99",
+ },
+ Object {
+ "id": "CANVAS_APP_LOCATOR",
+ "params": Object {
+ "id": "base-workpad",
+ "page": 9,
+ "view": "workpadPDF",
+ },
+ "version": "v99.99.99",
+ },
+ Object {
+ "id": "CANVAS_APP_LOCATOR",
+ "params": Object {
+ "id": "base-workpad",
+ "page": 10,
+ "view": "workpadPDF",
+ },
+ "version": "v99.99.99",
+ },
+ Object {
+ "id": "CANVAS_APP_LOCATOR",
+ "params": Object {
+ "id": "base-workpad",
+ "page": 11,
+ "view": "workpadPDF",
+ },
+ "version": "v99.99.99",
+ },
+ Object {
+ "id": "CANVAS_APP_LOCATOR",
+ "params": Object {
+ "id": "base-workpad",
+ "page": 12,
+ "view": "workpadPDF",
+ },
+ "version": "v99.99.99",
+ },
],
+ "objectType": "canvas workpad",
"title": "base workpad",
}
`);
diff --git a/x-pack/plugins/canvas/public/components/workpad_header/share_menu/utils.ts b/x-pack/plugins/canvas/public/components/workpad_header/share_menu/utils.ts
index bbd6b42a38333..311ef73e1c973 100644
--- a/x-pack/plugins/canvas/public/components/workpad_header/share_menu/utils.ts
+++ b/x-pack/plugins/canvas/public/components/workpad_header/share_menu/utils.ts
@@ -5,8 +5,9 @@
* 2.0.
*/
-import { IBasePath } from 'kibana/public';
-import rison from 'rison-node';
+import type { RedirectOptions } from 'src/plugins/share/public';
+import { CANVAS_APP_LOCATOR } from '../../../../common/locator';
+import { CanvasAppLocatorParams } from '../../../../common/locator';
import { CanvasWorkpad } from '../../../../types';
export interface CanvasWorkpadSharingData {
@@ -16,11 +17,8 @@ export interface CanvasWorkpadSharingData {
export function getPdfJobParams(
{ workpad: { id, name: title, width, height }, pageCount }: CanvasWorkpadSharingData,
- basePath: IBasePath
+ version: string
) {
- const urlPrefix = basePath.get().replace(basePath.serverBasePath, ''); // for Spaces prefix, which is included in basePath.get()
- const canvasEntry = `${urlPrefix}/app/canvas#`;
-
// The viewport in Reporting by specifying the dimensions. In order for things to work,
// we need a viewport that will include all of the pages in the workpad. The viewport
// also needs to include any offset values from the 0,0 position, otherwise the cropped
@@ -32,9 +30,18 @@ export function getPdfJobParams(
// viewport size.
// build a list of all page urls for exporting, they are captured one at a time
- const workpadUrls = [];
+
+ const locatorParams: Array> = [];
for (let i = 1; i <= pageCount; i++) {
- workpadUrls.push(rison.encode(`${canvasEntry}/export/workpad/pdf/${id}/page/${i}`));
+ locatorParams.push({
+ id: CANVAS_APP_LOCATOR,
+ version,
+ params: {
+ view: 'workpadPDF',
+ id,
+ page: i,
+ },
+ });
}
return {
@@ -43,7 +50,7 @@ export function getPdfJobParams(
id: 'canvas',
},
objectType: 'canvas workpad',
- relativeUrls: workpadUrls,
+ locatorParams,
title,
};
}
diff --git a/x-pack/plugins/canvas/public/plugin.tsx b/x-pack/plugins/canvas/public/plugin.tsx
index b8f0b17f814d8..3b4a6b6f1ee4b 100644
--- a/x-pack/plugins/canvas/public/plugin.tsx
+++ b/x-pack/plugins/canvas/public/plugin.tsx
@@ -6,6 +6,7 @@
*/
import { BehaviorSubject } from 'rxjs';
+import type { SharePluginSetup } from 'src/plugins/share/public';
import { ChartsPluginSetup, ChartsPluginStart } from 'src/plugins/charts/public';
import { ReportingStart } from '../../reporting/public';
import {
@@ -20,7 +21,8 @@ import {
import { HomePublicPluginSetup } from '../../../../src/plugins/home/public';
import { initLoadingIndicator } from './lib/loading_indicator';
import { getSessionStorage } from './lib/storage';
-import { SESSIONSTORAGE_LASTPATH } from '../common/lib/constants';
+import { SESSIONSTORAGE_LASTPATH, CANVAS_APP } from '../common/lib/constants';
+import { CanvasAppLocatorDefinition } from '../common/locator';
import { featureCatalogueEntry } from './feature_catalogue_entry';
import { ExpressionsSetup, ExpressionsStart } from '../../../../src/plugins/expressions/public';
import { DataPublicPluginSetup, DataPublicPluginStart } from '../../../../src/plugins/data/public';
@@ -43,6 +45,7 @@ export { CoreStart, CoreSetup };
// This interface will be built out as we require other plugins for setup
export interface CanvasSetupDeps {
data: DataPublicPluginSetup;
+ share: SharePluginSetup;
expressions: ExpressionsSetup;
home?: HomePublicPluginSetup;
usageCollection?: UsageCollectionSetup;
@@ -97,7 +100,7 @@ export class CanvasPlugin
coreSetup.application.register({
category: DEFAULT_APP_CATEGORIES.kibana,
- id: 'canvas',
+ id: CANVAS_APP,
title: 'Canvas',
euiIconType: 'logoKibana',
order: 3000,
@@ -145,6 +148,10 @@ export class CanvasPlugin
setupPlugins.home.featureCatalogue.register(featureCatalogueEntry);
}
+ if (setupPlugins.share) {
+ setupPlugins.share.url.locators.create(new CanvasAppLocatorDefinition());
+ }
+
canvasApi.addArgumentUIs(async () => {
// @ts-expect-error
const { argTypeSpecs } = await import('./expression_types/arg_types');
diff --git a/x-pack/plugins/canvas/public/services/kibana/reporting.ts b/x-pack/plugins/canvas/public/services/kibana/reporting.ts
index 432fe5675b22f..02611acdea4da 100644
--- a/x-pack/plugins/canvas/public/services/kibana/reporting.ts
+++ b/x-pack/plugins/canvas/public/services/kibana/reporting.ts
@@ -22,7 +22,7 @@ export const reportingServiceFactory: CanvasReportingServiceFactory = ({
const { reporting } = startPlugins;
const reportingEnabled = () => ({
- getReportingPanelPDFComponent: () => reporting?.components.ReportingPanelPDF || null,
+ getReportingPanelPDFComponent: () => reporting?.components.ReportingPanelPDFV2 || null,
});
const reportingDisabled = () => ({ getReportingPanelPDFComponent: () => null });
diff --git a/x-pack/plugins/canvas/public/services/reporting.ts b/x-pack/plugins/canvas/public/services/reporting.ts
index 5369dab32bf68..9ec5bd6a06a4c 100644
--- a/x-pack/plugins/canvas/public/services/reporting.ts
+++ b/x-pack/plugins/canvas/public/services/reporting.ts
@@ -7,7 +7,7 @@
import { ReportingStart } from '../../../reporting/public';
-type ReportingPanelPDFComponent = ReportingStart['components']['ReportingPanelPDF'];
+type ReportingPanelPDFComponent = ReportingStart['components']['ReportingPanelPDFV2'];
export interface CanvasReportingService {
getReportingPanelPDFComponent: () => ReportingPanelPDFComponent | null;
}
diff --git a/x-pack/plugins/canvas/tsconfig.json b/x-pack/plugins/canvas/tsconfig.json
index 87fabe2730c16..5a5a1883240b7 100644
--- a/x-pack/plugins/canvas/tsconfig.json
+++ b/x-pack/plugins/canvas/tsconfig.json
@@ -7,7 +7,7 @@
"declarationMap": true,
// the plugin contains some heavy json files
- "resolveJsonModule": false,
+ "resolveJsonModule": false
},
"include": [
"../../../typings/**/*",
@@ -20,13 +20,14 @@
"shareable_runtime/**/*",
"storybook/**/*",
"tasks/mocks/*",
- "types/**/*",
+ "types/**/*"
],
"references": [
{ "path": "../../../src/core/tsconfig.json" },
- { "path": "../../../src/plugins/bfetch/tsconfig.json"},
+ { "path": "../../../src/plugins/bfetch/tsconfig.json" },
{ "path": "../../../src/plugins/charts/tsconfig.json" },
- { "path": "../../../src/plugins/data/tsconfig.json"},
+ { "path": "../../../src/plugins/data/tsconfig.json" },
+ { "path": "../../../src/plugins/share/tsconfig.json" },
{ "path": "../../../src/plugins/discover/tsconfig.json" },
{ "path": "../../../src/plugins/embeddable/tsconfig.json" },
{ "path": "../../../src/plugins/expressions/tsconfig.json" },
@@ -48,6 +49,6 @@
{ "path": "../features/tsconfig.json" },
{ "path": "../lens/tsconfig.json" },
{ "path": "../maps/tsconfig.json" },
- { "path": "../reporting/tsconfig.json" },
+ { "path": "../reporting/tsconfig.json" }
]
}
diff --git a/x-pack/plugins/reporting/common/build_kibana_path.ts b/x-pack/plugins/reporting/common/build_kibana_path.ts
new file mode 100644
index 0000000000000..2cb37013300ca
--- /dev/null
+++ b/x-pack/plugins/reporting/common/build_kibana_path.ts
@@ -0,0 +1,18 @@
+/*
+ * 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.
+ */
+
+interface Args {
+ basePath: string;
+ appPath: string;
+ spaceId?: string;
+}
+
+export const buildKibanaPath = ({ basePath, appPath, spaceId }: Args) => {
+ return spaceId === undefined || spaceId.toLowerCase() === 'default'
+ ? `${basePath}${appPath}`
+ : `${basePath}/s/${spaceId}${appPath}`;
+};
diff --git a/x-pack/plugins/reporting/common/constants.ts b/x-pack/plugins/reporting/common/constants.ts
index 0e7d8f1ffe9ca..9224a23fcb33f 100644
--- a/x-pack/plugins/reporting/common/constants.ts
+++ b/x-pack/plugins/reporting/common/constants.ts
@@ -110,12 +110,10 @@ export const REPORTING_REDIRECT_LOCATOR_STORE_KEY = '__REPORTING_REDIRECT_LOCATO
/**
* A way to get the client side route for the reporting redirect app.
*
- * This route currently expects a job ID and a locator that to use from that job so that it can redirect to the
- * correct page.
- *
- * TODO: Accommodate 'forceNow' value that some visualizations may rely on
+ * TODO: Add a job ID and a locator to use so that we can redirect without expecting state to
+ * be injected to the page
*/
-export const getRedirectAppPathHome = () => {
+export const getRedirectAppPath = () => {
return '/app/management/insightsAndAlerting/reporting/r';
};
diff --git a/x-pack/plugins/reporting/public/redirect/redirect_app.tsx b/x-pack/plugins/reporting/public/redirect/redirect_app.tsx
index 60b51c0f07895..3024404dc07bf 100644
--- a/x-pack/plugins/reporting/public/redirect/redirect_app.tsx
+++ b/x-pack/plugins/reporting/public/redirect/redirect_app.tsx
@@ -49,7 +49,7 @@ export const RedirectApp: FunctionComponent = ({ share }) => {
];
if (!locatorParams) {
- throw new Error('Could not find locator for report');
+ throw new Error('Could not find locator params for report');
}
share.navigate(locatorParams);
diff --git a/x-pack/plugins/reporting/server/browsers/chromium/driver/chromium_driver.ts b/x-pack/plugins/reporting/server/browsers/chromium/driver/chromium_driver.ts
index f14bb249524e2..df91b6fe0ba47 100644
--- a/x-pack/plugins/reporting/server/browsers/chromium/driver/chromium_driver.ts
+++ b/x-pack/plugins/reporting/server/browsers/chromium/driver/chromium_driver.ts
@@ -121,7 +121,7 @@ export class HeadlessChromiumDriver {
(key: string, value: unknown) => {
Object.defineProperty(window, key, {
configurable: false,
- writable: false,
+ writable: true,
enumerable: true,
value,
});
diff --git a/x-pack/plugins/reporting/server/export_types/common/v2/get_full_redirect_app_url.ts b/x-pack/plugins/reporting/server/export_types/common/v2/get_full_redirect_app_url.ts
new file mode 100644
index 0000000000000..bb640eff667e9
--- /dev/null
+++ b/x-pack/plugins/reporting/server/export_types/common/v2/get_full_redirect_app_url.ts
@@ -0,0 +1,33 @@
+/*
+ * 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 { format } from 'url';
+import { ReportingConfig } from '../../..';
+import { getRedirectAppPath } from '../../../../common/constants';
+import { buildKibanaPath } from '../../../../common/build_kibana_path';
+
+export function getFullRedirectAppUrl(config: ReportingConfig, spaceId?: string) {
+ const [basePath, protocol, hostname, port] = [
+ config.kbnConfig.get('server', 'basePath'),
+ config.get('kibanaServer', 'protocol'),
+ config.get('kibanaServer', 'hostname'),
+ config.get('kibanaServer', 'port'),
+ ] as string[];
+
+ const path = buildKibanaPath({
+ basePath,
+ spaceId,
+ appPath: getRedirectAppPath(),
+ });
+
+ return format({
+ protocol,
+ hostname,
+ port,
+ pathname: path,
+ });
+}
diff --git a/x-pack/plugins/reporting/server/export_types/common/v2/get_full_urls.ts b/x-pack/plugins/reporting/server/export_types/common/v2/get_full_urls.ts
deleted file mode 100644
index bcfb06784a6dc..0000000000000
--- a/x-pack/plugins/reporting/server/export_types/common/v2/get_full_urls.ts
+++ /dev/null
@@ -1,34 +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; you may not use this file except in compliance with the Elastic License
- * 2.0.
- */
-
-import { parse as urlParse, UrlWithStringQuery } from 'url';
-import { ReportingConfig } from '../../../';
-import { getAbsoluteUrlFactory } from '../get_absolute_url';
-import { validateUrls } from '../validate_urls';
-
-export function getFullUrls(config: ReportingConfig, relativeUrls: string[]) {
- const [basePath, protocol, hostname, port] = [
- config.kbnConfig.get('server', 'basePath'),
- config.get('kibanaServer', 'protocol'),
- config.get('kibanaServer', 'hostname'),
- config.get('kibanaServer', 'port'),
- ] as string[];
- const getAbsoluteUrl = getAbsoluteUrlFactory({ basePath, protocol, hostname, port });
-
- validateUrls(relativeUrls);
-
- const urls = relativeUrls.map((relativeUrl) => {
- const parsedRelative: UrlWithStringQuery = urlParse(relativeUrl);
- return getAbsoluteUrl({
- path: parsedRelative.pathname === null ? undefined : parsedRelative.pathname,
- hash: parsedRelative.hash === null ? undefined : parsedRelative.hash,
- search: parsedRelative.search === null ? undefined : parsedRelative.search,
- });
- });
-
- return urls;
-}
diff --git a/x-pack/plugins/reporting/server/export_types/png_v2/execute_job.ts b/x-pack/plugins/reporting/server/export_types/png_v2/execute_job.ts
index 06fdcd93e497c..5e3b3117f4bb5 100644
--- a/x-pack/plugins/reporting/server/export_types/png_v2/execute_job.ts
+++ b/x-pack/plugins/reporting/server/export_types/png_v2/execute_job.ts
@@ -8,7 +8,7 @@
import apm from 'elastic-apm-node';
import * as Rx from 'rxjs';
import { catchError, finalize, map, mergeMap, takeUntil, tap } from 'rxjs/operators';
-import { PNG_JOB_TYPE_V2, getRedirectAppPathHome } from '../../../common/constants';
+import { PNG_JOB_TYPE_V2 } from '../../../common/constants';
import { TaskRunResult } from '../../lib/tasks';
import { RunTaskFn, RunTaskFnFactory } from '../../types';
import {
@@ -18,7 +18,7 @@ import {
generatePngObservableFactory,
setForceNow,
} from '../common';
-import { getFullUrls } from '../common/v2/get_full_urls';
+import { getFullRedirectAppUrl } from '../common/v2/get_full_redirect_app_url';
import { TaskPayloadPNGV2 } from './types';
export const runTaskFnFactory: RunTaskFnFactory<
@@ -39,8 +39,7 @@ export const runTaskFnFactory: RunTaskFnFactory<
map((decryptedHeaders) => omitBlockedHeaders(decryptedHeaders)),
map((filteredHeaders) => getConditionalHeaders(config, filteredHeaders)),
mergeMap((conditionalHeaders) => {
- const relativeUrl = getRedirectAppPathHome();
- const [url] = getFullUrls(config, [relativeUrl]);
+ const url = getFullRedirectAppUrl(config, job.spaceId);
const [locatorParams] = job.locatorParams.map(setForceNow(job.forceNow));
apmGetAssets?.end();
diff --git a/x-pack/plugins/reporting/server/export_types/printable_pdf_v2/execute_job.ts b/x-pack/plugins/reporting/server/export_types/printable_pdf_v2/execute_job.ts
index 2211e7df08770..f2cf8026c901e 100644
--- a/x-pack/plugins/reporting/server/export_types/printable_pdf_v2/execute_job.ts
+++ b/x-pack/plugins/reporting/server/export_types/printable_pdf_v2/execute_job.ts
@@ -49,7 +49,7 @@ export const runTaskFnFactory: RunTaskFnFactory<
apmGeneratePdf = apmTrans?.startSpan('generate_pdf_pipeline', 'execute');
return generatePdfObservable(
jobLogger,
- jobId,
+ job,
title,
locatorParams.map(setForceNow(job.forceNow)),
browserTimezone,
diff --git a/x-pack/plugins/reporting/server/export_types/printable_pdf_v2/lib/generate_pdf.ts b/x-pack/plugins/reporting/server/export_types/printable_pdf_v2/lib/generate_pdf.ts
index 9be95223a8864..424a347876a1d 100644
--- a/x-pack/plugins/reporting/server/export_types/printable_pdf_v2/lib/generate_pdf.ts
+++ b/x-pack/plugins/reporting/server/export_types/printable_pdf_v2/lib/generate_pdf.ts
@@ -9,14 +9,14 @@ import { groupBy, zip } from 'lodash';
import * as Rx from 'rxjs';
import { mergeMap } from 'rxjs/operators';
import { ReportingCore } from '../../../';
-import { getRedirectAppPathHome } from '../../../../common/constants';
import { LocatorParams, UrlOrUrlLocatorTuple } from '../../../../common/types';
import { LevelLogger } from '../../../lib';
import { createLayout, LayoutParams } from '../../../lib/layouts';
import { getScreenshots$, ScreenshotResults } from '../../../lib/screenshots';
import { ConditionalHeaders } from '../../common';
import { PdfMaker } from '../../common/pdf';
-import { getFullUrls } from '../../common/v2/get_full_urls';
+import { getFullRedirectAppUrl } from '../../common/v2/get_full_redirect_app_url';
+import type { TaskPayloadPDFV2 } from '../types';
import { getTracker } from './tracker';
const getTimeRange = (urlScreenshots: ScreenshotResults[]) => {
@@ -36,7 +36,7 @@ export async function generatePdfObservableFactory(reporting: ReportingCore) {
return function generatePdfObservable(
logger: LevelLogger,
- jobId: string,
+ job: TaskPayloadPDFV2,
title: string,
locatorParams: LocatorParams[],
browserTimezone: string | undefined,
@@ -56,9 +56,7 @@ export async function generatePdfObservableFactory(reporting: ReportingCore) {
/**
* For each locator we get the relative URL to the redirect app
*/
- const relativeUrls = locatorParams.map(() => getRedirectAppPathHome());
- const urls = getFullUrls(reporting.getConfig(), relativeUrls);
-
+ const urls = locatorParams.map(() => getFullRedirectAppUrl(reporting.getConfig(), job.spaceId));
const screenshots$ = getScreenshots$(captureConfig, browserDriverFactory, {
logger,
urlsOrUrlLocatorTuples: zip(urls, locatorParams) as UrlOrUrlLocatorTuple[],