Skip to content

Commit 33bc443

Browse files
[Maps] convert ESAggSource to TS (#76999)
* [Maps] convert ESAggSource to TS * one more rename * tslint fixes Co-authored-by: Elastic Machine <elasticmachine@users.noreply.github.com>
1 parent a19484a commit 33bc443

File tree

16 files changed

+56
-79
lines changed

16 files changed

+56
-79
lines changed

x-pack/plugins/maps/public/classes/joins/inner_join.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,8 +94,8 @@ export class InnerJoin {
9494
return this._descriptor;
9595
}
9696

97-
async filterAndFormatPropertiesForTooltip(properties) {
98-
return await this._rightSource.filterAndFormatPropertiesToHtml(properties);
97+
async getTooltipProperties(properties) {
98+
return await this._rightSource.getTooltipProperties(properties);
9999
}
100100

101101
getIndexPatternIds() {

x-pack/plugins/maps/public/classes/layers/vector_layer/vector_layer.js

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -949,13 +949,11 @@ export class VectorLayer extends AbstractLayer {
949949

950950
async getPropertiesForTooltip(properties) {
951951
const vectorSource = this.getSource();
952-
let allProperties = await vectorSource.filterAndFormatPropertiesToHtml(properties);
952+
let allProperties = await vectorSource.getTooltipProperties(properties);
953953
this._addJoinsToSourceTooltips(allProperties);
954954

955955
for (let i = 0; i < this.getJoins().length; i++) {
956-
const propsFromJoin = await this.getJoins()[i].filterAndFormatPropertiesForTooltip(
957-
properties
958-
);
956+
const propsFromJoin = await this.getJoins()[i].getTooltipProperties(properties);
959957
allProperties = [...allProperties, ...propsFromJoin];
960958
}
961959
return allProperties;

x-pack/plugins/maps/public/classes/sources/ems_file_source/ems_file_source.test.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,10 @@ function makeEMSFileSource(tooltipProperties: string[]) {
1717
}
1818

1919
describe('EMS file source', () => {
20-
describe('filterAndFormatPropertiesToHtml', () => {
20+
describe('getTooltipProperties', () => {
2121
it('should create tooltip-properties with human readable label', async () => {
2222
const mockEMSFileSource = makeEMSFileSource(['iso2']);
23-
const out = await mockEMSFileSource.filterAndFormatPropertiesToHtml({
23+
const out = await mockEMSFileSource.getTooltipProperties({
2424
iso2: 'US',
2525
});
2626

@@ -33,7 +33,7 @@ describe('EMS file source', () => {
3333
it('should order tooltip-properties', async () => {
3434
const tooltipProperties = ['iso3', 'iso2', 'name'];
3535
const mockEMSFileSource = makeEMSFileSource(tooltipProperties);
36-
const out = await mockEMSFileSource.filterAndFormatPropertiesToHtml({
36+
const out = await mockEMSFileSource.getTooltipProperties({
3737
name: 'United States',
3838
iso3: 'USA',
3939
iso2: 'US',

x-pack/plugins/maps/public/classes/sources/ems_file_source/ems_file_source.tsx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ import { ITooltipProperty } from '../../tooltips/tooltip_property';
2323

2424
export interface IEmsFileSource extends IVectorSource {
2525
getEmsFieldLabel(emsFieldName: string): Promise<string>;
26-
createField({ fieldName }: { fieldName: string }): IField;
2726
}
2827

2928
export const sourceTitle = i18n.translate('xpack.maps.source.emsFileTitle', {
@@ -168,7 +167,7 @@ export class EMSFileSource extends AbstractVectorSource implements IEmsFileSourc
168167
return this._tooltipFields.length > 0;
169168
}
170169

171-
async filterAndFormatPropertiesToHtml(properties: unknown): Promise<ITooltipProperty[]> {
170+
async getTooltipProperties(properties: unknown): Promise<ITooltipProperty[]> {
172171
const promises = this._tooltipFields.map((field) => {
173172
// @ts-ignore
174173
const value = properties[field.getName()];

x-pack/plugins/maps/public/classes/sources/es_agg_source/es_agg_source.d.ts

Lines changed: 0 additions & 29 deletions
This file was deleted.

x-pack/plugins/maps/public/classes/sources/es_agg_source/es_agg_source.js renamed to x-pack/plugins/maps/public/classes/sources/es_agg_source/es_agg_source.ts

Lines changed: 39 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -5,65 +5,85 @@
55
*/
66

77
import { i18n } from '@kbn/i18n';
8+
import { Adapters } from 'src/plugins/inspector/public';
9+
import { GeoJsonProperties } from 'geojson';
10+
import { IESSource } from '../es_source';
811
import { AbstractESSource } from '../es_source';
912
import { esAggFieldsFactory } from '../../fields/es_agg_field';
1013
import { AGG_TYPE, COUNT_PROP_LABEL, FIELD_ORIGIN } from '../../../../common/constants';
14+
import { IESAggField } from '../../fields/es_agg_field';
1115
import { getSourceAggKey } from '../../../../common/get_agg_key';
16+
import { AbstractESAggSourceDescriptor, AggDescriptor } from '../../../../common/descriptor_types';
17+
import { IndexPattern } from '../../../../../../../src/plugins/data/public';
18+
import { IField } from '../../fields/field';
19+
import { ITooltipProperty } from '../../tooltips/tooltip_property';
1220

1321
export const DEFAULT_METRIC = { type: AGG_TYPE.COUNT };
1422

23+
export interface IESAggSource extends IESSource {
24+
getAggKey(aggType: AGG_TYPE, fieldName: string): string;
25+
getAggLabel(aggType: AGG_TYPE, fieldName: string): string;
26+
getMetricFields(): IESAggField[];
27+
hasMatchingMetricField(fieldName: string): boolean;
28+
getMetricFieldForName(fieldName: string): IESAggField | null;
29+
getValueAggsDsl(indexPattern: IndexPattern): { [key: string]: unknown };
30+
}
31+
1532
export class AbstractESAggSource extends AbstractESSource {
16-
constructor(descriptor, inspectorAdapters) {
33+
private readonly _metricFields: IESAggField[];
34+
35+
constructor(descriptor: AbstractESAggSourceDescriptor, inspectorAdapters: Adapters) {
1736
super(descriptor, inspectorAdapters);
1837
this._metricFields = [];
19-
if (this._descriptor.metrics) {
20-
this._descriptor.metrics.forEach((aggDescriptor) => {
38+
if (descriptor.metrics) {
39+
descriptor.metrics.forEach((aggDescriptor: AggDescriptor) => {
2140
this._metricFields.push(
2241
...esAggFieldsFactory(aggDescriptor, this, this.getOriginForField())
2342
);
2443
});
2544
}
2645
}
2746

28-
getFieldByName(name) {
29-
return this.getMetricFieldForName(name);
47+
getFieldByName(fieldName: string) {
48+
return this.getMetricFieldForName(fieldName);
3049
}
3150

32-
createField() {
51+
createField({ fieldName }: { fieldName: string }): IField {
3352
throw new Error('Cannot create a new field from just a fieldname for an es_agg_source.');
3453
}
3554

36-
hasMatchingMetricField(fieldName) {
55+
hasMatchingMetricField(fieldName: string): boolean {
3756
const matchingField = this.getMetricFieldForName(fieldName);
3857
return !!matchingField;
3958
}
4059

41-
getMetricFieldForName(fieldName) {
42-
return this.getMetricFields().find((metricField) => {
60+
getMetricFieldForName(fieldName: string): IESAggField | null {
61+
const targetMetricField = this.getMetricFields().find((metricField: IESAggField) => {
4362
return metricField.getName() === fieldName;
4463
});
64+
return targetMetricField ? targetMetricField : null;
4565
}
4666

4767
getOriginForField() {
4868
return FIELD_ORIGIN.SOURCE;
4969
}
5070

51-
getMetricFields() {
71+
getMetricFields(): IESAggField[] {
5272
const metrics = this._metricFields.filter((esAggField) => esAggField.isValid());
5373
// Handle case where metrics is empty because older saved object state is empty array or there are no valid aggs.
5474
return metrics.length === 0
5575
? esAggFieldsFactory({ type: AGG_TYPE.COUNT }, this, this.getOriginForField())
5676
: metrics;
5777
}
5878

59-
getAggKey(aggType, fieldName) {
79+
getAggKey(aggType: AGG_TYPE, fieldName: string): string {
6080
return getSourceAggKey({
6181
aggType,
6282
aggFieldName: fieldName,
6383
});
6484
}
6585

66-
getAggLabel(aggType, fieldName) {
86+
getAggLabel(aggType: AGG_TYPE, fieldName: string): string {
6787
switch (aggType) {
6888
case AGG_TYPE.COUNT:
6989
return COUNT_PROP_LABEL;
@@ -81,8 +101,8 @@ export class AbstractESAggSource extends AbstractESSource {
81101
return this.getMetricFields();
82102
}
83103

84-
getValueAggsDsl(indexPattern) {
85-
const valueAggsDsl = {};
104+
getValueAggsDsl(indexPattern: IndexPattern) {
105+
const valueAggsDsl: { [key: string]: unknown } = {};
86106
this.getMetricFields().forEach((esAggMetric) => {
87107
const aggDsl = esAggMetric.getValueAggDsl(indexPattern);
88108
if (aggDsl) {
@@ -92,9 +112,9 @@ export class AbstractESAggSource extends AbstractESSource {
92112
return valueAggsDsl;
93113
}
94114

95-
async filterAndFormatPropertiesToHtmlForMetricFields(properties) {
96-
const metricFields = this.getMetricFields();
97-
const tooltipPropertiesPromises = [];
115+
async getTooltipProperties(properties: GeoJsonProperties) {
116+
const metricFields = await this.getFields();
117+
const promises: Array<Promise<ITooltipProperty>> = [];
98118
metricFields.forEach((metricField) => {
99119
let value;
100120
for (const key in properties) {
@@ -105,9 +125,9 @@ export class AbstractESAggSource extends AbstractESSource {
105125
}
106126

107127
const tooltipPromise = metricField.createTooltipProperty(value);
108-
tooltipPropertiesPromises.push(tooltipPromise);
128+
promises.push(tooltipPromise);
109129
});
110130

111-
return await Promise.all(tooltipPropertiesPromises);
131+
return await Promise.all(promises);
112132
}
113133
}

x-pack/plugins/maps/public/classes/sources/es_geo_grid_source/es_geo_grid_source.d.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import { AbstractESAggSource } from '../es_agg_source';
88
import { ESGeoGridSourceDescriptor } from '../../../../common/descriptor_types';
99
import { GRID_RESOLUTION } from '../../../../common/constants';
10+
import { IField } from '../../fields/field';
1011

1112
export class ESGeoGridSource extends AbstractESAggSource {
1213
static createDescriptor({
@@ -21,4 +22,5 @@ export class ESGeoGridSource extends AbstractESAggSource {
2122
getFieldNames(): string[];
2223
getGridResolution(): GRID_RESOLUTION;
2324
getGeoGridPrecision(zoom: number): number;
25+
createField({ fieldName }: { fieldName: string }): IField;
2426
}

x-pack/plugins/maps/public/classes/sources/es_geo_grid_source/es_geo_grid_source.js

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -321,10 +321,6 @@ export class ESGeoGridSource extends AbstractESAggSource {
321321
return true;
322322
}
323323

324-
async filterAndFormatPropertiesToHtml(properties) {
325-
return await this.filterAndFormatPropertiesToHtmlForMetricFields(properties);
326-
}
327-
328324
async getSupportedShapeTypes() {
329325
if (this._descriptor.requestType === RENDER_AS.GRID) {
330326
return [VECTOR_SHAPE_TYPE.POLYGON];

x-pack/plugins/maps/public/classes/sources/es_pew_pew_source/es_pew_pew_source.js

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -223,10 +223,6 @@ export class ESPewPewSource extends AbstractESAggSource {
223223
canFormatFeatureProperties() {
224224
return true;
225225
}
226-
227-
async filterAndFormatPropertiesToHtml(properties) {
228-
return await this.filterAndFormatPropertiesToHtmlForMetricFields(properties);
229-
}
230226
}
231227

232228
registerSource({

x-pack/plugins/maps/public/classes/sources/es_search_source/es_search_source.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -438,7 +438,7 @@ export class ESSearchSource extends AbstractESSource {
438438
return properties;
439439
}
440440

441-
async filterAndFormatPropertiesToHtml(properties) {
441+
async getTooltipProperties(properties) {
442442
const indexPattern = await this.getIndexPattern();
443443
const propertyValues = await this._loadTooltipProperties(
444444
properties._id,

0 commit comments

Comments
 (0)