diff --git a/src/core/public/application/types.ts b/src/core/public/application/types.ts index 63e542b0127ed1..17fdfc627187e9 100644 --- a/src/core/public/application/types.ts +++ b/src/core/public/application/types.ts @@ -229,6 +229,7 @@ export interface LegacyApp extends AppBase { appUrl: string; subUrlBase?: string; linkToLastSubUrl?: boolean; + disableSubUrlTracking?: boolean; } /** diff --git a/src/core/public/chrome/nav_links/nav_link.ts b/src/core/public/chrome/nav_links/nav_link.ts index 4d3a1e9ecd1991..d0ef2aeb265feb 100644 --- a/src/core/public/chrome/nav_links/nav_link.ts +++ b/src/core/public/chrome/nav_links/nav_link.ts @@ -78,6 +78,17 @@ export interface ChromeNavLink { */ readonly subUrlBase?: string; + /** + * A flag that tells legacy chrome to ignore the link when + * tracking sub-urls + * + * @internalRemarks + * This should be removed once legacy apps are gone. + * + * @deprecated + */ + readonly disableSubUrlTracking?: boolean; + /** * Whether or not the subUrl feature should be enabled. * diff --git a/src/core/public/legacy/legacy_service.ts b/src/core/public/legacy/legacy_service.ts index cc3210771eecc2..e4788e686dd45f 100644 --- a/src/core/public/legacy/legacy_service.ts +++ b/src/core/public/legacy/legacy_service.ts @@ -75,6 +75,7 @@ export class LegacyPlatformService { subUrlBase: navLink.subUrlBase, linkToLastSubUrl: navLink.linkToLastSubUrl, category: navLink.category, + disableSubUrlTracking: navLink.disableSubUrlTracking, }) ); diff --git a/src/core/server/legacy/plugins/find_legacy_plugin_specs.ts b/src/core/server/legacy/plugins/find_legacy_plugin_specs.ts index a19133c30659b0..1c6ab91a392799 100644 --- a/src/core/server/legacy/plugins/find_legacy_plugin_specs.ts +++ b/src/core/server/legacy/plugins/find_legacy_plugin_specs.ts @@ -85,6 +85,7 @@ function getNavLinks(uiExports: LegacyUiExports, pluginSpecs: LegacyPluginSpec[] order: typeof spec.order === 'number' ? spec.order : 0, url: spec.url, subUrlBase: spec.subUrlBase || spec.url, + disableSubUrlTracking: spec.disableSubUrlTracking, icon: spec.icon, euiIconType: spec.euiIconType, linkToLastSub: 'linkToLastSubUrl' in spec ? spec.linkToLastSubUrl : false, diff --git a/src/legacy/ui/public/chrome/api/nav.ts b/src/legacy/ui/public/chrome/api/nav.ts index 5f97e5fa8d55dd..771314d9e14812 100644 --- a/src/legacy/ui/public/chrome/api/nav.ts +++ b/src/legacy/ui/public/chrome/api/nav.ts @@ -78,7 +78,7 @@ export function initChromeNavApi(chrome: any, internals: NavInternals) { coreNavLinks .getAll() // Filter only legacy links - .filter(link => link.legacy) + .filter(link => link.legacy && !link.disableSubUrlTracking) .forEach(link => { const active = url.startsWith(link.subUrlBase!); link = coreNavLinks.update(link.id, { active })!; diff --git a/src/legacy/ui/ui_nav_links/ui_nav_link.js b/src/legacy/ui/ui_nav_links/ui_nav_link.js index 5888c21a53c95c..f56809f7ebb80b 100644 --- a/src/legacy/ui/ui_nav_links/ui_nav_link.js +++ b/src/legacy/ui/ui_nav_links/ui_nav_link.js @@ -25,6 +25,7 @@ export class UiNavLink { order = 0, url, subUrlBase, + disableSubUrlTracking, icon, euiIconType, linkToLastSubUrl = true, @@ -39,6 +40,7 @@ export class UiNavLink { this._order = order; this._url = url; this._subUrlBase = subUrlBase || url; + this._disableSubUrlTracking = disableSubUrlTracking; this._icon = icon; this._euiIconType = euiIconType; this._linkToLastSubUrl = linkToLastSubUrl; @@ -62,6 +64,7 @@ export class UiNavLink { icon: this._icon, euiIconType: this._euiIconType, linkToLastSubUrl: this._linkToLastSubUrl, + disableSubUrlTracking: this._disableSubUrlTracking, hidden: this._hidden, disabled: this._disabled, tooltip: this._tooltip,