mirror of
https://github.com/elastic/kibana.git
synced 2025-04-23 09:19:04 -04:00
[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:
parent
6e8487ee22
commit
0518a7434d
12 changed files with 66 additions and 66 deletions
|
@ -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,
|
||||
|
|
|
@ -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);
|
||||
};
|
||||
|
|
|
@ -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",
|
||||
},
|
||||
}
|
||||
`);
|
|
@ -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];
|
|
@ -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,
|
||||
},
|
||||
};
|
|
@ -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';
|
||||
|
|
|
@ -37,7 +37,7 @@ export enum FILTERS {
|
|||
RANGE = 'range',
|
||||
RANGE_FROM_VALUE = 'range_from_value',
|
||||
SPATIAL_FILTER = 'spatial_filter',
|
||||
OR = 'OR',
|
||||
COMBINED = 'combined',
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -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';
|
||||
|
||||
|
|
|
@ -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: {
|
||||
|
|
|
@ -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]);
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
};
|
|
@ -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';
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue