diff --git a/x-pack/legacy/plugins/lens/public/app_plugin/plugin.tsx b/x-pack/legacy/plugins/lens/public/app_plugin/plugin.tsx index a5dc33da21f15..e2da57555e350 100644 --- a/x-pack/legacy/plugins/lens/public/app_plugin/plugin.tsx +++ b/x-pack/legacy/plugins/lens/public/app_plugin/plugin.tsx @@ -41,7 +41,11 @@ import { import { NOT_INTERNATIONALIZED_PRODUCT_NAME } from '../../common'; import { KibanaLegacySetup } from '../../../../../../src/plugins/kibana_legacy/public'; import { EditorFrameStart } from '../types'; -import { getKibanaBasePathFromDashboardUrl, addEmbeddableToDashboardUrl } from './url_helper'; +import { + getKibanaBasePathFromDashboardUrl, + addEmbeddableToDashboardUrl, + getDashboardUrlWithoutTime, +} from './url_helper'; export interface LensPluginSetupDependencies { kibana_legacy: KibanaLegacySetup; @@ -116,8 +120,9 @@ export class AppPlugin { )}/lens/edit/${id}`; if (lensUrl) { window.history.pushState({}, '', lensUrl); + const dashboardUrlWithoutTime = getDashboardUrlWithoutTime(lastDashboardAbsoluteUrl); const dashboardParsedUrl = addEmbeddableToDashboardUrl( - lastDashboardAbsoluteUrl, + dashboardUrlWithoutTime, id, 'lens' ); diff --git a/x-pack/legacy/plugins/lens/public/app_plugin/url_helper.test.ts b/x-pack/legacy/plugins/lens/public/app_plugin/url_helper.test.ts index 5aec5b6cbfd4e..1b0acbd420ad3 100644 --- a/x-pack/legacy/plugins/lens/public/app_plugin/url_helper.test.ts +++ b/x-pack/legacy/plugins/lens/public/app_plugin/url_helper.test.ts @@ -11,7 +11,11 @@ jest.mock('../../../../../../src/legacy/core_plugins/kibana/public/dashboard', ( }, })); -import { addEmbeddableToDashboardUrl, getKibanaBasePathFromDashboardUrl } from './url_helper'; +import { + addEmbeddableToDashboardUrl, + getKibanaBasePathFromDashboardUrl, + getDashboardUrlWithoutTime, +} from './url_helper'; describe('Lens URL Helper', () => { it('getKibanaBasePathFromDashboardUrl', () => { @@ -53,4 +57,29 @@ describe('Lens URL Helper', () => { `http://localhost:5601/app/kibana#/dashboard/777182?addEmbeddableType=${type}&addEmbeddableId=${id}&_g=(refreshInterval:(pause:!t,value:0),time:(from:now-4h,to:now))&_a=(description:'',filters:!()` ); }); + + it('getDashboardUrlWithoutTime', () => { + let url = + "http://localhost:5601/app/kibana#/dashboard?_g=(refreshInterval:(pause:!t,value:0),time:(from:now-15m,to:now))&_a=(description:'',filters:!()"; + expect(getDashboardUrlWithoutTime(url)).toEqual( + "http://localhost:5601/app/kibana#/dashboard?_g=(refreshInterval:(pause:!t,value:0))&_a=(description:'',filters:!()" + ); + url = + "http://mybusiness.mydomain.com/app/kibana#/dashboard?_g=(refreshInterval:(pause:!t,value:0))&_a=(description:'',filters:!()"; + expect(getDashboardUrlWithoutTime(url)).toEqual( + `http://mybusiness.mydomain.com/app/kibana#/dashboard?_g=(refreshInterval:(pause:!t,value:0))&_a=(description:\'\',filters:!()` + ); + url = + "http://mybusiness.mydomain.com/app/kibana#/dashboard?_g=(time:(from:now-15m,to:now),refreshInterval:(pause:!t,value:0))&_a=(description:'',filters:!()"; + expect(getDashboardUrlWithoutTime(url)).toEqual( + `http://mybusiness.mydomain.com/app/kibana#/dashboard?_g=(refreshInterval:(pause:!t,value:0))&_a=(description:\'\',filters:!()` + ); + url = 'http://notDashboarUrl'; + expect(getDashboardUrlWithoutTime(url)).toBe('http://notDashboarUrl'); + url = + "http://localhost:5601/app/kibana#/dashboard/777182?_g=(refreshInterval:(pause:!t,value:0),time:(from:now-4h,to:now))&_a=(description:'',filters:!()"; + expect(getDashboardUrlWithoutTime(url)).toBe( + `http://localhost:5601/app/kibana#/dashboard/777182?_g=(refreshInterval:(pause:!t,value:0))&_a=(description:'',filters:!()` + ); + }); }); diff --git a/x-pack/legacy/plugins/lens/public/app_plugin/url_helper.ts b/x-pack/legacy/plugins/lens/public/app_plugin/url_helper.ts index c69ac1268039f..1e066a4841cc6 100644 --- a/x-pack/legacy/plugins/lens/public/app_plugin/url_helper.ts +++ b/x-pack/legacy/plugins/lens/public/app_plugin/url_helper.ts @@ -7,6 +7,8 @@ import { DashboardConstants } from '../../../../../../src/legacy/core_plugins/ki const EMPTY_DASHBOARD_PATTERN = /(.*#\/dashboard\?)(.*)/; const DASHBOARD_WITH_ID_PATTERN = /(.*#\/dashboard\/.*\?)(.*)/; +const TIME_PATTERN_1 = /(.*)(,time:[^)]+\))(.*)/; +const TIME_PATTERN_2 = /(.*)(time:[^)]+\),)(.*)/; // same as TIME_PATTERN_1, but comma follows, not preceeds /** * * Returns base path from dashboard url @@ -56,3 +58,22 @@ export function addEmbeddableToDashboardUrl( const dashboardState = regex[2]; return `${base}${DashboardConstants.ADD_EMBEDDABLE_TYPE}=${embeddableType}&${DashboardConstants.ADD_EMBEDDABLE_ID}=${embeddableId}&${dashboardState}`; } + +/** + * Returns dashboard URL without time parameter + * eg. + * input: http://localhost:5601/lib/app/kibana#/dashboard?_g=(refreshInterval:(pause:!t,value:0),time:(from:now-15m,to:now)) + * output: http://localhost:5601/lib/app/kibana#/dashboard?_g=(refreshInterval:(pause:!t,value:0)) + * @param url dashboard absolute url + */ +export function getDashboardUrlWithoutTime(url: string | undefined): string { + if (!url) { + return null; + } + let regex = RegExp(TIME_PATTERN_1).exec(url); + regex = regex || RegExp(TIME_PATTERN_2).exec(url); + if (regex) { + return `${regex[1]}${regex[3]}`; + } + return url; +}