Skip to content

Commit

Permalink
[Query] Remove es query dependency on format.convert (#103174)
Browse files Browse the repository at this point in the history
* remove es query dependency on format.convert

* fix types

* types

Co-authored-by: Kibana Machine <[email protected]>
  • Loading branch information
lizozom and kibanamachine authored Jun 27, 2021
1 parent df8787b commit 07af5d3
Show file tree
Hide file tree
Showing 6 changed files with 72 additions and 18 deletions.
7 changes: 1 addition & 6 deletions src/plugins/data/common/es_query/filters/phrases_filter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -41,11 +41,6 @@ export const buildPhrasesFilter = (
const type = FILTERS.PHRASES;
const key = field.name;

const format = (f: IFieldType, value: any) =>
f && f.format && f.format.convert ? f.format.convert(value) : value;

const value = params.map((v: any) => format(field, v)).join(', ');

let should;
if (field.scripted) {
should = params.map((v: any) => ({
Expand All @@ -60,7 +55,7 @@ export const buildPhrasesFilter = (
}

return {
meta: { index, type, key, value, params },
meta: { index, type, key, params },
query: {
bool: {
should,
Expand Down
5 changes: 1 addition & 4 deletions src/plugins/data/common/es_query/filters/range_filter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -84,10 +84,7 @@ export const getRangeFilterField = (filter: RangeFilter) => {
};

const formatValue = (field: IFieldType, params: any[]) =>
map(params, (val: any, key: string) => get(operators, key) + format(field, val)).join(' ');

const format = (field: IFieldType, value: any) =>
field && field.format && field.format.convert ? field.format.convert(value) : value;
map(params, (val: any, key: string) => get(operators, key) + val).join(' ');

// Creates a filter where the value for the given field is in the given range
// params should be an object containing `lt`, `lte`, `gt`, and/or `gte`
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,6 @@ describe('interpreter/functions#phraseFilter', () => {
"something",
],
"type": "phrases",
"value": "test, something",
},
"query": Object {
"bool": Object {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
/*
* 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 and the Server Side Public License, v 1; you may not use this file except
* in compliance with, at your election, the Elastic License 2.0 or the Server
* Side Public License, v 1.
*/

import { stubIndexPattern, phraseFilter } from 'src/plugins/data/common/stubs';
import { getDisplayValueFromFilter } from './get_display_value';

describe('getDisplayValueFromFilter', () => {
it('returns the value if string', () => {
phraseFilter.meta.value = 'abc';
const displayValue = getDisplayValueFromFilter(phraseFilter, [stubIndexPattern]);
expect(displayValue).toBe('abc');
});

it('returns the value if undefined', () => {
phraseFilter.meta.value = undefined;
const displayValue = getDisplayValueFromFilter(phraseFilter, [stubIndexPattern]);
expect(displayValue).toBe('');
});

it('calls the value function if proivided', () => {
// The type of value currently doesn't match how it's used. Refactor needed.
phraseFilter.meta.value = jest.fn((x) => {
return 'abc';
}) as any;
const displayValue = getDisplayValueFromFilter(phraseFilter, [stubIndexPattern]);
expect(displayValue).toBe('abc');
expect(phraseFilter.meta.value).toHaveBeenCalledWith(undefined);
});

it('calls the value function if proivided, with formatter', () => {
stubIndexPattern.getFormatterForField = jest.fn().mockReturnValue('banana');
phraseFilter.meta.value = jest.fn((x) => {
return x + 'abc';
}) as any;
const displayValue = getDisplayValueFromFilter(phraseFilter, [stubIndexPattern]);
expect(stubIndexPattern.getFormatterForField).toHaveBeenCalledTimes(1);
expect(phraseFilter.meta.value).toHaveBeenCalledWith('banana');
expect(displayValue).toBe('bananaabc');
});
});
Original file line number Diff line number Diff line change
Expand Up @@ -28,11 +28,14 @@ function getValueFormatter(indexPattern?: IIndexPattern, key?: string) {
}

export function getDisplayValueFromFilter(filter: Filter, indexPatterns: IIndexPattern[]): string {
if (typeof filter.meta.value === 'function') {
const { key, value } = filter.meta;
if (typeof value === 'function') {
const indexPattern = getIndexPatternFromFilter(filter, indexPatterns);
const valueFormatter: any = getValueFormatter(indexPattern, filter.meta.key);
return (filter.meta.value as any)(valueFormatter);
const valueFormatter = getValueFormatter(indexPattern, key);
// TODO: distinguish between FilterMeta which is serializable to mapped FilterMeta
// Where value can be a function.
return (value as any)(valueFormatter);
} else {
return filter.meta.value || '';
return value || '';
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,29 @@
* Side Public License, v 1.
*/

import { Filter, isPhrasesFilter } from '../../../../../common';
import { Filter, FilterValueFormatter, isPhrasesFilter } from '../../../../../common';

const getFormattedValueFn = (params: any) => {
return (formatter?: FilterValueFormatter) => {
return params
.map((v: any) => {
return formatter ? formatter.convert(v) : v;
})
.join(', ');
};
};

export const mapPhrases = (filter: Filter) => {
if (!isPhrasesFilter(filter)) {
throw filter;
}

const { type, key, value, params } = filter.meta;
const { type, key, params } = filter.meta;

return { type, key, value, params };
return {
type,
key,
value: getFormattedValueFn(params),
params,
};
};

0 comments on commit 07af5d3

Please sign in to comment.