kibana/x-pack/plugins/lens/public/plugin.ts
Stratoula Kalafateli 5710f6763b
[Visualize] New visualization wizard (#79627)
* [Visualizations] New vis wizard

* Update functional tests

* Create oss plugins for maps and lens and unregister alias function

* Add new plugins to .i18nrc.json

* Add readme and codeowners to the new plugins

* update docs

* fix tests

* fix types

* fixes

* Update development docs

* fix oss functional tests

* Fix jest and x-pack functional tests

* Fix functional test

* changes on the layout

* Cleanup and responsiveness

* cleanup unecessary code

* add common folder to the new OSS plugins

* remove unecessary translations

* Update limits.yml file

* Fix basic label

* Add experimental badge on controls vis

* Nice improvements

* fixes

* Improving styles

* Making modal go full height on smaller screens

* Fixing sass lint warning

* fix lint error

* fix internationalization error

* PR fixes

* PR changes

* Use useCallback where possible

* Remove translations that need to be translated again

* Lazy Load wizard modal

* Remove legacyMapVisualizationWarning

* Import the OSS plugins constants from the plugins

* Export constant from lensOss

* Change the new oss plugins from OSS to Oss

* Add a new line to the kibana.json files of the new plugins

* New nit fix

* Fix spaces

* Change the texts for the first step of the modal

* Fix test

* Fixes some of the PR comments

* Add onClick funtionality to the entire aggregation based card

* Cards description changes, introduce a copyFromRoot method to solve the problem of when disabling the x-pack plugic, to also disable the oss

* Create new FTR for testing the functionality of the wizard when both maps and lens apps are disabled

* fix eslint error

* Change groupTitles and descriptions

* Change input vis description

* Remove the copyFromRoot from the signature of the ConfigDeprecationFactory and export it from the main entrypoint

* Make the disabled cards badge clickable

* Changes from code review

* Fix functional tests failures

* Rename groupTitle to titleInWizard to be more specific

* Change vega vis note

* minor design changes

* fix problem with plugins list docs

* Retrieve maps and lens landing page from docs service and add tracking url param

* Fix funtional test for the new dashboard flow

* Fix logic in alias registry for removing the discardOnRegister alias

* no need to remove the alias entry from the discardOnRegister array

Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com>
Co-authored-by: miukimiu <elizabet.oliveira@elastic.co>
2020-11-06 18:03:44 +02:00

193 lines
7 KiB
TypeScript

/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License;
* you may not use this file except in compliance with the Elastic License.
*/
import { AppMountParameters, CoreSetup, CoreStart } from 'kibana/public';
import { DataPublicPluginSetup, DataPublicPluginStart } from 'src/plugins/data/public';
import { EmbeddableSetup, EmbeddableStart } from 'src/plugins/embeddable/public';
import { DashboardStart } from 'src/plugins/dashboard/public';
import { ExpressionsSetup, ExpressionsStart } from 'src/plugins/expressions/public';
import { VisualizationsSetup, VisualizationsStart } from 'src/plugins/visualizations/public';
import { NavigationPublicPluginStart } from 'src/plugins/navigation/public';
import { UrlForwardingSetup } from 'src/plugins/url_forwarding/public';
import { GlobalSearchPluginSetup } from '../../global_search/public';
import { ChartsPluginSetup, ChartsPluginStart } from '../../../../src/plugins/charts/public';
import { EditorFrameService } from './editor_frame_service';
import {
IndexPatternDatasource,
IndexPatternDatasourceSetupPlugins,
} from './indexpattern_datasource';
import { XyVisualization, XyVisualizationPluginSetupPlugins } from './xy_visualization';
import { MetricVisualization, MetricVisualizationPluginSetupPlugins } from './metric_visualization';
import {
DatatableVisualization,
DatatableVisualizationPluginSetupPlugins,
} from './datatable_visualization';
import { PieVisualization, PieVisualizationPluginSetupPlugins } from './pie_visualization';
import { AppNavLinkStatus } from '../../../../src/core/public';
import type { SavedObjectTaggingPluginStart } from '../../saved_objects_tagging/public';
import {
UiActionsStart,
ACTION_VISUALIZE_FIELD,
VISUALIZE_FIELD_TRIGGER,
} from '../../../../src/plugins/ui_actions/public';
import { NOT_INTERNATIONALIZED_PRODUCT_NAME } from '../common';
import { PLUGIN_ID_OSS } from '../../../../src/plugins/lens_oss/common/constants';
import { EditorFrameStart } from './types';
import { getLensAliasConfig } from './vis_type_alias';
import { visualizeFieldAction } from './trigger_actions/visualize_field_actions';
import { getSearchProvider } from './search_provider';
import { LensAttributeService } from './lens_attribute_service';
export interface LensPluginSetupDependencies {
urlForwarding: UrlForwardingSetup;
expressions: ExpressionsSetup;
data: DataPublicPluginSetup;
embeddable?: EmbeddableSetup;
visualizations: VisualizationsSetup;
charts: ChartsPluginSetup;
globalSearch?: GlobalSearchPluginSetup;
}
export interface LensPluginStartDependencies {
data: DataPublicPluginStart;
expressions: ExpressionsStart;
navigation: NavigationPublicPluginStart;
uiActions: UiActionsStart;
dashboard: DashboardStart;
visualizations: VisualizationsStart;
embeddable: EmbeddableStart;
charts: ChartsPluginStart;
savedObjectsTagging?: SavedObjectTaggingPluginStart;
}
export class LensPlugin {
private datatableVisualization: DatatableVisualization;
private editorFrameService: EditorFrameService;
private createEditorFrame: EditorFrameStart['createInstance'] | null = null;
private attributeService: (() => Promise<LensAttributeService>) | null = null;
private indexpatternDatasource: IndexPatternDatasource;
private xyVisualization: XyVisualization;
private metricVisualization: MetricVisualization;
private pieVisualization: PieVisualization;
private stopReportManager?: () => void;
constructor() {
this.datatableVisualization = new DatatableVisualization();
this.editorFrameService = new EditorFrameService();
this.indexpatternDatasource = new IndexPatternDatasource();
this.xyVisualization = new XyVisualization();
this.metricVisualization = new MetricVisualization();
this.pieVisualization = new PieVisualization();
}
setup(
core: CoreSetup<LensPluginStartDependencies, void>,
{
urlForwarding,
expressions,
data,
embeddable,
visualizations,
charts,
globalSearch,
}: LensPluginSetupDependencies
) {
this.attributeService = async () => {
const { getLensAttributeService } = await import('./async_services');
const [coreStart, startDependencies] = await core.getStartServices();
return getLensAttributeService(coreStart, startDependencies);
};
const editorFrameSetupInterface = this.editorFrameService.setup(
core,
{
data,
embeddable,
charts,
expressions,
},
this.attributeService
);
const dependencies: IndexPatternDatasourceSetupPlugins &
XyVisualizationPluginSetupPlugins &
DatatableVisualizationPluginSetupPlugins &
MetricVisualizationPluginSetupPlugins &
PieVisualizationPluginSetupPlugins = {
expressions,
data,
charts,
editorFrame: editorFrameSetupInterface,
formatFactory: core
.getStartServices()
.then(([_, { data: dataStart }]) => dataStart.fieldFormats.deserialize),
};
this.indexpatternDatasource.setup(core, dependencies);
this.xyVisualization.setup(core, dependencies);
this.datatableVisualization.setup(core, dependencies);
this.metricVisualization.setup(core, dependencies);
this.pieVisualization.setup(core, dependencies);
visualizations.registerAlias(getLensAliasConfig());
const getByValueFeatureFlag = async () => {
const [, deps] = await core.getStartServices();
return deps.dashboard.dashboardFeatureFlagConfig;
};
core.application.register({
id: 'lens',
title: NOT_INTERNATIONALIZED_PRODUCT_NAME,
navLinkStatus: AppNavLinkStatus.hidden,
mount: async (params: AppMountParameters) => {
const { mountApp, stopReportManager } = await import('./async_services');
this.stopReportManager = stopReportManager;
return mountApp(core, params, {
createEditorFrame: this.createEditorFrame!,
attributeService: this.attributeService!,
getByValueFeatureFlag,
});
},
});
if (globalSearch) {
globalSearch.registerResultProvider(
getSearchProvider(
core.getStartServices().then(
([
{
application: { capabilities },
},
]) => capabilities
)
)
);
}
urlForwarding.forwardApp('lens', 'lens');
}
start(core: CoreStart, startDependencies: LensPluginStartDependencies) {
this.createEditorFrame = this.editorFrameService.start(core, startDependencies).createInstance;
// unregisters the OSS alias
startDependencies.visualizations.unRegisterAlias(PLUGIN_ID_OSS);
// unregisters the Visualize action and registers the lens one
if (startDependencies.uiActions.hasAction(ACTION_VISUALIZE_FIELD)) {
startDependencies.uiActions.unregisterAction(ACTION_VISUALIZE_FIELD);
}
startDependencies.uiActions.addTriggerAction(
VISUALIZE_FIELD_TRIGGER,
visualizeFieldAction(core.application)
);
}
stop() {
if (this.stopReportManager) {
this.stopReportManager();
}
}
}