diff --git a/packages/kbn-storybook/lib/webpack.dll.config.js b/packages/kbn-storybook/lib/webpack.dll.config.js
index bc871fab471b2..534f503e2956a 100644
--- a/packages/kbn-storybook/lib/webpack.dll.config.js
+++ b/packages/kbn-storybook/lib/webpack.dll.config.js
@@ -73,7 +73,6 @@ module.exports = {
'rxjs',
'sinon',
'tinycolor2',
- './src/legacy/ui/public/styles/font_awesome.less',
'./src/legacy/ui/public/styles/bootstrap/bootstrap_light.less',
],
plugins: [
diff --git a/src/legacy/core_plugins/kibana/index.js b/src/legacy/core_plugins/kibana/index.js
index ae613e0e80904..910bc491458a7 100644
--- a/src/legacy/core_plugins/kibana/index.js
+++ b/src/legacy/core_plugins/kibana/index.js
@@ -25,9 +25,6 @@ import { importApi } from './server/routes/api/import';
import { exportApi } from './server/routes/api/export';
import { getUiSettingDefaults } from './server/ui_setting_defaults';
import { registerCspCollector } from './server/lib/csp_usage_collector';
-import { injectVars } from './inject_vars';
-
-import { kbnBaseUrl } from '../../../plugins/kibana_legacy/server';
const mkdirAsync = promisify(Fs.mkdir);
@@ -45,35 +42,7 @@ export default function (kibana) {
},
uiExports: {
- app: {
- id: 'kibana',
- title: 'Kibana',
- listed: false,
- main: 'plugins/kibana/kibana',
- },
styleSheetPaths: resolve(__dirname, 'public/index.scss'),
- links: [],
-
- injectDefaultVars(server, options) {
- const mapConfig = server.config().get('map');
- const tilemap = mapConfig.tilemap;
-
- return {
- kbnIndex: options.index,
- kbnBaseUrl,
-
- // required on all pages due to hacks that use these values
- mapConfig,
- tilemapsConfig: {
- deprecated: {
- // If url is set, old settings must be used for backward compatibility
- isOverridden: typeof tilemap.url === 'string' && tilemap.url !== '',
- config: tilemap,
- },
- },
- };
- },
-
uiSettingDefaults: getUiSettingDefaults(),
},
@@ -95,7 +64,6 @@ export default function (kibana) {
importApi(server);
exportApi(server);
registerCspCollector(usageCollection, server);
- server.injectUiAppVars('kibana', () => injectVars(server));
},
});
}
diff --git a/src/legacy/core_plugins/kibana/public/__tests__/vis_type_table/legacy.ts b/src/legacy/core_plugins/kibana/public/__tests__/vis_type_table/legacy.ts
index c6467a5beae68..216afe5920408 100644
--- a/src/legacy/core_plugins/kibana/public/__tests__/vis_type_table/legacy.ts
+++ b/src/legacy/core_plugins/kibana/public/__tests__/vis_type_table/legacy.ts
@@ -35,4 +35,5 @@ const pluginInstance = new TableVisPlugin({} as PluginInitializerContext);
export const setup = pluginInstance.setup(npSetup.core, plugins);
export const start = pluginInstance.start(npStart.core, {
data: npStart.plugins.data,
+ kibanaLegacy: npStart.plugins.kibanaLegacy,
});
diff --git a/src/legacy/core_plugins/kibana/public/index.scss b/src/legacy/core_plugins/kibana/public/index.scss
index 56a2543dbca78..e9810a747c8c7 100644
--- a/src/legacy/core_plugins/kibana/public/index.scss
+++ b/src/legacy/core_plugins/kibana/public/index.scss
@@ -7,12 +7,3 @@
// Public UI styles
@import 'src/legacy/ui/public/index';
-// Has to come after visualize because of some
-// bad cascading in the Editor layout
-@import '../../../../plugins/maps_legacy/public/index';
-
-// Management styles
-@import './management/index';
-
-// Local application mount wrapper styles
-@import 'local_application_service/index';
diff --git a/src/legacy/core_plugins/kibana/public/kibana.js b/src/legacy/core_plugins/kibana/public/kibana.js
deleted file mode 100644
index 51dedcc629c76..0000000000000
--- a/src/legacy/core_plugins/kibana/public/kibana.js
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Licensed to Elasticsearch B.V. under one or more contributor
- * license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright
- * ownership. Elasticsearch B.V. licenses this file to you under
- * the Apache License, Version 2.0 (the "License"); you may
- * not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-// autoloading
-
-// preloading (for faster webpack builds)
-import routes from 'ui/routes';
-import { npSetup } from 'ui/new_platform';
-
-// import the uiExports that we want to "use"
-import 'uiExports/savedObjectTypes';
-import 'uiExports/fieldFormatEditors';
-import 'uiExports/navbarExtensions';
-import 'uiExports/contextMenuActions';
-import 'uiExports/managementSections';
-import 'uiExports/indexManagement';
-import 'uiExports/embeddableFactories';
-import 'uiExports/embeddableActions';
-import 'uiExports/inspectorViews';
-import 'uiExports/search';
-import 'uiExports/shareContextMenuExtensions';
-import 'uiExports/interpreter';
-
-import 'ui/autoload/all';
-
-import { localApplicationService } from './local_application_service';
-
-npSetup.plugins.kibanaLegacy.registerLegacyAppAlias('doc', 'discover', { keepPrefix: true });
-npSetup.plugins.kibanaLegacy.registerLegacyAppAlias('context', 'discover', { keepPrefix: true });
-
-npSetup.plugins.kibanaLegacy.forwardApp('management', 'management', (path) => {
- return path.replace('/management', '');
-});
-
-localApplicationService.attachToAngular(routes);
-
-routes.enable();
-
-const { config } = npSetup.plugins.kibanaLegacy;
-
-routes.otherwise({
- redirectTo: `/${config.defaultAppId || 'discover'}`,
-});
diff --git a/src/legacy/core_plugins/kibana/public/local_application_service/_index.scss b/src/legacy/core_plugins/kibana/public/local_application_service/_index.scss
deleted file mode 100644
index 12cc1444101e7..0000000000000
--- a/src/legacy/core_plugins/kibana/public/local_application_service/_index.scss
+++ /dev/null
@@ -1 +0,0 @@
-@import 'local_application_service';
diff --git a/src/legacy/core_plugins/kibana/public/local_application_service/_local_application_service.scss b/src/legacy/core_plugins/kibana/public/local_application_service/_local_application_service.scss
deleted file mode 100644
index 33a6100c43975..0000000000000
--- a/src/legacy/core_plugins/kibana/public/local_application_service/_local_application_service.scss
+++ /dev/null
@@ -1,5 +0,0 @@
-.kbnLocalApplicationWrapper {
- display: flex;
- flex-direction: column;
- flex-grow: 1;
-}
diff --git a/src/legacy/core_plugins/kibana/public/local_application_service/index.ts b/src/legacy/core_plugins/kibana/public/local_application_service/index.ts
deleted file mode 100644
index 2128355ca906a..0000000000000
--- a/src/legacy/core_plugins/kibana/public/local_application_service/index.ts
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Licensed to Elasticsearch B.V. under one or more contributor
- * license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright
- * ownership. Elasticsearch B.V. licenses this file to you under
- * the Apache License, Version 2.0 (the "License"); you may
- * not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-export * from './local_application_service';
diff --git a/src/legacy/core_plugins/kibana/public/local_application_service/local_application_service.ts b/src/legacy/core_plugins/kibana/public/local_application_service/local_application_service.ts
deleted file mode 100644
index 59e5238578d25..0000000000000
--- a/src/legacy/core_plugins/kibana/public/local_application_service/local_application_service.ts
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * Licensed to Elasticsearch B.V. under one or more contributor
- * license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright
- * ownership. Elasticsearch B.V. licenses this file to you under
- * the Apache License, Version 2.0 (the "License"); you may
- * not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import { App, AppUnmount, AppMountDeprecated } from 'kibana/public';
-import { UIRoutes } from 'ui/routes';
-import { ILocationService, IScope } from 'angular';
-import { npStart } from 'ui/new_platform';
-import { htmlIdGenerator } from '@elastic/eui';
-
-const matchAllWithPrefix = (prefixOrApp: string | App) =>
- `/${typeof prefixOrApp === 'string' ? prefixOrApp : prefixOrApp.id}/:tail*?`;
-
-/**
- * To be able to migrate and shim parts of the Kibana app plugin
- * while still running some parts of it in the legacy world, this
- * service emulates the core application service while using the global
- * angular router to switch between apps without page reload.
- *
- * The id of the apps is used as prefix of the route - when switching between
- * to apps, the current application is unmounted.
- *
- * This service becomes unnecessary once the platform provides a central
- * router that handles switching between applications without page reload.
- */
-export class LocalApplicationService {
- private idGenerator = htmlIdGenerator('kibanaAppLocalApp');
-
- /**
- * Wires up listeners to handle mounting and unmounting of apps to
- * the legacy angular route manager. Once all apps within the Kibana
- * plugin are using the local route manager, this implementation can
- * be switched to a more lightweight implementation.
- *
- * @param angularRouteManager The current `ui/routes` instance
- */
- attachToAngular(angularRouteManager: UIRoutes) {
- npStart.plugins.kibanaLegacy.getApps().forEach((app) => {
- const wrapperElementId = this.idGenerator();
- angularRouteManager.when(matchAllWithPrefix(app), {
- outerAngularWrapperRoute: true,
- reloadOnSearch: false,
- reloadOnUrl: false,
- template: `
`,
- controller($scope: IScope) {
- const element = document.getElementById(wrapperElementId)!;
- let unmountHandler: AppUnmount | null = null;
- let isUnmounted = false;
- $scope.$on('$destroy', () => {
- if (unmountHandler) {
- unmountHandler();
- }
- isUnmounted = true;
- });
- (async () => {
- const params = {
- element,
- appBasePath: '',
- onAppLeave: () => undefined,
- // TODO: adapt to use Core's ScopedHistory
- history: {} as any,
- };
- unmountHandler = isAppMountDeprecated(app.mount)
- ? await app.mount({ core: npStart.core }, params)
- : await app.mount(params);
- // immediately unmount app if scope got destroyed in the meantime
- if (isUnmounted) {
- unmountHandler();
- }
- })();
- },
- });
-
- if (app.updater$) {
- app.updater$.subscribe((updater) => {
- const updatedFields = updater(app);
- if (updatedFields && updatedFields.activeUrl) {
- npStart.core.chrome.navLinks.update(app.navLinkId || app.id, {
- url: updatedFields.activeUrl,
- });
- }
- });
- }
- });
-
- npStart.plugins.kibanaLegacy.getForwards().forEach((forwardDefinition) => {
- angularRouteManager.when(matchAllWithPrefix(forwardDefinition.legacyAppId), {
- outerAngularWrapperRoute: true,
- reloadOnSearch: false,
- reloadOnUrl: false,
- template: '',
- controller($location: ILocationService) {
- const newPath = forwardDefinition.rewritePath($location.url());
- window.location.replace(
- npStart.core.http.basePath.prepend(`/app/${forwardDefinition.newAppId}${newPath}`)
- );
- },
- });
- });
-
- npStart.plugins.kibanaLegacy
- .getLegacyAppAliases()
- .forEach(({ legacyAppId, newAppId, keepPrefix }) => {
- angularRouteManager.when(matchAllWithPrefix(legacyAppId), {
- resolveRedirectTo: ($location: ILocationService) => {
- const url = $location.url();
- return `/${newAppId}${keepPrefix ? url : url.replace(legacyAppId, '')}`;
- },
- });
- });
- }
-}
-
-export const localApplicationService = new LocalApplicationService();
-
-function isAppMountDeprecated(mount: (...args: any[]) => any): mount is AppMountDeprecated {
- // Mount functions with two arguments are assumed to expect deprecated `context` object.
- return mount.length === 2;
-}
diff --git a/src/legacy/core_plugins/kibana/public/management/index.scss b/src/legacy/core_plugins/kibana/public/management/index.scss
deleted file mode 100644
index fb267b714f1c9..0000000000000
--- a/src/legacy/core_plugins/kibana/public/management/index.scss
+++ /dev/null
@@ -1,13 +0,0 @@
-// This file is imported into src/core_plugings/kibana/publix/index.scss
-
-// Prefix all styles with "dsh" to avoid conflicts.
-// Examples
-// mgtChart
-// mgtChart__legend
-// mgtChart__legend--small
-// mgtChart__legend-isLoading
-
-// Core
-@import '../../../../../plugins/advanced_settings/public/index';
-
-@import 'sections/index_patterns/index';
diff --git a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/index.scss b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/index.scss
deleted file mode 100644
index c5cf844ebdc34..0000000000000
--- a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/index.scss
+++ /dev/null
@@ -1,25 +0,0 @@
-#indexPatternListReact {
- display: flex;
-
- .indexPatternList__headerWrapper {
- padding-bottom: $euiSizeS;
- }
-
- .euiButtonEmpty__content {
- justify-content: left;
- padding: 0;
-
- span {
- text-overflow: ellipsis;
- overflow: hidden;
- }
- }
-
- .indexPatternListPrompt__descList {
- text-align: left;
- }
-}
-
-.indexPatternList__badge {
- margin-left: $euiSizeS;
-}
diff --git a/src/legacy/core_plugins/timelion/public/legacy.ts b/src/legacy/core_plugins/timelion/public/legacy.ts
index acb95e80fe18c..7980291e2d462 100644
--- a/src/legacy/core_plugins/timelion/public/legacy.ts
+++ b/src/legacy/core_plugins/timelion/public/legacy.ts
@@ -18,7 +18,7 @@
*/
import { PluginInitializerContext } from 'kibana/public';
-import { npSetup } from 'ui/new_platform';
+import { npSetup, npStart } from 'ui/new_platform';
import { plugin } from '.';
import { TimelionPluginSetupDependencies } from './plugin';
import { LegacyDependenciesPlugin } from './shim';
@@ -32,4 +32,4 @@ const setupPlugins: Readonly = {
const pluginInstance = plugin({} as PluginInitializerContext);
export const setup = pluginInstance.setup(npSetup.core, setupPlugins);
-export const start = pluginInstance.start();
+export const start = pluginInstance.start(npStart.core, npStart.plugins);
diff --git a/src/legacy/core_plugins/timelion/public/plugin.ts b/src/legacy/core_plugins/timelion/public/plugin.ts
index 8b021cda4bfb0..1f837303a2b3d 100644
--- a/src/legacy/core_plugins/timelion/public/plugin.ts
+++ b/src/legacy/core_plugins/timelion/public/plugin.ts
@@ -16,10 +16,17 @@
* specific language governing permissions and limitations
* under the License.
*/
-import { CoreSetup, Plugin, PluginInitializerContext, IUiSettingsClient } from 'kibana/public';
+import {
+ CoreSetup,
+ Plugin,
+ PluginInitializerContext,
+ IUiSettingsClient,
+ CoreStart,
+} from 'kibana/public';
import { getTimeChart } from './panels/timechart/timechart';
import { Panel } from './panels/panel';
import { LegacyDependenciesPlugin, LegacyDependenciesPluginSetup } from './shim';
+import { KibanaLegacyStart } from '../../../../plugins/kibana_legacy/public';
/** @internal */
export interface TimelionVisualizationDependencies extends LegacyDependenciesPluginSetup {
@@ -59,7 +66,9 @@ export class TimelionPlugin implements Plugin, void> {
dependencies.timelionPanels.set(timeChartPanel.name, timeChartPanel);
}
- public start() {}
+ public start(core: CoreStart, { kibanaLegacy }: { kibanaLegacy: KibanaLegacyStart }) {
+ kibanaLegacy.loadFontAwesome();
+ }
public stop(): void {}
}
diff --git a/src/legacy/ui/public/autoload/all.js b/src/legacy/ui/public/autoload/all.js
index 5c95afb7a0628..be9b29aa944c9 100644
--- a/src/legacy/ui/public/autoload/all.js
+++ b/src/legacy/ui/public/autoload/all.js
@@ -20,4 +20,3 @@
import './accessibility';
import './modules';
import './settings';
-import './styles';
diff --git a/src/legacy/ui/public/autoload/styles.js b/src/legacy/ui/public/autoload/styles.js
deleted file mode 100644
index c623acca07b01..0000000000000
--- a/src/legacy/ui/public/autoload/styles.js
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Licensed to Elasticsearch B.V. under one or more contributor
- * license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright
- * ownership. Elasticsearch B.V. licenses this file to you under
- * the Apache License, Version 2.0 (the "License"); you may
- * not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import 'ui/styles/font_awesome.less';
diff --git a/src/legacy/ui/public/directives/__tests__/input_focus.js b/src/legacy/ui/public/directives/__tests__/input_focus.js
index 45b1821cbfd21..a9cd9b3c87974 100644
--- a/src/legacy/ui/public/directives/__tests__/input_focus.js
+++ b/src/legacy/ui/public/directives/__tests__/input_focus.js
@@ -21,6 +21,7 @@ import expect from '@kbn/expect';
import ngMock from 'ng_mock';
import $ from 'jquery';
import '../input_focus';
+import uiRoutes from 'ui/routes';
describe('Input focus directive', function () {
let $compile;
@@ -32,6 +33,8 @@ describe('Input focus directive', function () {
let selectedText;
const inputValue = 'Input Text Value';
+ uiRoutes.enable();
+
beforeEach(ngMock.module('kibana'));
beforeEach(
ngMock.inject(function (_$compile_, _$rootScope_, _$timeout_) {
diff --git a/src/legacy/ui/public/new_platform/new_platform.karma_mock.js b/src/legacy/ui/public/new_platform/new_platform.karma_mock.js
index d98770842a0f0..35380ada51a0a 100644
--- a/src/legacy/ui/public/new_platform/new_platform.karma_mock.js
+++ b/src/legacy/ui/public/new_platform/new_platform.karma_mock.js
@@ -263,7 +263,6 @@ export const npSetup = {
},
kibanaLegacy: {
registerLegacyApp: () => {},
- registerLegacyAppAlias: () => {},
forwardApp: () => {},
config: {
defaultAppId: 'home',
@@ -379,9 +378,8 @@ export const npStart = {
registerType: sinon.fake(),
},
kibanaLegacy: {
- getApps: () => [],
getForwards: () => [],
- getLegacyAppAliases: () => [],
+ loadFontAwesome: () => {},
config: {
defaultAppId: 'home',
},
diff --git a/src/legacy/ui/public/styles/font_awesome.less b/src/legacy/ui/public/styles/font_awesome.less
deleted file mode 100644
index 428e3c6b83f89..0000000000000
--- a/src/legacy/ui/public/styles/font_awesome.less
+++ /dev/null
@@ -1,10 +0,0 @@
-// Needs to remain a LESS file to point to the correct path for the fonts themeselves
-@import "~font-awesome/less/font-awesome";
-
-// new file icon
-.@{fa-css-prefix}-file-new-o:before { content: @fa-var-file-o; }
-.@{fa-css-prefix}-file-new-o:after { content: @fa-var-plus; position: relative; margin-left: -1.0em; font-size: 0.5em; }
-
-// alias for alert types - allows class="fa fa-{{alertType}}"
-.fa-success:before { content: @fa-var-check; }
-.fa-danger:before { content: @fa-var-exclamation-circle; }
diff --git a/src/legacy/ui/ui_render/ui_render_mixin.js b/src/legacy/ui/ui_render/ui_render_mixin.js
index b4f8255297240..0cfcb91aa94ef 100644
--- a/src/legacy/ui/ui_render/ui_render_mixin.js
+++ b/src/legacy/ui/ui_render/ui_render_mixin.js
@@ -130,7 +130,6 @@ export function uiRenderMixin(kbnServer, server, config) {
`${basePath}/node_modules/@kbn/ui-framework/dist/kui_light.css`,
`${regularBundlePath}/light_theme.style.css`,
]),
- `${regularBundlePath}/commons.style.css`,
...(isCore
? []
: [
@@ -155,13 +154,7 @@ export function uiRenderMixin(kbnServer, server, config) {
(filename) => `${regularBundlePath}/kbn-ui-shared-deps/${filename}`
),
`${regularBundlePath}/kbn-ui-shared-deps/${UiSharedDeps.jsFilename}`,
- ...(isCore
- ? []
- : [
- `${dllBundlePath}/vendors_runtime.bundle.dll.js`,
- ...dllJsChunks,
- `${regularBundlePath}/commons.bundle.js`,
- ]),
+ ...(isCore ? [] : [`${dllBundlePath}/vendors_runtime.bundle.dll.js`, ...dllJsChunks]),
`${regularBundlePath}/core/core.entry.js`,
...kpPluginIds.map(
diff --git a/src/optimize/base_optimizer.js b/src/optimize/base_optimizer.js
index 12131b89e03c1..55752db55e28a 100644
--- a/src/optimize/base_optimizer.js
+++ b/src/optimize/base_optimizer.js
@@ -266,13 +266,6 @@ export default class BaseOptimizer {
optimization: {
splitChunks: {
cacheGroups: {
- commons: {
- name: 'commons',
- chunks: (chunk) =>
- chunk.canBeInitial() && chunk.name !== 'light_theme' && chunk.name !== 'dark_theme',
- minChunks: 2,
- reuseExistingChunk: true,
- },
light_theme: {
name: 'light_theme',
test: (m) =>
diff --git a/src/plugins/advanced_settings/public/management_app/advanced_settings.scss b/src/plugins/advanced_settings/public/management_app/_advanced_settings.scss
similarity index 100%
rename from src/plugins/advanced_settings/public/management_app/advanced_settings.scss
rename to src/plugins/advanced_settings/public/management_app/_advanced_settings.scss
diff --git a/src/plugins/advanced_settings/public/management_app/_index.scss b/src/plugins/advanced_settings/public/management_app/index.scss
similarity index 100%
rename from src/plugins/advanced_settings/public/management_app/_index.scss
rename to src/plugins/advanced_settings/public/management_app/index.scss
diff --git a/src/plugins/advanced_settings/public/management_app/mount_management_section.tsx b/src/plugins/advanced_settings/public/management_app/mount_management_section.tsx
index b4779d051ab02..ab348451b1eef 100644
--- a/src/plugins/advanced_settings/public/management_app/mount_management_section.tsx
+++ b/src/plugins/advanced_settings/public/management_app/mount_management_section.tsx
@@ -29,6 +29,8 @@ import { AdvancedSettings } from './advanced_settings';
import { ManagementAppMountParams } from '../../../management/public';
import { ComponentRegistry } from '../types';
+import './index.scss';
+
const title = i18n.translate('advancedSettings.advancedSettingsLabel', {
defaultMessage: 'Advanced Settings',
});
diff --git a/src/plugins/dashboard/public/application/application.ts b/src/plugins/dashboard/public/application/application.ts
index 543450916c505..08eeb19dcda93 100644
--- a/src/plugins/dashboard/public/application/application.ts
+++ b/src/plugins/dashboard/public/application/application.ts
@@ -68,11 +68,12 @@ export interface RenderDeps {
embeddable: EmbeddableStart;
localStorage: Storage;
share?: SharePluginStart;
- config: KibanaLegacyStart['config'];
usageCollection?: UsageCollectionSetup;
navigateToDefaultApp: KibanaLegacyStart['navigateToDefaultApp'];
+ navigateToLegacyKibanaUrl: KibanaLegacyStart['navigateToLegacyKibanaUrl'];
scopedHistory: () => ScopedHistory;
savedObjects: SavedObjectsStart;
+ restorePreviousUrl: () => void;
}
let angularModuleInstance: IModule | null = null;
diff --git a/src/plugins/dashboard/public/application/legacy_app.js b/src/plugins/dashboard/public/application/legacy_app.js
index 2d99a2c6a2253..8b8fdcb7a76ac 100644
--- a/src/plugins/dashboard/public/application/legacy_app.js
+++ b/src/plugins/dashboard/public/application/legacy_app.js
@@ -242,9 +242,17 @@ export function initDashboardApp(app, deps) {
},
})
.otherwise({
- template: '',
- controller: function () {
- deps.navigateToDefaultApp();
+ resolveRedirectTo: function ($rootScope) {
+ const path = window.location.hash.substr(1);
+ deps.restorePreviousUrl();
+ $rootScope.$applyAsync(() => {
+ const { navigated } = deps.navigateToLegacyKibanaUrl(path);
+ if (!navigated) {
+ deps.navigateToDefaultApp();
+ }
+ });
+ // prevent angular from completing the navigation
+ return new Promise(() => {});
},
});
});
diff --git a/src/plugins/dashboard/public/plugin.tsx b/src/plugins/dashboard/public/plugin.tsx
index 5e2cb60965396..041a02a251e8a 100644
--- a/src/plugins/dashboard/public/plugin.tsx
+++ b/src/plugins/dashboard/public/plugin.tsx
@@ -215,7 +215,13 @@ export class DashboardPlugin
const placeholderFactory = new PlaceholderEmbeddableFactory();
embeddable.registerEmbeddableFactory(placeholderFactory.type, placeholderFactory);
- const { appMounted, appUnMounted, stop: stopUrlTracker, getActiveUrl } = createKbnUrlTracker({
+ const {
+ appMounted,
+ appUnMounted,
+ stop: stopUrlTracker,
+ getActiveUrl,
+ restorePreviousUrl,
+ } = createKbnUrlTracker({
baseUrl: core.http.basePath.prepend('/app/dashboards'),
defaultSubUrl: `#${DashboardConstants.LANDING_PAGE_PATH}`,
storageKey: `lastUrl:${core.http.basePath.get()}:dashboard`,
@@ -260,7 +266,7 @@ export class DashboardPlugin
navigation,
share: shareStart,
data: dataStart,
- kibanaLegacy: { dashboardConfig, navigateToDefaultApp },
+ kibanaLegacy: { dashboardConfig, navigateToDefaultApp, navigateToLegacyKibanaUrl },
savedObjects,
} = pluginsStart;
@@ -269,6 +275,7 @@ export class DashboardPlugin
core: coreStart,
dashboardConfig,
navigateToDefaultApp,
+ navigateToLegacyKibanaUrl,
navigation,
share: shareStart,
data: dataStart,
@@ -277,7 +284,6 @@ export class DashboardPlugin
chrome: coreStart.chrome,
addBasePath: coreStart.http.basePath.prepend,
uiSettings: coreStart.uiSettings,
- config: kibanaLegacy.config,
savedQueryService: dataStart.query.savedQueries,
embeddable: embeddableStart,
dashboardCapabilities: coreStart.application.capabilities.dashboard,
@@ -289,6 +295,7 @@ export class DashboardPlugin
usageCollection,
scopedHistory: () => this.currentHistory!,
savedObjects,
+ restorePreviousUrl,
};
// make sure the index pattern list is up to date
await dataStart.indexPatterns.clearCache();
@@ -305,6 +312,15 @@ export class DashboardPlugin
initAngularBootstrap();
core.application.register(app);
+ kibanaLegacy.forwardApp(
+ DashboardConstants.DASHBOARDS_ID,
+ DashboardConstants.DASHBOARDS_ID,
+ (path) => {
+ const [, tail] = /(\?.*)/.exec(path) || [];
+ // carry over query if it exists
+ return `#/list${tail || ''}`;
+ }
+ );
kibanaLegacy.forwardApp(
DashboardConstants.DASHBOARD_ID,
DashboardConstants.DASHBOARDS_ID,
@@ -322,15 +338,6 @@ export class DashboardPlugin
return `#/view/${id}${tail || ''}`;
}
);
- kibanaLegacy.forwardApp(
- DashboardConstants.DASHBOARDS_ID,
- DashboardConstants.DASHBOARDS_ID,
- (path) => {
- const [, tail] = /(\?.*)/.exec(path) || [];
- // carry over query if it exists
- return `#/list${tail || ''}`;
- }
- );
if (home) {
home.featureCatalogue.register({
diff --git a/src/plugins/data/common/index_patterns/index_patterns/index_pattern.ts b/src/plugins/data/common/index_patterns/index_patterns/index_pattern.ts
index 666d99362ce80..cd39a965ae6fc 100644
--- a/src/plugins/data/common/index_patterns/index_patterns/index_pattern.ts
+++ b/src/plugins/data/common/index_patterns/index_patterns/index_pattern.ts
@@ -198,7 +198,7 @@ export class IndexPattern implements IIndexPattern {
private updateFromElasticSearch(response: any, forceFieldRefresh: boolean = false) {
if (!response.found) {
- throw new SavedObjectNotFound(type, this.id, 'kibana#/management/kibana/indexPatterns');
+ throw new SavedObjectNotFound(type, this.id, 'management/kibana/indexPatterns');
}
_.forOwn(this.mapping, (fieldMapping: FieldMappingSpec, name: string | undefined) => {
diff --git a/src/plugins/data/server/saved_objects/search.ts b/src/plugins/data/server/saved_objects/search.ts
index cf53a31741928..437c83f67bf5d 100644
--- a/src/plugins/data/server/saved_objects/search.ts
+++ b/src/plugins/data/server/saved_objects/search.ts
@@ -36,7 +36,7 @@ export const searchSavedObjectType: SavedObjectsType = {
},
getInAppUrl(obj) {
return {
- path: `/app/discover#/${encodeURIComponent(obj.id)}`,
+ path: `/app/discover#/view/${encodeURIComponent(obj.id)}`,
uiCapabilitiesPath: 'discover.show',
};
},
diff --git a/src/plugins/discover/public/application/_hacks.scss b/src/plugins/discover/public/application/_hacks.scss
index baf27bb9f82da..9bbe9cd14fd91 100644
--- a/src/plugins/discover/public/application/_hacks.scss
+++ b/src/plugins/discover/public/application/_hacks.scss
@@ -2,5 +2,3 @@
.tab-discover {
overflow: hidden;
}
-
-
diff --git a/src/plugins/discover/public/application/angular/discover.js b/src/plugins/discover/public/application/angular/discover.js
index 8ff5af1e3a767..225f918c9f406 100644
--- a/src/plugins/discover/public/application/angular/discover.js
+++ b/src/plugins/discover/public/application/angular/discover.js
@@ -114,7 +114,7 @@ app.config(($routeProvider) => {
};
},
};
- $routeProvider.when('/:id?', {
+ const discoverRoute = {
...defaults,
template: indexTemplate,
reloadOnSearch: false,
@@ -177,7 +177,10 @@ app.config(($routeProvider) => {
});
},
},
- });
+ };
+
+ $routeProvider.when('/view/:id?', discoverRoute);
+ $routeProvider.when('/', discoverRoute);
});
app.directive('discoverApp', function () {
@@ -415,7 +418,7 @@ function discoverController(
testId: 'discoverOpenButton',
run: () => {
showOpenSearchPanel({
- makeUrl: (searchId) => `#/${encodeURIComponent(searchId)}`,
+ makeUrl: (searchId) => `#/view/${encodeURIComponent(searchId)}`,
I18nContext: core.i18n.Context,
});
},
@@ -747,7 +750,7 @@ function discoverController(
});
if (savedSearch.id !== $route.current.params.id) {
- history.push(`/${encodeURIComponent(savedSearch.id)}`);
+ history.push(`/view/${encodeURIComponent(savedSearch.id)}`);
} else {
// Update defaults so that "reload saved query" functions correctly
setAppState(getStateDefaults());
@@ -926,7 +929,9 @@ function discoverController(
};
$scope.resetQuery = function () {
- history.push(`/${encodeURIComponent($route.current.params.id)}`);
+ history.push(
+ $route.current.params.id ? `/view/${encodeURIComponent($route.current.params.id)}` : '/'
+ );
$route.reload();
};
diff --git a/src/plugins/discover/public/application/angular/doc_table/components/table_row.ts b/src/plugins/discover/public/application/angular/doc_table/components/table_row.ts
index b1e6d27d76656..2fb6fb1e3a307 100644
--- a/src/plugins/discover/public/application/angular/doc_table/components/table_row.ts
+++ b/src/plugins/discover/public/application/angular/doc_table/components/table_row.ts
@@ -144,8 +144,7 @@ export function createTableRowDirective($compile: ng.ICompileService, $httpParam
cellTemplate({
timefield: true,
formatted: _displayField(row, indexPattern.timeFieldName),
- filterable:
- mapping(indexPattern.timeFieldName).filterable && _.isFunction($scope.filter),
+ filterable: mapping(indexPattern.timeFieldName).filterable && $scope.filter,
column: indexPattern.timeFieldName,
})
);
@@ -156,7 +155,7 @@ export function createTableRowDirective($compile: ng.ICompileService, $httpParam
$scope.flattenedRow[column] !== undefined &&
mapping(column) &&
mapping(column).filterable &&
- _.isFunction($scope.filter);
+ $scope.filter;
newHtmls.push(
cellTemplate({
diff --git a/src/plugins/discover/public/application/angular/index.ts b/src/plugins/discover/public/application/angular/index.ts
index f3fd3fb6622ee..20a22d4ae634d 100644
--- a/src/plugins/discover/public/application/angular/index.ts
+++ b/src/plugins/discover/public/application/angular/index.ts
@@ -25,4 +25,5 @@ import './discover';
import './doc';
import './context';
import './doc_viewer';
+import './redirect';
import './directives';
diff --git a/src/legacy/core_plugins/kibana/public/index.ts b/src/plugins/discover/public/application/angular/redirect.ts
similarity index 54%
rename from src/legacy/core_plugins/kibana/public/index.ts
rename to src/plugins/discover/public/application/angular/redirect.ts
index 6b1b7f0d249ff..bfa2f07f852e9 100644
--- a/src/legacy/core_plugins/kibana/public/index.ts
+++ b/src/plugins/discover/public/application/angular/redirect.ts
@@ -16,8 +16,22 @@
* specific language governing permissions and limitations
* under the License.
*/
+import { getAngularModule, getServices, getUrlTracker } from '../../kibana_services';
-export {
- ProcessedImportResponse,
- processImportResponse,
-} from '../../../../plugins/saved_objects_management/public/lib'; // eslint-disable-line @kbn/eslint/no-restricted-paths
+getAngularModule().config(($routeProvider: any) => {
+ $routeProvider.otherwise({
+ resolveRedirectTo: ($rootScope: any) => {
+ const path = window.location.hash.substr(1);
+ getUrlTracker().restorePreviousUrl();
+ $rootScope.$applyAsync(() => {
+ const { kibanaLegacy } = getServices();
+ const { navigated } = kibanaLegacy.navigateToLegacyKibanaUrl(path);
+ if (!navigated) {
+ kibanaLegacy.navigateToDefaultApp();
+ }
+ });
+ // prevent angular from completing the navigation
+ return new Promise(() => {});
+ },
+ });
+});
diff --git a/src/plugins/discover/public/application/application.ts b/src/plugins/discover/public/application/application.ts
index 8167d4f903195..b49cefd2fcb16 100644
--- a/src/plugins/discover/public/application/application.ts
+++ b/src/plugins/discover/public/application/application.ts
@@ -19,11 +19,14 @@
import './index.scss';
import angular from 'angular';
+import { getServices } from '../kibana_services';
/**
* Here's where Discover's inner angular is mounted and rendered
*/
export async function renderApp(moduleName: string, element: HTMLElement) {
+ // do not wait for fontawesome
+ getServices().kibanaLegacy.loadFontAwesome();
await import('./angular');
const $injector = mountDiscoverApp(moduleName, element);
return () => $injector.get('$rootScope').$destroy();
diff --git a/src/plugins/discover/public/build_services.ts b/src/plugins/discover/public/build_services.ts
index 6d3e0b55140ba..75c83e30d80ad 100644
--- a/src/plugins/discover/public/build_services.ts
+++ b/src/plugins/discover/public/build_services.ts
@@ -42,6 +42,7 @@ import { SavedObjectKibanaServices } from 'src/plugins/saved_objects/public';
import { DiscoverStartPlugins } from './plugin';
import { createSavedSearchesLoader, SavedSearch } from './saved_searches';
import { getHistory } from './kibana_services';
+import { KibanaLegacyStart } from '../../kibana_legacy/public';
export interface DiscoverServices {
addBasePath: (path: string) => string;
@@ -57,6 +58,7 @@ export interface DiscoverServices {
inspector: InspectorPublicPluginStart;
metadata: { branch: string };
share?: SharePluginStart;
+ kibanaLegacy: KibanaLegacyStart;
timefilter: TimefilterContract;
toastNotifications: ToastsStart;
getSavedSearchById: (id: string) => Promise;
@@ -97,6 +99,7 @@ export async function buildServices(
branch: context.env.packageInfo.branch,
},
share: plugins.share,
+ kibanaLegacy: plugins.kibanaLegacy,
timefilter: plugins.data.query.timefilter.timefilter,
toastNotifications: core.notifications.toasts,
uiSettings: core.uiSettings,
diff --git a/src/plugins/discover/public/kibana_services.ts b/src/plugins/discover/public/kibana_services.ts
index bbd0357f41ed4..cca63cd880b60 100644
--- a/src/plugins/discover/public/kibana_services.ts
+++ b/src/plugins/discover/public/kibana_services.ts
@@ -53,6 +53,7 @@ export function setServices(newServices: any) {
export const [getUrlTracker, setUrlTracker] = createGetterSetter<{
setTrackedUrl: (url: string) => void;
+ restorePreviousUrl: () => void;
}>('urlTracker');
export const [getDocViewsRegistry, setDocViewsRegistry] = createGetterSetter(
diff --git a/src/plugins/discover/public/plugin.ts b/src/plugins/discover/public/plugin.ts
index 091288e3e65aa..ba97efa55068d 100644
--- a/src/plugins/discover/public/plugin.ts
+++ b/src/plugins/discover/public/plugin.ts
@@ -36,7 +36,7 @@ import { ChartsPluginStart } from 'src/plugins/charts/public';
import { NavigationPublicPluginStart as NavigationStart } from 'src/plugins/navigation/public';
import { SharePluginStart, SharePluginSetup, UrlGeneratorContract } from 'src/plugins/share/public';
import { VisualizationsStart, VisualizationsSetup } from 'src/plugins/visualizations/public';
-import { KibanaLegacySetup } from 'src/plugins/kibana_legacy/public';
+import { KibanaLegacySetup, KibanaLegacyStart } from 'src/plugins/kibana_legacy/public';
import { HomePublicPluginSetup } from 'src/plugins/home/public';
import { Start as InspectorPublicPluginStart } from 'src/plugins/inspector/public';
import { DataPublicPluginStart, DataPublicPluginSetup, esFilters } from '../../data/public';
@@ -55,6 +55,7 @@ import {
setServices,
setScopedHistory,
getScopedHistory,
+ getServices,
} from './kibana_services';
import { createSavedSearchesLoader } from './saved_searches';
import { registerFeature } from './register_feature';
@@ -130,6 +131,7 @@ export interface DiscoverStartPlugins {
charts: ChartsPluginStart;
data: DataPublicPluginStart;
share?: SharePluginStart;
+ kibanaLegacy: KibanaLegacyStart;
inspector: InspectorPublicPluginStart;
visualizations: VisualizationsStart;
}
@@ -195,6 +197,7 @@ export class DiscoverPlugin
appUnMounted,
stop: stopUrlTracker,
setActiveUrl: setTrackedUrl,
+ restorePreviousUrl,
} = createKbnUrlTracker({
// we pass getter here instead of plain `history`,
// so history is lazily created (when app is mounted)
@@ -220,7 +223,7 @@ export class DiscoverPlugin
},
],
});
- setUrlTracker({ setTrackedUrl });
+ setUrlTracker({ setTrackedUrl, restorePreviousUrl });
this.stopUrlTracking = () => {
stopUrlTracker();
};
@@ -260,7 +263,19 @@ export class DiscoverPlugin
},
});
- plugins.kibanaLegacy.forwardApp('discover', 'discover');
+ plugins.kibanaLegacy.forwardApp('doc', 'discover', (path) => {
+ return `#${path}`;
+ });
+ plugins.kibanaLegacy.forwardApp('context', 'discover', (path) => {
+ return `#${path}`;
+ });
+ plugins.kibanaLegacy.forwardApp('discover', 'discover', (path) => {
+ const [, id, tail] = /discover\/([^\?]+)(.*)/.exec(path) || [];
+ if (!id) {
+ return `#${path.replace('/discover', '') || '/'}`;
+ }
+ return `#/view/${id}${tail || ''}`;
+ });
if (plugins.home) {
registerFeature(plugins.home);
@@ -356,6 +371,7 @@ export class DiscoverPlugin
throw Error('Discover plugin getEmbeddableInjector: initializeServices is undefined');
}
const { core, plugins } = await this.initializeServices();
+ getServices().kibanaLegacy.loadFontAwesome();
const { getInnerAngularModuleEmbeddable } = await import('./get_inner_angular');
getInnerAngularModuleEmbeddable(
embeddableAngularName,
diff --git a/src/plugins/discover/public/saved_searches/_saved_search.ts b/src/plugins/discover/public/saved_searches/_saved_search.ts
index 9eda4f6ce9d16..2b8574a8fa118 100644
--- a/src/plugins/discover/public/saved_searches/_saved_search.ts
+++ b/src/plugins/discover/public/saved_searches/_saved_search.ts
@@ -66,7 +66,7 @@ export function createSavedSearchClass(services: SavedObjectKibanaServices) {
});
this.showInRecentlyAccessed = true;
this.id = id;
- this.getFullPath = () => `/app/discover#/${String(id)}`;
+ this.getFullPath = () => `/app/discover#/view/${String(id)}`;
}
}
diff --git a/src/plugins/discover/public/saved_searches/saved_searches.ts b/src/plugins/discover/public/saved_searches/saved_searches.ts
index 1d1d4f17742a2..09be10b137494 100644
--- a/src/plugins/discover/public/saved_searches/saved_searches.ts
+++ b/src/plugins/discover/public/saved_searches/saved_searches.ts
@@ -34,7 +34,7 @@ export function createSavedSearchesLoader(services: SavedObjectKibanaServices) {
nouns: 'saved searches',
};
- savedSearchLoader.urlFor = (id: string) => `#/${encodeURIComponent(id)}`;
+ savedSearchLoader.urlFor = (id: string) => (id ? `#/view/${encodeURIComponent(id)}` : '#/');
return savedSearchLoader;
}
diff --git a/src/plugins/kibana_legacy/public/font_awesome/font_awesome.scss b/src/plugins/kibana_legacy/public/font_awesome/font_awesome.scss
new file mode 100644
index 0000000000000..876a920269c49
--- /dev/null
+++ b/src/plugins/kibana_legacy/public/font_awesome/font_awesome.scss
@@ -0,0 +1,23 @@
+@font-face {
+ font-family: 'FontAwesome';
+ src: url('~font-awesome/fonts/fontawesome-webfont.eot?v=4.7.0');
+ src: url('~font-awesome/fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'),
+ url('~font-awesome/fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'),
+ url('~font-awesome/fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'),
+ url('~font-awesome/fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'),
+ url('~font-awesome/fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg');
+ font-weight: normal;
+ font-style: normal;
+}
+
+@import "font-awesome/scss/variables";
+@import "font-awesome/scss/core";
+@import "font-awesome/scss/icons";
+
+// new file icon
+.#{$fa-css-prefix}-file-new-o:before { content: $fa-var-file-o; }
+.#{$fa-css-prefix}-file-new-o:after { content: $fa-var-plus; position: relative; margin-left: -1.0em; font-size: 0.5em; }
+
+// alias for alert types - allows class="fa fa-{{alertType}}"
+.fa-success:before { content: $fa-var-check; }
+.fa-danger:before { content: $fa-var-exclamation-circle; }
diff --git a/src/plugins/advanced_settings/public/_index.scss b/src/plugins/kibana_legacy/public/font_awesome/index.ts
similarity index 95%
rename from src/plugins/advanced_settings/public/_index.scss
rename to src/plugins/kibana_legacy/public/font_awesome/index.ts
index d13c37bff32d0..318d44a3abfef 100644
--- a/src/plugins/advanced_settings/public/_index.scss
+++ b/src/plugins/kibana_legacy/public/font_awesome/index.ts
@@ -17,4 +17,4 @@
* under the License.
*/
-@import './management_app/index';
+import './font_awesome.scss';
diff --git a/src/plugins/kibana_legacy/public/forward_app/forward_app.ts b/src/plugins/kibana_legacy/public/forward_app/forward_app.ts
index a5bccfc7d725d..89018df1ca7e1 100644
--- a/src/plugins/kibana_legacy/public/forward_app/forward_app.ts
+++ b/src/plugins/kibana_legacy/public/forward_app/forward_app.ts
@@ -22,10 +22,8 @@ import { AppNavLinkStatus } from '../../../../core/public';
import { navigateToLegacyKibanaUrl } from './navigate_to_legacy_kibana_url';
import { ForwardDefinition } from '../plugin';
-export const createLegacyUrlForwardApp = (
- core: CoreSetup<{}, { getForwards: () => ForwardDefinition[] }>
-): App => ({
- id: 'url_migrate',
+export const createLegacyUrlForwardApp = (core: CoreSetup, forwards: ForwardDefinition[]): App => ({
+ id: 'kibana',
chromeless: true,
title: 'Legacy URL migration',
navLinkStatus: AppNavLinkStatus.hidden,
@@ -33,7 +31,7 @@ export const createLegacyUrlForwardApp = (
const hash = params.history.location.hash.substr(1);
if (!hash) {
- throw new Error('Could not forward URL');
+ core.fatalErrors.add('Could not forward URL');
}
const [
@@ -41,11 +39,13 @@ export const createLegacyUrlForwardApp = (
application,
http: { basePath },
},
- ,
- { getForwards },
] = await core.getStartServices();
- navigateToLegacyKibanaUrl(hash, getForwards(), basePath, application, window.location);
+ const result = await navigateToLegacyKibanaUrl(hash, forwards, basePath, application);
+
+ if (!result.navigated) {
+ core.fatalErrors.add('Could not forward URL');
+ }
return () => {};
},
diff --git a/src/plugins/kibana_legacy/public/forward_app/navigate_to_legacy_kibana_url.test.ts b/src/plugins/kibana_legacy/public/forward_app/navigate_to_legacy_kibana_url.test.ts
index de8fa9de7241e..30583aa95fc8c 100644
--- a/src/plugins/kibana_legacy/public/forward_app/navigate_to_legacy_kibana_url.test.ts
+++ b/src/plugins/kibana_legacy/public/forward_app/navigate_to_legacy_kibana_url.test.ts
@@ -25,7 +25,6 @@ import { coreMock } from '../../../../core/public/mocks';
describe('migrate legacy kibana urls', () => {
let forwardDefinitions: ForwardDefinition[];
let coreStart: CoreStart;
- let locationMock: Location;
beforeEach(() => {
coreStart = coreMock.createStart({ basePath: '/base/path' });
@@ -36,34 +35,33 @@ describe('migrate legacy kibana urls', () => {
rewritePath: jest.fn(() => '/new/path'),
},
];
- locationMock = { href: '' } as Location;
});
- it('should redirect to kibana if no forward definition is found', () => {
- navigateToLegacyKibanaUrl(
+ it('should do nothing if no forward definition is found', () => {
+ const result = navigateToLegacyKibanaUrl(
'/myOtherApp/deep/path',
forwardDefinitions,
coreStart.http.basePath,
- coreStart.application,
- locationMock
+ coreStart.application
);
- expect(locationMock.href).toEqual('/base/path/app/kibana#/myOtherApp/deep/path');
+ expect(result).toEqual({ navigated: false });
+ expect(coreStart.application.navigateToApp).not.toHaveBeenCalled();
});
it('should call navigateToApp with migrated URL', () => {
- navigateToLegacyKibanaUrl(
+ const result = navigateToLegacyKibanaUrl(
'/myApp/deep/path',
forwardDefinitions,
coreStart.http.basePath,
- coreStart.application,
- locationMock
+ coreStart.application
);
expect(coreStart.application.navigateToApp).toHaveBeenCalledWith('updatedApp', {
path: '/new/path',
+ replace: true,
});
expect(forwardDefinitions[0].rewritePath).toHaveBeenCalledWith('/myApp/deep/path');
- expect(locationMock.href).toEqual('');
+ expect(result).toEqual({ navigated: true });
});
});
diff --git a/src/plugins/kibana_legacy/public/forward_app/navigate_to_legacy_kibana_url.ts b/src/plugins/kibana_legacy/public/forward_app/navigate_to_legacy_kibana_url.ts
index a6aee351fde52..1df991f66747c 100644
--- a/src/plugins/kibana_legacy/public/forward_app/navigate_to_legacy_kibana_url.ts
+++ b/src/plugins/kibana_legacy/public/forward_app/navigate_to_legacy_kibana_url.ts
@@ -19,30 +19,26 @@
import { ApplicationStart, IBasePath } from 'kibana/public';
import { ForwardDefinition } from '../index';
+import { normalizePath } from '../utils/normalize_path';
export const navigateToLegacyKibanaUrl = (
path: string,
forwards: ForwardDefinition[],
basePath: IBasePath,
- application: ApplicationStart,
- location: Location
-) => {
- // navigate to the respective path in the legacy kibana plugin by default (for unmigrated plugins)
- let targetAppId = 'kibana';
- let targetAppPath = path;
+ application: ApplicationStart
+): { navigated: boolean } => {
+ const normalizedPath = normalizePath(path);
// try to find an existing redirect for the target path if possible
// this avoids having to load the legacy app just to get redirected to a core application again afterwards
- const relevantForward = forwards.find((forward) => path.startsWith(`/${forward.legacyAppId}`));
- if (relevantForward) {
- targetAppPath = relevantForward.rewritePath(path);
- targetAppId = relevantForward.newAppId;
- }
-
- if (targetAppId === 'kibana') {
- // exception for kibana app because redirect won't work right otherwise
- location.href = basePath.prepend(`/app/kibana#${targetAppPath}`);
- } else {
- application.navigateToApp(targetAppId, { path: targetAppPath });
+ const relevantForward = forwards.find((forward) =>
+ normalizedPath.startsWith(`/${forward.legacyAppId}`)
+ );
+ if (!relevantForward) {
+ return { navigated: false };
}
+ const targetAppPath = relevantForward.rewritePath(normalizedPath);
+ const targetAppId = relevantForward.newAppId;
+ application.navigateToApp(targetAppId, { path: targetAppPath, replace: true });
+ return { navigated: true };
};
diff --git a/src/plugins/kibana_legacy/public/mocks.ts b/src/plugins/kibana_legacy/public/mocks.ts
index 5bdc76d44e4bf..a3cdb2106523c 100644
--- a/src/plugins/kibana_legacy/public/mocks.ts
+++ b/src/plugins/kibana_legacy/public/mocks.ts
@@ -17,7 +17,6 @@
* under the License.
*/
-import { EnvironmentMode, PackageInfo } from 'kibana/server';
import { KibanaLegacyPlugin } from './plugin';
export type Setup = jest.Mocked>;
@@ -25,20 +24,9 @@ export type Start = jest.Mocked>;
const createSetupContract = (): Setup => ({
forwardApp: jest.fn(),
- registerLegacyAppAlias: jest.fn(),
- registerLegacyApp: jest.fn(),
- config: {
- defaultAppId: 'home',
- },
- env: {} as {
- mode: Readonly;
- packageInfo: Readonly;
- },
});
const createStartContract = (): Start => ({
- getApps: jest.fn(),
- getLegacyAppAliases: jest.fn(),
getForwards: jest.fn(),
config: {
defaultAppId: 'home',
@@ -48,6 +36,8 @@ const createStartContract = (): Start => ({
getHideWriteControls: jest.fn(),
},
navigateToDefaultApp: jest.fn(),
+ navigateToLegacyKibanaUrl: jest.fn(),
+ loadFontAwesome: jest.fn(),
});
export const kibanaLegacyPluginMock = {
diff --git a/src/plugins/kibana_legacy/public/navigate_to_default_app.ts b/src/plugins/kibana_legacy/public/navigate_to_default_app.ts
index 80b8343d3b229..cea901e9ba6b4 100644
--- a/src/plugins/kibana_legacy/public/navigate_to_default_app.ts
+++ b/src/plugins/kibana_legacy/public/navigate_to_default_app.ts
@@ -43,12 +43,7 @@ export function navigateToDefaultApp(
// when the correct app is already loaded, just set the hash to the right value
// otherwise use navigateToApp (or setting href in case of kibana app)
if (currentAppId !== targetAppId) {
- if (targetAppId === 'kibana') {
- // exception for kibana app because redirect won't work right otherwise
- window.location.href = basePath.prepend(`/app/kibana${targetAppPath}`);
- } else {
- application.navigateToApp(targetAppId, { path: targetAppPath });
- }
+ application.navigateToApp(targetAppId, { path: targetAppPath, replace: true });
} else if (overwriteHash) {
window.location.hash = targetAppPath;
}
diff --git a/src/plugins/kibana_legacy/public/plugin.ts b/src/plugins/kibana_legacy/public/plugin.ts
index c1a93f180db6f..59ce88c07f4f4 100644
--- a/src/plugins/kibana_legacy/public/plugin.ts
+++ b/src/plugins/kibana_legacy/public/plugin.ts
@@ -17,26 +17,14 @@
* under the License.
*/
-import {
- App,
- AppBase,
- PluginInitializerContext,
- AppUpdatableFields,
- CoreStart,
- CoreSetup,
-} from 'kibana/public';
-import { Observable, Subscription } from 'rxjs';
+import { PluginInitializerContext, CoreStart, CoreSetup } from 'kibana/public';
+import { Subscription } from 'rxjs';
import { ConfigSchema } from '../config';
import { getDashboardConfig } from './dashboard_config';
import { navigateToDefaultApp } from './navigate_to_default_app';
import { createLegacyUrlForwardApp } from './forward_app';
import { injectHeaderStyle } from './utils/inject_header_style';
-
-interface LegacyAppAliasDefinition {
- legacyAppId: string;
- newAppId: string;
- keepPrefix: boolean;
-}
+import { navigateToLegacyKibanaUrl } from './forward_app/navigate_to_legacy_kibana_url';
export interface ForwardDefinition {
legacyAppId: string;
@@ -44,27 +32,7 @@ export interface ForwardDefinition {
rewritePath: (legacyPath: string) => string;
}
-export type AngularRenderedAppUpdater = (
- app: AppBase
-) => Partial | undefined;
-
-export interface AngularRenderedApp extends App {
- /**
- * Angular rendered apps are able to update the active url in the nav link (which is currently not
- * possible for actual NP apps). When regular applications have the same functionality, this type
- * override can be removed.
- */
- updater$?: Observable;
- /**
- * If the active url is updated via the updater$ subject, the app id is assumed to be identical with
- * the nav link id. If this is not the case, it is possible to provide another nav link id here.
- */
- navLinkId?: string;
-}
-
export class KibanaLegacyPlugin {
- private apps: AngularRenderedApp[] = [];
- private legacyAppAliases: LegacyAppAliasDefinition[] = [];
private forwardDefinitions: ForwardDefinition[] = [];
private currentAppId: string | undefined;
private currentAppIdSubscription: Subscription | undefined;
@@ -72,57 +40,8 @@ export class KibanaLegacyPlugin {
constructor(private readonly initializerContext: PluginInitializerContext) {}
public setup(core: CoreSetup<{}, KibanaLegacyStart>) {
- core.application.register(createLegacyUrlForwardApp(core));
+ core.application.register(createLegacyUrlForwardApp(core, this.forwardDefinitions));
return {
- /**
- * @deprecated
- * Register an app to be managed by the application service.
- * This method works exactly as `core.application.register`.
- *
- * When an app is mounted, it is responsible for routing. The app
- * won't be mounted again if the route changes within the prefix
- * of the app (its id). It is fine to use whatever means for handling
- * routing within the app.
- *
- * When switching to a URL outside of the current prefix, the app router
- * shouldn't do anything because it doesn't own the routing anymore -
- * the local application service takes over routing again,
- * unmounts the current app and mounts the next app.
- *
- * @param app The app descriptor
- */
- registerLegacyApp: (app: AngularRenderedApp) => {
- this.apps.push(app);
- },
-
- /**
- * @deprecated
- * Forwards every URL starting with `legacyAppId` to the same URL starting
- * with `newAppId` - e.g. `/legacy/my/legacy/path?q=123` gets forwarded to
- * `/newApp/my/legacy/path?q=123`.
- *
- * When setting the `keepPrefix` option, the new app id is simply prepended.
- * The example above would become `/newApp/legacy/my/legacy/path?q=123`.
- *
- * This method can be used to provide backwards compatibility for URLs when
- * renaming or nesting plugins. For route changes after the prefix, please
- * use the routing mechanism of your app.
- *
- * This method just redirects URLs within the legacy `kibana` app.
- *
- * @param legacyAppId The name of the old app to forward URLs from
- * @param newAppId The name of the new app that handles the URLs now
- * @param options Whether the prefix of the old app is kept to nest the legacy
- * path into the new path
- */
- registerLegacyAppAlias: (
- legacyAppId: string,
- newAppId: string,
- options: { keepPrefix: boolean } = { keepPrefix: false }
- ) => {
- this.legacyAppAliases.push({ legacyAppId, newAppId, ...options });
- },
-
/**
* Forwards URLs within the legacy `kibana` app to a new platform application.
*
@@ -164,18 +83,6 @@ export class KibanaLegacyPlugin {
rewritePath: rewritePath || ((path) => `#${path.replace(`/${legacyAppId}`, '') || '/'}`),
});
},
-
- /**
- * @deprecated
- * The `defaultAppId` config key is temporarily exposed to be used in the legacy platform.
- * As this setting is going away, no new code should depend on it.
- */
- config: this.initializerContext.config.get(),
- /**
- * @deprecated
- * Temporarily exposing the NP env to simulate initializer contexts in the LP.
- */
- env: this.initializerContext.env,
};
}
@@ -186,21 +93,9 @@ export class KibanaLegacyPlugin {
injectHeaderStyle(uiSettings);
return {
/**
+ * Used to power dashboard mode. Should be removed when dashboard mode is removed eventually.
* @deprecated
- * Just exported for wiring up with legacy platform, should not be used.
- */
- getApps: () => this.apps,
- /**
- * @deprecated
- * Just exported for wiring up with legacy platform, should not be used.
- */
- getLegacyAppAliases: () => this.legacyAppAliases,
- /**
- * @deprecated
- * Just exported for wiring up with legacy platform, should not be used.
*/
- getForwards: () => this.forwardDefinitions,
- config: this.initializerContext.config.get(),
dashboardConfig: getDashboardConfig(!application.capabilities.dashboard.showWriteControls),
/**
* Navigates to the app defined as kibana.defaultAppId.
@@ -218,6 +113,32 @@ export class KibanaLegacyPlugin {
overwriteHash
);
},
+ /**
+ * Resolves the provided hash using the registered forwards and navigates to the target app.
+ * If a navigation happened, `{ navigated: true }` will be returned.
+ * If no matching forward is found, `{ navigated: false }` will be returned.
+ * @param hash
+ */
+ navigateToLegacyKibanaUrl: (hash: string) => {
+ return navigateToLegacyKibanaUrl(hash, this.forwardDefinitions, basePath, application);
+ },
+ /**
+ * Loads the font-awesome icon font. Should be removed once the last consumer has migrated to EUI
+ * @deprecated
+ */
+ loadFontAwesome: async () => {
+ await import('./font_awesome');
+ },
+ /**
+ * @deprecated
+ * Just exported for wiring up with legacy platform, should not be used.
+ */
+ getForwards: () => this.forwardDefinitions,
+ /**
+ * @deprecated
+ * Just exported for wiring up with dashboard mode, should not be used.
+ */
+ config: this.initializerContext.config.get(),
};
}
diff --git a/src/plugins/kibana_legacy/public/utils/index.ts b/src/plugins/kibana_legacy/public/utils/index.ts
index 339079d3ac352..e7dd55ec5582b 100644
--- a/src/plugins/kibana_legacy/public/utils/index.ts
+++ b/src/plugins/kibana_legacy/public/utils/index.ts
@@ -19,6 +19,7 @@
export * from './migrate_legacy_query';
export * from './system_api';
+export * from './normalize_path';
// @ts-ignore
export { KbnAccessibleClickProvider } from './kbn_accessible_click';
// @ts-ignore
diff --git a/src/legacy/core_plugins/kibana/inject_vars.js b/src/plugins/kibana_legacy/public/utils/normalize_path.ts
similarity index 73%
rename from src/legacy/core_plugins/kibana/inject_vars.js
rename to src/plugins/kibana_legacy/public/utils/normalize_path.ts
index c3b906ee842e3..ece6c89cb7cdd 100644
--- a/src/legacy/core_plugins/kibana/inject_vars.js
+++ b/src/plugins/kibana_legacy/public/utils/normalize_path.ts
@@ -17,11 +17,11 @@
* under the License.
*/
-export function injectVars(server) {
- const serverConfig = server.config();
+import { normalize } from 'path';
- return {
- autocompleteTerminateAfter: serverConfig.get('kibana.autocompleteTerminateAfter'),
- autocompleteTimeout: serverConfig.get('kibana.autocompleteTimeout'),
- };
+export function normalizePath(path: string) {
+ // resolve ../ within the path
+ const normalizedPath = normalize(path);
+ // strip any leading slashes and dots and replace with single leading slash
+ return normalizedPath.replace(/(\.?\.?\/?)*/, '/');
}
diff --git a/src/plugins/kibana_utils/public/state_management/url/kbn_url_tracker.ts b/src/plugins/kibana_utils/public/state_management/url/kbn_url_tracker.ts
index d9ff3ef36abaf..ce00b2bf68d93 100644
--- a/src/plugins/kibana_utils/public/state_management/url/kbn_url_tracker.ts
+++ b/src/plugins/kibana_utils/public/state_management/url/kbn_url_tracker.ts
@@ -38,6 +38,10 @@ export interface KbnUrlTracker {
stop: () => void;
setActiveUrl: (newUrl: string) => void;
getActiveUrl: () => string;
+ /**
+ * Resets internal state to the last active url, discarding the most recent change
+ */
+ restorePreviousUrl: () => void;
}
/**
@@ -122,6 +126,8 @@ export function createKbnUrlTracker({
}): KbnUrlTracker {
const storageInstance = storage || sessionStorage;
+ // local state storing previous active url to make restore possible
+ let previousActiveUrl: string = '';
// local state storing current listeners and active url
let activeUrl: string = '';
let unsubscribeURLHistory: UnregisterCallback | undefined;
@@ -157,6 +163,7 @@ export function createKbnUrlTracker({
toastNotifications.addDanger(e.message);
}
+ previousActiveUrl = activeUrl;
activeUrl = getActiveSubUrl(urlWithStates || urlWithHashes);
storageInstance.setItem(storageKey, activeUrl);
}
@@ -183,6 +190,7 @@ export function createKbnUrlTracker({
{ useHash: false },
baseUrl + (activeUrl || defaultSubUrl)
);
+ previousActiveUrl = activeUrl;
// remove baseUrl prefix (just storing the sub url part)
activeUrl = getActiveSubUrl(updatedUrl);
storageInstance.setItem(storageKey, activeUrl);
@@ -198,6 +206,7 @@ export function createKbnUrlTracker({
const storedUrl = storageInstance.getItem(storageKey);
if (storedUrl) {
activeUrl = storedUrl;
+ previousActiveUrl = storedUrl;
setNavLink(storedUrl);
}
@@ -217,5 +226,8 @@ export function createKbnUrlTracker({
getActiveUrl() {
return activeUrl;
},
+ restorePreviousUrl() {
+ activeUrl = previousActiveUrl;
+ },
};
}
diff --git a/src/plugins/maps_legacy/public/_index.scss b/src/plugins/maps_legacy/public/_index.scss
deleted file mode 100644
index 28cf4289bb048..0000000000000
--- a/src/plugins/maps_legacy/public/_index.scss
+++ /dev/null
@@ -1 +0,0 @@
-@import './map/index';
diff --git a/src/plugins/maps_legacy/public/index.ts b/src/plugins/maps_legacy/public/index.ts
index a7f5427909334..cbe8b9213d577 100644
--- a/src/plugins/maps_legacy/public/index.ts
+++ b/src/plugins/maps_legacy/public/index.ts
@@ -44,6 +44,8 @@ import {
// @ts-ignore
import { mapTooltipProvider } from './tooltip_provider';
+import './map/index.scss';
+
export interface MapsLegacyConfigType {
regionmap: any;
emsTileLayerId: string;
diff --git a/src/plugins/maps_legacy/public/map/_index.scss b/src/plugins/maps_legacy/public/map/index.scss
similarity index 100%
rename from src/plugins/maps_legacy/public/map/_index.scss
rename to src/plugins/maps_legacy/public/map/index.scss
diff --git a/src/plugins/region_map/kibana.json b/src/plugins/region_map/kibana.json
index 3a6f64e92bcba..ac7e1f8659d66 100644
--- a/src/plugins/region_map/kibana.json
+++ b/src/plugins/region_map/kibana.json
@@ -9,6 +9,7 @@
"visualizations",
"expressions",
"mapsLegacy",
+ "kibanaLegacy",
"data"
]
}
diff --git a/src/plugins/region_map/public/kibana_services.ts b/src/plugins/region_map/public/kibana_services.ts
index 1ef58c69c5bef..8367325c7415b 100644
--- a/src/plugins/region_map/public/kibana_services.ts
+++ b/src/plugins/region_map/public/kibana_services.ts
@@ -20,6 +20,7 @@
import { NotificationsStart } from 'kibana/public';
import { createGetterSetter } from '../../kibana_utils/public';
import { DataPublicPluginStart } from '../../data/public';
+import { KibanaLegacyStart } from '../../kibana_legacy/public';
export const [getFormatService, setFormatService] = createGetterSetter<
DataPublicPluginStart['fieldFormats']
@@ -28,3 +29,7 @@ export const [getFormatService, setFormatService] = createGetterSetter<
export const [getNotifications, setNotifications] = createGetterSetter(
'Notifications'
);
+
+export const [getKibanaLegacy, setKibanaLegacy] = createGetterSetter(
+ 'KibanaLegacy'
+);
diff --git a/src/plugins/region_map/public/plugin.ts b/src/plugins/region_map/public/plugin.ts
index 09a13fbe9774e..6b31de758a4ca 100644
--- a/src/plugins/region_map/public/plugin.ts
+++ b/src/plugins/region_map/public/plugin.ts
@@ -31,10 +31,11 @@ import { createRegionMapFn } from './region_map_fn';
// @ts-ignore
import { createRegionMapTypeDefinition } from './region_map_type';
import { getBaseMapsVis, IServiceSettings, MapsLegacyPluginSetup } from '../../maps_legacy/public';
-import { setFormatService, setNotifications } from './kibana_services';
+import { setFormatService, setNotifications, setKibanaLegacy } from './kibana_services';
import { DataPublicPluginStart } from '../../data/public';
import { RegionMapsConfigType } from './index';
import { ConfigSchema } from '../../maps_legacy/config';
+import { KibanaLegacyStart } from '../../kibana_legacy/public';
/** @private */
interface RegionMapVisualizationDependencies {
@@ -55,6 +56,7 @@ export interface RegionMapPluginSetupDependencies {
export interface RegionMapPluginStartDependencies {
data: DataPublicPluginStart;
notifications: NotificationsStart;
+ kibanaLegacy: KibanaLegacyStart;
}
/** @internal */
@@ -107,8 +109,9 @@ export class RegionMapPlugin implements Plugin = (doc) => ({
- ...doc,
- attributes: {
- ...doc.attributes,
- url:
- typeof doc.attributes.url === 'string' && doc.attributes.url.startsWith('/app/kibana')
- ? doc.attributes.url.replace('/app/kibana', '/app/url_migrate')
- : doc.attributes.url,
- },
-});
diff --git a/src/plugins/share/server/saved_objects/url.ts b/src/plugins/share/server/saved_objects/url.ts
index 3103777179741..c76c21993a13f 100644
--- a/src/plugins/share/server/saved_objects/url.ts
+++ b/src/plugins/share/server/saved_objects/url.ts
@@ -16,9 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-import { SavedObjectMigrationFn, SavedObjectsType } from 'kibana/server';
-import { flow } from 'lodash';
-import { migrateLegacyKibanaAppShortUrls } from './kibana_app_migration';
+import { SavedObjectsType } from 'kibana/server';
export const url: SavedObjectsType = {
name: 'url',
@@ -32,9 +30,6 @@ export const url: SavedObjectsType = {
return `/goto/${encodeURIComponent(obj.id)}`;
},
},
- migrations: {
- '7.9.0': flow(migrateLegacyKibanaAppShortUrls),
- },
mappings: {
properties: {
accessCount: {
diff --git a/src/plugins/tile_map/kibana.json b/src/plugins/tile_map/kibana.json
index 71ae0bb29d17f..bb8ef5a246549 100644
--- a/src/plugins/tile_map/kibana.json
+++ b/src/plugins/tile_map/kibana.json
@@ -9,6 +9,7 @@
"visualizations",
"expressions",
"mapsLegacy",
+ "kibanaLegacy",
"data"
]
}
diff --git a/src/plugins/tile_map/public/plugin.ts b/src/plugins/tile_map/public/plugin.ts
index e55f7189929df..20a45c586074a 100644
--- a/src/plugins/tile_map/public/plugin.ts
+++ b/src/plugins/tile_map/public/plugin.ts
@@ -35,6 +35,8 @@ import { createTileMapTypeDefinition } from './tile_map_type';
import { getBaseMapsVis, MapsLegacyPluginSetup } from '../../maps_legacy/public';
import { DataPublicPluginStart } from '../../data/public';
import { setFormatService, setQueryService } from './services';
+import { setKibanaLegacy } from './services';
+import { KibanaLegacyStart } from '../../kibana_legacy/public';
export interface TileMapConfigType {
tilemap: any;
@@ -58,6 +60,7 @@ export interface TileMapPluginSetupDependencies {
/** @internal */
export interface TileMapPluginStartDependencies {
data: DataPublicPluginStart;
+ kibanaLegacy: KibanaLegacyStart;
}
export interface TileMapPluginSetup {
@@ -96,9 +99,10 @@ export class TileMapPlugin implements Plugin('Query');
+
+export const [getKibanaLegacy, setKibanaLegacy] = createGetterSetter(
+ 'KibanaLegacy'
+);
diff --git a/src/plugins/tile_map/public/tile_map_visualization.js b/src/plugins/tile_map/public/tile_map_visualization.js
index 1f4e5f09a9aa4..2ebb76d05c219 100644
--- a/src/plugins/tile_map/public/tile_map_visualization.js
+++ b/src/plugins/tile_map/public/tile_map_visualization.js
@@ -19,7 +19,7 @@
import { get } from 'lodash';
import { GeohashLayer } from './geohash_layer';
-import { getFormatService, getQueryService } from './services';
+import { getFormatService, getQueryService, getKibanaLegacy } from './services';
import { scaleBounds, geoContains, mapTooltipProvider } from '../../maps_legacy/public';
import { tooltipFormatter } from './tooltip_formatter';
@@ -60,6 +60,11 @@ export const createTileMapVisualization = (dependencies) => {
this.vis.eventsSubject.next(updateVarsObject);
};
+ async render(esResponse, visParams) {
+ getKibanaLegacy().loadFontAwesome();
+ await super.render(esResponse, visParams);
+ }
+
async _makeKibanaMap() {
await super._makeKibanaMap();
diff --git a/src/plugins/vis_type_table/kibana.json b/src/plugins/vis_type_table/kibana.json
index bb0f6478a4240..ed098d7161403 100644
--- a/src/plugins/vis_type_table/kibana.json
+++ b/src/plugins/vis_type_table/kibana.json
@@ -6,6 +6,7 @@
"requiredPlugins": [
"expressions",
"visualizations",
- "data"
+ "data",
+ "kibanaLegacy"
]
}
diff --git a/src/plugins/vis_type_table/public/plugin.ts b/src/plugins/vis_type_table/public/plugin.ts
index a41d939523bcc..28f823df79d91 100644
--- a/src/plugins/vis_type_table/public/plugin.ts
+++ b/src/plugins/vis_type_table/public/plugin.ts
@@ -23,7 +23,8 @@ import { VisualizationsSetup } from '../../visualizations/public';
import { createTableVisFn } from './table_vis_fn';
import { getTableVisTypeDefinition } from './table_vis_type';
import { DataPublicPluginStart } from '../../data/public';
-import { setFormatService } from './services';
+import { setFormatService, setKibanaLegacy } from './services';
+import { KibanaLegacyStart } from '../../kibana_legacy/public';
/** @internal */
export interface TablePluginSetupDependencies {
@@ -34,6 +35,7 @@ export interface TablePluginSetupDependencies {
/** @internal */
export interface TablePluginStartDependencies {
data: DataPublicPluginStart;
+ kibanaLegacy: KibanaLegacyStart;
}
/** @internal */
@@ -55,7 +57,8 @@ export class TableVisPlugin implements Plugin, void> {
);
}
- public start(core: CoreStart, { data }: TablePluginStartDependencies) {
+ public start(core: CoreStart, { data, kibanaLegacy }: TablePluginStartDependencies) {
setFormatService(data.fieldFormats);
+ setKibanaLegacy(kibanaLegacy);
}
}
diff --git a/src/plugins/vis_type_table/public/services.ts b/src/plugins/vis_type_table/public/services.ts
index 3aaffe75e27f1..b4f996f078f6b 100644
--- a/src/plugins/vis_type_table/public/services.ts
+++ b/src/plugins/vis_type_table/public/services.ts
@@ -19,7 +19,12 @@
import { createGetterSetter } from '../../kibana_utils/public';
import { DataPublicPluginStart } from '../../data/public';
+import { KibanaLegacyStart } from '../../kibana_legacy/public';
export const [getFormatService, setFormatService] = createGetterSetter<
DataPublicPluginStart['fieldFormats']
>('table data.fieldFormats');
+
+export const [getKibanaLegacy, setKibanaLegacy] = createGetterSetter(
+ 'table kibanaLegacy'
+);
diff --git a/src/plugins/vis_type_table/public/vis_controller.ts b/src/plugins/vis_type_table/public/vis_controller.ts
index d49dd32c8c89c..a5086e0c9a2d8 100644
--- a/src/plugins/vis_type_table/public/vis_controller.ts
+++ b/src/plugins/vis_type_table/public/vis_controller.ts
@@ -22,6 +22,7 @@ import $ from 'jquery';
import { VisParams, ExprVis } from '../../visualizations/public';
import { getAngularModule } from './get_inner_angular';
+import { getKibanaLegacy } from './services';
import { initTableVisLegacyModule } from './table_vis_legacy_module';
const innerAngularName = 'kibana/table_vis';
@@ -64,6 +65,7 @@ export function getTableVisualizationControllerClass(
}
async render(esResponse: object, visParams: VisParams) {
+ getKibanaLegacy().loadFontAwesome();
await this.initLocalAngular();
return new Promise(async (resolve, reject) => {
diff --git a/src/plugins/vis_type_vislib/kibana.json b/src/plugins/vis_type_vislib/kibana.json
index 5b3088b399ebf..cad0ebe01494a 100644
--- a/src/plugins/vis_type_vislib/kibana.json
+++ b/src/plugins/vis_type_vislib/kibana.json
@@ -3,6 +3,6 @@
"version": "kibana",
"server": true,
"ui": true,
- "requiredPlugins": ["charts", "data", "expressions", "visualizations"],
+ "requiredPlugins": ["charts", "data", "expressions", "visualizations", "kibanaLegacy"],
"optionalPlugins": ["visTypeXy"]
}
diff --git a/src/plugins/vis_type_vislib/public/plugin.ts b/src/plugins/vis_type_vislib/public/plugin.ts
index 19bbf89ee0243..c6a6b6f82592b 100644
--- a/src/plugins/vis_type_vislib/public/plugin.ts
+++ b/src/plugins/vis_type_vislib/public/plugin.ts
@@ -44,7 +44,8 @@ import {
} from './vis_type_vislib_vis_types';
import { ChartsPluginSetup } from '../../charts/public';
import { DataPublicPluginStart } from '../../data/public';
-import { setFormatService, setDataActions } from './services';
+import { setFormatService, setDataActions, setKibanaLegacy } from './services';
+import { KibanaLegacyStart } from '../../kibana_legacy/public';
export interface VisTypeVislibDependencies {
uiSettings: IUiSettingsClient;
@@ -62,6 +63,7 @@ export interface VisTypeVislibPluginSetupDependencies {
/** @internal */
export interface VisTypeVislibPluginStartDependencies {
data: DataPublicPluginStart;
+ kibanaLegacy: KibanaLegacyStart;
}
type VisTypeVislibCoreSetup = CoreSetup;
@@ -109,8 +111,9 @@ export class VisTypeVislibPlugin implements Plugin {
);
}
- public start(core: CoreStart, { data }: VisTypeVislibPluginStartDependencies) {
+ public start(core: CoreStart, { data, kibanaLegacy }: VisTypeVislibPluginStartDependencies) {
setFormatService(data.fieldFormats);
setDataActions(data.actions);
+ setKibanaLegacy(kibanaLegacy);
}
}
diff --git a/src/plugins/vis_type_vislib/public/services.ts b/src/plugins/vis_type_vislib/public/services.ts
index 633fae9c7f2a6..7257b98f2e9f5 100644
--- a/src/plugins/vis_type_vislib/public/services.ts
+++ b/src/plugins/vis_type_vislib/public/services.ts
@@ -19,6 +19,7 @@
import { createGetterSetter } from '../../kibana_utils/public';
import { DataPublicPluginStart } from '../../data/public';
+import { KibanaLegacyStart } from '../../kibana_legacy/public';
export const [getDataActions, setDataActions] = createGetterSetter<
DataPublicPluginStart['actions']
@@ -27,3 +28,7 @@ export const [getDataActions, setDataActions] = createGetterSetter<
export const [getFormatService, setFormatService] = createGetterSetter<
DataPublicPluginStart['fieldFormats']
>('vislib data.fieldFormats');
+
+export const [getKibanaLegacy, setKibanaLegacy] = createGetterSetter(
+ 'vislib kibanalegacy'
+);
diff --git a/src/plugins/vis_type_vislib/public/vis_controller.tsx b/src/plugins/vis_type_vislib/public/vis_controller.tsx
index 262290b071abc..86ef98de045d7 100644
--- a/src/plugins/vis_type_vislib/public/vis_controller.tsx
+++ b/src/plugins/vis_type_vislib/public/vis_controller.tsx
@@ -27,6 +27,7 @@ import { VisTypeVislibDependencies } from './plugin';
import { mountReactNode } from '../../../core/public/utils';
import { VisLegend, CUSTOM_LEGEND_VIS_TYPES } from './vislib/components/legend';
import { VisParams, ExprVis } from '../../visualizations/public';
+import { getKibanaLegacy } from './services';
const legendClassName = {
top: 'visLib--legend-top',
@@ -72,6 +73,8 @@ export const createVislibVisController = (deps: VisTypeVislibDependencies) => {
this.destroy();
}
+ getKibanaLegacy().loadFontAwesome();
+
return new Promise(async (resolve) => {
if (this.el.clientWidth === 0 || this.el.clientHeight === 0) {
return resolve();
diff --git a/src/plugins/visualize/public/application/legacy_app.js b/src/plugins/visualize/public/application/legacy_app.js
index 42e8b07ee6310..452118f8097da 100644
--- a/src/plugins/visualize/public/application/legacy_app.js
+++ b/src/plugins/visualize/public/application/legacy_app.js
@@ -244,9 +244,17 @@ export function initVisualizeApp(app, deps) {
},
})
.otherwise({
- template: '',
- controller: function () {
- deps.kibanaLegacy.navigateToDefaultApp();
+ resolveRedirectTo: function ($rootScope) {
+ const path = window.location.hash.substr(1);
+ deps.restorePreviousUrl();
+ $rootScope.$applyAsync(() => {
+ const { navigated } = deps.kibanaLegacy.navigateToLegacyKibanaUrl(path);
+ if (!navigated) {
+ deps.kibanaLegacy.navigateToDefaultApp();
+ }
+ });
+ // prevent angular from completing the navigation
+ return new Promise(() => {});
},
});
});
diff --git a/src/plugins/visualize/public/kibana_services.ts b/src/plugins/visualize/public/kibana_services.ts
index d954a3f4925ac..f1e6b0b37d55b 100644
--- a/src/plugins/visualize/public/kibana_services.ts
+++ b/src/plugins/visualize/public/kibana_services.ts
@@ -55,6 +55,7 @@ export interface VisualizeKibanaServices {
embeddable: EmbeddableStart;
I18nContext: I18nStart['Context'];
setActiveUrl: (newUrl: string) => void;
+ restorePreviousUrl: () => void;
createVisEmbeddableFromObject: VisualizationsStart['__LEGACY']['createVisEmbeddableFromObject'];
scopedHistory: () => ScopedHistory;
savedObjects: SavedObjectsStart;
diff --git a/src/plugins/visualize/public/plugin.ts b/src/plugins/visualize/public/plugin.ts
index 3bd111084e34b..bec082642d3d4 100644
--- a/src/plugins/visualize/public/plugin.ts
+++ b/src/plugins/visualize/public/plugin.ts
@@ -73,7 +73,13 @@ export class VisualizePlugin
core: CoreSetup,
{ home, kibanaLegacy, data }: VisualizePluginSetupDependencies
) {
- const { appMounted, appUnMounted, stop: stopUrlTracker, setActiveUrl } = createKbnUrlTracker({
+ const {
+ appMounted,
+ appUnMounted,
+ stop: stopUrlTracker,
+ setActiveUrl,
+ restorePreviousUrl,
+ } = createKbnUrlTracker({
baseUrl: core.http.basePath.prepend('/app/visualize'),
defaultSubUrl: '#/',
storageKey: `lastUrl:${core.http.basePath.get()}:visualize`,
@@ -136,6 +142,7 @@ export class VisualizePlugin
pluginsStart.visualizations.__LEGACY.createVisEmbeddableFromObject,
scopedHistory: () => this.currentHistory!,
savedObjects: pluginsStart.savedObjects,
+ restorePreviousUrl,
};
setServices(deps);
diff --git a/test/api_integration/apis/saved_objects_management/find.ts b/test/api_integration/apis/saved_objects_management/find.ts
index 4d9f1c1658139..235d789a388df 100644
--- a/test/api_integration/apis/saved_objects_management/find.ts
+++ b/test/api_integration/apis/saved_objects_management/find.ts
@@ -221,7 +221,7 @@ export default function ({ getService }: FtrProviderContext) {
editUrl:
'/management/kibana/objects/savedSearches/960372e0-3224-11e8-a572-ffca06da1357',
inAppUrl: {
- path: '/app/discover#/960372e0-3224-11e8-a572-ffca06da1357',
+ path: '/app/discover#/view/960372e0-3224-11e8-a572-ffca06da1357',
uiCapabilitiesPath: 'discover.show',
},
});
diff --git a/test/api_integration/apis/saved_objects_management/relationships.ts b/test/api_integration/apis/saved_objects_management/relationships.ts
index 1db4df181e0e9..225fc5456e743 100644
--- a/test/api_integration/apis/saved_objects_management/relationships.ts
+++ b/test/api_integration/apis/saved_objects_management/relationships.ts
@@ -283,7 +283,7 @@ export default function ({ getService }: FtrProviderContext) {
editUrl:
'/management/kibana/objects/savedSearches/960372e0-3224-11e8-a572-ffca06da1357',
inAppUrl: {
- path: '/app/discover#/960372e0-3224-11e8-a572-ffca06da1357',
+ path: '/app/discover#/view/960372e0-3224-11e8-a572-ffca06da1357',
uiCapabilitiesPath: 'discover.show',
},
},
@@ -323,7 +323,7 @@ export default function ({ getService }: FtrProviderContext) {
editUrl:
'/management/kibana/objects/savedSearches/960372e0-3224-11e8-a572-ffca06da1357',
inAppUrl: {
- path: '/app/discover#/960372e0-3224-11e8-a572-ffca06da1357',
+ path: '/app/discover#/view/960372e0-3224-11e8-a572-ffca06da1357',
uiCapabilitiesPath: 'discover.show',
},
},
@@ -366,7 +366,7 @@ export default function ({ getService }: FtrProviderContext) {
editUrl:
'/management/kibana/objects/savedSearches/960372e0-3224-11e8-a572-ffca06da1357',
inAppUrl: {
- path: '/app/discover#/960372e0-3224-11e8-a572-ffca06da1357',
+ path: '/app/discover#/view/960372e0-3224-11e8-a572-ffca06da1357',
uiCapabilitiesPath: 'discover.show',
},
},
@@ -406,7 +406,7 @@ export default function ({ getService }: FtrProviderContext) {
editUrl:
'/management/kibana/objects/savedSearches/960372e0-3224-11e8-a572-ffca06da1357',
inAppUrl: {
- path: '/app/discover#/960372e0-3224-11e8-a572-ffca06da1357',
+ path: '/app/discover#/view/960372e0-3224-11e8-a572-ffca06da1357',
uiCapabilitiesPath: 'discover.show',
},
},
diff --git a/test/functional/apps/bundles/index.js b/test/functional/apps/bundles/index.js
index ead6412564751..f106ea895c2e6 100644
--- a/test/functional/apps/bundles/index.js
+++ b/test/functional/apps/bundles/index.js
@@ -65,7 +65,7 @@ export default function ({ getService }) {
it('returns gzip files when no brotli version exists', () =>
supertest
- .get(`/${buildNum}/bundles/commons.style.css`) // legacy optimizer does not create brotli outputs
+ .get(`/${buildNum}/bundles/light_theme.style.css`) // legacy optimizer does not create brotli outputs
.set('Accept-Encoding', 'gzip, br')
.expect(200)
.expect('Content-Encoding', 'gzip'));
diff --git a/test/functional/apps/dashboard/index.js b/test/functional/apps/dashboard/index.js
index a8d0e03c9421e..1e310c1ddd268 100644
--- a/test/functional/apps/dashboard/index.js
+++ b/test/functional/apps/dashboard/index.js
@@ -58,6 +58,7 @@ export default function ({ getService, loadTestFile }) {
loadTestFile(require.resolve('./embed_mode'));
loadTestFile(require.resolve('./dashboard_back_button'));
loadTestFile(require.resolve('./dashboard_error_handling'));
+ loadTestFile(require.resolve('./legacy_urls'));
// Note: This one must be last because it unloads some data for one of its tests!
// No, this isn't ideal, but loading/unloading takes so much time and these are all bunched
diff --git a/test/functional/apps/dashboard/legacy_urls.ts b/test/functional/apps/dashboard/legacy_urls.ts
new file mode 100644
index 0000000000000..e606649c1df9f
--- /dev/null
+++ b/test/functional/apps/dashboard/legacy_urls.ts
@@ -0,0 +1,111 @@
+/*
+ * Licensed to Elasticsearch B.V. under one or more contributor
+ * license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright
+ * ownership. Elasticsearch B.V. licenses this file to you under
+ * the Apache License, Version 2.0 (the "License"); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import { FtrProviderContext } from '../../ftr_provider_context';
+
+export default function ({ getService, getPageObjects }: FtrProviderContext) {
+ const PageObjects = getPageObjects([
+ 'dashboard',
+ 'header',
+ 'common',
+ 'timePicker',
+ 'visualize',
+ 'visEditor',
+ ]);
+ const pieChart = getService('pieChart');
+ const browser = getService('browser');
+ const find = getService('find');
+ const log = getService('log');
+ const dashboardAddPanel = getService('dashboardAddPanel');
+ const listingTable = getService('listingTable');
+ const esArchiver = getService('esArchiver');
+
+ let kibanaLegacyBaseUrl: string;
+ let kibanaVisualizeBaseUrl: string;
+ let testDashboardId: string;
+
+ describe('legacy urls', function describeIndexTests() {
+ before(async function () {
+ await esArchiver.load('dashboard/current/kibana');
+ await PageObjects.common.navigateToApp('dashboard');
+ await PageObjects.dashboard.clickNewDashboard();
+ await dashboardAddPanel.addVisualization('Rendering-Test:-animal-sounds-pie');
+ await PageObjects.dashboard.saveDashboard('legacyTest', { waitDialogIsClosed: true });
+ await PageObjects.header.waitUntilLoadingHasFinished();
+ const currentUrl = await browser.getCurrentUrl();
+ await log.debug(`Current url is ${currentUrl}`);
+ testDashboardId = /#\/view\/(.+)\?/.exec(currentUrl)![1];
+ kibanaLegacyBaseUrl =
+ currentUrl.substring(0, currentUrl.indexOf('/app/dashboards')) + '/app/kibana';
+ kibanaVisualizeBaseUrl =
+ currentUrl.substring(0, currentUrl.indexOf('/app/dashboards')) + '/app/visualize';
+ await log.debug(`id is ${testDashboardId}`);
+ });
+
+ after(async function () {
+ await PageObjects.dashboard.gotoDashboardLandingPage();
+ await listingTable.deleteItem('legacyTest', testDashboardId);
+ });
+
+ describe('kibana link redirect', () => {
+ it('redirects from old kibana app URL', async () => {
+ const url = `${kibanaLegacyBaseUrl}#/dashboard/${testDashboardId}`;
+ await browser.get(url, true);
+ await PageObjects.header.waitUntilLoadingHasFinished();
+ await PageObjects.timePicker.setDefaultDataRange();
+
+ await PageObjects.dashboard.waitForRenderComplete();
+ await pieChart.expectPieSliceCount(5);
+ });
+
+ it('redirects from legacy hash in wrong app', async () => {
+ const url = `${kibanaVisualizeBaseUrl}#/dashboard/${testDashboardId}`;
+ await browser.get(url, true);
+ await PageObjects.header.waitUntilLoadingHasFinished();
+ await PageObjects.timePicker.setDefaultDataRange();
+
+ await PageObjects.dashboard.waitForRenderComplete();
+ await pieChart.expectPieSliceCount(5);
+ });
+
+ it('resolves markdown link', async () => {
+ await PageObjects.visualize.navigateToNewVisualization();
+ await PageObjects.visualize.clickMarkdownWidget();
+ await PageObjects.visEditor.setMarkdownTxt(`[abc](#/dashboard/${testDashboardId})`);
+ await PageObjects.visEditor.clickGo();
+ (await find.byLinkText('abc')).click();
+
+ await PageObjects.header.waitUntilLoadingHasFinished();
+ await PageObjects.timePicker.setDefaultDataRange();
+
+ await PageObjects.dashboard.waitForRenderComplete();
+ await pieChart.expectPieSliceCount(5);
+ });
+
+ it('back button works', async () => {
+ // back to default time range
+ await browser.goBack();
+ // back to last app
+ await browser.goBack();
+ await PageObjects.visEditor.expectMarkdownTextArea();
+ await browser.goForward();
+ });
+ });
+ });
+}
diff --git a/test/functional/apps/discover/_shared_links.js b/test/functional/apps/discover/_shared_links.js
index 38d8812fa3103..5c6a70450a0aa 100644
--- a/test/functional/apps/discover/_shared_links.js
+++ b/test/functional/apps/discover/_shared_links.js
@@ -109,7 +109,7 @@ export default function ({ getService, getPageObjects }) {
const expectedUrl =
baseUrl +
'/app/discover#' +
- '/ab12e3c0-f231-11e6-9486-733b1ac9221a' +
+ '/view/ab12e3c0-f231-11e6-9486-733b1ac9221a' +
'?_g=(filters%3A!()%2CrefreshInterval%3A(pause%3A!t%2Cvalue%3A0)' +
"%2Ctime%3A(from%3A'2015-09-19T06%3A31%3A44.000Z'%2C" +
"to%3A'2015-09-23T18%3A31%3A44.000Z'))";
diff --git a/test/functional/page_objects/visualize_editor_page.ts b/test/functional/page_objects/visualize_editor_page.ts
index c4c7c2aaffabd..9fcb38efce0db 100644
--- a/test/functional/page_objects/visualize_editor_page.ts
+++ b/test/functional/page_objects/visualize_editor_page.ts
@@ -230,6 +230,10 @@ export function VisualizeEditorPageProvider({ getService, getPageObjects }: FtrP
await testSubjects.click('dropPartialBucketsCheckbox');
}
+ public async expectMarkdownTextArea() {
+ await testSubjects.existOrFail('markdownTextarea');
+ }
+
public async setMarkdownTxt(markdownTxt: string) {
const input = await testSubjects.find('markdownTextarea');
await input.clearValue();
diff --git a/x-pack/plugins/graph/kibana.json b/x-pack/plugins/graph/kibana.json
index 4cae14f8939b2..ebe18dba2b58c 100644
--- a/x-pack/plugins/graph/kibana.json
+++ b/x-pack/plugins/graph/kibana.json
@@ -4,7 +4,7 @@
"kibanaVersion": "kibana",
"server": true,
"ui": true,
- "requiredPlugins": ["licensing", "data", "navigation", "savedObjects"],
+ "requiredPlugins": ["licensing", "data", "navigation", "savedObjects", "kibanaLegacy"],
"optionalPlugins": ["home", "features"],
"configPath": ["xpack", "graph"]
}
diff --git a/x-pack/plugins/graph/public/application.ts b/x-pack/plugins/graph/public/application.ts
index b46bc88500e0a..0969b80bc38b0 100644
--- a/x-pack/plugins/graph/public/application.ts
+++ b/x-pack/plugins/graph/public/application.ts
@@ -35,6 +35,7 @@ import {
configureAppAngularModule,
createTopNavDirective,
createTopNavHelper,
+ KibanaLegacyStart,
} from '../../../../src/plugins/kibana_legacy/public';
import './index.scss';
@@ -67,9 +68,11 @@ export interface GraphDependencies {
graphSavePolicy: string;
overlays: OverlayStart;
savedObjects: SavedObjectsStart;
+ kibanaLegacy: KibanaLegacyStart;
}
-export const renderApp = ({ appBasePath, element, ...deps }: GraphDependencies) => {
+export const renderApp = ({ appBasePath, element, kibanaLegacy, ...deps }: GraphDependencies) => {
+ kibanaLegacy.loadFontAwesome();
const graphAngularModule = createLocalAngularModule(deps.navigation);
configureAppAngularModule(
graphAngularModule,
diff --git a/x-pack/plugins/graph/public/plugin.ts b/x-pack/plugins/graph/public/plugin.ts
index e97735c50388f..5b2566ffab7c0 100644
--- a/x-pack/plugins/graph/public/plugin.ts
+++ b/x-pack/plugins/graph/public/plugin.ts
@@ -10,7 +10,10 @@ import { AppMountParameters, Plugin } from 'src/core/public';
import { PluginInitializerContext } from 'kibana/public';
import { Storage } from '../../../../src/plugins/kibana_utils/public';
-import { initAngularBootstrap } from '../../../../src/plugins/kibana_legacy/public';
+import {
+ initAngularBootstrap,
+ KibanaLegacyStart,
+} from '../../../../src/plugins/kibana_legacy/public';
import { NavigationPublicPluginStart as NavigationStart } from '../../../../src/plugins/navigation/public';
import { DataPublicPluginStart } from '../../../../src/plugins/data/public';
@@ -34,6 +37,7 @@ export interface GraphPluginStartDependencies {
navigation: NavigationStart;
data: DataPublicPluginStart;
savedObjects: SavedObjectsStart;
+ kibanaLegacy: KibanaLegacyStart;
}
export class GraphPlugin
@@ -85,6 +89,7 @@ export class GraphPlugin
core: coreStart,
navigation: pluginsStart.navigation,
data: pluginsStart.data,
+ kibanaLegacy: pluginsStart.kibanaLegacy,
savedObjectsClient: coreStart.savedObjects.client,
addBasePath: core.http.basePath.prepend,
getBasePath: core.http.basePath.get,
diff --git a/x-pack/plugins/ml/kibana.json b/x-pack/plugins/ml/kibana.json
index e9d4aff3484b1..f93e7bc19f960 100644
--- a/x-pack/plugins/ml/kibana.json
+++ b/x-pack/plugins/ml/kibana.json
@@ -15,7 +15,8 @@
"usageCollection",
"share",
"embeddable",
- "uiActions"
+ "uiActions",
+ "kibanaLegacy"
],
"optionalPlugins": [
"security",
diff --git a/x-pack/plugins/ml/public/application/app.tsx b/x-pack/plugins/ml/public/application/app.tsx
index b871d857f7fde..3df176ff25cb4 100644
--- a/x-pack/plugins/ml/public/application/app.tsx
+++ b/x-pack/plugins/ml/public/application/app.tsx
@@ -78,6 +78,8 @@ export const renderApp = (
urlGenerators: deps.share.urlGenerators,
});
+ deps.kibanaLegacy.loadFontAwesome();
+
const mlLicense = setLicenseCache(deps.licensing);
appMountParams.onAppLeave((actions) => actions.default());
diff --git a/x-pack/plugins/ml/public/plugin.ts b/x-pack/plugins/ml/public/plugin.ts
index be2ebb3caa416..7f7544a44efa7 100644
--- a/x-pack/plugins/ml/public/plugin.ts
+++ b/x-pack/plugins/ml/public/plugin.ts
@@ -30,10 +30,12 @@ import { DEFAULT_APP_CATEGORIES } from '../../../../src/core/public';
import { registerEmbeddables } from './embeddables';
import { UiActionsSetup } from '../../../../src/plugins/ui_actions/public';
import { registerMlUiActions } from './ui_actions';
+import { KibanaLegacyStart } from '../../../../src/plugins/kibana_legacy/public';
export interface MlStartDependencies {
data: DataPublicPluginStart;
share: SharePluginStart;
+ kibanaLegacy: KibanaLegacyStart;
}
export interface MlSetupDependencies {
security?: SecurityPluginSetup;
@@ -70,6 +72,7 @@ export class MlPlugin implements Plugin {
{
data: pluginsStart.data,
share: pluginsStart.share,
+ kibanaLegacy: pluginsStart.kibanaLegacy,
security: pluginsSetup.security,
licensing: pluginsSetup.licensing,
management: pluginsSetup.management,
diff --git a/x-pack/plugins/monitoring/public/angular/index.ts b/x-pack/plugins/monitoring/public/angular/index.ts
index 3f2a51a898d1f..69d97a5e3bdc3 100644
--- a/x-pack/plugins/monitoring/public/angular/index.ts
+++ b/x-pack/plugins/monitoring/public/angular/index.ts
@@ -25,12 +25,22 @@ export class AngularApp {
isCloud,
pluginInitializerContext,
externalConfig,
+ kibanaLegacy,
} = deps;
const app: IModule = localAppModule(deps);
app.run(($injector: angular.auto.IInjectorService) => {
this.injector = $injector;
Legacy.init(
- { core, element, data, navigation, isCloud, pluginInitializerContext, externalConfig },
+ {
+ core,
+ element,
+ data,
+ navigation,
+ isCloud,
+ pluginInitializerContext,
+ externalConfig,
+ kibanaLegacy,
+ },
this.injector
);
});
diff --git a/x-pack/plugins/monitoring/public/plugin.ts b/x-pack/plugins/monitoring/public/plugin.ts
index 24383028e558c..de8c8d59b78bf 100644
--- a/x-pack/plugins/monitoring/public/plugin.ts
+++ b/x-pack/plugins/monitoring/public/plugin.ts
@@ -70,6 +70,7 @@ export class MonitoringPlugin
const { AngularApp } = await import('./angular');
const deps: MonitoringPluginDependencies = {
navigation: pluginsStart.navigation,
+ kibanaLegacy: pluginsStart.kibanaLegacy,
element: params.element,
core: coreStart,
data: pluginsStart.data,
@@ -78,6 +79,7 @@ export class MonitoringPlugin
externalConfig: this.getExternalConfig(),
};
+ pluginsStart.kibanaLegacy.loadFontAwesome();
this.setInitialTimefilter(deps);
this.overrideAlertingEmailDefaults(deps);
diff --git a/x-pack/plugins/monitoring/public/types.ts b/x-pack/plugins/monitoring/public/types.ts
index b8c854f4e7ee0..6266755a04120 100644
--- a/x-pack/plugins/monitoring/public/types.ts
+++ b/x-pack/plugins/monitoring/public/types.ts
@@ -7,6 +7,7 @@
import { PluginInitializerContext, CoreStart } from 'kibana/public';
import { NavigationPublicPluginStart as NavigationStart } from '../../../../src/plugins/navigation/public';
import { DataPublicPluginStart } from '../../../../src/plugins/data/public';
+import { KibanaLegacyStart } from '../../../../src/plugins/kibana_legacy/public';
// eslint-disable-next-line @kbn/eslint/no-restricted-paths
export { MonitoringConfig } from '../server';
@@ -14,6 +15,7 @@ export { MonitoringConfig } from '../server';
export interface MonitoringPluginDependencies {
navigation: NavigationStart;
data: DataPublicPluginStart;
+ kibanaLegacy: KibanaLegacyStart;
element: HTMLElement;
core: CoreStart;
isCloud: boolean;
diff --git a/x-pack/plugins/spaces/public/copy_saved_objects_to_space/components/copy_to_space_flyout.tsx b/x-pack/plugins/spaces/public/copy_saved_objects_to_space/components/copy_to_space_flyout.tsx
index c5fff36c797cc..47fc603ee46e8 100644
--- a/x-pack/plugins/spaces/public/copy_saved_objects_to_space/components/copy_to_space_flyout.tsx
+++ b/x-pack/plugins/spaces/public/copy_saved_objects_to_space/components/copy_to_space_flyout.tsx
@@ -22,10 +22,6 @@ import { mapValues } from 'lodash';
import { i18n } from '@kbn/i18n';
import { FormattedMessage } from '@kbn/i18n/react';
import { ToastsStart } from 'src/core/public';
-import {
- ProcessedImportResponse,
- processImportResponse,
-} from '../../../../../../src/legacy/core_plugins/kibana/public';
import { SavedObjectsManagementRecord } from '../../../../../../src/plugins/saved_objects_management/public';
import { Space } from '../../../common/model/space';
import { SpacesManager } from '../../spaces_manager';
@@ -33,6 +29,10 @@ import { ProcessingCopyToSpace } from './processing_copy_to_space';
import { CopyToSpaceFlyoutFooter } from './copy_to_space_flyout_footer';
import { CopyToSpaceForm } from './copy_to_space_form';
import { CopyOptions, ImportRetry } from '../types';
+import {
+ ProcessedImportResponse,
+ processImportResponse,
+} from '../../../../../../src/plugins/saved_objects_management/public';
interface Props {
onClose: () => void;
diff --git a/x-pack/plugins/spaces/public/copy_saved_objects_to_space/components/copy_to_space_flyout_footer.tsx b/x-pack/plugins/spaces/public/copy_saved_objects_to_space/components/copy_to_space_flyout_footer.tsx
index 38bd3e04bc240..d7ded819771fc 100644
--- a/x-pack/plugins/spaces/public/copy_saved_objects_to_space/components/copy_to_space_flyout_footer.tsx
+++ b/x-pack/plugins/spaces/public/copy_saved_objects_to_space/components/copy_to_space_flyout_footer.tsx
@@ -8,8 +8,8 @@ import React, { Fragment } from 'react';
import { EuiButton, EuiFlexGroup, EuiFlexItem, EuiStat, EuiHorizontalRule } from '@elastic/eui';
import { FormattedMessage } from '@kbn/i18n/react';
import { i18n } from '@kbn/i18n';
-import { ProcessedImportResponse } from '../../../../../../src/legacy/core_plugins/kibana/public';
import { ImportRetry } from '../types';
+import { ProcessedImportResponse } from '../../../../../../src/plugins/saved_objects_management/public';
interface Props {
copyInProgress: boolean;
diff --git a/x-pack/plugins/spaces/public/copy_saved_objects_to_space/components/processing_copy_to_space.tsx b/x-pack/plugins/spaces/public/copy_saved_objects_to_space/components/processing_copy_to_space.tsx
index fc1810ba8f819..255268d388eb8 100644
--- a/x-pack/plugins/spaces/public/copy_saved_objects_to_space/components/processing_copy_to_space.tsx
+++ b/x-pack/plugins/spaces/public/copy_saved_objects_to_space/components/processing_copy_to_space.tsx
@@ -13,8 +13,10 @@ import {
EuiHorizontalRule,
} from '@elastic/eui';
import { FormattedMessage } from '@kbn/i18n/react';
-import { ProcessedImportResponse } from '../../../../../../src/legacy/core_plugins/kibana/public';
-import { SavedObjectsManagementRecord } from '../../../../../../src/plugins/saved_objects_management/public';
+import {
+ ProcessedImportResponse,
+ SavedObjectsManagementRecord,
+} from 'src/plugins/saved_objects_management/public';
import { Space } from '../../../common/model/space';
import { CopyOptions, ImportRetry } from '../types';
import { SpaceResult } from './space_result';
diff --git a/x-pack/plugins/spaces/public/copy_saved_objects_to_space/summarize_copy_result.test.ts b/x-pack/plugins/spaces/public/copy_saved_objects_to_space/summarize_copy_result.test.ts
index 65a0cabfeb716..a8ecd7c7b9d9f 100644
--- a/x-pack/plugins/spaces/public/copy_saved_objects_to_space/summarize_copy_result.test.ts
+++ b/x-pack/plugins/spaces/public/copy_saved_objects_to_space/summarize_copy_result.test.ts
@@ -5,7 +5,7 @@
*/
import { summarizeCopyResult } from './summarize_copy_result';
-import { ProcessedImportResponse } from 'src/legacy/core_plugins/kibana/public';
+import { ProcessedImportResponse } from 'src/plugins/saved_objects_management/public';
const createSavedObjectsManagementRecord = () => ({
type: 'dashboard',
diff --git a/x-pack/plugins/spaces/public/copy_saved_objects_to_space/summarize_copy_result.ts b/x-pack/plugins/spaces/public/copy_saved_objects_to_space/summarize_copy_result.ts
index 5c1fe6afcf083..518e89df579a6 100644
--- a/x-pack/plugins/spaces/public/copy_saved_objects_to_space/summarize_copy_result.ts
+++ b/x-pack/plugins/spaces/public/copy_saved_objects_to_space/summarize_copy_result.ts
@@ -4,8 +4,10 @@
* you may not use this file except in compliance with the Elastic License.
*/
-import { ProcessedImportResponse } from 'src/legacy/core_plugins/kibana/public';
-import { SavedObjectsManagementRecord } from 'src/plugins/saved_objects_management/public';
+import {
+ SavedObjectsManagementRecord,
+ ProcessedImportResponse,
+} from 'src/plugins/saved_objects_management/public';
export interface SummarizedSavedObjectResult {
type: string;