From fabb710daceb4cf33260a47441de6aef1d4dd1ba Mon Sep 17 00:00:00 2001 From: nathan Date: Wed, 14 Jul 2021 14:41:51 -0600 Subject: [PATCH] region_map vis with Map embeddable --- .../create_region_map_layer_descriptor.ts | 26 ++--- .../maps/public/lazy_load_bundle/index.ts | 14 +-- .../public/legacy_visualizations/index.ts | 1 + .../legacy_visualizations/region_map/index.ts | 10 ++ .../region_map/region_map_editor.tsx | 34 +++++++ .../region_map/region_map_fn.ts | 62 ++++++++++++ .../region_map/region_map_renderer.tsx | 32 ++++++ .../region_map/region_map_vis_type.ts | 44 +++++++++ .../region_map/region_map_visualization.tsx | 97 +++++++++++++++++++ .../region_map/to_ast.ts | 30 ++++++ .../legacy_visualizations/region_map/types.ts | 26 +++++ .../legacy_visualizations/region_map/utils.ts | 49 ++++++++++ .../tile_map/tile_map_editor.tsx | 5 +- .../tile_map/tile_map_vis_type.ts | 8 +- .../legacy_visualizations/tile_map/utils.ts | 8 +- x-pack/plugins/maps/public/plugin.ts | 5 +- 16 files changed, 415 insertions(+), 36 deletions(-) create mode 100644 x-pack/plugins/maps/public/legacy_visualizations/region_map/index.ts create mode 100644 x-pack/plugins/maps/public/legacy_visualizations/region_map/region_map_editor.tsx create mode 100644 x-pack/plugins/maps/public/legacy_visualizations/region_map/region_map_fn.ts create mode 100644 x-pack/plugins/maps/public/legacy_visualizations/region_map/region_map_renderer.tsx create mode 100644 x-pack/plugins/maps/public/legacy_visualizations/region_map/region_map_vis_type.ts create mode 100644 x-pack/plugins/maps/public/legacy_visualizations/region_map/region_map_visualization.tsx create mode 100644 x-pack/plugins/maps/public/legacy_visualizations/region_map/to_ast.ts create mode 100644 x-pack/plugins/maps/public/legacy_visualizations/region_map/types.ts create mode 100644 x-pack/plugins/maps/public/legacy_visualizations/region_map/utils.ts diff --git a/x-pack/plugins/maps/public/classes/layers/create_region_map_layer_descriptor.ts b/x-pack/plugins/maps/public/classes/layers/create_region_map_layer_descriptor.ts index 658a0933215008..229532c09f9556 100644 --- a/x-pack/plugins/maps/public/classes/layers/create_region_map_layer_descriptor.ts +++ b/x-pack/plugins/maps/public/classes/layers/create_region_map_layer_descriptor.ts @@ -29,6 +29,19 @@ import { getJoinAggKey } from '../../../common/get_agg_key'; const defaultDynamicProperties = getDefaultDynamicProperties(); +export interface CreateRegionMapLayerDescriptorParams { + label: string; + emsLayerId?: string; + leftFieldName?: string; + termsFieldName?: string; + termsSize?: number; + colorSchema: string; + indexPatternId?: string; + indexPatternTitle?: string; + metricAgg: string; + metricFieldName?: string; +} + export function createAggDescriptor(metricAgg: string, metricFieldName?: string): AggDescriptor { const aggTypeKey = Object.keys(AGG_TYPE).find((key) => { return AGG_TYPE[key as keyof typeof AGG_TYPE] === metricAgg; @@ -55,18 +68,7 @@ export function createRegionMapLayerDescriptor({ indexPatternTitle, metricAgg, metricFieldName, -}: { - label: string; - emsLayerId?: string; - leftFieldName?: string; - termsFieldName?: string; - termsSize?: number; - colorSchema: string; - indexPatternId?: string; - indexPatternTitle?: string; - metricAgg: string; - metricFieldName?: string; -}): LayerDescriptor | null { +}: CreateRegionMapLayerDescriptorParams): LayerDescriptor | null { if (!indexPatternId || !emsLayerId || !leftFieldName || !termsFieldName) { return null; } diff --git a/x-pack/plugins/maps/public/lazy_load_bundle/index.ts b/x-pack/plugins/maps/public/lazy_load_bundle/index.ts index 17877f783b1eb1..758a395cbd1d3c 100644 --- a/x-pack/plugins/maps/public/lazy_load_bundle/index.ts +++ b/x-pack/plugins/maps/public/lazy_load_bundle/index.ts @@ -16,6 +16,7 @@ import { LayerWizard } from '../classes/layers/layer_wizard_registry'; import type { CreateLayerDescriptorParams } from '../classes/sources/es_search_source'; import type { EMSTermJoinConfig, SampleValuesConfig } from '../ems_autosuggest'; import type { CreateTileMapLayerDescriptorParams } from '../classes/layers/create_tile_map_layer_descriptor'; +import type { CreateRegionMapLayerDescriptorParams } from '../classes/layers/create_region_map_layer_descriptor'; let loadModulesPromise: Promise; @@ -54,18 +55,7 @@ interface LazyLoadedMapModules { indexPatternTitle, metricAgg, metricFieldName, - }: { - label: string; - emsLayerId?: string; - leftFieldName?: string; - termsFieldName?: string; - termsSize?: number; - colorSchema: string; - indexPatternId?: string; - indexPatternTitle?: string; - metricAgg: string; - metricFieldName?: string; - }) => LayerDescriptor | null; + }: CreateRegionMapLayerDescriptorParams) => LayerDescriptor | null; createBasemapLayerDescriptor: () => LayerDescriptor | null; createESSearchSourceLayerDescriptor: (params: CreateLayerDescriptorParams) => LayerDescriptor; suggestEMSTermJoinConfig: (config: SampleValuesConfig) => Promise; diff --git a/x-pack/plugins/maps/public/legacy_visualizations/index.ts b/x-pack/plugins/maps/public/legacy_visualizations/index.ts index 75fe018cdef014..a01e0ebefb5ad5 100644 --- a/x-pack/plugins/maps/public/legacy_visualizations/index.ts +++ b/x-pack/plugins/maps/public/legacy_visualizations/index.ts @@ -5,4 +5,5 @@ * 2.0. */ +export { createRegionMapFn, regionMapRenderer, regionMapVisType } from './region_map'; export { createTileMapFn, tileMapRenderer, tileMapVisType } from './tile_map'; diff --git a/x-pack/plugins/maps/public/legacy_visualizations/region_map/index.ts b/x-pack/plugins/maps/public/legacy_visualizations/region_map/index.ts new file mode 100644 index 00000000000000..cda57b10887938 --- /dev/null +++ b/x-pack/plugins/maps/public/legacy_visualizations/region_map/index.ts @@ -0,0 +1,10 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export { regionMapVisType } from './region_map_vis_type'; +export { createRegionMapFn } from './region_map_fn'; +export { regionMapRenderer } from './region_map_renderer'; diff --git a/x-pack/plugins/maps/public/legacy_visualizations/region_map/region_map_editor.tsx b/x-pack/plugins/maps/public/legacy_visualizations/region_map/region_map_editor.tsx new file mode 100644 index 00000000000000..8830c557f7b4a1 --- /dev/null +++ b/x-pack/plugins/maps/public/legacy_visualizations/region_map/region_map_editor.tsx @@ -0,0 +1,34 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import type { VisEditorOptionsProps } from 'src/plugins/visualizations/public'; +import { Vis } from '../../../../../../src/plugins/visualizations/public'; +import { getData, getShareService } from '../../kibana_services'; +import { ViewInMaps } from '../view_in_maps'; +import { extractLayerDescriptorParams } from './utils'; +import { RegionMapVisParams } from './types'; +import { title } from './region_map_vis_type'; + +export function RegionMapEditor(props: VisEditorOptionsProps) { + const onClick = (e: React.MouseEvent) => { + e.preventDefault(); + + const locator = getShareService().url.locators.get('MAPS_APP_REGION_MAP_LOCATOR'); + if (!locator) return; + + const query = getData().query; + locator.navigate({ + ...extractLayerDescriptorParams((props.vis as unknown) as Vis), + filters: query.filterManager.getFilters(), + query: query.queryString.getQuery(), + timeRange: query.timefilter.timefilter.getTime(), + }); + }; + + return ; +} diff --git a/x-pack/plugins/maps/public/legacy_visualizations/region_map/region_map_fn.ts b/x-pack/plugins/maps/public/legacy_visualizations/region_map/region_map_fn.ts new file mode 100644 index 00000000000000..ec1a29e3bdb67d --- /dev/null +++ b/x-pack/plugins/maps/public/legacy_visualizations/region_map/region_map_fn.ts @@ -0,0 +1,62 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { i18n } from '@kbn/i18n'; +import type { Filter, Query, TimeRange } from '../../../../../../src/plugins/data/common'; +import type { ExpressionValueSearchContext } from '../../../../../../src/plugins/data/common/search/expressions/kibana_context_type'; +import type { + ExpressionFunctionDefinition, + Render, +} from '../../../../../../src/plugins/expressions/public'; +import { RegionMapVisConfig } from './types'; + +interface Arguments { + visConfig: string; +} + +export interface RegionMapVisRenderValue { + visType: 'region_map'; + visConfig: RegionMapVisConfig; + filters?: Filter[]; + query?: Query; + timeRange?: TimeRange; +} + +export type RegionMapExpressionFunctionDefinition = ExpressionFunctionDefinition< + 'regionmap', + ExpressionValueSearchContext, + Arguments, + Promise> +>; + +export const createRegionMapFn = (): RegionMapExpressionFunctionDefinition => ({ + name: 'regionmap', + type: 'render', + help: i18n.translate('xpack.maps.regionMap.function.help', { + defaultMessage: 'Regionmap visualization', + }), + args: { + visConfig: { + types: ['string'], + default: '"{}"', + help: '', + }, + }, + async fn(input, args) { + return { + type: 'render', + as: 'region_map_vis', + value: { + visType: 'region_map', + visConfig: JSON.parse(args.visConfig), + filters: input.filters, + query: Array.isArray(input.query) ? input.query[0] : input.query, + timeRange: input.timeRange, + }, + }; + }, +}); diff --git a/x-pack/plugins/maps/public/legacy_visualizations/region_map/region_map_renderer.tsx b/x-pack/plugins/maps/public/legacy_visualizations/region_map/region_map_renderer.tsx new file mode 100644 index 00000000000000..3212d7095ecfd5 --- /dev/null +++ b/x-pack/plugins/maps/public/legacy_visualizations/region_map/region_map_renderer.tsx @@ -0,0 +1,32 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { render, unmountComponentAtNode } from 'react-dom'; +import type { ExpressionRenderDefinition } from 'src/plugins/expressions'; +import { RegionMapVisRenderValue } from './region_map_fn'; +import { RegionMapVisualization } from './region_map_visualization'; + +export const regionMapRenderer = { + name: 'region_map_vis', + reuseDomNode: true, + render: async (domNode, { filters, query, timeRange, visConfig }, handlers) => { + handlers.onDestroy(() => { + unmountComponentAtNode(domNode); + }); + + render( + , + domNode + ); + }, +} as ExpressionRenderDefinition; diff --git a/x-pack/plugins/maps/public/legacy_visualizations/region_map/region_map_vis_type.ts b/x-pack/plugins/maps/public/legacy_visualizations/region_map/region_map_vis_type.ts new file mode 100644 index 00000000000000..e5507b3d2c40e1 --- /dev/null +++ b/x-pack/plugins/maps/public/legacy_visualizations/region_map/region_map_vis_type.ts @@ -0,0 +1,44 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { i18n } from '@kbn/i18n'; +import { VisTypeDefinition } from '../../../../../../src/plugins/visualizations/public'; +import { toExpressionAst } from './to_ast'; +import { RegionMapVisParams } from './types'; +import { RegionMapEditor } from './region_map_editor'; + +export const title = i18n.translate('xpack.maps.regionMapMap.vis.title', { + defaultMessage: 'Region Map', +}); + +export const regionMapVisType = { + name: 'region_map', + title, + icon: 'visMapRegion', + description: i18n.translate('xpack.maps.regionMap.vis.description', { + defaultMessage: 'Show metrics on a thematic map. Use one of the \ +provided base maps, or add your own. Darker colors represent higher values.', + }), + editorConfig: { + optionTabs: [ + { + name: '', + title: '', + editor: RegionMapEditor, + }, + ], + }, + visConfig: { + defaults: { + colorSchema: 'Yellow to Red', + mapZoom: 2, + mapCenter: [0, 0], + }, + }, + toExpressionAst, + requiresSearch: true, +} as VisTypeDefinition; diff --git a/x-pack/plugins/maps/public/legacy_visualizations/region_map/region_map_visualization.tsx b/x-pack/plugins/maps/public/legacy_visualizations/region_map/region_map_visualization.tsx new file mode 100644 index 00000000000000..de7d3a488f8edd --- /dev/null +++ b/x-pack/plugins/maps/public/legacy_visualizations/region_map/region_map_visualization.tsx @@ -0,0 +1,97 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { Component, RefObject } from 'react'; +import uuid from 'uuid/v4'; +import { EuiLoadingChart } from '@elastic/eui'; +import type { Filter, Query, TimeRange } from '../../../../../../src/plugins/data/common'; +import type { Embeddable } from '../../../../../../src/plugins/embeddable/public'; +import type { MapEmbeddableInput, MapEmbeddableOutput } from '../../embeddable'; +import { lazyLoadMapModules } from '../../lazy_load_bundle'; +import { RegionMapVisConfig } from './types'; + +interface Props { + filters?: Filter[]; + query?: Query; + timeRange?: TimeRange; + visConfig: RegionMapVisConfig; +} + +interface State { + isLoaded: boolean; +} + +export class RegionMapVisualization extends Component { + private _isMounted = false; + private _mapEmbeddable?: Embeddable | undefined; + private readonly _embeddableRef: RefObject = React.createRef(); + + state: State = { isLoaded: false }; + + componentDidMount() { + this._isMounted = true; + this._load(); + } + + componentWillUnmount() { + this._isMounted = false; + if (this._mapEmbeddable) { + this._mapEmbeddable.destroy(); + } + } + + componentDidUpdate() { + if (this._mapEmbeddable) { + this._mapEmbeddable.updateInput({ + filters: this.props.filters, + query: this.props.query, + timeRange: this.props.timeRange, + }); + } + } + + async _load() { + const mapModules = await lazyLoadMapModules(); + if (!this._isMounted) { + return; + } + + this.setState({ isLoaded: true }); + + this._mapEmbeddable = new mapModules.MapEmbeddable( + { + editable: false, + }, + { + id: uuid(), + attributes: { + title: '', + layerListJSON: JSON.stringify([ + mapModules.createBasemapLayerDescriptor(), + mapModules.createRegionMapLayerDescriptor(this.props.visConfig.layerDescriptorParams), + ]), + }, + mapCenter: { + lat: this.props.visConfig.mapCenter[0], + lon: this.props.visConfig.mapCenter[1], + zoom: this.props.visConfig.mapZoom, + }, + } + ); + if (this._embeddableRef.current) { + this._mapEmbeddable.render(this._embeddableRef.current); + } + } + + render() { + if (!this.state.isLoaded) { + return ; + } + + return
; + } +} diff --git a/x-pack/plugins/maps/public/legacy_visualizations/region_map/to_ast.ts b/x-pack/plugins/maps/public/legacy_visualizations/region_map/to_ast.ts new file mode 100644 index 00000000000000..49f431980b950c --- /dev/null +++ b/x-pack/plugins/maps/public/legacy_visualizations/region_map/to_ast.ts @@ -0,0 +1,30 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { + buildExpression, + buildExpressionFunction, +} from '../../../../../../src/plugins/expressions/public'; +import { VisToExpressionAst } from '../../../../../../src/plugins/visualizations/public'; +import { RegionMapExpressionFunctionDefinition } from './region_map_fn'; +import { RegionMapVisParams } from './types'; +import { extractLayerDescriptorParams } from './utils'; + +export const toExpressionAst: VisToExpressionAst = (vis) => { + const regionMap = buildExpressionFunction('regionmap', { + visConfig: JSON.stringify({ + ...vis.params, + mapCenter: vis.uiState.get('mapCenter', [0, 0]), + mapZoom: parseInt(vis.uiState.get('mapZoom', 2), 10), + layerDescriptorParams: extractLayerDescriptorParams(vis), + }), + }); + + const ast = buildExpression([regionMap]); + + return ast.toAst(); +}; diff --git a/x-pack/plugins/maps/public/legacy_visualizations/region_map/types.ts b/x-pack/plugins/maps/public/legacy_visualizations/region_map/types.ts new file mode 100644 index 00000000000000..6d3a1c1aaf336a --- /dev/null +++ b/x-pack/plugins/maps/public/legacy_visualizations/region_map/types.ts @@ -0,0 +1,26 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { CreateRegionMapLayerDescriptorParams } from '../../classes/layers/create_region_map_layer_descriptor'; + +export interface RegionMapVisParams { + colorSchema: string; + mapZoom: number; + mapCenter: [number, number]; + selectedLayer: { + isEMS: boolean; + id: string | number; + layerId: string; + }; + selectedJoinField: { + name: string; + }; +} + +export interface RegionMapVisConfig extends RegionMapVisParams { + layerDescriptorParams: CreateRegionMapLayerDescriptorParams; +} diff --git a/x-pack/plugins/maps/public/legacy_visualizations/region_map/utils.ts b/x-pack/plugins/maps/public/legacy_visualizations/region_map/utils.ts new file mode 100644 index 00000000000000..2f86d2f17df42a --- /dev/null +++ b/x-pack/plugins/maps/public/legacy_visualizations/region_map/utils.ts @@ -0,0 +1,49 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { Vis } from '../../../../../../src/plugins/visualizations/public'; +import { RegionMapVisParams } from './types'; +import { title } from './region_map_vis_type'; + +function getEmsLayerId(id: string | number, layerId: string) { + if (typeof id === 'string') { + return id; + } + + // Region maps from 6.x will have numerical EMS id refering to S3 bucket id. + // In this case, use layerId with contains the EMS layer name. + const split = layerId.split('.'); + return split.length === 2 ? split[1] : undefined; +} + +export function extractLayerDescriptorParams(vis: Vis) { + const params: { [key: string]: any } = { + label: vis.title ? vis.title : title, + emsLayerId: vis.params.selectedLayer.isEMS + ? getEmsLayerId(vis.params.selectedLayer.id, vis.params.selectedLayer.layerId) + : undefined, + leftFieldName: vis.params.selectedLayer.isEMS ? vis.params.selectedJoinField.name : undefined, + colorSchema: vis.params.colorSchema, + indexPatternId: vis.data.indexPattern?.id, + indexPatternTitle: vis.data.indexPattern?.title, + metricAgg: 'count', + }; + + const bucketAggs = vis.data?.aggs?.byType('buckets'); + if (bucketAggs?.length && bucketAggs[0].type.dslName === 'terms') { + params.termsFieldName = bucketAggs[0].getField()?.name; + params.termsSize = bucketAggs[0].getParam('size'); + } + + const metricAggs = vis.data?.aggs?.byType('metrics'); + if (metricAggs?.length) { + params.metricAgg = metricAggs[0].type.dslName; + params.metricFieldName = metricAggs[0].getField()?.name; + } + + return params; +} diff --git a/x-pack/plugins/maps/public/legacy_visualizations/tile_map/tile_map_editor.tsx b/x-pack/plugins/maps/public/legacy_visualizations/tile_map/tile_map_editor.tsx index acadb41ed2e66a..b177b34a537f97 100644 --- a/x-pack/plugins/maps/public/legacy_visualizations/tile_map/tile_map_editor.tsx +++ b/x-pack/plugins/maps/public/legacy_visualizations/tile_map/tile_map_editor.tsx @@ -10,8 +10,9 @@ import type { VisEditorOptionsProps } from 'src/plugins/visualizations/public'; import { Vis } from '../../../../../../src/plugins/visualizations/public'; import { getData, getShareService } from '../../kibana_services'; import { ViewInMaps } from '../view_in_maps'; -import { COORDINATE_MAP_TITLE, extractLayerDescriptorParams } from './utils'; +import { extractLayerDescriptorParams } from './utils'; import { TileMapVisParams } from './types'; +import { title } from './tile_map_vis_type'; export function TileMapEditor(props: VisEditorOptionsProps) { const onClick = (e: React.MouseEvent) => { @@ -29,5 +30,5 @@ export function TileMapEditor(props: VisEditorOptionsProps) { }); }; - return ; + return ; } diff --git a/x-pack/plugins/maps/public/legacy_visualizations/tile_map/tile_map_vis_type.ts b/x-pack/plugins/maps/public/legacy_visualizations/tile_map/tile_map_vis_type.ts index 9a270460372256..a87145df78f47d 100644 --- a/x-pack/plugins/maps/public/legacy_visualizations/tile_map/tile_map_vis_type.ts +++ b/x-pack/plugins/maps/public/legacy_visualizations/tile_map/tile_map_vis_type.ts @@ -11,11 +11,13 @@ import { toExpressionAst } from './to_ast'; import { MapTypes, TileMapVisParams } from './types'; import { TileMapEditor } from './tile_map_editor'; +export const title = i18n.translate('xpack.maps.tileMap.vis.title', { + defaultMessage: 'Coordinate Map', +}); + export const tileMapVisType = { name: 'tile_map', - title: i18n.translate('xpack.maps.tileMap.vis.title', { - defaultMessage: 'Coordinate Map', - }), + title, icon: 'visMapCoordinate', description: i18n.translate('xpack.maps.tileMap.vis.description', { defaultMessage: 'Plot latitude and longitude coordinates on a map', diff --git a/x-pack/plugins/maps/public/legacy_visualizations/tile_map/utils.ts b/x-pack/plugins/maps/public/legacy_visualizations/tile_map/utils.ts index b85e0864878b18..3fcb3d89157019 100644 --- a/x-pack/plugins/maps/public/legacy_visualizations/tile_map/utils.ts +++ b/x-pack/plugins/maps/public/legacy_visualizations/tile_map/utils.ts @@ -5,18 +5,14 @@ * 2.0. */ -import { i18n } from '@kbn/i18n'; import { Vis } from '../../../../../../src/plugins/visualizations/public'; import { indexPatterns } from '../../../../../../src/plugins/data/public'; import { TileMapVisParams } from './types'; - -export const COORDINATE_MAP_TITLE = i18n.translate('xpack.maps.legacyVisualizations.tileMapTitle', { - defaultMessage: 'Coordinate Map', -}); +import { title } from './tile_map_vis_type'; export function extractLayerDescriptorParams(vis: Vis) { const params: { [key: string]: any } = { - label: vis.title ? vis.title : COORDINATE_MAP_TITLE, + label: vis.title ? vis.title : title, mapType: vis.params.mapType, colorSchema: vis.params.colorSchema, indexPatternId: vis.data.indexPattern?.id, diff --git a/x-pack/plugins/maps/public/plugin.ts b/x-pack/plugins/maps/public/plugin.ts index 22d79bcd1ef71a..d9183d1985d010 100644 --- a/x-pack/plugins/maps/public/plugin.ts +++ b/x-pack/plugins/maps/public/plugin.ts @@ -72,7 +72,7 @@ import { MapsAppRegionMapLocatorDefinition, MapsAppTileMapLocatorDefinition, } from './locators'; -import { createTileMapFn, tileMapRenderer, tileMapVisType } from './legacy_visualizations'; +import { createRegionMapFn, regionMapRenderer, regionMapVisType, createTileMapFn, tileMapRenderer, tileMapVisType } from './legacy_visualizations'; export interface MapsPluginSetupDependencies { expressions: ReturnType; @@ -175,6 +175,9 @@ export class MapsPlugin }); // register wrapper around legacy tile_map and region_map visualizations + plugins.expressions.registerFunction(createRegionMapFn); + plugins.expressions.registerRenderer(regionMapRenderer); + plugins.visualizations.createBaseVisualization(regionMapVisType); plugins.expressions.registerFunction(createTileMapFn); plugins.expressions.registerRenderer(tileMapRenderer); plugins.visualizations.createBaseVisualization(tileMapVisType);