[Unified Search] Rename OrFilter to CombinedFilter (#142761)

* feat: OrFilter -> CombinedFilter

* [CI] Auto-commit changed files from 'node scripts/build_plugin_list_docs'

* feat: updated filter's type OR -> combined

* fix: jest test
This commit is contained in:
Nodir Latipov 2022-10-10 16:14:57 +05:00 committed by GitHub
parent 6e8487ee22
commit 0518a7434d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
12 changed files with 66 additions and 66 deletions

View file

@ -67,7 +67,7 @@ export {
buildEmptyFilter,
buildExistsFilter,
buildFilter,
buildOrFilter,
buildCombinedFilter,
buildPhraseFilter,
buildPhrasesFilter,
buildQueryFilter,
@ -90,7 +90,7 @@ export {
isFilterPinned,
isFilters,
isMatchAllFilter,
isOrFilter,
isCombinedFilter,
isPhraseFilter,
isPhrasesFilter,
isQueryStringFilter,

View file

@ -13,7 +13,7 @@ import { filterMatchesIndex } from './filter_matches_index';
import { Filter, cleanFilter, isFilterDisabled } from '../filters';
import { BoolQuery, DataViewBase } from './types';
import { handleNestedFilter } from './handle_nested_filter';
import { handleOrFilter } from './handle_or_filter';
import { handleCombinedFilter } from './handle_combined_filter';
/**
* Create a filter that can be reversed for filters with negate set
@ -94,7 +94,7 @@ export const buildQueryFromFilters = (
ignoreUnmapped: nestedIgnoreUnmapped,
});
})
.map((filter) => handleOrFilter(filter, inputDataViews, options))
.map((filter) => handleCombinedFilter(filter, inputDataViews, options))
.map(cleanFilter)
.map(translateToQuery);
};

View file

@ -8,16 +8,16 @@
import { fields } from '../filters/stubs';
import { DataViewBase } from './types';
import { handleOrFilter } from './handle_or_filter';
import { handleCombinedFilter } from './handle_combined_filter';
import {
buildExistsFilter,
buildOrFilter,
buildCombinedFilter,
buildPhraseFilter,
buildPhrasesFilter,
buildRangeFilter,
} from '../filters';
describe('#handleOrFilter', function () {
describe('#handleCombinedFilter', function () {
const indexPattern: DataViewBase = {
id: 'logstash-*',
fields,
@ -31,8 +31,8 @@ describe('#handleOrFilter', function () {
};
it('Handles an empty list of filters', () => {
const filter = buildOrFilter([]);
const result = handleOrFilter(filter);
const filter = buildCombinedFilter([]);
const result = handleCombinedFilter(filter);
expect(result.query).toMatchInlineSnapshot(`
Object {
"bool": Object {
@ -49,8 +49,8 @@ describe('#handleOrFilter', function () {
buildRangeFilter(getField('bytes'), { gte: 10 }, indexPattern),
buildExistsFilter(getField('machine.os'), indexPattern),
];
const filter = buildOrFilter(filters);
const result = handleOrFilter(filter);
const filter = buildCombinedFilter(filters);
const result = handleCombinedFilter(filter);
expect(result.query).toMatchInlineSnapshot(`
Object {
"bool": Object {
@ -114,8 +114,8 @@ describe('#handleOrFilter', function () {
buildExistsFilter(getField('machine.os'), indexPattern),
],
];
const filter = buildOrFilter(filters);
const result = handleOrFilter(filter);
const filter = buildCombinedFilter(filters);
const result = handleCombinedFilter(filter);
expect(result.query).toMatchInlineSnapshot(`
Object {
"bool": Object {
@ -162,19 +162,19 @@ describe('#handleOrFilter', function () {
`);
});
it('Handles nested OR filters', () => {
const nestedOrFilter = buildOrFilter([
it('Handles nested COMBINED filters', () => {
const nestedCombinedFilter = buildCombinedFilter([
buildPhraseFilter(getField('machine.os'), 'value', indexPattern),
buildPhraseFilter(getField('extension'), 'value', indexPattern),
]);
const filters = [
buildPhraseFilter(getField('extension'), 'value2', indexPattern),
nestedOrFilter,
nestedCombinedFilter,
buildRangeFilter(getField('bytes'), { gte: 10 }, indexPattern),
buildExistsFilter(getField('machine.os.raw'), indexPattern),
];
const filter = buildOrFilter(filters);
const result = handleOrFilter(filter);
const filter = buildCombinedFilter(filters);
const result = handleCombinedFilter(filter);
expect(result.query).toMatchInlineSnapshot(`
Object {
"bool": Object {
@ -283,8 +283,8 @@ describe('#handleOrFilter', function () {
buildRangeFilter(getField('bytes'), { gte: 10 }, indexPattern),
buildExistsFilter(getField('machine.os'), indexPattern),
];
const filter = buildOrFilter(filters);
const result = handleOrFilter(filter);
const filter = buildCombinedFilter(filters);
const result = handleCombinedFilter(filter);
expect(result.query).toMatchInlineSnapshot(`
Object {
"bool": Object {
@ -366,8 +366,8 @@ describe('#handleOrFilter', function () {
[disabledFilter, buildRangeFilter(getField('bytes'), { gte: 10 }, indexPattern)],
buildExistsFilter(getField('machine.os'), indexPattern),
];
const filter = buildOrFilter(filters);
const result = handleOrFilter(filter);
const filter = buildCombinedFilter(filters);
const result = handleCombinedFilter(filter);
expect(result.query).toMatchInlineSnapshot(`
Object {
"bool": Object {
@ -428,7 +428,7 @@ describe('#handleOrFilter', function () {
[
buildPhrasesFilter(getField('extension'), ['tar', 'gz'], indexPattern),
buildPhraseFilter(getField('ssl'), false, indexPattern),
buildOrFilter([
buildCombinedFilter([
buildPhraseFilter(getField('extension'), 'value', indexPattern),
buildRangeFilter(getField('bytes'), { gte: 10 }, indexPattern),
]),
@ -436,8 +436,8 @@ describe('#handleOrFilter', function () {
],
buildPhrasesFilter(getField('machine.os.keyword'), ['foo', 'bar'], indexPattern),
];
const filter = buildOrFilter(filters);
const result = handleOrFilter(filter);
const filter = buildCombinedFilter(filters);
const result = handleCombinedFilter(filter);
expect(result.query).toMatchInlineSnapshot(`
Object {
"bool": Object {
@ -554,8 +554,8 @@ describe('#handleOrFilter', function () {
buildRangeFilter(getField('bytes'), { gte: 10 }, indexPattern),
buildExistsFilter(getField('machine.os'), indexPattern),
];
const filter = buildOrFilter(filters);
const { query, ...rest } = handleOrFilter(filter);
const filter = buildCombinedFilter(filters);
const { query, ...rest } = handleCombinedFilter(filter);
expect(rest).toMatchInlineSnapshot(`
Object {
"$state": Object {
@ -602,7 +602,7 @@ describe('#handleOrFilter', function () {
},
},
],
"type": "OR",
"type": "combined",
},
}
`);

View file

@ -6,17 +6,17 @@
* Side Public License, v 1.
*/
import { Filter, FilterItem, isOrFilter } from '../filters';
import { Filter, FilterItem, isCombinedFilter } from '../filters';
import { DataViewBase } from './types';
import { buildQueryFromFilters, EsQueryFiltersConfig } from './from_filters';
/** @internal */
export const handleOrFilter = (
export const handleCombinedFilter = (
filter: Filter,
inputDataViews?: DataViewBase | DataViewBase[],
options: EsQueryFiltersConfig = {}
): Filter => {
if (!isOrFilter(filter)) return filter;
if (!isCombinedFilter(filter)) return filter;
const { params } = filter.meta;
const should = params.map((subFilter) => {
const subFilters = Array.isArray(subFilter) ? subFilter : [subFilter];

View file

@ -10,7 +10,7 @@ import { Filter, FilterMeta, FILTERS } from './types';
import { buildEmptyFilter } from './build_empty_filter';
/**
* Each item in an OR filter may represent either one filter (to be ORed) or an array of filters (ANDed together before
* Each item in an COMBINED filter may represent either one filter (to be ORed) or an array of filters (ANDed together before
* becoming part of the OR clause).
* @public
*/
@ -19,38 +19,38 @@ export type FilterItem = Filter | FilterItem[];
/**
* @public
*/
export interface OrFilterMeta extends FilterMeta {
type: typeof FILTERS.OR;
export interface CombinedFilterMeta extends FilterMeta {
type: typeof FILTERS.COMBINED;
params: FilterItem[];
}
/**
* @public
*/
export interface OrFilter extends Filter {
meta: OrFilterMeta;
export interface CombinedFilter extends Filter {
meta: CombinedFilterMeta;
}
/**
* @public
*/
export function isOrFilter(filter: Filter): filter is OrFilter {
return filter?.meta?.type === FILTERS.OR;
export function isCombinedFilter(filter: Filter): filter is CombinedFilter {
return filter?.meta?.type === FILTERS.COMBINED;
}
/**
* Builds an OR filter. An OR filter is a filter with multiple sub-filters. Each sub-filter (FilterItem) represents a
* Builds an COMBINED filter. An COMBINED filter is a filter with multiple sub-filters. Each sub-filter (FilterItem) represents a
* condition.
* @param filters An array of OrFilterItem
* @param filters An array of CombinedFilterItem
* @public
*/
export function buildOrFilter(filters: FilterItem[]): OrFilter {
export function buildCombinedFilter(filters: FilterItem[]): CombinedFilter {
const filter = buildEmptyFilter(false);
return {
...filter,
meta: {
...filter.meta,
type: FILTERS.OR,
type: FILTERS.COMBINED,
params: filters,
},
};

View file

@ -14,7 +14,7 @@ export * from './exists_filter';
export * from './get_filter_field';
export * from './get_filter_params';
export * from './match_all_filter';
export * from './or_filter';
export * from './combined_filter';
export * from './phrase_filter';
export * from './phrases_filter';
export * from './query_string_filter';

View file

@ -37,7 +37,7 @@ export enum FILTERS {
RANGE = 'range',
RANGE_FROM_VALUE = 'range_from_value',
SPATIAL_FILTER = 'spatial_filter',
OR = 'OR',
COMBINED = 'combined',
}
/**

View file

@ -34,8 +34,8 @@ export {
export {
isExistsFilter,
isMatchAllFilter,
buildOrFilter,
isOrFilter,
buildCombinedFilter,
isCombinedFilter,
isPhraseFilter,
isPhrasesFilter,
isRangeFilter,
@ -77,8 +77,8 @@ export type {
CustomFilter,
RangeFilterParams,
QueryStringFilter,
OrFilter,
OrFilterMeta,
CombinedFilter,
CombinedFilterMeta,
FilterItem,
} from './build_filters';

View file

@ -33,7 +33,7 @@ export const getFiltersMock = () =>
},
{
meta: {
type: 'OR',
type: 'combined',
params: [
{
meta: {
@ -302,7 +302,7 @@ export const getDataThatNeedsNormalized = () =>
},
{
meta: {
type: 'OR',
type: 'combined',
params: [
{
meta: {
@ -420,7 +420,7 @@ export const getDataAfterNormalized = () =>
},
{
meta: {
type: 'OR',
type: 'combined',
params: [
{
meta: {
@ -515,7 +515,7 @@ export const getDataThatNeedNotNormalized = () =>
[
{
meta: {
type: 'OR',
type: 'combined',
params: [
{
meta: {

View file

@ -9,7 +9,7 @@
import { DataViewField } from '@kbn/data-views-plugin/common';
import type { Filter, FilterItem } from '@kbn/es-query';
import { cloneDeep } from 'lodash';
import { buildOrFilter, isOrFilter } from '@kbn/es-query';
import { buildCombinedFilter, isCombinedFilter } from '@kbn/es-query';
import { ConditionTypes, getConditionalOperationType } from '../utils';
import type { Operator } from '../filter_bar/filter_editor';
@ -66,8 +66,8 @@ export const normalizeFilters = (filters: FilterItem[]) => {
const doRecursive = (f: FilterItem, parent: FilterItem) => {
if (Array.isArray(f)) {
return normalizeArray(f, parent);
} else if (isOrFilter(f)) {
return normalizeOr(f);
} else if (isCombinedFilter(f)) {
return normalizeCombined(f);
}
return f;
};
@ -92,17 +92,17 @@ export const normalizeFilters = (filters: FilterItem[]) => {
return Array.isArray(parent) ? partiallyNormalized.flat() : partiallyNormalized;
};
const normalizeOr = (orFilter: Filter): FilterItem => {
const orFilters = getGroupedFilters(orFilter);
if (orFilters.length < 2) {
return orFilters[0];
const normalizeCombined = (combinedFilter: Filter): FilterItem => {
const combinedFilters = getGroupedFilters(combinedFilter);
if (combinedFilters.length < 2) {
return combinedFilters[0];
}
return {
...orFilter,
...combinedFilter,
meta: {
...orFilter.meta,
params: doRecursive(orFilters, orFilter),
...combinedFilter.meta,
params: doRecursive(combinedFilters, combinedFilter),
},
};
};
@ -138,7 +138,7 @@ export const addFilter = (
if (parentConditionType !== conditionalType) {
if (conditionalType === ConditionTypes.OR) {
targetArray.splice(selector, 1, buildOrFilter([targetArray[selector], filter]));
targetArray.splice(selector, 1, buildCombinedFilter([targetArray[selector], filter]));
}
if (conditionalType === ConditionTypes.AND) {
targetArray.splice(selector, 1, [targetArray[selector], filter]);

View file

@ -6,7 +6,7 @@
* Side Public License, v 1.
*/
import { isOrFilter, FilterItem } from '@kbn/es-query';
import { isCombinedFilter, FilterItem } from '@kbn/es-query';
export enum ConditionTypes {
OR = 'OR',
@ -20,7 +20,7 @@ export enum ConditionTypes {
export const getConditionalOperationType = (filter: FilterItem) => {
if (Array.isArray(filter)) {
return ConditionTypes.AND;
} else if (isOrFilter(filter)) {
} else if (isCombinedFilter(filter)) {
return ConditionTypes.OR;
}
};

View file

@ -9,4 +9,4 @@
export { onRaf } from './on_raf';
export { shallowEqual } from './shallow_equal';
export { ConditionTypes, getConditionalOperationType } from './or_filter';
export { ConditionTypes, getConditionalOperationType } from './combined_filter';