From 7c3f745cddbb34106b672d25594811924de0b93e Mon Sep 17 00:00:00 2001 From: nathan Date: Wed, 14 Jul 2021 09:58:14 -0600 Subject: [PATCH] implement view in maps button --- .../tile_map/tile_map_editor.tsx | 22 ++++++++++-- .../legacy_visualizations/tile_map/to_ast.ts | 32 ++--------------- .../legacy_visualizations/tile_map/utils.ts | 36 ++++++++++++++++++- 3 files changed, 57 insertions(+), 33 deletions(-) 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 5e395036b3ed31..a69a778ad17970 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 @@ -7,8 +7,10 @@ import React, { Component } from 'react'; import { i18n } from '@kbn/i18n'; +import { Vis } from '../../../../../../src/plugins/visualizations/public'; +import { getData, getShareService } from '../../kibana_services'; import { ViewInMaps } from '../view_in_maps'; -import { COORDINATE_MAP_TITLE } from './utils'; +import { COORDINATE_MAP_TITLE, extractLayerDescriptorParams } from './utils'; interface Props { vis: Vis; @@ -30,7 +32,23 @@ export class TileMapEditor extends Component<{}, State> { this._isMounted = false; } + _onClick = (e: React.MouseEvent) => { + e.preventDefault(); + + const locator = getShareService().url.locators.get('MAPS_APP_TILE_MAP_LOCATOR'); + if (!locator) return; + + const query = getData().query; + locator.navigate({ + ...(extractLayerDescriptorParams(this.props.vis)), + filters: query.filterManager.getFilters(), + query: query.queryString.getQuery(), + timeRange: query.timefilter.timefilter.getTime(), + }); + + } + render() { - return {}} visualizationLabel={COORDINATE_MAP_TITLE} />; + return ; } } diff --git a/x-pack/plugins/maps/public/legacy_visualizations/tile_map/to_ast.ts b/x-pack/plugins/maps/public/legacy_visualizations/tile_map/to_ast.ts index b3fda8dc1cf32b..585343bbcbbd0e 100644 --- a/x-pack/plugins/maps/public/legacy_visualizations/tile_map/to_ast.ts +++ b/x-pack/plugins/maps/public/legacy_visualizations/tile_map/to_ast.ts @@ -10,37 +10,9 @@ import { buildExpression, buildExpressionFunction } from '../../../../../../src/ import { VisToExpressionAst } from '../../../../../../src/plugins/visualizations/public'; import { TileMapExpressionFunctionDefinition } from './tile_map_fn'; import { TileMapVisParams } from './types'; +import { extractLayerDescriptorParams } from './utils'; export const toExpressionAst: VisToExpressionAst = (vis) => { - const params: { [key: string]: any } = { - label: vis.title ? vis.title : title, - mapType: vis.params.mapType, - colorSchema: vis.params.colorSchema, - indexPatternId: vis.data.indexPattern?.id, - metricAgg: 'count', - }; - - const bucketAggs = vis.data?.aggs?.byType('buckets'); - if (bucketAggs?.length && bucketAggs[0].type.dslName === 'geohash_grid') { - params.geoFieldName = bucketAggs[0].getField()?.name; - } else if (vis.data.indexPattern) { - // attempt to default to first geo point field when geohash is not configured yet - const geoField = vis.data.indexPattern.fields.find((field) => { - return ( - !indexPatterns.isNestedField(field) && field.aggregatable && field.type === 'geo_point' - ); - }); - if (geoField) { - params.geoFieldName = geoField.name; - } - } - - const metricAggs = vis.data?.aggs?.byType('metrics'); - if (metricAggs?.length) { - params.metricAgg = metricAggs[0].type.dslName; - params.metricFieldName = metricAggs[0].getField()?.name; - } - const tileMap = buildExpressionFunction( 'tilemap', { @@ -48,7 +20,7 @@ export const toExpressionAst: VisToExpressionAst = (vis) => { ...vis.params, mapCenter: vis.uiState.get('mapCenter', [0, 0]), mapZoom: parseInt(vis.uiState.get('mapZoom', 2), 10), - layerDescriptorParams: params, + layerDescriptorParams: extractLayerDescriptorParams(vis), }), } ); 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 f29305d8f39a4e..b7eb2769283eac 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 @@ -6,7 +6,41 @@ */ import { i18n } from '@kbn/i18n'; +import { Vis } from '../../../../../../src/plugins/visualizations/public'; export const COORDINATE_MAP_TITLE = i18n.translate('xpack.maps.legacyVisualizations.tileMapTitle', { defaultMessage: 'Coordinate Map', -}); \ No newline at end of file +}); + +export function extractLayerDescriptorParams(vis: Vis) { + const params: { [key: string]: any } = { + label: vis.title ? vis.title : COORDINATE_MAP_TITLE, + mapType: vis.params.mapType, + colorSchema: vis.params.colorSchema, + indexPatternId: vis.data.indexPattern?.id, + metricAgg: 'count', + }; + + const bucketAggs = vis.data?.aggs?.byType('buckets'); + if (bucketAggs?.length && bucketAggs[0].type.dslName === 'geohash_grid') { + params.geoFieldName = bucketAggs[0].getField()?.name; + } else if (vis.data.indexPattern) { + // attempt to default to first geo point field when geohash is not configured yet + const geoField = vis.data.indexPattern.fields.find((field) => { + return ( + !indexPatterns.isNestedField(field) && field.aggregatable && field.type === 'geo_point' + ); + }); + if (geoField) { + params.geoFieldName = geoField.name; + } + } + + const metricAggs = vis.data?.aggs?.byType('metrics'); + if (metricAggs?.length) { + params.metricAgg = metricAggs[0].type.dslName; + params.metricFieldName = metricAggs[0].getField()?.name; + } + + return params; +} \ No newline at end of file