diff --git a/docs/development/core/server/kibana-plugin-server.configdeprecationfactory.md b/docs/development/core/server/kibana-plugin-server.configdeprecationfactory.md
index c61907f366301..2ebee16874c80 100644
--- a/docs/development/core/server/kibana-plugin-server.configdeprecationfactory.md
+++ b/docs/development/core/server/kibana-plugin-server.configdeprecationfactory.md
@@ -30,7 +30,7 @@ const provider: ConfigDeprecationProvider = ({ rename, unused }) => [
| Method | Description |
| --- | --- |
| [rename(oldKey, newKey)](./kibana-plugin-server.configdeprecationfactory.rename.md) | Rename a configuration property from inside a plugin's configuration path. Will log a deprecation warning if the oldKey was found and deprecation applied. |
-| [renameFromRoot(oldKey, newKey)](./kibana-plugin-server.configdeprecationfactory.renamefromroot.md) | Rename a configuration property from the root configuration. Will log a deprecation warning if the oldKey was found and deprecation applied.This should be only used when renaming properties from different configuration's path. To rename properties from inside a plugin's configuration, use 'rename' instead. |
+| [renameFromRoot(oldKey, newKey, silent)](./kibana-plugin-server.configdeprecationfactory.renamefromroot.md) | Rename a configuration property from the root configuration. Will log a deprecation warning if the oldKey was found and deprecation applied.This should be only used when renaming properties from different configuration's path. To rename properties from inside a plugin's configuration, use 'rename' instead. |
| [unused(unusedKey)](./kibana-plugin-server.configdeprecationfactory.unused.md) | Remove a configuration property from inside a plugin's configuration path. Will log a deprecation warning if the unused key was found and deprecation applied. |
| [unusedFromRoot(unusedKey)](./kibana-plugin-server.configdeprecationfactory.unusedfromroot.md) | Remove a configuration property from the root configuration. Will log a deprecation warning if the unused key was found and deprecation applied.This should be only used when removing properties from outside of a plugin's configuration. To remove properties from inside a plugin's configuration, use 'unused' instead. |
diff --git a/docs/development/core/server/kibana-plugin-server.configdeprecationfactory.renamefromroot.md b/docs/development/core/server/kibana-plugin-server.configdeprecationfactory.renamefromroot.md
index 269f242ec35da..40ea891b17c95 100644
--- a/docs/development/core/server/kibana-plugin-server.configdeprecationfactory.renamefromroot.md
+++ b/docs/development/core/server/kibana-plugin-server.configdeprecationfactory.renamefromroot.md
@@ -11,7 +11,7 @@ This should be only used when renaming properties from different configuration's
Signature:
```typescript
-renameFromRoot(oldKey: string, newKey: string): ConfigDeprecation;
+renameFromRoot(oldKey: string, newKey: string, silent?: boolean): ConfigDeprecation;
```
## Parameters
@@ -20,6 +20,7 @@ renameFromRoot(oldKey: string, newKey: string): ConfigDeprecation;
| --- | --- | --- |
| oldKey | string
| |
| newKey | string
| |
+| silent | boolean
| |
Returns:
diff --git a/src/core/server/config/deprecation/deprecation_factory.ts b/src/core/server/config/deprecation/deprecation_factory.ts
index 6f7ed4c4e84cc..0b19a99624311 100644
--- a/src/core/server/config/deprecation/deprecation_factory.ts
+++ b/src/core/server/config/deprecation/deprecation_factory.ts
@@ -26,7 +26,8 @@ const _rename = (
rootPath: string,
log: ConfigDeprecationLogger,
oldKey: string,
- newKey: string
+ newKey: string,
+ silent?: boolean
) => {
const fullOldPath = getPath(rootPath, oldKey);
const oldValue = get(config, fullOldPath);
@@ -40,11 +41,16 @@ const _rename = (
const newValue = get(config, fullNewPath);
if (newValue === undefined) {
set(config, fullNewPath, oldValue);
- log(`"${fullOldPath}" is deprecated and has been replaced by "${fullNewPath}"`);
+
+ if (!silent) {
+ log(`"${fullOldPath}" is deprecated and has been replaced by "${fullNewPath}"`);
+ }
} else {
- log(
- `"${fullOldPath}" is deprecated and has been replaced by "${fullNewPath}". However both key are present, ignoring "${fullOldPath}"`
- );
+ if (!silent) {
+ log(
+ `"${fullOldPath}" is deprecated and has been replaced by "${fullNewPath}". However both key are present, ignoring "${fullOldPath}"`
+ );
+ }
}
return config;
};
@@ -67,11 +73,11 @@ const _unused = (
const rename = (oldKey: string, newKey: string): ConfigDeprecation => (config, rootPath, log) =>
_rename(config, rootPath, log, oldKey, newKey);
-const renameFromRoot = (oldKey: string, newKey: string): ConfigDeprecation => (
+const renameFromRoot = (oldKey: string, newKey: string, silent?: boolean): ConfigDeprecation => (
config,
rootPath,
log
-) => _rename(config, '', log, oldKey, newKey);
+) => _rename(config, '', log, oldKey, newKey, silent);
const unused = (unusedKey: string): ConfigDeprecation => (config, rootPath, log) =>
_unused(config, rootPath, log, unusedKey);
diff --git a/src/core/server/config/deprecation/types.ts b/src/core/server/config/deprecation/types.ts
index 19fba7800c919..dbfbad771f074 100644
--- a/src/core/server/config/deprecation/types.ts
+++ b/src/core/server/config/deprecation/types.ts
@@ -102,7 +102,7 @@ export interface ConfigDeprecationFactory {
* ]
* ```
*/
- renameFromRoot(oldKey: string, newKey: string): ConfigDeprecation;
+ renameFromRoot(oldKey: string, newKey: string, silent?: boolean): ConfigDeprecation;
/**
* Remove a configuration property from inside a plugin's configuration path.
* Will log a deprecation warning if the unused key was found and deprecation applied.
diff --git a/src/core/server/kibana_config.ts b/src/core/server/kibana_config.ts
index d46960289a8d0..17f77a6e9328f 100644
--- a/src/core/server/kibana_config.ts
+++ b/src/core/server/kibana_config.ts
@@ -25,9 +25,7 @@ export const config = {
path: 'kibana',
schema: schema.object({
enabled: schema.boolean({ defaultValue: true }),
- defaultAppId: schema.string({ defaultValue: 'home' }),
index: schema.string({ defaultValue: '.kibana' }),
- disableWelcomeScreen: schema.boolean({ defaultValue: false }),
autocompleteTerminateAfter: schema.duration({ defaultValue: 100000 }),
autocompleteTimeout: schema.duration({ defaultValue: 1000 }),
}),
diff --git a/src/core/server/mocks.ts b/src/core/server/mocks.ts
index 50ce507520d04..7d6f09b5232c0 100644
--- a/src/core/server/mocks.ts
+++ b/src/core/server/mocks.ts
@@ -43,7 +43,7 @@ import { uuidServiceMock } from './uuid/uuid_service.mock';
export function pluginInitializerContextConfigMock(config: T) {
const globalConfig: SharedGlobalConfig = {
- kibana: { defaultAppId: 'home-mocks', index: '.kibana-tests' },
+ kibana: { index: '.kibana-tests' },
elasticsearch: {
shardTimeout: duration('30s'),
requestTimeout: duration('30s'),
diff --git a/src/core/server/plugins/plugin_context.test.ts b/src/core/server/plugins/plugin_context.test.ts
index 3fcd7fbbbe1ff..823299771544c 100644
--- a/src/core/server/plugins/plugin_context.test.ts
+++ b/src/core/server/plugins/plugin_context.test.ts
@@ -75,7 +75,7 @@ describe('Plugin Context', () => {
.pipe(first())
.toPromise();
expect(configObject).toStrictEqual({
- kibana: { defaultAppId: 'home', index: '.kibana' },
+ kibana: { index: '.kibana' },
elasticsearch: {
shardTimeout: duration(30, 's'),
requestTimeout: duration(30, 's'),
diff --git a/src/core/server/plugins/types.ts b/src/core/server/plugins/types.ts
index a89e2f8c684e4..9ae04787767bb 100644
--- a/src/core/server/plugins/types.ts
+++ b/src/core/server/plugins/types.ts
@@ -214,7 +214,7 @@ export interface Plugin<
export const SharedGlobalConfigKeys = {
// We can add more if really needed
- kibana: ['defaultAppId', 'index'] as const,
+ kibana: ['index'] as const,
elasticsearch: ['shardTimeout', 'requestTimeout', 'pingTimeout', 'startupTimeout'] as const,
path: ['data'] as const,
};
diff --git a/src/core/server/server.api.md b/src/core/server/server.api.md
index e4ea06769007a..20d9692391a69 100644
--- a/src/core/server/server.api.md
+++ b/src/core/server/server.api.md
@@ -509,7 +509,7 @@ export type ConfigDeprecation = (config: Record, fromPath: string,
// @public
export interface ConfigDeprecationFactory {
rename(oldKey: string, newKey: string): ConfigDeprecation;
- renameFromRoot(oldKey: string, newKey: string): ConfigDeprecation;
+ renameFromRoot(oldKey: string, newKey: string, silent?: boolean): ConfigDeprecation;
unused(unusedKey: string): ConfigDeprecation;
unusedFromRoot(unusedKey: string): ConfigDeprecation;
}
diff --git a/src/legacy/core_plugins/kibana/index.js b/src/legacy/core_plugins/kibana/index.js
index 8e0497732e230..8c35044b52c9e 100644
--- a/src/legacy/core_plugins/kibana/index.js
+++ b/src/legacy/core_plugins/kibana/index.js
@@ -42,9 +42,7 @@ export default function(kibana) {
config: function(Joi) {
return Joi.object({
enabled: Joi.boolean().default(true),
- defaultAppId: Joi.string().default('home'),
index: Joi.string().default('.kibana'),
- disableWelcomeScreen: Joi.boolean().default(false),
autocompleteTerminateAfter: Joi.number()
.integer()
.min(1)
diff --git a/src/legacy/core_plugins/kibana/inject_vars.js b/src/legacy/core_plugins/kibana/inject_vars.js
index 4bf11f28732ee..01623341e4d38 100644
--- a/src/legacy/core_plugins/kibana/inject_vars.js
+++ b/src/legacy/core_plugins/kibana/inject_vars.js
@@ -28,8 +28,6 @@ export function injectVars(server) {
);
return {
- kbnDefaultAppId: serverConfig.get('kibana.defaultAppId'),
- disableWelcomeScreen: serverConfig.get('kibana.disableWelcomeScreen'),
importAndExportableTypes,
autocompleteTerminateAfter: serverConfig.get('kibana.autocompleteTerminateAfter'),
autocompleteTimeout: serverConfig.get('kibana.autocompleteTimeout'),
diff --git a/src/legacy/core_plugins/kibana/public/dashboard/np_ready/application.ts b/src/legacy/core_plugins/kibana/public/dashboard/np_ready/application.ts
index 0d461028d994a..f1fd93fd09b3d 100644
--- a/src/legacy/core_plugins/kibana/public/dashboard/np_ready/application.ts
+++ b/src/legacy/core_plugins/kibana/public/dashboard/np_ready/application.ts
@@ -46,6 +46,7 @@ import { IEmbeddableStart } from '../../../../../../plugins/embeddable/public';
import { NavigationPublicPluginStart as NavigationStart } from '../../../../../../plugins/navigation/public';
import { DataPublicPluginStart as NpDataStart } from '../../../../../../plugins/data/public';
import { SharePluginStart } from '../../../../../../plugins/share/public';
+import { KibanaLegacyStart } from '../../../../../../plugins/kibana_legacy/public';
export interface RenderDeps {
core: LegacyCoreStart;
@@ -62,6 +63,7 @@ export interface RenderDeps {
embeddables: IEmbeddableStart;
localStorage: Storage;
share: SharePluginStart;
+ config: KibanaLegacyStart['config'];
}
let angularModuleInstance: IModule | null = null;
diff --git a/src/legacy/core_plugins/kibana/public/dashboard/np_ready/dashboard_app.tsx b/src/legacy/core_plugins/kibana/public/dashboard/np_ready/dashboard_app.tsx
index a48c165116304..0537e3f8fc456 100644
--- a/src/legacy/core_plugins/kibana/public/dashboard/np_ready/dashboard_app.tsx
+++ b/src/legacy/core_plugins/kibana/public/dashboard/np_ready/dashboard_app.tsx
@@ -88,7 +88,6 @@ export interface DashboardAppScope extends ng.IScope {
export function initDashboardAppDirective(app: any, deps: RenderDeps) {
app.directive('dashboardApp', function($injector: IInjector) {
const confirmModal = $injector.get('confirmModal');
- const config = deps.uiSettings;
return {
restrict: 'E',
@@ -106,7 +105,6 @@ export function initDashboardAppDirective(app: any, deps: RenderDeps) {
$route,
$scope,
$routeParams,
- config,
confirmModal,
indexPatterns: deps.npDataStart.indexPatterns,
kbnUrlStateStorage,
diff --git a/src/legacy/core_plugins/kibana/public/dashboard/np_ready/dashboard_app_controller.tsx b/src/legacy/core_plugins/kibana/public/dashboard/np_ready/dashboard_app_controller.tsx
index a8eec9c2504a7..624be02ac3b9d 100644
--- a/src/legacy/core_plugins/kibana/public/dashboard/np_ready/dashboard_app_controller.tsx
+++ b/src/legacy/core_plugins/kibana/public/dashboard/np_ready/dashboard_app_controller.tsx
@@ -90,7 +90,6 @@ export interface DashboardAppControllerDependencies extends RenderDeps {
$routeParams: any;
indexPatterns: IndexPatternsContract;
dashboardConfig: any;
- config: any;
confirmModal: ConfirmModalFn;
history: History;
kbnUrlStateStorage: IKbnUrlStateStorage;
@@ -109,7 +108,6 @@ export class DashboardAppController {
dashboardConfig,
localStorage,
indexPatterns,
- config,
confirmModal,
savedQueryService,
embeddables,
@@ -376,7 +374,7 @@ export class DashboardAppController {
dashboardStateManager.getQuery() || {
query: '',
language:
- localStorage.get('kibana.userQueryLanguage') || config.get('search:queryLanguage'),
+ localStorage.get('kibana.userQueryLanguage') || uiSettings.get('search:queryLanguage'),
},
queryFilter.getFilters()
);
@@ -493,7 +491,7 @@ export class DashboardAppController {
{
query: '',
language:
- localStorage.get('kibana.userQueryLanguage') || config.get('search:queryLanguage'),
+ localStorage.get('kibana.userQueryLanguage') || uiSettings.get('search:queryLanguage'),
},
queryFilter.getGlobalFilters()
);
diff --git a/src/legacy/core_plugins/kibana/public/dashboard/np_ready/legacy_app.js b/src/legacy/core_plugins/kibana/public/dashboard/np_ready/legacy_app.js
index abc0c789326f8..b0f70b7a0c68f 100644
--- a/src/legacy/core_plugins/kibana/public/dashboard/np_ready/legacy_app.js
+++ b/src/legacy/core_plugins/kibana/public/dashboard/np_ready/legacy_app.js
@@ -246,10 +246,10 @@ export function initDashboardApp(app, deps) {
},
})
.when(`dashboard/:tail*?`, {
- redirectTo: `/${deps.core.injectedMetadata.getInjectedVar('kbnDefaultAppId')}`,
+ redirectTo: `/${deps.config.defaultAppId}`,
})
.when(`dashboards/:tail*?`, {
- redirectTo: `/${deps.core.injectedMetadata.getInjectedVar('kbnDefaultAppId')}`,
+ redirectTo: `/${deps.config.defaultAppId}`,
});
});
}
diff --git a/src/legacy/core_plugins/kibana/public/dashboard/plugin.ts b/src/legacy/core_plugins/kibana/public/dashboard/plugin.ts
index ca4b18a37504c..227bcb53ca0df 100644
--- a/src/legacy/core_plugins/kibana/public/dashboard/plugin.ts
+++ b/src/legacy/core_plugins/kibana/public/dashboard/plugin.ts
@@ -107,6 +107,7 @@ export class DashboardPlugin implements Plugin {
chrome: contextCore.chrome,
addBasePath: contextCore.http.basePath.prepend,
uiSettings: contextCore.uiSettings,
+ config: kibana_legacy.config,
savedQueryService: npDataStart.query.savedQueries,
embeddables,
dashboardCapabilities: contextCore.application.capabilities.dashboard,
diff --git a/src/legacy/core_plugins/kibana/public/home/kibana_services.ts b/src/legacy/core_plugins/kibana/public/home/kibana_services.ts
index 4d9177735556d..90fb32a88d43c 100644
--- a/src/legacy/core_plugins/kibana/public/home/kibana_services.ts
+++ b/src/legacy/core_plugins/kibana/public/home/kibana_services.ts
@@ -29,7 +29,12 @@ import {
UiSettingsState,
} from 'kibana/public';
import { UiStatsMetricType } from '@kbn/analytics';
-import { Environment, FeatureCatalogueEntry } from '../../../../../plugins/home/public';
+import {
+ Environment,
+ FeatureCatalogueEntry,
+ HomePublicPluginSetup,
+} from '../../../../../plugins/home/public';
+import { KibanaLegacySetup } from '../../../../../plugins/kibana_legacy/public';
export interface HomeKibanaServices {
indexPatternService: any;
@@ -51,6 +56,8 @@ export interface HomeKibanaServices {
chrome: ChromeStart;
telemetryOptInProvider: any;
uiSettings: IUiSettingsClient;
+ config: KibanaLegacySetup['config'];
+ homeConfig: HomePublicPluginSetup['config'];
http: HttpStart;
savedObjectsClient: SavedObjectsClientContract;
toastNotifications: NotificationsSetup['toasts'];
diff --git a/src/legacy/core_plugins/kibana/public/home/np_ready/components/home.js b/src/legacy/core_plugins/kibana/public/home/np_ready/components/home.js
index 5c32a463da115..0c09c6c3c74fc 100644
--- a/src/legacy/core_plugins/kibana/public/home/np_ready/components/home.js
+++ b/src/legacy/core_plugins/kibana/public/home/np_ready/components/home.js
@@ -48,7 +48,7 @@ export class Home extends Component {
super(props);
const isWelcomeEnabled = !(
- getServices().getInjected('disableWelcomeScreen') ||
+ getServices().homeConfig.disableWelcomeScreen ||
props.localStorage.getItem(KEY_ENABLE_WELCOME) === 'false'
);
const currentOptInStatus = this.props.getOptInStatus();
diff --git a/src/legacy/core_plugins/kibana/public/home/np_ready/components/home.test.js b/src/legacy/core_plugins/kibana/public/home/np_ready/components/home.test.js
index 27d4f1a8b1c1f..d25a1f81dae5a 100644
--- a/src/legacy/core_plugins/kibana/public/home/np_ready/components/home.test.js
+++ b/src/legacy/core_plugins/kibana/public/home/np_ready/components/home.test.js
@@ -30,6 +30,7 @@ jest.mock('../../kibana_services', () => ({
getServices: () => ({
getBasePath: () => 'path',
getInjected: () => '',
+ homeConfig: { disableWelcomeScreen: false },
}),
}));
diff --git a/src/legacy/core_plugins/kibana/public/home/np_ready/components/home_app.js b/src/legacy/core_plugins/kibana/public/home/np_ready/components/home_app.js
index e49f00b949da5..f6c91b412381c 100644
--- a/src/legacy/core_plugins/kibana/public/home/np_ready/components/home_app.js
+++ b/src/legacy/core_plugins/kibana/public/home/np_ready/components/home_app.js
@@ -30,7 +30,7 @@ import { replaceTemplateStrings } from './tutorial/replace_template_strings';
import { getServices } from '../../kibana_services';
export function HomeApp({ directories }) {
const {
- getInjected,
+ config,
savedObjectsClient,
getBasePath,
addBasePath,
@@ -41,7 +41,7 @@ export function HomeApp({ directories }) {
const mlEnabled = environment.ml;
const apmUiEnabled = environment.apmUi;
- const defaultAppId = getInjected('kbnDefaultAppId', 'discover');
+ const defaultAppId = config.defaultAppId || 'discover';
const renderTutorialDirectory = props => {
return (
diff --git a/src/legacy/core_plugins/kibana/public/home/plugin.ts b/src/legacy/core_plugins/kibana/public/home/plugin.ts
index 502c8f45646cf..aec3835dc075d 100644
--- a/src/legacy/core_plugins/kibana/public/home/plugin.ts
+++ b/src/legacy/core_plugins/kibana/public/home/plugin.ts
@@ -27,6 +27,7 @@ import {
Environment,
FeatureCatalogueEntry,
HomePublicPluginStart,
+ HomePublicPluginSetup,
} from '../../../../../plugins/home/public';
export interface LegacyAngularInjectedDependencies {
@@ -59,6 +60,7 @@ export interface HomePluginSetupDependencies {
};
usageCollection: UsageCollectionSetup;
kibana_legacy: KibanaLegacySetup;
+ home: HomePublicPluginSetup;
}
export class HomePlugin implements Plugin {
@@ -69,6 +71,7 @@ export class HomePlugin implements Plugin {
setup(
core: CoreSetup,
{
+ home,
kibana_legacy,
usageCollection,
__LEGACY: { getAngularDependencies, ...legacyServices },
@@ -95,6 +98,8 @@ export class HomePlugin implements Plugin {
getBasePath: core.http.basePath.get,
indexPatternService: this.dataStart!.indexPatterns,
environment: this.environment!,
+ config: kibana_legacy.config,
+ homeConfig: home.config,
...angularDependencies,
});
const { renderApp } = await import('./np_ready/application');
diff --git a/src/legacy/core_plugins/kibana/public/kibana.js b/src/legacy/core_plugins/kibana/public/kibana.js
index 50f1702a2a6d0..f2868da947a75 100644
--- a/src/legacy/core_plugins/kibana/public/kibana.js
+++ b/src/legacy/core_plugins/kibana/public/kibana.js
@@ -20,7 +20,6 @@
// autoloading
// preloading (for faster webpack builds)
-import chrome from 'ui/chrome';
import routes from 'ui/routes';
import { uiModules } from 'ui/modules';
import { npSetup } from 'ui/new_platform';
@@ -64,8 +63,9 @@ localApplicationService.attachToAngular(routes);
routes.enable();
+const { config } = npSetup.plugins.kibana_legacy;
routes.otherwise({
- redirectTo: `/${chrome.getInjected('kbnDefaultAppId', 'discover')}`,
+ redirectTo: `/${config.defaultAppId || 'discover'}`,
});
uiModules.get('kibana').run(showAppRedirectNotification);
diff --git a/src/legacy/core_plugins/kibana/public/visualize/kibana_services.ts b/src/legacy/core_plugins/kibana/public/visualize/kibana_services.ts
index f7fd19e8288e7..15e9c73a39eff 100644
--- a/src/legacy/core_plugins/kibana/public/visualize/kibana_services.ts
+++ b/src/legacy/core_plugins/kibana/public/visualize/kibana_services.ts
@@ -34,6 +34,7 @@ import { VisualizationsStart } from '../../../visualizations/public';
import { SavedVisualizations } from './np_ready/types';
import { UsageCollectionSetup } from '../../../../../plugins/usage_collection/public';
import { Chrome } from './legacy_imports';
+import { KibanaLegacyStart } from '../../../../../plugins/kibana_legacy/public';
export interface VisualizeKibanaServices {
addBasePath: (url: string) => string;
@@ -52,6 +53,7 @@ export interface VisualizeKibanaServices {
savedVisualizations: SavedVisualizations;
share: SharePluginStart;
uiSettings: IUiSettingsClient;
+ config: KibanaLegacyStart['config'];
visualizeCapabilities: any;
visualizations: VisualizationsStart;
usageCollection?: UsageCollectionSetup;
diff --git a/src/legacy/core_plugins/kibana/public/visualize/np_ready/legacy_app.js b/src/legacy/core_plugins/kibana/public/visualize/np_ready/legacy_app.js
index d99771ccc912d..24055b9a2d9ed 100644
--- a/src/legacy/core_plugins/kibana/public/visualize/np_ready/legacy_app.js
+++ b/src/legacy/core_plugins/kibana/public/visualize/np_ready/legacy_app.js
@@ -173,7 +173,7 @@ export function initVisualizeApp(app, deps) {
},
})
.when(`visualize/:tail*?`, {
- redirectTo: `/${deps.core.injectedMetadata.getInjectedVar('kbnDefaultAppId')}`,
+ redirectTo: `/${deps.config.defaultAppId}`,
});
});
}
diff --git a/src/legacy/core_plugins/kibana/public/visualize/plugin.ts b/src/legacy/core_plugins/kibana/public/visualize/plugin.ts
index 26c6691a3613f..8e7487fee55f6 100644
--- a/src/legacy/core_plugins/kibana/public/visualize/plugin.ts
+++ b/src/legacy/core_plugins/kibana/public/visualize/plugin.ts
@@ -108,6 +108,7 @@ export class VisualizePlugin implements Plugin {
share,
toastNotifications: contextCore.notifications.toasts,
uiSettings: contextCore.uiSettings,
+ config: kibana_legacy.config,
visualizeCapabilities: contextCore.application.capabilities.visualize,
visualizations,
usageCollection,
diff --git a/src/legacy/ui/public/new_platform/__mocks__/helpers.ts b/src/legacy/ui/public/new_platform/__mocks__/helpers.ts
index c89ae9f8b3c9b..439ac9b5713df 100644
--- a/src/legacy/ui/public/new_platform/__mocks__/helpers.ts
+++ b/src/legacy/ui/public/new_platform/__mocks__/helpers.ts
@@ -27,6 +27,7 @@ import { inspectorPluginMock } from '../../../../../plugins/inspector/public/moc
import { uiActionsPluginMock } from '../../../../../plugins/ui_actions/public/mocks';
import { managementPluginMock } from '../../../../../plugins/management/public/mocks';
import { usageCollectionPluginMock } from '../../../../../plugins/usage_collection/public/mocks';
+import { kibanaLegacyPluginMock } from '../../../../../plugins/kibana_legacy/public/mocks';
import { chartPluginMock } from '../../../../../plugins/charts/public/mocks';
/* eslint-enable @kbn/eslint/no-restricted-paths */
@@ -40,6 +41,7 @@ export const pluginsMock = {
expressions: expressionsPluginMock.createSetupContract(),
uiActions: uiActionsPluginMock.createSetupContract(),
usageCollection: usageCollectionPluginMock.createSetupContract(),
+ kibana_legacy: kibanaLegacyPluginMock.createSetupContract(),
}),
createStart: () => ({
data: dataPluginMock.createStartContract(),
@@ -50,6 +52,7 @@ export const pluginsMock = {
expressions: expressionsPluginMock.createStartContract(),
uiActions: uiActionsPluginMock.createStartContract(),
management: managementPluginMock.createStartContract(),
+ kibana_legacy: kibanaLegacyPluginMock.createStartContract(),
}),
};
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 f98b8801d5266..c2c8b5a0fae7a 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
@@ -119,6 +119,9 @@ export const npSetup = {
kibana_legacy: {
registerLegacyApp: () => {},
forwardApp: () => {},
+ config: {
+ defaultAppId: 'home',
+ },
},
inspector: {
registerView: () => undefined,
@@ -140,6 +143,9 @@ export const npSetup = {
environment: {
update: sinon.fake(),
},
+ config: {
+ disableWelcomeScreen: false,
+ },
},
charts: {
theme: {
@@ -196,6 +202,9 @@ export const npStart = {
kibana_legacy: {
getApps: () => [],
getForwards: () => [],
+ config: {
+ defaultAppId: 'home',
+ },
},
data: {
autocomplete: {
@@ -297,6 +306,9 @@ export const npStart = {
environment: {
get: sinon.fake(),
},
+ config: {
+ disableWelcomeScreen: false,
+ },
},
navigation: {
ui: {
diff --git a/src/plugins/home/config.ts b/src/plugins/home/config.ts
new file mode 100644
index 0000000000000..149723a7ee5ae
--- /dev/null
+++ b/src/plugins/home/config.ts
@@ -0,0 +1,26 @@
+/*
+ * 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 { schema, TypeOf } from '@kbn/config-schema';
+
+export const configSchema = schema.object({
+ disableWelcomeScreen: schema.boolean({ defaultValue: false }),
+});
+
+export type ConfigSchema = TypeOf;
diff --git a/src/plugins/home/public/index.ts b/src/plugins/home/public/index.ts
index ca05c8b5f760e..114d442b40943 100644
--- a/src/plugins/home/public/index.ts
+++ b/src/plugins/home/public/index.ts
@@ -17,6 +17,8 @@
* under the License.
*/
+import { PluginInitializerContext } from 'kibana/public';
+
export {
FeatureCatalogueSetup,
FeatureCatalogueStart,
@@ -26,4 +28,5 @@ export {
export { FeatureCatalogueEntry, FeatureCatalogueCategory, Environment } from './services';
import { HomePublicPlugin } from './plugin';
-export const plugin = () => new HomePublicPlugin();
+export const plugin = (initializerContext: PluginInitializerContext) =>
+ new HomePublicPlugin(initializerContext);
diff --git a/src/plugins/home/public/plugin.test.ts b/src/plugins/home/public/plugin.test.ts
index 34502d7d2c6cd..fa44a110c63b7 100644
--- a/src/plugins/home/public/plugin.test.ts
+++ b/src/plugins/home/public/plugin.test.ts
@@ -19,6 +19,9 @@
import { registryMock, environmentMock } from './plugin.test.mocks';
import { HomePublicPlugin } from './plugin';
+import { coreMock } from '../../../core/public/mocks';
+
+const mockInitializerContext = coreMock.createPluginInitializerContext();
describe('HomePublicPlugin', () => {
beforeEach(() => {
@@ -30,13 +33,13 @@ describe('HomePublicPlugin', () => {
describe('setup', () => {
test('wires up and returns registry', async () => {
- const setup = await new HomePublicPlugin().setup();
+ const setup = await new HomePublicPlugin(mockInitializerContext).setup();
expect(setup).toHaveProperty('featureCatalogue');
expect(setup.featureCatalogue).toHaveProperty('register');
});
test('wires up and returns environment service', async () => {
- const setup = await new HomePublicPlugin().setup();
+ const setup = await new HomePublicPlugin(mockInitializerContext).setup();
expect(setup).toHaveProperty('environment');
expect(setup.environment).toHaveProperty('update');
});
@@ -44,7 +47,7 @@ describe('HomePublicPlugin', () => {
describe('start', () => {
test('wires up and returns registry', async () => {
- const service = new HomePublicPlugin();
+ const service = new HomePublicPlugin(mockInitializerContext);
await service.setup();
const core = { application: { capabilities: { catalogue: {} } } } as any;
const start = await service.start(core);
@@ -55,7 +58,7 @@ describe('HomePublicPlugin', () => {
});
test('wires up and returns environment service', async () => {
- const service = new HomePublicPlugin();
+ const service = new HomePublicPlugin(mockInitializerContext);
await service.setup();
const start = await service.start({
application: { capabilities: { catalogue: {} } },
diff --git a/src/plugins/home/public/plugin.ts b/src/plugins/home/public/plugin.ts
index 39a7f23826900..fe68dbc3e7e49 100644
--- a/src/plugins/home/public/plugin.ts
+++ b/src/plugins/home/public/plugin.ts
@@ -17,7 +17,8 @@
* under the License.
*/
-import { CoreStart, Plugin } from 'src/core/public';
+import { CoreStart, Plugin, PluginInitializerContext } from 'kibana/public';
+
import {
EnvironmentService,
EnvironmentServiceSetup,
@@ -26,19 +27,23 @@ import {
FeatureCatalogueRegistrySetup,
FeatureCatalogueRegistryStart,
} from './services';
+import { ConfigSchema } from '../config';
export class HomePublicPlugin implements Plugin {
private readonly featuresCatalogueRegistry = new FeatureCatalogueRegistry();
private readonly environmentService = new EnvironmentService();
- public async setup() {
+ constructor(private readonly initializerContext: PluginInitializerContext) {}
+
+ public setup(): HomePublicPluginSetup {
return {
featureCatalogue: { ...this.featuresCatalogueRegistry.setup() },
environment: { ...this.environmentService.setup() },
+ config: this.initializerContext.config.get(),
};
}
- public async start(core: CoreStart) {
+ public start(core: CoreStart): HomePublicPluginStart {
return {
featureCatalogue: {
...this.featuresCatalogueRegistry.start({
@@ -71,6 +76,7 @@ export interface HomePublicPluginSetup {
* @deprecated
*/
environment: EnvironmentSetup;
+ config: ConfigSchema;
}
/** @public */
diff --git a/src/plugins/home/server/index.ts b/src/plugins/home/server/index.ts
index 0961c729698b9..02f4c91a414cc 100644
--- a/src/plugins/home/server/index.ts
+++ b/src/plugins/home/server/index.ts
@@ -20,8 +20,19 @@
export { HomeServerPluginSetup, HomeServerPluginStart } from './plugin';
export { TutorialProvider } from './services';
export { SampleDatasetProvider, SampleDataRegistrySetup } from './services';
-import { PluginInitializerContext } from 'src/core/server';
+import { PluginInitializerContext, PluginConfigDescriptor } from 'kibana/server';
import { HomeServerPlugin } from './plugin';
+import { configSchema, ConfigSchema } from '../config';
+
+export const config: PluginConfigDescriptor = {
+ exposeToBrowser: {
+ disableWelcomeScreen: true,
+ },
+ schema: configSchema,
+ deprecations: ({ renameFromRoot }) => [
+ renameFromRoot('kibana.disableWelcomeScreen', 'home.disableWelcomeScreen'),
+ ],
+};
export const plugin = (initContext: PluginInitializerContext) => new HomeServerPlugin(initContext);
diff --git a/src/plugins/home/server/plugin.ts b/src/plugins/home/server/plugin.ts
index 23c236764cddc..d2f2d7041024e 100644
--- a/src/plugins/home/server/plugin.ts
+++ b/src/plugins/home/server/plugin.ts
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-import { CoreSetup, Plugin, PluginInitializerContext } from 'src/core/server';
+import { CoreSetup, Plugin, PluginInitializerContext } from 'kibana/server';
import {
TutorialsRegistry,
TutorialsRegistrySetup,
diff --git a/src/plugins/kibana_legacy/config.ts b/src/plugins/kibana_legacy/config.ts
new file mode 100644
index 0000000000000..291f8813ecfb9
--- /dev/null
+++ b/src/plugins/kibana_legacy/config.ts
@@ -0,0 +1,26 @@
+/*
+ * 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 { schema, TypeOf } from '@kbn/config-schema';
+
+export const configSchema = schema.object({
+ defaultAppId: schema.string({ defaultValue: 'home' }),
+});
+
+export type ConfigSchema = TypeOf;
diff --git a/src/plugins/kibana_legacy/kibana.json b/src/plugins/kibana_legacy/kibana.json
index 26ee6db3ba06a..b6d11309a4f96 100644
--- a/src/plugins/kibana_legacy/kibana.json
+++ b/src/plugins/kibana_legacy/kibana.json
@@ -1,6 +1,6 @@
{
"id": "kibana_legacy",
"version": "kibana",
- "server": false,
+ "server": true,
"ui": true
}
diff --git a/src/plugins/kibana_legacy/public/index.ts b/src/plugins/kibana_legacy/public/index.ts
index 4cb30be8917ac..de8788808e74c 100644
--- a/src/plugins/kibana_legacy/public/index.ts
+++ b/src/plugins/kibana_legacy/public/index.ts
@@ -20,8 +20,7 @@
import { PluginInitializerContext } from 'kibana/public';
import { KibanaLegacyPlugin } from './plugin';
-export function plugin(initializerContext: PluginInitializerContext) {
- return new KibanaLegacyPlugin();
-}
+export const plugin = (initializerContext: PluginInitializerContext) =>
+ new KibanaLegacyPlugin(initializerContext);
export * from './plugin';
diff --git a/src/plugins/kibana_legacy/public/mocks.ts b/src/plugins/kibana_legacy/public/mocks.ts
new file mode 100644
index 0000000000000..b6287dd9d9a55
--- /dev/null
+++ b/src/plugins/kibana_legacy/public/mocks.ts
@@ -0,0 +1,44 @@
+/*
+ * 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 { KibanaLegacyPlugin } from './plugin';
+
+export type Setup = jest.Mocked>;
+export type Start = jest.Mocked>;
+
+const createSetupContract = (): Setup => ({
+ forwardApp: jest.fn(),
+ registerLegacyApp: jest.fn(),
+ config: {
+ defaultAppId: 'home',
+ },
+});
+
+const createStartContract = (): Start => ({
+ getApps: jest.fn(),
+ getForwards: jest.fn(),
+ config: {
+ defaultAppId: 'home',
+ },
+});
+
+export const kibanaLegacyPluginMock = {
+ createSetupContract,
+ createStartContract,
+};
diff --git a/src/plugins/kibana_legacy/public/plugin.ts b/src/plugins/kibana_legacy/public/plugin.ts
index cb95088320d7b..b9a61a1c9b200 100644
--- a/src/plugins/kibana_legacy/public/plugin.ts
+++ b/src/plugins/kibana_legacy/public/plugin.ts
@@ -17,7 +17,9 @@
* under the License.
*/
-import { App } from 'kibana/public';
+import { App, PluginInitializerContext } from 'kibana/public';
+
+import { ConfigSchema } from '../config';
interface ForwardDefinition {
legacyAppId: string;
@@ -29,6 +31,8 @@ export class KibanaLegacyPlugin {
private apps: App[] = [];
private forwards: ForwardDefinition[] = [];
+ constructor(private readonly initializerContext: PluginInitializerContext) {}
+
public setup() {
return {
/**
@@ -77,6 +81,8 @@ export class KibanaLegacyPlugin {
) => {
this.forwards.push({ legacyAppId, newAppId, ...options });
},
+
+ config: this.initializerContext.config.get(),
};
}
@@ -92,6 +98,7 @@ export class KibanaLegacyPlugin {
* Just exported for wiring up with legacy platform, should not be used.
*/
getForwards: () => this.forwards,
+ config: this.initializerContext.config.get(),
};
}
}
diff --git a/src/plugins/kibana_legacy/server/index.ts b/src/plugins/kibana_legacy/server/index.ts
new file mode 100644
index 0000000000000..4d0fe8364a66c
--- /dev/null
+++ b/src/plugins/kibana_legacy/server/index.ts
@@ -0,0 +1,41 @@
+/*
+ * 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 { CoreSetup, CoreStart, PluginConfigDescriptor } from 'kibana/server';
+
+import { configSchema, ConfigSchema } from '../config';
+
+export const config: PluginConfigDescriptor = {
+ exposeToBrowser: {
+ defaultAppId: true,
+ },
+ schema: configSchema,
+ deprecations: ({ renameFromRoot }) => [
+ // TODO: Remove deprecation once defaultAppId is deleted
+ renameFromRoot('kibana.defaultAppId', 'kibana_legacy.defaultAppId', true),
+ ],
+};
+
+class Plugin {
+ public setup(core: CoreSetup) {}
+
+ public start(core: CoreStart) {}
+}
+
+export const plugin = () => new Plugin();
diff --git a/src/plugins/management/public/management_service.test.ts b/src/plugins/management/public/management_service.test.ts
index 854406a10335b..b34e76474cec2 100644
--- a/src/plugins/management/public/management_service.test.ts
+++ b/src/plugins/management/public/management_service.test.ts
@@ -19,12 +19,13 @@
import { ManagementService } from './management_service';
import { coreMock } from '../../../core/public/mocks';
+import { npSetup } from '../../../legacy/ui/public/new_platform/__mocks__';
-const mockKibanaLegacy = { registerLegacyApp: () => {}, forwardApp: () => {} };
+jest.mock('ui/new_platform');
test('Provides default sections', () => {
const service = new ManagementService().setup(
- mockKibanaLegacy,
+ npSetup.plugins.kibana_legacy,
() => {},
coreMock.createSetup().getStartServices
);
@@ -36,7 +37,7 @@ test('Provides default sections', () => {
test('Register section, enable and disable', () => {
const service = new ManagementService().setup(
- mockKibanaLegacy,
+ npSetup.plugins.kibana_legacy,
() => {},
coreMock.createSetup().getStartServices
);
diff --git a/test/common/config.js b/test/common/config.js
index 29d4bbf10a6ce..faf8cef027170 100644
--- a/test/common/config.js
+++ b/test/common/config.js
@@ -54,7 +54,7 @@ export default function() {
`--elasticsearch.hosts=${formatUrl(servers.elasticsearch)}`,
`--elasticsearch.username=${kibanaServerTestUser.username}`,
`--elasticsearch.password=${kibanaServerTestUser.password}`,
- `--kibana.disableWelcomeScreen=true`,
+ `--home.disableWelcomeScreen=true`,
'--telemetry.banner=false',
`--server.maxPayloadBytes=1679958`,
// newsfeed mock service
diff --git a/x-pack/legacy/plugins/dashboard_mode/public/dashboard_viewer.js b/x-pack/legacy/plugins/dashboard_mode/public/dashboard_viewer.js
index ebae49f994723..4215f96c8de4a 100644
--- a/x-pack/legacy/plugins/dashboard_mode/public/dashboard_viewer.js
+++ b/x-pack/legacy/plugins/dashboard_mode/public/dashboard_viewer.js
@@ -55,10 +55,12 @@ chrome.setRootController('kibana', function() {
uiModules.get('kibana').run(showAppRedirectNotification);
-// If there is a configured kbnDefaultAppId, and it is a dashboard ID, we'll
-// show that dashboard, otherwise, we'll show the default dasbhoard landing page.
+/**
+ * If there is a configured `kibana.defaultAppId`, and it is a dashboard ID, we'll
+ * show that dashboard, otherwise, we'll show the default dasbhoard landing page.
+ */
function defaultUrl() {
- const defaultAppId = chrome.getInjected('kbnDefaultAppId', '');
+ const defaultAppId = npStart.plugins.kibana_legacy.config.defaultAppId || '';
const isDashboardId = defaultAppId.startsWith(dashboardAppIdPrefix());
return isDashboardId ? `/${defaultAppId}` : DashboardConstants.LANDING_PAGE_PATH;
}