diff --git a/x-pack/legacy/plugins/maps/public/actions/map_actions.d.ts b/x-pack/legacy/plugins/maps/public/actions/map_actions.d.ts
index 418f2880c1077..3a61d5affd861 100644
--- a/x-pack/legacy/plugins/maps/public/actions/map_actions.d.ts
+++ b/x-pack/legacy/plugins/maps/public/actions/map_actions.d.ts
@@ -5,6 +5,7 @@
*/
/* eslint-disable @typescript-eslint/consistent-type-definitions */
+import { LAYER_TYPE } from '../../common/constants';
import { DataMeta, MapFilters } from '../../common/data_request_descriptor_types';
export type SyncContext = {
@@ -16,3 +17,10 @@ export type SyncContext = {
registerCancelCallback(requestToken: symbol, callback: () => void): void;
dataFilters: MapFilters;
};
+
+export function updateSourceProp(
+ layerId: string,
+ propName: string,
+ value: unknown,
+ newLayerType?: LAYER_TYPE
+): void;
diff --git a/x-pack/legacy/plugins/maps/public/connected_components/layer_panel/view.d.ts b/x-pack/legacy/plugins/maps/public/connected_components/layer_panel/view.d.ts
new file mode 100644
index 0000000000000..6d1d076c723ad
--- /dev/null
+++ b/x-pack/legacy/plugins/maps/public/connected_components/layer_panel/view.d.ts
@@ -0,0 +1,14 @@
+/*
+ * 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.
+ */
+/* eslint-disable @typescript-eslint/consistent-type-definitions */
+
+import { LAYER_TYPE } from '../../../common/constants';
+
+export type OnSourceChangeArgs = {
+ propName: string;
+ value: unknown;
+ newLayerType?: LAYER_TYPE;
+};
diff --git a/x-pack/legacy/plugins/maps/public/layers/sources/es_search_source/__snapshots__/scaling_form.test.tsx.snap b/x-pack/legacy/plugins/maps/public/layers/sources/es_search_source/__snapshots__/scaling_form.test.tsx.snap
new file mode 100644
index 0000000000000..967225d6f0fdc
--- /dev/null
+++ b/x-pack/legacy/plugins/maps/public/layers/sources/es_search_source/__snapshots__/scaling_form.test.tsx.snap
@@ -0,0 +1,205 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should not render clusters option when clustering is not supported 1`] = `
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+`;
+
+exports[`should render 1`] = `
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+`;
+
+exports[`should render top hits form when scaling type is TOP_HITS 1`] = `
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+`;
diff --git a/x-pack/legacy/plugins/maps/public/layers/sources/es_search_source/__snapshots__/update_source_editor.test.js.snap b/x-pack/legacy/plugins/maps/public/layers/sources/es_search_source/__snapshots__/update_source_editor.test.js.snap
index c94f305773f35..0cb7f67fb9c92 100644
--- a/x-pack/legacy/plugins/maps/public/layers/sources/es_search_source/__snapshots__/update_source_editor.test.js.snap
+++ b/x-pack/legacy/plugins/maps/public/layers/sources/es_search_source/__snapshots__/update_source_editor.test.js.snap
@@ -91,253 +91,16 @@ exports[`should enable sort order select when sort field provided 1`] = `
size="s"
/>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-`;
-
-exports[`should render top hits form when scaling type is TOP_HITS 1`] = `
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
{
@@ -34,11 +27,26 @@ function getGeoFields(fields) {
);
});
}
+
+function isGeoFieldAggregatable(indexPattern, geoFieldName) {
+ if (!indexPattern) {
+ return false;
+ }
+
+ const geoField = indexPattern.fields.getByName(geoFieldName);
+ return geoField && geoField.aggregatable;
+}
+
const RESET_INDEX_PATTERN_STATE = {
indexPattern: undefined,
- geoField: undefined,
+ geoFields: undefined,
+
+ // ES search source descriptor state
+ geoFieldName: undefined,
filterByMapBounds: DEFAULT_FILTER_BY_MAP_BOUNDS,
- showFilterByBoundsSwitch: false,
+ scalingType: SCALING_TYPES.CLUSTERS, // turn on clusting by default
+ topHitsSplitField: undefined,
+ topHitsSize: 1,
};
export class CreateSourceEditor extends Component {
@@ -58,41 +66,28 @@ export class CreateSourceEditor extends Component {
componentDidMount() {
this._isMounted = true;
- this.loadIndexPattern(this.state.indexPatternId);
}
- onIndexPatternSelect = indexPatternId => {
+ _onIndexPatternSelect = indexPatternId => {
this.setState(
{
indexPatternId,
},
- this.loadIndexPattern(indexPatternId)
+ this._loadIndexPattern(indexPatternId)
);
};
- loadIndexPattern = indexPatternId => {
+ _loadIndexPattern = indexPatternId => {
this.setState(
{
isLoadingIndexPattern: true,
...RESET_INDEX_PATTERN_STATE,
},
- this.debouncedLoad.bind(null, indexPatternId)
+ this._debouncedLoad.bind(null, indexPatternId)
);
};
- loadIndexDocCount = async indexPatternTitle => {
- const http = getHttp();
- const { count } = await http.fetch(`../${GIS_API_PATH}/indexCount`, {
- method: 'GET',
- credentials: 'same-origin',
- query: {
- index: indexPatternTitle,
- },
- });
- return count;
- };
-
- debouncedLoad = _.debounce(async indexPatternId => {
+ _debouncedLoad = _.debounce(async indexPatternId => {
if (!indexPatternId || indexPatternId.length === 0) {
return;
}
@@ -105,15 +100,6 @@ export class CreateSourceEditor extends Component {
return;
}
- let indexHasSmallDocCount = false;
- try {
- const indexDocCount = await this.loadIndexDocCount(indexPattern.title);
- indexHasSmallDocCount = indexDocCount <= DEFAULT_MAX_RESULT_WINDOW;
- } catch (error) {
- // retrieving index count is a nice to have and is not essential
- // do not interrupt user flow if unable to retrieve count
- }
-
if (!this._isMounted) {
return;
}
@@ -124,43 +110,71 @@ export class CreateSourceEditor extends Component {
return;
}
+ const geoFields = getGeoFields(indexPattern.fields);
this.setState({
isLoadingIndexPattern: false,
indexPattern: indexPattern,
- filterByMapBounds: !indexHasSmallDocCount, // Turn off filterByMapBounds when index contains a limited number of documents
- showFilterByBoundsSwitch: indexHasSmallDocCount,
+ geoFields,
});
- //make default selection
- const geoFields = getGeoFields(indexPattern.fields);
- if (geoFields[0]) {
- this.onGeoFieldSelect(geoFields[0].name);
+ if (geoFields.length) {
+ // make default selection, prefer aggregatable field over the first available
+ const firstAggregatableGeoField = geoFields.find(geoField => {
+ return geoField.aggregatable;
+ });
+ const defaultGeoFieldName = firstAggregatableGeoField
+ ? firstAggregatableGeoField
+ : geoFields[0];
+ this._onGeoFieldSelect(defaultGeoFieldName.name);
}
}, 300);
- onGeoFieldSelect = geoField => {
+ _onGeoFieldSelect = geoFieldName => {
+ // Respect previous scaling type selection unless newly selected geo field does not support clustering.
+ const scalingType =
+ this.state.scalingType === SCALING_TYPES.CLUSTERS &&
+ !isGeoFieldAggregatable(this.state.indexPattern, geoFieldName)
+ ? SCALING_TYPES.LIMIT
+ : this.state.scalingType;
this.setState(
{
- geoField,
+ geoFieldName,
+ scalingType,
},
- this.previewLayer
+ this._previewLayer
);
};
- onFilterByMapBoundsChange = event => {
+ _onScalingPropChange = ({ propName, value }) => {
this.setState(
{
- filterByMapBounds: event.target.checked,
+ [propName]: value,
},
- this.previewLayer
+ this._previewLayer
);
};
- previewLayer = () => {
- const { indexPatternId, geoField, filterByMapBounds } = this.state;
+ _previewLayer = () => {
+ const {
+ indexPatternId,
+ geoFieldName,
+ filterByMapBounds,
+ scalingType,
+ topHitsSplitField,
+ topHitsSize,
+ } = this.state;
const sourceConfig =
- indexPatternId && geoField ? { indexPatternId, geoField, filterByMapBounds } : null;
+ indexPatternId && geoFieldName
+ ? {
+ indexPatternId,
+ geoField: geoFieldName,
+ filterByMapBounds,
+ scalingType,
+ topHitsSplitField,
+ topHitsSize,
+ }
+ : null;
this.props.onSourceConfigChange(sourceConfig);
};
@@ -183,56 +197,35 @@ export class CreateSourceEditor extends Component {
placeholder={i18n.translate('xpack.maps.source.esSearch.selectLabel', {
defaultMessage: 'Select geo field',
})}
- value={this.state.geoField}
- onChange={this.onGeoFieldSelect}
- fields={
- this.state.indexPattern ? getGeoFields(this.state.indexPattern.fields) : undefined
- }
+ value={this.state.geoFieldName}
+ onChange={this._onGeoFieldSelect}
+ fields={this.state.geoFields}
/>
);
}
- _renderFilterByMapBounds() {
- if (!this.state.showFilterByBoundsSwitch) {
+ _renderScalingPanel() {
+ if (!this.state.indexPattern || !this.state.geoFieldName) {
return null;
}
return (
-
-
-
-
-
-
-
-
-
-
-
-
+
+
);
}
@@ -265,7 +258,7 @@ export class CreateSourceEditor extends Component {
);
}
diff --git a/x-pack/legacy/plugins/maps/public/layers/sources/es_search_source/scaling_form.test.tsx b/x-pack/legacy/plugins/maps/public/layers/sources/es_search_source/scaling_form.test.tsx
new file mode 100644
index 0000000000000..03f29685891ec
--- /dev/null
+++ b/x-pack/legacy/plugins/maps/public/layers/sources/es_search_source/scaling_form.test.tsx
@@ -0,0 +1,47 @@
+/*
+ * 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.
+ */
+
+jest.mock('../../../kibana_services', () => ({}));
+
+jest.mock('./load_index_settings', () => ({
+ loadIndexSettings: async () => {
+ return { maxInnerResultWindow: 100, maxResultWindow: 10000 };
+ },
+}));
+
+import React from 'react';
+import { shallow } from 'enzyme';
+
+import { ScalingForm } from './scaling_form';
+import { SCALING_TYPES } from '../../../../common/constants';
+
+const defaultProps = {
+ filterByMapBounds: true,
+ indexPatternId: 'myIndexPattern',
+ onChange: () => {},
+ scalingType: SCALING_TYPES.LIMIT,
+ supportsClustering: true,
+ termFields: [],
+ topHitsSize: 1,
+};
+
+test('should render', async () => {
+ const component = shallow();
+
+ expect(component).toMatchSnapshot();
+});
+
+test('should not render clusters option when clustering is not supported', async () => {
+ const component = shallow();
+
+ expect(component).toMatchSnapshot();
+});
+
+test('should render top hits form when scaling type is TOP_HITS', async () => {
+ const component = shallow();
+
+ expect(component).toMatchSnapshot();
+});
diff --git a/x-pack/legacy/plugins/maps/public/layers/sources/es_search_source/scaling_form.tsx b/x-pack/legacy/plugins/maps/public/layers/sources/es_search_source/scaling_form.tsx
new file mode 100644
index 0000000000000..c5950f1132974
--- /dev/null
+++ b/x-pack/legacy/plugins/maps/public/layers/sources/es_search_source/scaling_form.tsx
@@ -0,0 +1,230 @@
+/*
+ * 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 React, { Fragment, Component } from 'react';
+import {
+ EuiFormRow,
+ EuiSwitch,
+ EuiSwitchEvent,
+ EuiTitle,
+ EuiSpacer,
+ EuiHorizontalRule,
+ EuiRadioGroup,
+} from '@elastic/eui';
+import { i18n } from '@kbn/i18n';
+import { FormattedMessage } from '@kbn/i18n/react';
+// @ts-ignore
+import { SingleFieldSelect } from '../../../components/single_field_select';
+
+// @ts-ignore
+import { indexPatternService } from '../../../kibana_services';
+// @ts-ignore
+import { getTermsFields, getSourceFields } from '../../../index_pattern_util';
+// @ts-ignore
+import { ValidatedRange } from '../../../components/validated_range';
+import {
+ DEFAULT_MAX_INNER_RESULT_WINDOW,
+ DEFAULT_MAX_RESULT_WINDOW,
+ SCALING_TYPES,
+ LAYER_TYPE,
+} from '../../../../common/constants';
+// @ts-ignore
+import { loadIndexSettings } from './load_index_settings';
+import { IFieldType } from '../../../../../../../../src/plugins/data/public';
+import { OnSourceChangeArgs } from '../../../connected_components/layer_panel/view';
+
+interface Props {
+ filterByMapBounds: boolean;
+ indexPatternId: string;
+ onChange: (args: OnSourceChangeArgs) => void;
+ scalingType: SCALING_TYPES;
+ supportsClustering: boolean;
+ termFields: IFieldType[];
+ topHitsSplitField?: string;
+ topHitsSize: number;
+}
+
+interface State {
+ maxInnerResultWindow: number;
+ maxResultWindow: number;
+}
+
+export class ScalingForm extends Component {
+ state = {
+ maxInnerResultWindow: DEFAULT_MAX_INNER_RESULT_WINDOW,
+ maxResultWindow: DEFAULT_MAX_RESULT_WINDOW,
+ };
+ _isMounted = false;
+
+ componentDidMount() {
+ this._isMounted = true;
+ this.loadIndexSettings();
+ }
+
+ componentWillUnmount() {
+ this._isMounted = false;
+ }
+
+ async loadIndexSettings() {
+ try {
+ const indexPattern = await indexPatternService.get(this.props.indexPatternId);
+ const { maxInnerResultWindow, maxResultWindow } = await loadIndexSettings(indexPattern.title);
+ if (this._isMounted) {
+ this.setState({ maxInnerResultWindow, maxResultWindow });
+ }
+ } catch (err) {
+ return;
+ }
+ }
+
+ _onScalingTypeChange = (optionId: string): void => {
+ const layerType =
+ optionId === SCALING_TYPES.CLUSTERS ? LAYER_TYPE.BLENDED_VECTOR : LAYER_TYPE.VECTOR;
+ this.props.onChange({ propName: 'scalingType', value: optionId, newLayerType: layerType });
+ };
+
+ _onFilterByMapBoundsChange = (event: EuiSwitchEvent) => {
+ this.props.onChange({ propName: 'filterByMapBounds', value: event.target.checked });
+ };
+
+ _onTopHitsSplitFieldChange = (topHitsSplitField: string) => {
+ this.props.onChange({ propName: 'topHitsSplitField', value: topHitsSplitField });
+ };
+
+ _onTopHitsSizeChange = (size: number) => {
+ this.props.onChange({ propName: 'topHitsSize', value: size });
+ };
+
+ _renderTopHitsForm() {
+ let sizeSlider;
+ if (this.props.topHitsSplitField) {
+ sizeSlider = (
+
+
+
+ );
+ }
+
+ return (
+
+
+
+
+
+ {sizeSlider}
+
+ );
+ }
+
+ render() {
+ const scalingOptions = [
+ {
+ id: SCALING_TYPES.LIMIT,
+ label: i18n.translate('xpack.maps.source.esSearch.limitScalingLabel', {
+ defaultMessage: 'Limit results to {maxResultWindow}.',
+ values: { maxResultWindow: this.state.maxResultWindow },
+ }),
+ },
+ {
+ id: SCALING_TYPES.TOP_HITS,
+ label: i18n.translate('xpack.maps.source.esSearch.useTopHitsLabel', {
+ defaultMessage: 'Show top hits per entity.',
+ }),
+ },
+ ];
+ if (this.props.supportsClustering) {
+ scalingOptions.push({
+ id: SCALING_TYPES.CLUSTERS,
+ label: i18n.translate('xpack.maps.source.esSearch.clusterScalingLabel', {
+ defaultMessage: 'Show clusters when results exceed {maxResultWindow}.',
+ values: { maxResultWindow: this.state.maxResultWindow },
+ }),
+ });
+ }
+
+ let filterByBoundsSwitch;
+ if (this.props.scalingType !== SCALING_TYPES.CLUSTERS) {
+ filterByBoundsSwitch = (
+
+
+
+ );
+ }
+
+ let scalingForm = null;
+ if (this.props.scalingType === SCALING_TYPES.TOP_HITS) {
+ scalingForm = (
+
+
+ {this._renderTopHitsForm()}
+
+ );
+ }
+
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {filterByBoundsSwitch}
+
+ {scalingForm}
+
+ );
+ }
+}
diff --git a/x-pack/legacy/plugins/maps/public/layers/sources/es_search_source/update_source_editor.js b/x-pack/legacy/plugins/maps/public/layers/sources/es_search_source/update_source_editor.js
index 4d1e32087ab8c..9c92ec5801e49 100644
--- a/x-pack/legacy/plugins/maps/public/layers/sources/es_search_source/update_source_editor.js
+++ b/x-pack/legacy/plugins/maps/public/layers/sources/es_search_source/update_source_editor.js
@@ -6,34 +6,18 @@
import React, { Fragment, Component } from 'react';
import PropTypes from 'prop-types';
-import {
- EuiFormRow,
- EuiSwitch,
- EuiSelect,
- EuiTitle,
- EuiPanel,
- EuiSpacer,
- EuiHorizontalRule,
- EuiRadioGroup,
-} from '@elastic/eui';
+import { EuiFormRow, EuiSelect, EuiTitle, EuiPanel, EuiSpacer } from '@elastic/eui';
import { SingleFieldSelect } from '../../../components/single_field_select';
import { TooltipSelector } from '../../../components/tooltip_selector';
import { getIndexPatternService } from '../../../kibana_services';
import { i18n } from '@kbn/i18n';
import { getTermsFields, getSourceFields } from '../../../index_pattern_util';
-import { ValidatedRange } from '../../../components/validated_range';
-import {
- DEFAULT_MAX_INNER_RESULT_WINDOW,
- DEFAULT_MAX_RESULT_WINDOW,
- SORT_ORDER,
- SCALING_TYPES,
- LAYER_TYPE,
-} from '../../../../common/constants';
+import { SORT_ORDER } from '../../../../common/constants';
import { ESDocField } from '../../fields/es_doc_field';
import { FormattedMessage } from '@kbn/i18n/react';
-import { loadIndexSettings } from './load_index_settings';
import { indexPatterns } from '../../../../../../../../src/plugins/data/public';
+import { ScalingForm } from './scaling_form';
export class UpdateSourceEditor extends Component {
static propTypes = {
@@ -52,33 +36,18 @@ export class UpdateSourceEditor extends Component {
sourceFields: null,
termFields: null,
sortFields: null,
- maxInnerResultWindow: DEFAULT_MAX_INNER_RESULT_WINDOW,
- maxResultWindow: DEFAULT_MAX_RESULT_WINDOW,
supportsClustering: false,
};
componentDidMount() {
this._isMounted = true;
this.loadFields();
- this.loadIndexSettings();
}
componentWillUnmount() {
this._isMounted = false;
}
- async loadIndexSettings() {
- try {
- const indexPattern = await getIndexPatternService().get(this.props.indexPatternId);
- const { maxInnerResultWindow, maxResultWindow } = await loadIndexSettings(indexPattern.title);
- if (this._isMounted) {
- this.setState({ maxInnerResultWindow, maxResultWindow });
- }
- } catch (err) {
- return;
- }
- }
-
async loadFields() {
let indexPattern;
try {
@@ -133,85 +102,14 @@ export class UpdateSourceEditor extends Component {
this.props.onChange({ propName: 'tooltipProperties', value: propertyNames });
};
- _onScalingTypeChange = optionId => {
- const layerType =
- optionId === SCALING_TYPES.CLUSTERS ? LAYER_TYPE.BLENDED_VECTOR : LAYER_TYPE.VECTOR;
- this.props.onChange({ propName: 'scalingType', value: optionId, newLayerType: layerType });
- };
-
- _onFilterByMapBoundsChange = event => {
- this.props.onChange({ propName: 'filterByMapBounds', value: event.target.checked });
- };
-
- onTopHitsSplitFieldChange = topHitsSplitField => {
- this.props.onChange({ propName: 'topHitsSplitField', value: topHitsSplitField });
- };
-
- onSortFieldChange = sortField => {
+ _onSortFieldChange = sortField => {
this.props.onChange({ propName: 'sortField', value: sortField });
};
- onSortOrderChange = e => {
+ _onSortOrderChange = e => {
this.props.onChange({ propName: 'sortOrder', value: e.target.value });
};
- onTopHitsSizeChange = size => {
- this.props.onChange({ propName: 'topHitsSize', value: size });
- };
-
- _renderTopHitsForm() {
- let sizeSlider;
- if (this.props.topHitsSplitField) {
- sizeSlider = (
-
-
-
- );
- }
-
- return (
-
-
-
-
-
- {sizeSlider}
-
- );
- }
-
_renderTooltipsPanel() {
return (
@@ -257,7 +155,7 @@ export class UpdateSourceEditor extends Component {
defaultMessage: 'Select sort field',
})}
value={this.props.sortField}
- onChange={this.onSortFieldChange}
+ onChange={this._onSortFieldChange}
fields={this.state.sortFields}
compressed
/>
@@ -286,7 +184,7 @@ export class UpdateSourceEditor extends Component {
},
]}
value={this.props.sortOrder}
- onChange={this.onSortOrderChange}
+ onChange={this._onSortOrderChange}
compressed
/>
@@ -295,78 +193,18 @@ export class UpdateSourceEditor extends Component {
}
_renderScalingPanel() {
- const scalingOptions = [
- {
- id: SCALING_TYPES.LIMIT,
- label: i18n.translate('xpack.maps.source.esSearch.limitScalingLabel', {
- defaultMessage: 'Limit results to {maxResultWindow}.',
- values: { maxResultWindow: this.state.maxResultWindow },
- }),
- },
- {
- id: SCALING_TYPES.TOP_HITS,
- label: i18n.translate('xpack.maps.source.esSearch.useTopHitsLabel', {
- defaultMessage: 'Show top hits per entity.',
- }),
- },
- ];
- if (this.state.supportsClustering) {
- scalingOptions.push({
- id: SCALING_TYPES.CLUSTERS,
- label: i18n.translate('xpack.maps.source.esSearch.clusterScalingLabel', {
- defaultMessage: 'Show clusters when results exceed {maxResultWindow}.',
- values: { maxResultWindow: this.state.maxResultWindow },
- }),
- });
- }
-
- let filterByBoundsSwitch;
- if (this.props.scalingType !== SCALING_TYPES.CLUSTERS) {
- filterByBoundsSwitch = (
-
-
-
- );
- }
-
- let scalingForm = null;
- if (this.props.scalingType === SCALING_TYPES.TOP_HITS) {
- scalingForm = (
-
-
- {this._renderTopHitsForm()}
-
- );
- }
-
return (
-
-
-
-
-
-
-
-
-
-
-
-
- {filterByBoundsSwitch}
-
- {scalingForm}
+
);
}
diff --git a/x-pack/legacy/plugins/maps/public/layers/sources/es_search_source/update_source_editor.test.js b/x-pack/legacy/plugins/maps/public/layers/sources/es_search_source/update_source_editor.test.js
index e8a845c4b1669..65a91ce03994a 100644
--- a/x-pack/legacy/plugins/maps/public/layers/sources/es_search_source/update_source_editor.test.js
+++ b/x-pack/legacy/plugins/maps/public/layers/sources/es_search_source/update_source_editor.test.js
@@ -40,11 +40,3 @@ test('should enable sort order select when sort field provided', async () => {
expect(component).toMatchSnapshot();
});
-
-test('should render top hits form when scaling type is TOP_HITS', async () => {
- const component = shallow(
-
- );
-
- expect(component).toMatchSnapshot();
-});
diff --git a/x-pack/legacy/plugins/maps/server/routes.js b/x-pack/legacy/plugins/maps/server/routes.js
index 7ca659148449f..6aacfdc41aeea 100644
--- a/x-pack/legacy/plugins/maps/server/routes.js
+++ b/x-pack/legacy/plugins/maps/server/routes.js
@@ -409,26 +409,6 @@ export function initRoutes(server, licenseUid) {
},
});
- server.route({
- method: 'GET',
- path: `${ROOT}/indexCount`,
- handler: async (request, h) => {
- const { server, query } = request;
-
- if (!query.index) {
- return h.response().code(400);
- }
-
- const { callWithRequest } = server.plugins.elasticsearch.getCluster('data');
- try {
- const { count } = await callWithRequest(request, 'count', { index: query.index });
- return { count };
- } catch (error) {
- return h.response().code(400);
- }
- },
- });
-
server.route({
method: 'GET',
path: `/${INDEX_SETTINGS_API_PATH}`,
diff --git a/x-pack/plugins/maps/common/constants.ts b/x-pack/plugins/maps/common/constants.ts
index fecf8db0e85de..12b03f0386304 100644
--- a/x-pack/plugins/maps/common/constants.ts
+++ b/x-pack/plugins/maps/common/constants.ts
@@ -43,13 +43,13 @@ export function createMapPath(id: string) {
return `${MAP_BASE_URL}/${id}`;
}
-export const LAYER_TYPE = {
- TILE: 'TILE',
- VECTOR: 'VECTOR',
- VECTOR_TILE: 'VECTOR_TILE',
- HEATMAP: 'HEATMAP',
- BLENDED_VECTOR: 'BLENDED_VECTOR',
-};
+export enum LAYER_TYPE {
+ TILE = 'TILE',
+ VECTOR = 'VECTOR',
+ VECTOR_TILE = 'VECTOR_TILE',
+ HEATMAP = 'HEATMAP',
+ BLENDED_VECTOR = 'BLENDED_VECTOR',
+}
export enum SORT_ORDER {
ASC = 'asc',
diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json
index f33abe9d7ec6b..08142b1bc86bd 100644
--- a/x-pack/plugins/translations/translations/ja-JP.json
+++ b/x-pack/plugins/translations/translations/ja-JP.json
@@ -7191,9 +7191,6 @@
"xpack.maps.source.esGridDescription": "それぞれのグリッド付きセルのメトリックでグリッドにグループ分けされた地理空間データです。",
"xpack.maps.source.esGridTitle": "グリッド集約",
"xpack.maps.source.esSearch.convertToGeoJsonErrorMsg": "検索への応答を geoJson 機能コレクションに変換できません。エラー: {errorMsg}",
- "xpack.maps.source.esSearch.disableFilterByMapBoundsExplainMsg": "インデックス「{indexPatternTitle}」はドキュメント数が少なく、ダイナミックフィルターが必要ありません。",
- "xpack.maps.source.esSearch.disableFilterByMapBoundsTitle": "ダイナミックデータフィルターは無効です",
- "xpack.maps.source.esSearch.disableFilterByMapBoundsTurnOnMsg": "ドキュメント数が増えると思われる場合はダイナミックフィルターをオンにしてください。",
"xpack.maps.source.esSearch.extentFilterLabel": "マップの表示範囲でデータを動的にフィルタリング",
"xpack.maps.source.esSearch.geofieldLabel": "地理空間フィールド",
"xpack.maps.source.esSearch.geoFieldLabel": "地理空間フィールド",
diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json
index c5ebd81f46a6a..76396f0c0fa1a 100644
--- a/x-pack/plugins/translations/translations/zh-CN.json
+++ b/x-pack/plugins/translations/translations/zh-CN.json
@@ -7191,9 +7191,6 @@
"xpack.maps.source.esGridDescription": "地理空间数据在网格中进行分组,每个网格单元格都具有指标",
"xpack.maps.source.esGridTitle": "网格聚合",
"xpack.maps.source.esSearch.convertToGeoJsonErrorMsg": "无法将搜索响应转换成 geoJson 功能集合,错误:{errorMsg}",
- "xpack.maps.source.esSearch.disableFilterByMapBoundsExplainMsg": "索引“{indexPatternTitle}”具有很少数量的文档,不需要动态筛选。",
- "xpack.maps.source.esSearch.disableFilterByMapBoundsTitle": "动态数据筛选已禁用",
- "xpack.maps.source.esSearch.disableFilterByMapBoundsTurnOnMsg": "如果预期文档数量会增加,请打开动态筛选。",
"xpack.maps.source.esSearch.extentFilterLabel": "在可见地图区域中动态筛留数据",
"xpack.maps.source.esSearch.geofieldLabel": "地理空间字段",
"xpack.maps.source.esSearch.geoFieldLabel": "地理空间字段",