Skip to content

Commit

Permalink
Combine visualizations and visualize plugins (#121550)
Browse files Browse the repository at this point in the history
* [WIP] Combine visualizations and visualize plugins

* Revert some changes and do some refactoring

* Refactor some code

* Fix some tests

* Fix functional tests and some jest test cases

* Update telemetry

* Fix get_visualization_instance.test and plugin-list.asciidoc

* Refactor some code

* fix CI

* Add visualizations to vis_default_editor tsconfig

* Revert changes related to telemetry and permissions

* Add dashboard to timeseries tsconfig.json

* Update limits file

* Update translation keys

* Add capabilitiesProvider back to server and replace visEditorsRegistry getter and setter with service

* Update mocks.ts

* Revert changes related to visEditorsRegistry

* Get rid of visEditorsRegistry getter and setter

* Remove dashboard from timeseries/tsconfig.json

* Return back dashboard dependency to timeseries/tsconfig.json, rename applicaion folder to visualize_app and APP_NAME to VISUALIZE_APP_NAME, revert types.ts

* Remove comma in .i18nrc.json

Co-authored-by: Kibana Machine <[email protected]>
Co-authored-by: Alexey Antonov <[email protected]>
  • Loading branch information
3 people authored Jan 12, 2022
1 parent b34476e commit a9ec1be
Show file tree
Hide file tree
Showing 86 changed files with 687 additions and 967 deletions.
3 changes: 1 addition & 2 deletions .i18nrc.json
Original file line number Diff line number Diff line change
Expand Up @@ -77,8 +77,7 @@
"visTypeVega": "src/plugins/vis_types/vega",
"visTypeVislib": "src/plugins/vis_types/vislib",
"visTypeXy": "src/plugins/vis_types/xy",
"visualizations": "src/plugins/visualizations",
"visualize": "src/plugins/visualize"
"visualizations": "src/plugins/visualizations"
},
"translations": []
}
4 changes: 0 additions & 4 deletions docs/developer/plugin-list.asciidoc
Original file line number Diff line number Diff line change
Expand Up @@ -342,10 +342,6 @@ The plugin exposes the static DefaultEditorController class to consume.
|WARNING: Missing README.
|{kib-repo}blob/{branch}/src/plugins/visualize[visualize]
|WARNING: Missing README.
|===
[discrete]
Expand Down
1 change: 0 additions & 1 deletion packages/kbn-optimizer/limits.yml
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,6 @@ pageLoadAssetSize:
visTypeVislib: 242838
visTypeXy: 113478
visualizations: 90000
visualize: 57431
watcher: 43598
runtimeFields: 41752
stackAlerts: 29684
Expand Down
2 changes: 1 addition & 1 deletion src/plugins/vis_default_editor/kibana.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"id": "visDefaultEditor",
"version": "kibana",
"ui": true,
"optionalPlugins": ["visualize"],
"optionalPlugins": ["visualizations"],
"requiredBundles": ["kibanaUtils", "kibanaReact", "data", "fieldFormats", "discover", "esUiShared"],
"owner": {
"name": "Vis Editors",
Expand Down
7 changes: 5 additions & 2 deletions src/plugins/vis_default_editor/public/default_editor.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,11 @@ import React, { useEffect, useRef, useState, useCallback } from 'react';
import { EventEmitter } from 'events';
import { EuiResizableContainer } from '@elastic/eui';

import { Vis, VisualizeEmbeddableContract } from 'src/plugins/visualizations/public';
import { EditorRenderProps } from 'src/plugins/visualize/public';
import {
Vis,
VisualizeEmbeddableContract,
EditorRenderProps,
} from 'src/plugins/visualizations/public';
import { KibanaContextProvider } from '../../kibana_react/public';
import { Storage } from '../../kibana_utils/public';

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import { EventEmitter } from 'events';
import { EuiErrorBoundary, EuiLoadingChart } from '@elastic/eui';

import { Vis, VisualizeEmbeddableContract } from 'src/plugins/visualizations/public';
import { IEditorController, EditorRenderProps } from 'src/plugins/visualize/public';
import { IEditorController, EditorRenderProps } from 'src/plugins/visualizations/public';
import { KibanaThemeProvider } from '../../kibana_react/public';
import { getTheme } from './services';

Expand Down
10 changes: 5 additions & 5 deletions src/plugins/vis_default_editor/public/plugin.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,21 +8,21 @@

import { CoreSetup, Plugin } from 'kibana/public';

import { VisualizePluginSetup } from '../../visualize/public';
import { DefaultEditorController } from './default_editor_controller';
import { setTheme } from './services';
import type { VisualizationsSetup } from '../../visualizations/public';

export interface VisDefaultEditorSetupDependencies {
visualize: VisualizePluginSetup;
visualizations: VisualizationsSetup;
}

export class VisDefaultEditorPlugin
implements Plugin<void, void, VisDefaultEditorSetupDependencies, {}>
{
public setup(core: CoreSetup, { visualize }: VisDefaultEditorSetupDependencies) {
public setup(core: CoreSetup, { visualizations }: VisDefaultEditorSetupDependencies) {
setTheme(core.theme);
if (visualize) {
visualize.visEditorsRegistry.registerDefault(DefaultEditorController);
if (visualizations) {
visualizations.visEditorsRegistry.registerDefault(DefaultEditorController);
}
}

Expand Down
3 changes: 2 additions & 1 deletion src/plugins/vis_default_editor/tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,8 @@
"references": [
{ "path": "../../core/tsconfig.json" },
{ "path": "../data/tsconfig.json" },
{ "path": "../visualize/tsconfig.json" },
{ "path": "../visualizations/tsconfig.json" },
{ "path": "../discover/tsconfig.json" },
{ "path": "../kibana_utils/tsconfig.json" },
{ "path": "../kibana_react/tsconfig.json" },
{ "path": "../field_formats/tsconfig.json" }
Expand Down
2 changes: 1 addition & 1 deletion src/plugins/vis_types/timeseries/kibana.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
"kibanaVersion": "kibana",
"server": true,
"ui": true,
"requiredPlugins": ["charts", "data", "expressions", "visualizations", "visualize"],
"requiredPlugins": ["charts", "data", "expressions", "visualizations"],
"optionalPlugins": ["home","usageCollection"],
"requiredBundles": ["kibanaUtils", "kibanaReact", "fieldFormats"],
"owner": {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ import { fetchFields, VisFields } from '../lib/fetch_fields';
import { getDataStart, getCoreStart } from '../../services';
import type { TimeseriesVisParams } from '../../types';
import { UseIndexPatternModeCallout } from './use_index_patter_mode_callout';
import type { EditorRenderProps } from '../../../../../visualize/public';
import type { EditorRenderProps } from '../../../../../visualizations/public';

const VIS_STATE_DEBOUNCE_DELAY = 200;
const APP_NAME = 'VisEditor';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,12 @@
import React from 'react';
import { render, unmountComponentAtNode } from 'react-dom';
import type { EventEmitter } from 'events';
import type { Vis, VisualizeEmbeddableContract } from 'src/plugins/visualizations/public';
import type { IEditorController, EditorRenderProps } from 'src/plugins/visualize/public';

import type {
Vis,
VisualizeEmbeddableContract,
IEditorController,
EditorRenderProps,
} from 'src/plugins/visualizations/public';
import { getUISettings, getI18n, getCoreStart } from '../services';
import { VisEditor } from './components/vis_editor_lazy';
import type { TimeseriesVisParams } from '../types';
Expand Down
9 changes: 2 additions & 7 deletions src/plugins/vis_types/timeseries/public/plugin.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
import { PluginInitializerContext, CoreSetup, CoreStart, Plugin } from 'kibana/public';
import { Plugin as ExpressionsPublicPlugin } from '../../../expressions/public';
import { VisualizationsSetup } from '../../../visualizations/public';
import { VisualizePluginSetup } from '../../../visualize/public';
import { EditorController, TSVB_EDITOR_NAME } from './application/editor_controller';

import { createMetricsFn } from './metrics_fn';
Expand All @@ -30,7 +29,6 @@ import { getTimeseriesVisRenderer } from './timeseries_vis_renderer';
export interface MetricsPluginSetupDependencies {
expressions: ReturnType<ExpressionsPublicPlugin['setup']>;
visualizations: VisualizationsSetup;
visualize: VisualizePluginSetup;
}

/** @internal */
Expand All @@ -47,11 +45,8 @@ export class MetricsPlugin implements Plugin<void, void> {
this.initializerContext = initializerContext;
}

public setup(
core: CoreSetup,
{ expressions, visualizations, visualize }: MetricsPluginSetupDependencies
) {
visualize.visEditorsRegistry.register(TSVB_EDITOR_NAME, EditorController);
public setup(core: CoreSetup, { expressions, visualizations }: MetricsPluginSetupDependencies) {
visualizations.visEditorsRegistry.register(TSVB_EDITOR_NAME, EditorController);
expressions.registerFunction(createMetricsFn);
expressions.registerRenderer(
getTimeseriesVisRenderer({
Expand Down
2 changes: 1 addition & 1 deletion src/plugins/vis_types/timeseries/tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
{ "path": "../../data/tsconfig.json" },
{ "path": "../../expressions/tsconfig.json" },
{ "path": "../../visualizations/tsconfig.json" },
{ "path": "../../visualize/tsconfig.json" },
{ "path": "../../dashboard/tsconfig.json" },
{ "path": "../../kibana_utils/tsconfig.json" },
{ "path": "../../kibana_react/tsconfig.json" },
{ "path": "../../usage_collection/tsconfig.json" },
Expand Down
16 changes: 16 additions & 0 deletions src/plugins/visualizations/common/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,19 @@

export const VISUALIZE_ENABLE_LABS_SETTING = 'visualize:enableLabs';
export const VISUALIZE_EMBEDDABLE_TYPE = 'visualization';

export const STATE_STORAGE_KEY = '_a';
export const GLOBAL_STATE_STORAGE_KEY = '_g';

export const VISUALIZE_APP_NAME = 'visualize';

export const VisualizeConstants = {
VISUALIZE_BASE_PATH: '/app/visualize',
LANDING_PAGE_PATH: '/',
WIZARD_STEP_1_PAGE_PATH: '/new',
WIZARD_STEP_2_PAGE_PATH: '/new/configure',
CREATE_PATH: '/create',
EDIT_PATH: '/edit',
EDIT_BY_VALUE_PATH: '/edit_by_value',
APP_ID: 'visualize',
};
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ import type { LocatorDefinition, LocatorPublic } from 'src/plugins/share/common'
import { isFilterPinned } from '../../data/common';
import { url } from '../../kibana_utils/common';
import { GLOBAL_STATE_STORAGE_KEY, STATE_STORAGE_KEY, VisualizeConstants } from './constants';
import { PureVisState } from './types';
import type { SavedVisState } from './types';

const removeEmptyKeys = (o: Record<string, Serializable>): Record<string, Serializable> =>
omitBy(o, (v) => v == null);
Expand Down Expand Up @@ -59,7 +59,7 @@ export type VisualizeLocatorParams = {
*
* @note This is required to navigate to "create" page (i.e., when no `visId` has been provided).
*/
vis?: PureVisState;
vis?: SavedVisState;

/**
* Whether this visualization is linked a saved search.
Expand Down
9 changes: 6 additions & 3 deletions src/plugins/visualizations/kibana.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,15 @@
"data",
"expressions",
"uiActions",
"urlForwarding",
"navigation",
"embeddable",
"inspector",
"savedObjects"
"savedObjects",
"presentationUtil"
],
"optionalPlugins": ["usageCollection", "spaces", "savedObjectsTaggingOss"],
"requiredBundles": ["kibanaUtils", "discover", "kibanaReact"],
"optionalPlugins": [ "home", "share", "usageCollection", "spaces", "savedObjectsTaggingOss"],
"requiredBundles": ["kibanaUtils", "discover", "kibanaReact", "home"],
"extraPublicDirs": ["common/constants", "common/prepare_log_table", "common/expression_functions"],
"owner": {
"name": "Vis Editors",
Expand Down
2 changes: 2 additions & 0 deletions src/plugins/visualizations/public/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -55,3 +55,5 @@ export type {
HistogramParams,
} from '../common/expression_functions/xy_dimension';
export { urlFor, getFullPath } from './utils/saved_visualize_utils';

export type { IEditorController, EditorRenderProps } from './visualize_app/types';
17 changes: 8 additions & 9 deletions src/plugins/visualizations/public/mocks.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,16 @@ import { usageCollectionPluginMock } from '../../../plugins/usage_collection/pub
import { uiActionsPluginMock } from '../../../plugins/ui_actions/public/mocks';
import { inspectorPluginMock } from '../../../plugins/inspector/public/mocks';
import { savedObjectsPluginMock } from '../../../plugins/saved_objects/public/mocks';
import { urlForwardingPluginMock } from '../../../plugins/url_forwarding/public/mocks';
import { navigationPluginMock } from '../../../plugins/navigation/public/mocks';
import { presentationUtilPluginMock } from '../../../plugins/presentation_util/public/mocks';
import { savedObjectTaggingOssPluginMock } from '../../saved_objects_tagging_oss/public/mocks';

const createSetupContract = (): VisualizationsSetup => ({
createBaseVisualization: jest.fn(),
registerAlias: jest.fn(),
hideTypes: jest.fn(),
visEditorsRegistry: { registerDefault: jest.fn(), register: jest.fn(), get: jest.fn() },
});

const createStartContract = (): VisualizationsStart => ({
Expand All @@ -33,16 +37,7 @@ const createStartContract = (): VisualizationsStart => ({
getAliases: jest.fn(),
getByGroup: jest.fn(),
unRegisterAlias: jest.fn(),
getSavedVisualization: jest.fn(),
saveVisualization: jest.fn(),
findListItems: jest.fn(),
showNewVisModal: jest.fn(),
createVis: jest.fn(),
convertFromSerializedVis: jest.fn(),
convertToSerializedVis: jest.fn(),
__LEGACY: {
createVisEmbeddableFromObject: jest.fn(),
},
});

const createInstance = async () => {
Expand All @@ -54,6 +49,7 @@ const createInstance = async () => {
expressions: expressionsPluginMock.createSetupContract(),
inspector: inspectorPluginMock.createSetupContract(),
usageCollection: usageCollectionPluginMock.createSetupContract(),
urlForwarding: urlForwardingPluginMock.createSetupContract(),
});
const doStart = () =>
plugin.start(coreMock.createStart(), {
Expand All @@ -68,6 +64,9 @@ const createInstance = async () => {
savedObjectsClient: coreMock.createStart().savedObjects.client,
savedObjects: savedObjectsPluginMock.createStartContract(),
savedObjectsTaggingOss: savedObjectTaggingOssPluginMock.createStart(),
navigation: navigationPluginMock.createStartContract(),
presentationUtil: presentationUtilPluginMock.createStartContract(coreMock.createStart()),
urlForwarding: urlForwardingPluginMock.createStartContract(),
});

return {
Expand Down
Loading

0 comments on commit a9ec1be

Please sign in to comment.