From 0657ad1c412dd7e679c5e21639cd16cf5b9211d7 Mon Sep 17 00:00:00 2001 From: Liza Katz Date: Wed, 12 Feb 2020 13:22:06 +0200 Subject: [PATCH] Explicit namespaces for esFilters (#57177) * Explicit namespaces for esQuery and esQuery * Remove unnecessary file from siem * remove jsonvalue definition from siem * esFilters refactor O_O * Delete IFilterType * import fixes * Fix merge Co-authored-by: Elastic Machine --- .../public/actions/select_range_action.ts | 16 +- .../data/public/actions/value_click_action.ts | 20 ++- .../filter_manager/filter_state_manager.ts | 13 +- .../test_helpers/get_stub_filter.ts | 6 +- .../filter_manager/test_helpers/stub_state.ts | 4 +- .../create_filter/date_histogram.test.ts | 4 +- .../aggs/buckets/create_filter/date_range.ts | 4 +- .../aggs/buckets/create_filter/histogram.ts | 4 +- .../aggs/buckets/create_filter/ip_range.ts | 4 +- .../aggs/buckets/create_filter/terms.test.ts | 12 +- .../aggs/buckets/create_filter/terms.ts | 4 +- .../data/public/search/expressions/esaggs.ts | 4 +- .../public/control/control.ts | 4 +- .../public/control/create_search_source.ts | 4 +- .../filter_manager/filter_manager.test.ts | 12 +- .../control/filter_manager/filter_manager.ts | 6 +- .../phrase_filter_manager.test.ts | 14 +- .../filter_manager/phrase_filter_manager.ts | 11 +- .../range_filter_manager.test.ts | 15 +- .../filter_manager/range_filter_manager.ts | 13 +- .../public/vis_controller.tsx | 4 +- .../migrations/move_filters_to_query.test.ts | 4 +- .../migrations/move_filters_to_query.ts | 10 +- .../dashboard/np_ready/dashboard_app.tsx | 8 +- .../np_ready/dashboard_app_controller.tsx | 13 +- .../np_ready/dashboard_state_manager.ts | 10 +- .../dashboard/np_ready/lib/filter_utils.ts | 6 +- .../kibana/public/dashboard/np_ready/types.ts | 4 +- .../saved_dashboard/saved_dashboard.ts | 4 +- .../np_ready/angular/context/api/context.ts | 6 +- .../context/query_parameters/actions.js | 10 +- .../discover/np_ready/angular/discover.js | 4 +- .../np_ready/embeddable/search_embeddable.ts | 15 +- .../discover/np_ready/embeddable/types.ts | 9 +- .../public/visualize/np_ready/types.d.ts | 4 +- .../helpers/timelion_request_handler.ts | 4 +- .../public/vega_request_handler.ts | 4 +- .../public/embeddable/query_geohash_bounds.ts | 6 +- .../public/embeddable/visualize_embeddable.ts | 8 +- src/legacy/ui/public/timefilter/index.ts | 1 + .../public/embeddable/dashboard_container.tsx | 6 +- .../common/es_query/filters/build_filters.ts | 37 +++-- .../es_query/filters/stubs/exists_filter.ts | 6 +- .../es_query/filters/stubs/phrase_filter.ts | 6 +- .../es_query/filters/stubs/phrases_filter.ts | 6 +- .../es_query/filters/stubs/range_filter.ts | 6 +- src/plugins/data/common/es_query/index.ts | 4 +- .../public/actions/apply_filter_action.ts | 20 +-- src/plugins/data/public/index.ts | 148 ++++++++++++++++-- .../filter_manager/filter_manager.test.ts | 122 ++++++--------- .../query/filter_manager/filter_manager.ts | 47 +++--- .../lib/compare_filters.test.ts | 94 ++++------- .../filter_manager/lib/compare_filters.ts | 20 ++- .../filter_manager/lib/dedup_filters.test.ts | 76 ++++----- .../query/filter_manager/lib/dedup_filters.ts | 10 +- .../lib/generate_filter.test.ts | 36 +++-- .../filter_manager/lib/generate_filters.ts | 42 +++-- .../lib/generate_mapping_chain.test.ts | 14 +- .../lib/generate_mapping_chain.ts | 4 +- .../lib/map_and_flatten_filters.test.ts | 6 +- .../lib/map_and_flatten_filters.ts | 6 +- .../filter_manager/lib/map_filter.test.ts | 14 +- .../query/filter_manager/lib/map_filter.ts | 4 +- .../lib/mappers/map_default.test.ts | 6 +- .../filter_manager/lib/mappers/map_default.ts | 6 +- .../lib/mappers/map_exists.test.ts | 11 +- .../filter_manager/lib/mappers/map_exists.ts | 10 +- .../lib/mappers/map_geo_bounding_box.test.ts | 8 +- .../lib/mappers/map_geo_bounding_box.ts | 18 ++- .../lib/mappers/map_geo_polygon.test.ts | 8 +- .../lib/mappers/map_geo_polygon.ts | 18 ++- .../lib/mappers/map_match_all.test.ts | 4 +- .../lib/mappers/map_match_all.ts | 8 +- .../lib/mappers/map_missing.test.ts | 8 +- .../filter_manager/lib/mappers/map_missing.ts | 10 +- .../lib/mappers/map_phrase.test.ts | 6 +- .../filter_manager/lib/mappers/map_phrase.ts | 29 ++-- .../filter_manager/lib/mappers/map_phrases.ts | 6 +- .../lib/mappers/map_query_string.test.ts | 14 +- .../lib/mappers/map_query_string.ts | 8 +- .../lib/mappers/map_range.test.ts | 8 +- .../filter_manager/lib/mappers/map_range.ts | 28 ++-- .../lib/mappers/map_spatial_filter.test.ts | 22 +-- .../lib/mappers/map_spatial_filter.ts | 6 +- .../filter_manager/lib/only_disabled.test.ts | 46 +++--- .../query/filter_manager/lib/only_disabled.ts | 9 +- .../filter_manager/lib/sort_filters.test.ts | 50 ++---- .../query/filter_manager/lib/sort_filters.ts | 10 +- .../filter_manager/lib/uniq_filters.test.ts | 40 ++--- .../query/filter_manager/lib/uniq_filters.ts | 8 +- .../test_helpers/get_filters_array.ts | 4 +- .../test_helpers/get_stub_filter.ts | 6 +- .../data/public/query/filter_manager/types.ts | 6 +- .../saved_query/saved_query_service.test.ts | 5 +- .../data/public/query/saved_query/types.ts | 4 +- .../query/state_sync/sync_app_filters.test.ts | 22 +-- .../query/state_sync/sync_app_filters.ts | 4 +- .../query/state_sync/sync_query.test.ts | 10 +- .../public/query/state_sync/sync_query.ts | 6 +- .../data/public/query/timefilter/get_time.ts | 7 +- .../timefilter/lib/change_time_filter.test.ts | 6 +- .../timefilter/lib/change_time_filter.ts | 6 +- .../lib/extract_time_filter.test.ts | 27 ++-- .../timefilter/lib/extract_time_filter.ts | 10 +- .../search/search_source/search_source.ts | 8 +- .../data/public/search/search_source/types.ts | 8 +- .../apply_filter_popover_content.tsx | 12 +- .../apply_filters/apply_filters_popover.tsx | 6 +- .../data/public/ui/filter_bar/filter_bar.tsx | 36 +++-- .../ui/filter_bar/filter_editor/index.tsx | 36 ++--- .../lib/filter_editor_utils.test.ts | 10 +- .../filter_editor/lib/filter_editor_utils.ts | 13 +- .../filter_editor/lib/filter_label.tsx | 18 +-- .../data/public/ui/filter_bar/filter_item.tsx | 28 ++-- .../ui/filter_bar/filter_view/index.tsx | 6 +- .../query_string_input/query_bar_top_row.tsx | 11 +- .../query_string_input/query_string_input.tsx | 13 +- .../ui/search_bar/create_search_bar.tsx | 4 +- .../populate_state_from_saved_query.test.ts | 15 +- .../lib/populate_state_from_saved_query.ts | 2 +- .../ui/search_bar/lib/use_filter_manager.ts | 4 +- .../data/public/ui/search_bar/search_bar.tsx | 9 +- .../autocomplete/value_suggestions_route.ts | 4 +- src/plugins/data/server/index.ts | 47 ++++-- .../field_caps_response.test.js | 2 +- .../public/lib/actions/apply_filter_action.ts | 6 +- .../add_panel/add_panel_action.test.tsx | 4 +- .../remove_panel_action.test.tsx | 4 +- .../embeddables/filterable_container.tsx | 6 +- .../embeddables/filterable_embeddable.tsx | 4 +- .../embeddable/public/tests/container.test.ts | 4 +- .../public/tests/explicit_input.test.ts | 4 +- .../expressions/common/execution/types.ts | 4 +- .../functions/common/saved_map.ts | 4 +- .../server/lib/build_embeddable_filters.ts | 10 +- .../plugins/lens/public/app_plugin/app.tsx | 4 +- .../editor_frame/data_panel_wrapper.tsx | 4 +- .../editor_frame/editor_frame.tsx | 4 +- .../editor_frame/expression_helpers.ts | 4 +- .../embeddable/embeddable.test.tsx | 14 +- .../embeddable/embeddable.tsx | 7 +- .../embeddable/expression_wrapper.tsx | 4 +- .../public/indexpattern_plugin/field_item.tsx | 4 +- .../public/persistence/saved_object_store.ts | 4 +- x-pack/legacy/plugins/lens/public/types.ts | 8 +- .../maps/public/embeddable/map_embeddable.js | 4 +- .../server/lib/generate_csv_search.ts | 4 +- .../components/alerts_viewer/alerts_table.tsx | 6 +- .../public/components/alerts_viewer/types.ts | 6 +- .../components/embeddables/embedded_map.tsx | 4 +- .../embeddables/embedded_map_helpers.tsx | 4 +- .../public/components/embeddables/types.ts | 4 +- .../events_viewer/events_viewer.tsx | 4 +- .../public/components/events_viewer/index.tsx | 6 +- .../public/components/navigation/helpers.ts | 4 +- .../navigation/tab_navigation/types.ts | 4 +- .../public/components/navigation/types.ts | 4 +- .../helpers.ts | 9 +- .../add_filter_to_global_search_bar/index.tsx | 4 +- .../public/components/query_bar/index.tsx | 6 +- .../public/components/search_bar/index.tsx | 8 +- .../components/timeline/helpers.test.tsx | 4 +- .../public/components/timeline/helpers.tsx | 4 +- .../siem/public/components/timeline/index.tsx | 4 +- .../components/timeline/query_bar/index.tsx | 13 +- .../timeline/search_or_filter/index.tsx | 10 +- .../search_or_filter/search_or_filter.tsx | 6 +- .../public/components/timeline/timeline.tsx | 4 +- .../public/components/url_state/helpers.ts | 6 +- .../url_state/initialize_redux_by_url.tsx | 4 +- .../siem/public/components/url_state/types.ts | 4 +- .../plugins/siem/public/lib/keury/index.ts | 4 +- .../components/signals/default_config.tsx | 8 +- .../components/signals/helpers.ts | 4 +- .../components/signals/index.tsx | 6 +- .../signals_histogram_panel/index.tsx | 4 +- .../detection_engine/detection_engine.tsx | 4 +- .../description_step/filter_label.tsx | 95 ----------- .../description_step/filter_operator.tsx | 119 -------------- .../components/description_step/helpers.tsx | 3 +- .../description_step/index.test.tsx | 10 +- .../components/description_step/index.tsx | 3 +- .../components/description_step/types.ts | 4 +- .../rules/components/query_bar/index.tsx | 4 +- .../detection_engine/rules/details/index.tsx | 4 +- .../pages/detection_engine/rules/helpers.tsx | 4 +- .../pages/detection_engine/rules/types.ts | 4 +- .../pages/hosts/details/helpers.test.ts | 4 +- .../public/pages/hosts/details/helpers.ts | 4 +- .../siem/public/pages/hosts/details/index.tsx | 9 +- .../siem/public/pages/hosts/details/types.ts | 6 +- .../siem/public/pages/hosts/hosts.test.tsx | 4 +- .../navigation/alerts_query_tab_body.tsx | 4 +- .../public/pages/hosts/navigation/types.ts | 7 +- .../plugins/siem/public/pages/hosts/types.ts | 4 +- .../public/pages/network/ip_details/types.ts | 4 +- .../navigation/alerts_query_tab_body.tsx | 4 +- .../public/pages/network/network.test.tsx | 4 +- .../siem/public/pages/network/types.ts | 4 +- .../overview/alerts_by_category/index.tsx | 6 +- .../pages/overview/event_counts/index.tsx | 6 +- .../overview/events_by_dataset/index.tsx | 6 +- .../siem/public/pages/overview/overview.tsx | 6 +- .../overview/signals_by_category/index.tsx | 6 +- .../siem/public/store/inputs/actions.ts | 4 +- .../plugins/siem/public/store/inputs/model.ts | 4 +- .../siem/public/store/timeline/actions.ts | 6 +- .../siem/public/store/timeline/epic.test.ts | 4 +- .../siem/public/store/timeline/epic.ts | 8 +- .../siem/public/store/timeline/helpers.ts | 6 +- .../siem/public/store/timeline/model.ts | 4 +- .../detection_engine/signals/get_filter.ts | 3 +- .../siem/server/lib/detection_engine/types.ts | 4 +- .../location_map/embeddables/types.ts | 4 +- 214 files changed, 1190 insertions(+), 1334 deletions(-) delete mode 100644 x-pack/legacy/plugins/siem/public/pages/detection_engine/rules/components/description_step/filter_label.tsx delete mode 100644 x-pack/legacy/plugins/siem/public/pages/detection_engine/rules/components/description_step/filter_operator.tsx diff --git a/src/legacy/core_plugins/data/public/actions/select_range_action.ts b/src/legacy/core_plugins/data/public/actions/select_range_action.ts index 7e1135ca96f9e2..8d0b74be505352 100644 --- a/src/legacy/core_plugins/data/public/actions/select_range_action.ts +++ b/src/legacy/core_plugins/data/public/actions/select_range_action.ts @@ -26,12 +26,10 @@ import { // @ts-ignore import { onBrushEvent } from './filters/brush_event'; import { - esFilters, + Filter, FilterManager, TimefilterContract, - changeTimeFilter, - extractTimeFilter, - mapAndFlattenFilters, + esFilters, } from '../../../../../plugins/data/public'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths import { getIndexPatterns } from '../../../../../plugins/data/public/services'; @@ -45,7 +43,7 @@ interface ActionContext { async function isCompatible(context: ActionContext) { try { - const filters: esFilters.Filter[] = (await onBrushEvent(context.data, getIndexPatterns)) || []; + const filters: Filter[] = (await onBrushEvent(context.data, getIndexPatterns)) || []; return filters.length > 0; } catch { return false; @@ -70,18 +68,18 @@ export function selectRangeAction( throw new IncompatibleActionError(); } - const filters: esFilters.Filter[] = (await onBrushEvent(data, getIndexPatterns)) || []; + const filters: Filter[] = (await onBrushEvent(data, getIndexPatterns)) || []; - const selectedFilters: esFilters.Filter[] = mapAndFlattenFilters(filters); + const selectedFilters: Filter[] = esFilters.mapAndFlattenFilters(filters); if (timeFieldName) { - const { timeRangeFilter, restOfFilters } = extractTimeFilter( + const { timeRangeFilter, restOfFilters } = esFilters.extractTimeFilter( timeFieldName, selectedFilters ); filterManager.addFilters(restOfFilters); if (timeRangeFilter) { - changeTimeFilter(timeFilter, timeRangeFilter); + esFilters.changeTimeFilter(timeFilter, timeRangeFilter); } } else { filterManager.addFilters(selectedFilters); diff --git a/src/legacy/core_plugins/data/public/actions/value_click_action.ts b/src/legacy/core_plugins/data/public/actions/value_click_action.ts index 1e474b8f9355cf..260b401e6d6581 100644 --- a/src/legacy/core_plugins/data/public/actions/value_click_action.ts +++ b/src/legacy/core_plugins/data/public/actions/value_click_action.ts @@ -31,12 +31,10 @@ import { applyFiltersPopover } from '../../../../../plugins/data/public/ui/apply // @ts-ignore import { createFiltersFromEvent } from './filters/create_filters_from_event'; import { - esFilters, + Filter, FilterManager, TimefilterContract, - changeTimeFilter, - extractTimeFilter, - mapAndFlattenFilters, + esFilters, } from '../../../../../plugins/data/public'; export const VALUE_CLICK_ACTION = 'VALUE_CLICK_ACTION'; @@ -48,7 +46,7 @@ interface ActionContext { async function isCompatible(context: ActionContext) { try { - const filters: esFilters.Filter[] = (await createFiltersFromEvent(context.data)) || []; + const filters: Filter[] = (await createFiltersFromEvent(context.data)) || []; return filters.length > 0; } catch { return false; @@ -73,9 +71,9 @@ export function valueClickAction( throw new IncompatibleActionError(); } - const filters: esFilters.Filter[] = (await createFiltersFromEvent(data)) || []; + const filters: Filter[] = (await createFiltersFromEvent(data)) || []; - let selectedFilters: esFilters.Filter[] = mapAndFlattenFilters(filters); + let selectedFilters: Filter[] = esFilters.mapAndFlattenFilters(filters); if (selectedFilters.length > 1) { const indexPatterns = await Promise.all( @@ -84,7 +82,7 @@ export function valueClickAction( }) ); - const filterSelectionPromise: Promise = new Promise(resolve => { + const filterSelectionPromise: Promise = new Promise(resolve => { const overlay = getOverlays().openModal( toMountPoint( applyFiltersPopover( @@ -94,7 +92,7 @@ export function valueClickAction( overlay.close(); resolve([]); }, - (filterSelection: esFilters.Filter[]) => { + (filterSelection: Filter[]) => { overlay.close(); resolve(filterSelection); } @@ -110,13 +108,13 @@ export function valueClickAction( } if (timeFieldName) { - const { timeRangeFilter, restOfFilters } = extractTimeFilter( + const { timeRangeFilter, restOfFilters } = esFilters.extractTimeFilter( timeFieldName, selectedFilters ); filterManager.addFilters(restOfFilters); if (timeRangeFilter) { - changeTimeFilter(timeFilter, timeRangeFilter); + esFilters.changeTimeFilter(timeFilter, timeRangeFilter); } } else { filterManager.addFilters(selectedFilters); diff --git a/src/legacy/core_plugins/data/public/filter/filter_manager/filter_state_manager.ts b/src/legacy/core_plugins/data/public/filter/filter_manager/filter_state_manager.ts index c9c72a7be9a147..e095493c94c58c 100644 --- a/src/legacy/core_plugins/data/public/filter/filter_manager/filter_state_manager.ts +++ b/src/legacy/core_plugins/data/public/filter/filter_manager/filter_state_manager.ts @@ -20,10 +20,9 @@ import _ from 'lodash'; import { Subscription } from 'rxjs'; import { State } from 'ui/state_management/state'; -import { FilterManager, esFilters } from '../../../../../../plugins/data/public'; -import { compareFilters, COMPARE_ALL_OPTIONS } from '../../../../../../plugins/data/public'; +import { FilterManager, esFilters, Filter } from '../../../../../../plugins/data/public'; -type GetAppStateFunc = () => { filters?: esFilters.Filter[]; save?: () => void } | undefined | null; +type GetAppStateFunc = () => { filters?: Filter[]; save?: () => void } | undefined | null; /** * FilterStateManager is responsible for watching for filter changes @@ -68,15 +67,15 @@ export class FilterStateManager { const globalFilters = this.globalState.filters || []; const appFilters = (appState && appState.filters) || []; - const globalFilterChanged = !compareFilters( + const globalFilterChanged = !esFilters.compareFilters( this.filterManager.getGlobalFilters(), globalFilters, - COMPARE_ALL_OPTIONS + esFilters.COMPARE_ALL_OPTIONS ); - const appFilterChanged = !compareFilters( + const appFilterChanged = !esFilters.compareFilters( this.filterManager.getAppFilters(), appFilters, - COMPARE_ALL_OPTIONS + esFilters.COMPARE_ALL_OPTIONS ); const filterStateChanged = globalFilterChanged || appFilterChanged; diff --git a/src/legacy/core_plugins/data/public/filter/filter_manager/test_helpers/get_stub_filter.ts b/src/legacy/core_plugins/data/public/filter/filter_manager/test_helpers/get_stub_filter.ts index 5238efe5efa59c..74eaad34fe160e 100644 --- a/src/legacy/core_plugins/data/public/filter/filter_manager/test_helpers/get_stub_filter.ts +++ b/src/legacy/core_plugins/data/public/filter/filter_manager/test_helpers/get_stub_filter.ts @@ -17,15 +17,15 @@ * under the License. */ -import { esFilters } from '../../../../../../../plugins/data/public'; +import { Filter } from '../../../../../../../plugins/data/public'; export function getFilter( - store: esFilters.FilterStateStore, + store: any, // I don't want to export only for this, as it should move to data plugin disabled: boolean, negated: boolean, queryKey: string, queryValue: any -): esFilters.Filter { +): Filter { return { $state: { store, diff --git a/src/legacy/core_plugins/data/public/filter/filter_manager/test_helpers/stub_state.ts b/src/legacy/core_plugins/data/public/filter/filter_manager/test_helpers/stub_state.ts index f0a4bdef0229d0..272c8a4e199134 100644 --- a/src/legacy/core_plugins/data/public/filter/filter_manager/test_helpers/stub_state.ts +++ b/src/legacy/core_plugins/data/public/filter/filter_manager/test_helpers/stub_state.ts @@ -20,10 +20,10 @@ import sinon from 'sinon'; import { State } from 'ui/state_management/state'; -import { esFilters } from '../../../../../../../plugins/data/public'; +import { Filter } from '../../../../../../../plugins/data/public'; export class StubState implements State { - filters: esFilters.Filter[]; + filters: Filter[]; save: sinon.SinonSpy; constructor() { diff --git a/src/legacy/core_plugins/data/public/search/aggs/buckets/create_filter/date_histogram.test.ts b/src/legacy/core_plugins/data/public/search/aggs/buckets/create_filter/date_histogram.test.ts index e212132257ef68..0d3f58c50a42e7 100644 --- a/src/legacy/core_plugins/data/public/search/aggs/buckets/create_filter/date_histogram.test.ts +++ b/src/legacy/core_plugins/data/public/search/aggs/buckets/create_filter/date_histogram.test.ts @@ -23,14 +23,14 @@ import { intervalOptions } from '../_interval_options'; import { AggConfigs } from '../../agg_configs'; import { IBucketDateHistogramAggConfig } from '../date_histogram'; import { BUCKET_TYPES } from '../bucket_agg_types'; -import { esFilters } from '../../../../../../../../plugins/data/public'; +import { RangeFilter } from '../../../../../../../../plugins/data/public'; jest.mock('ui/new_platform'); describe('AggConfig Filters', () => { describe('date_histogram', () => { let agg: IBucketDateHistogramAggConfig; - let filter: esFilters.RangeFilter; + let filter: RangeFilter; let bucketStart: any; let field: any; diff --git a/src/legacy/core_plugins/data/public/search/aggs/buckets/create_filter/date_range.ts b/src/legacy/core_plugins/data/public/search/aggs/buckets/create_filter/date_range.ts index f7f2cfdb7bb61b..7af8ebc3236a77 100644 --- a/src/legacy/core_plugins/data/public/search/aggs/buckets/create_filter/date_range.ts +++ b/src/legacy/core_plugins/data/public/search/aggs/buckets/create_filter/date_range.ts @@ -20,10 +20,10 @@ import moment from 'moment'; import { IBucketAggConfig } from '../_bucket_agg_type'; import { DateRangeKey } from '../date_range'; -import { esFilters } from '../../../../../../../../plugins/data/public'; +import { esFilters, RangeFilterParams } from '../../../../../../../../plugins/data/public'; export const createFilterDateRange = (agg: IBucketAggConfig, { from, to }: DateRangeKey) => { - const filter: esFilters.RangeFilterParams = {}; + const filter: RangeFilterParams = {}; if (from) filter.gte = moment(from).toISOString(); if (to) filter.lt = moment(to).toISOString(); if (to && from) filter.format = 'strict_date_optional_time'; diff --git a/src/legacy/core_plugins/data/public/search/aggs/buckets/create_filter/histogram.ts b/src/legacy/core_plugins/data/public/search/aggs/buckets/create_filter/histogram.ts index 820f3de5ae9f0d..badd6dba6ea8a9 100644 --- a/src/legacy/core_plugins/data/public/search/aggs/buckets/create_filter/histogram.ts +++ b/src/legacy/core_plugins/data/public/search/aggs/buckets/create_filter/histogram.ts @@ -18,11 +18,11 @@ */ import { IBucketAggConfig } from '../_bucket_agg_type'; -import { esFilters } from '../../../../../../../../plugins/data/public'; +import { esFilters, RangeFilterParams } from '../../../../../../../../plugins/data/public'; export const createFilterHistogram = (aggConfig: IBucketAggConfig, key: string) => { const value = parseInt(key, 10); - const params: esFilters.RangeFilterParams = { gte: value, lt: value + aggConfig.params.interval }; + const params: RangeFilterParams = { gte: value, lt: value + aggConfig.params.interval }; return esFilters.buildRangeFilter( aggConfig.params.field, diff --git a/src/legacy/core_plugins/data/public/search/aggs/buckets/create_filter/ip_range.ts b/src/legacy/core_plugins/data/public/search/aggs/buckets/create_filter/ip_range.ts index d78f4579cd713d..36be4143838240 100644 --- a/src/legacy/core_plugins/data/public/search/aggs/buckets/create_filter/ip_range.ts +++ b/src/legacy/core_plugins/data/public/search/aggs/buckets/create_filter/ip_range.ts @@ -20,10 +20,10 @@ import { CidrMask } from '../lib/cidr_mask'; import { IBucketAggConfig } from '../_bucket_agg_type'; import { IpRangeKey } from '../ip_range'; -import { esFilters } from '../../../../../../../../plugins/data/public'; +import { esFilters, RangeFilterParams } from '../../../../../../../../plugins/data/public'; export const createFilterIpRange = (aggConfig: IBucketAggConfig, key: IpRangeKey) => { - let range: esFilters.RangeFilterParams; + let range: RangeFilterParams; if (key.type === 'mask') { range = new CidrMask(key.mask).getRange(); diff --git a/src/legacy/core_plugins/data/public/search/aggs/buckets/create_filter/terms.test.ts b/src/legacy/core_plugins/data/public/search/aggs/buckets/create_filter/terms.test.ts index d5fd1337f2cb20..7c6e769437ca1d 100644 --- a/src/legacy/core_plugins/data/public/search/aggs/buckets/create_filter/terms.test.ts +++ b/src/legacy/core_plugins/data/public/search/aggs/buckets/create_filter/terms.test.ts @@ -21,7 +21,7 @@ import { createFilterTerms } from './terms'; import { AggConfigs } from '../../agg_configs'; import { BUCKET_TYPES } from '../bucket_agg_types'; import { IBucketAggConfig } from '../_bucket_agg_type'; -import { esFilters } from '../../../../../../../../plugins/data/public'; +import { Filter, ExistsFilter } from '../../../../../../../../plugins/data/public'; jest.mock('ui/new_platform'); @@ -54,7 +54,7 @@ describe('AggConfig Filters', () => { aggConfigs.aggs[0] as IBucketAggConfig, 'apache', {} - ) as esFilters.Filter; + ) as Filter; expect(filter).toHaveProperty('query'); expect(filter.query).toHaveProperty('match_phrase'); @@ -73,7 +73,7 @@ describe('AggConfig Filters', () => { aggConfigs.aggs[0] as IBucketAggConfig, '', {} - ) as esFilters.Filter; + ) as Filter; expect(filterFalse).toHaveProperty('query'); expect(filterFalse.query).toHaveProperty('match_phrase'); @@ -84,7 +84,7 @@ describe('AggConfig Filters', () => { aggConfigs.aggs[0] as IBucketAggConfig, '1', {} - ) as esFilters.Filter; + ) as Filter; expect(filterTrue).toHaveProperty('query'); expect(filterTrue.query).toHaveProperty('match_phrase'); @@ -100,7 +100,7 @@ describe('AggConfig Filters', () => { aggConfigs.aggs[0] as IBucketAggConfig, '__missing__', {} - ) as esFilters.ExistsFilter; + ) as ExistsFilter; expect(filter).toHaveProperty('exists'); expect(filter.exists).toHaveProperty('field', 'field'); @@ -116,7 +116,7 @@ describe('AggConfig Filters', () => { const [filter] = createFilterTerms(aggConfigs.aggs[0] as IBucketAggConfig, '__other__', { terms: ['apache'], - }) as esFilters.Filter[]; + }) as Filter[]; expect(filter).toHaveProperty('query'); expect(filter.query).toHaveProperty('bool'); diff --git a/src/legacy/core_plugins/data/public/search/aggs/buckets/create_filter/terms.ts b/src/legacy/core_plugins/data/public/search/aggs/buckets/create_filter/terms.ts index e0d1f91c1e16a4..4152258ffa0ee0 100644 --- a/src/legacy/core_plugins/data/public/search/aggs/buckets/create_filter/terms.ts +++ b/src/legacy/core_plugins/data/public/search/aggs/buckets/create_filter/terms.ts @@ -18,7 +18,7 @@ */ import { IBucketAggConfig } from '../_bucket_agg_type'; -import { esFilters } from '../../../../../../../../plugins/data/public'; +import { esFilters, Filter } from '../../../../../../../../plugins/data/public'; export const createFilterTerms = (aggConfig: IBucketAggConfig, key: string, params: any) => { const field = aggConfig.params.field; @@ -30,7 +30,7 @@ export const createFilterTerms = (aggConfig: IBucketAggConfig, key: string, para const phraseFilter = esFilters.buildPhrasesFilter(field, terms, indexPattern); phraseFilter.meta.negate = true; - const filters: esFilters.Filter[] = [phraseFilter]; + const filters: Filter[] = [phraseFilter]; if (terms.some((term: string) => term === '__missing__')) { filters.push(esFilters.buildExistsFilter(field, indexPattern)); diff --git a/src/legacy/core_plugins/data/public/search/expressions/esaggs.ts b/src/legacy/core_plugins/data/public/search/expressions/esaggs.ts index 6a0748a33e7248..9aee7124c95211 100644 --- a/src/legacy/core_plugins/data/public/search/expressions/esaggs.ts +++ b/src/legacy/core_plugins/data/public/search/expressions/esaggs.ts @@ -32,7 +32,7 @@ import { SearchSource, Query, TimeRange, - esFilters, + Filter, getTime, FilterManager, } from '../../../../../../plugins/data/public'; @@ -53,7 +53,7 @@ export interface RequestHandlerParams { aggs: IAggConfigs; timeRange?: TimeRange; query?: Query; - filters?: esFilters.Filter[]; + filters?: Filter[]; forceFetch: boolean; filterManager: FilterManager; uiState?: PersistedState; diff --git a/src/legacy/core_plugins/input_control_vis/public/control/control.ts b/src/legacy/core_plugins/input_control_vis/public/control/control.ts index 9dc03ecc234522..6fddef777f73ee 100644 --- a/src/legacy/core_plugins/input_control_vis/public/control/control.ts +++ b/src/legacy/core_plugins/input_control_vis/public/control/control.ts @@ -22,7 +22,7 @@ import _ from 'lodash'; import { i18n } from '@kbn/i18n'; -import { esFilters } from '../../../../../plugins/data/public'; +import { Filter } from '../../../../../plugins/data/public'; import { SearchSource as SearchSourceClass } from '../legacy_imports'; import { ControlParams, ControlParamsOptions, CONTROL_TYPES } from '../editor_utils'; import { RangeFilterManager } from './filter_manager/range_filter_manager'; @@ -46,7 +46,7 @@ export function noIndexPatternMsg(indexPatternId: string) { } export abstract class Control { - private kbnFilter: esFilters.Filter | null = null; + private kbnFilter: Filter | null = null; enable: boolean = false; disabledReason: string = ''; diff --git a/src/legacy/core_plugins/input_control_vis/public/control/create_search_source.ts b/src/legacy/core_plugins/input_control_vis/public/control/create_search_source.ts index c8fa5af5e052bb..f7927962307574 100644 --- a/src/legacy/core_plugins/input_control_vis/public/control/create_search_source.ts +++ b/src/legacy/core_plugins/input_control_vis/public/control/create_search_source.ts @@ -17,7 +17,7 @@ * under the License. */ -import { esFilters, IndexPattern, TimefilterSetup } from '../../../../../plugins/data/public'; +import { PhraseFilter, IndexPattern, TimefilterSetup } from '../../../../../plugins/data/public'; import { SearchSource as SearchSourceClass, SearchSourceFields } from '../legacy_imports'; export function createSearchSource( @@ -26,7 +26,7 @@ export function createSearchSource( indexPattern: IndexPattern, aggs: any, useTimeFilter: boolean, - filters: esFilters.PhraseFilter[] = [], + filters: PhraseFilter[] = [], timefilter: TimefilterSetup['timefilter'] ) { const searchSource = initialState ? new SearchSource(initialState) : new SearchSource(); diff --git a/src/legacy/core_plugins/input_control_vis/public/control/filter_manager/filter_manager.test.ts b/src/legacy/core_plugins/input_control_vis/public/control/filter_manager/filter_manager.test.ts index fd2cbae121b7e1..39c9d843e6bce9 100644 --- a/src/legacy/core_plugins/input_control_vis/public/control/filter_manager/filter_manager.test.ts +++ b/src/legacy/core_plugins/input_control_vis/public/control/filter_manager/filter_manager.test.ts @@ -22,7 +22,7 @@ import expect from '@kbn/expect'; import { FilterManager } from './filter_manager'; import { coreMock } from '../../../../../../core/public/mocks'; import { - esFilters, + Filter, IndexPattern, FilterManager as QueryFilterManager, } from '../../../../../../plugins/data/public'; @@ -31,7 +31,7 @@ const setupMock = coreMock.createSetup(); class FilterManagerTest extends FilterManager { createFilter() { - return {} as esFilters.Filter; + return {} as Filter; } getValueFromFilterBar() { @@ -44,7 +44,7 @@ describe('FilterManager', function() { describe('findFilters', function() { const indexPatternMock = {} as IndexPattern; - let kbnFilters: esFilters.Filter[]; + let kbnFilters: Filter[]; const queryFilterMock = new QueryFilterManager(setupMock.uiSettings); queryFilterMock.getAppFilters = () => kbnFilters; queryFilterMock.getGlobalFilters = () => []; @@ -56,7 +56,7 @@ describe('FilterManager', function() { }); test('should not find filters that are not controlled by any visualization', function() { - kbnFilters.push({} as esFilters.Filter); + kbnFilters.push({} as Filter); const foundFilters = filterManager.findFilters(); expect(foundFilters.length).to.be(0); }); @@ -66,7 +66,7 @@ describe('FilterManager', function() { meta: { controlledBy: 'anotherControl', }, - } as esFilters.Filter); + } as Filter); const foundFilters = filterManager.findFilters(); expect(foundFilters.length).to.be(0); }); @@ -76,7 +76,7 @@ describe('FilterManager', function() { meta: { controlledBy: controlId, }, - } as esFilters.Filter); + } as Filter); const foundFilters = filterManager.findFilters(); expect(foundFilters.length).to.be(1); }); diff --git a/src/legacy/core_plugins/input_control_vis/public/control/filter_manager/filter_manager.ts b/src/legacy/core_plugins/input_control_vis/public/control/filter_manager/filter_manager.ts index d80a74ed46eae9..90b88a56950e2a 100644 --- a/src/legacy/core_plugins/input_control_vis/public/control/filter_manager/filter_manager.ts +++ b/src/legacy/core_plugins/input_control_vis/public/control/filter_manager/filter_manager.ts @@ -22,7 +22,7 @@ import _ from 'lodash'; import { FilterManager as QueryFilterManager, IndexPattern, - esFilters, + Filter, } from '../../../../../../plugins/data/public'; export abstract class FilterManager { @@ -41,7 +41,7 @@ export abstract class FilterManager { * single phrase: match query * multiple phrases: bool query with should containing list of match_phrase queries */ - abstract createFilter(phrases: any): esFilters.Filter; + abstract createFilter(phrases: any): Filter; abstract getValueFromFilterBar(): any; @@ -53,7 +53,7 @@ export abstract class FilterManager { return this.indexPattern.fields.getByName(this.fieldName); } - findFilters(): esFilters.Filter[] { + findFilters(): Filter[] { const kbnFilters = _.flatten([ this.queryFilter.getAppFilters(), this.queryFilter.getGlobalFilters(), diff --git a/src/legacy/core_plugins/input_control_vis/public/control/filter_manager/phrase_filter_manager.test.ts b/src/legacy/core_plugins/input_control_vis/public/control/filter_manager/phrase_filter_manager.test.ts index dc577ca7168d1d..5be5d0157541e6 100644 --- a/src/legacy/core_plugins/input_control_vis/public/control/filter_manager/phrase_filter_manager.test.ts +++ b/src/legacy/core_plugins/input_control_vis/public/control/filter_manager/phrase_filter_manager.test.ts @@ -20,7 +20,7 @@ import expect from '@kbn/expect'; import { - esFilters, + Filter, IndexPattern, FilterManager as QueryFilterManager, } from '../../../../../../plugins/data/public'; @@ -88,7 +88,7 @@ describe('PhraseFilterManager', function() { describe('getValueFromFilterBar', function() { class MockFindFiltersPhraseFilterManager extends PhraseFilterManager { - mockFilters: esFilters.Filter[]; + mockFilters: Filter[]; constructor( id: string, @@ -104,7 +104,7 @@ describe('PhraseFilterManager', function() { return this.mockFilters; } - setMockFilters(mockFilters: esFilters.Filter[]) { + setMockFilters(mockFilters: Filter[]) { this.mockFilters = mockFilters; } } @@ -133,7 +133,7 @@ describe('PhraseFilterManager', function() { }, }, }, - ] as esFilters.Filter[]); + ] as Filter[]); expect(filterManager.getValueFromFilterBar()).to.eql(['ios']); }); @@ -159,7 +159,7 @@ describe('PhraseFilterManager', function() { }, }, }, - ] as esFilters.Filter[]); + ] as Filter[]); expect(filterManager.getValueFromFilterBar()).to.eql(['ios', 'win xp']); }); @@ -183,7 +183,7 @@ describe('PhraseFilterManager', function() { }, }, }, - ] as esFilters.Filter[]); + ] as Filter[]); expect(filterManager.getValueFromFilterBar()).to.eql(['ios', 'win xp']); }); @@ -199,7 +199,7 @@ describe('PhraseFilterManager', function() { }, }, }, - ] as esFilters.Filter[]); + ] as Filter[]); expect(filterManager.getValueFromFilterBar()).to.eql(undefined); }); }); diff --git a/src/legacy/core_plugins/input_control_vis/public/control/filter_manager/phrase_filter_manager.ts b/src/legacy/core_plugins/input_control_vis/public/control/filter_manager/phrase_filter_manager.ts index b0b46be86f1e8f..6f4a95b4919079 100644 --- a/src/legacy/core_plugins/input_control_vis/public/control/filter_manager/phrase_filter_manager.ts +++ b/src/legacy/core_plugins/input_control_vis/public/control/filter_manager/phrase_filter_manager.ts @@ -21,6 +21,7 @@ import _ from 'lodash'; import { FilterManager } from './filter_manager'; import { + PhraseFilter, esFilters, IndexPattern, FilterManager as QueryFilterManager, @@ -36,8 +37,8 @@ export class PhraseFilterManager extends FilterManager { super(controlId, fieldName, indexPattern, queryFilter); } - createFilter(phrases: any): esFilters.PhraseFilter { - let newFilter: esFilters.PhraseFilter; + createFilter(phrases: any): PhraseFilter { + let newFilter: PhraseFilter; const value = this.indexPattern.fields.getByName(this.fieldName); if (!value) { @@ -79,13 +80,13 @@ export class PhraseFilterManager extends FilterManager { /** * Extract filtering value from kibana filters * - * @param {esFilters.PhraseFilter} kbnFilter + * @param {PhraseFilter} kbnFilter * @return {Array.} array of values pulled from filter */ - private getValueFromFilter(kbnFilter: esFilters.PhraseFilter): any { + private getValueFromFilter(kbnFilter: PhraseFilter): any { // bool filter - multiple phrase filters if (_.has(kbnFilter, 'query.bool.should')) { - return _.get(kbnFilter, 'query.bool.should') + return _.get(kbnFilter, 'query.bool.should') .map(kbnQueryFilter => { return this.getValueFromFilter(kbnQueryFilter); }) diff --git a/src/legacy/core_plugins/input_control_vis/public/control/filter_manager/range_filter_manager.test.ts b/src/legacy/core_plugins/input_control_vis/public/control/filter_manager/range_filter_manager.test.ts index f4993a60c5b39f..c776042ea4ba6b 100644 --- a/src/legacy/core_plugins/input_control_vis/public/control/filter_manager/range_filter_manager.test.ts +++ b/src/legacy/core_plugins/input_control_vis/public/control/filter_manager/range_filter_manager.test.ts @@ -21,7 +21,8 @@ import expect from '@kbn/expect'; import { RangeFilterManager } from './range_filter_manager'; import { - esFilters, + RangeFilter, + RangeFilterMeta, IndexPattern, FilterManager as QueryFilterManager, } from '../../../../../../plugins/data/public'; @@ -69,7 +70,7 @@ describe('RangeFilterManager', function() { describe('getValueFromFilterBar', function() { class MockFindFiltersRangeFilterManager extends RangeFilterManager { - mockFilters: esFilters.RangeFilter[]; + mockFilters: RangeFilter[]; constructor( id: string, @@ -85,7 +86,7 @@ describe('RangeFilterManager', function() { return this.mockFilters; } - setMockFilters(mockFilters: esFilters.RangeFilter[]) { + setMockFilters(mockFilters: RangeFilter[]) { this.mockFilters = mockFilters; } } @@ -111,9 +112,9 @@ describe('RangeFilterManager', function() { lt: 3, }, }, - meta: {} as esFilters.RangeFilterMeta, + meta: {} as RangeFilterMeta, }, - ] as esFilters.RangeFilter[]); + ] as RangeFilter[]); const value = filterManager.getValueFromFilterBar(); expect(value).to.be.a('object'); expect(value).to.have.property('min'); @@ -131,9 +132,9 @@ describe('RangeFilterManager', function() { lte: 3, }, }, - meta: {} as esFilters.RangeFilterMeta, + meta: {} as RangeFilterMeta, }, - ] as esFilters.RangeFilter[]); + ] as RangeFilter[]); expect(filterManager.getValueFromFilterBar()).to.eql(undefined); }); }); diff --git a/src/legacy/core_plugins/input_control_vis/public/control/filter_manager/range_filter_manager.ts b/src/legacy/core_plugins/input_control_vis/public/control/filter_manager/range_filter_manager.ts index 0a6819bd68e6f9..7a6719e85961b7 100644 --- a/src/legacy/core_plugins/input_control_vis/public/control/filter_manager/range_filter_manager.ts +++ b/src/legacy/core_plugins/input_control_vis/public/control/filter_manager/range_filter_manager.ts @@ -20,7 +20,12 @@ import _ from 'lodash'; import { FilterManager } from './filter_manager'; -import { esFilters, IFieldType } from '../../../../../../plugins/data/public'; +import { + esFilters, + RangeFilter, + RangeFilterParams, + IFieldType, +} from '../../../../../../plugins/data/public'; interface SliderValue { min?: string | number; @@ -36,7 +41,7 @@ function toRange(sliderValue: SliderValue) { } // Convert ES range filter into slider value -function fromRange(range: esFilters.RangeFilterParams): SliderValue { +function fromRange(range: RangeFilterParams): SliderValue { const sliderValue: SliderValue = {}; if (_.has(range, 'gte')) { sliderValue.min = _.get(range, 'gte'); @@ -60,7 +65,7 @@ export class RangeFilterManager extends FilterManager { * @param {object} react-input-range value - POJO with `min` and `max` properties * @return {object} range filter */ - createFilter(value: SliderValue): esFilters.RangeFilter { + createFilter(value: SliderValue): RangeFilter { const newFilter = esFilters.buildRangeFilter( // TODO: Fix type to be required this.indexPattern.fields.getByName(this.fieldName) as IFieldType, @@ -78,7 +83,7 @@ export class RangeFilterManager extends FilterManager { return; } - let range: esFilters.RangeFilterParams; + let range: RangeFilterParams; if (_.has(kbnFilters[0], 'script')) { range = _.get(kbnFilters[0], 'script.script.params'); } else { diff --git a/src/legacy/core_plugins/input_control_vis/public/vis_controller.tsx b/src/legacy/core_plugins/input_control_vis/public/vis_controller.tsx index 9cdf777992ec55..4ceffbfc1c197f 100644 --- a/src/legacy/core_plugins/input_control_vis/public/vis_controller.tsx +++ b/src/legacy/core_plugins/input_control_vis/public/vis_controller.tsx @@ -30,7 +30,7 @@ import { ControlParams } from './editor_utils'; import { RangeControl } from './control/range_control_factory'; import { ListControl } from './control/list_control_factory'; import { InputControlVisDependencies } from './plugin'; -import { FilterManager, esFilters } from '../../../../plugins/data/public'; +import { FilterManager, Filter } from '../../../../plugins/data/public'; import { VisParams, Vis } from '../../visualizations/public'; export const createInputControlVisController = (deps: InputControlVisDependencies) => { @@ -155,7 +155,7 @@ export const createInputControlVisController = (deps: InputControlVisDependencie const newFilters = stagedControls .map(control => control.getKbnFilter()) - .filter((filter): filter is esFilters.Filter => { + .filter((filter): filter is Filter => { return filter !== null; }); diff --git a/src/legacy/core_plugins/kibana/public/dashboard/migrations/move_filters_to_query.test.ts b/src/legacy/core_plugins/kibana/public/dashboard/migrations/move_filters_to_query.test.ts index ae3edae3b85d61..621983b1ca8a51 100644 --- a/src/legacy/core_plugins/kibana/public/dashboard/migrations/move_filters_to_query.test.ts +++ b/src/legacy/core_plugins/kibana/public/dashboard/migrations/move_filters_to_query.test.ts @@ -18,9 +18,9 @@ */ import { moveFiltersToQuery, Pre600FilterQuery } from './move_filters_to_query'; -import { esFilters } from '../../../../../../plugins/data/public'; +import { esFilters, Filter } from '../../../../../../plugins/data/public'; -const filter: esFilters.Filter = { +const filter: Filter = { meta: { disabled: false, negate: false, alias: '' }, query: {}, $state: { store: esFilters.FilterStateStore.APP_STATE }, diff --git a/src/legacy/core_plugins/kibana/public/dashboard/migrations/move_filters_to_query.ts b/src/legacy/core_plugins/kibana/public/dashboard/migrations/move_filters_to_query.ts index e82fc58670e392..7207f601a225ed 100644 --- a/src/legacy/core_plugins/kibana/public/dashboard/migrations/move_filters_to_query.ts +++ b/src/legacy/core_plugins/kibana/public/dashboard/migrations/move_filters_to_query.ts @@ -17,7 +17,7 @@ * under the License. */ -import { esFilters, Query } from '../../../../../../plugins/data/public'; +import { Filter, Query } from '../../../../../../plugins/data/public'; export interface Pre600FilterQuery { // pre 6.0.0 global query:queryString:options were stored per dashboard and would @@ -29,18 +29,18 @@ export interface Pre600FilterQuery { export interface SearchSourcePre600 { // I encountered at least one export from 7.0.0-alpha that was missing the filter property in here. // The maps data in esarchives actually has it, but I don't know how/when they created it. - filter?: Array; + filter?: Array; } export interface SearchSource730 { - filter: esFilters.Filter[]; + filter: Filter[]; query: Query; highlightAll?: boolean; version?: boolean; } -function isQueryFilter(filter: esFilters.Filter | { query: unknown }): filter is Pre600FilterQuery { - return filter.query && !(filter as esFilters.Filter).meta; +function isQueryFilter(filter: Filter | { query: unknown }): filter is Pre600FilterQuery { + return filter.query && !(filter as Filter).meta; } export function moveFiltersToQuery( diff --git a/src/legacy/core_plugins/kibana/public/dashboard/np_ready/dashboard_app.tsx b/src/legacy/core_plugins/kibana/public/dashboard/np_ready/dashboard_app.tsx index ad69ef322a9099..f94acf2dc19912 100644 --- a/src/legacy/core_plugins/kibana/public/dashboard/np_ready/dashboard_app.tsx +++ b/src/legacy/core_plugins/kibana/public/dashboard/np_ready/dashboard_app.tsx @@ -30,7 +30,7 @@ import { IIndexPattern, TimeRange, Query, - esFilters, + Filter, SavedQuery, } from '../../../../../../plugins/data/public'; @@ -44,7 +44,7 @@ export interface DashboardAppScope extends ng.IScope { screenTitle: string; model: { query: Query; - filters: esFilters.Filter[]; + filters: Filter[]; timeRestore: boolean; title: string; description: string; @@ -69,9 +69,9 @@ export interface DashboardAppScope extends ng.IScope { isPaused: boolean; refreshInterval: any; }) => void; - onFiltersUpdated: (filters: esFilters.Filter[]) => void; + onFiltersUpdated: (filters: Filter[]) => void; onCancelApplyFilters: () => void; - onApplyFilters: (filters: esFilters.Filter[]) => void; + onApplyFilters: (filters: Filter[]) => void; onQuerySaved: (savedQuery: SavedQuery) => void; onSavedQueryUpdated: (savedQuery: SavedQuery) => void; onClearSavedQuery: () => void; diff --git a/src/legacy/core_plugins/kibana/public/dashboard/np_ready/dashboard_app_controller.tsx b/src/legacy/core_plugins/kibana/public/dashboard/np_ready/dashboard_app_controller.tsx index 0b55adc1d52be7..3f9343ededd133 100644 --- a/src/legacy/core_plugins/kibana/public/dashboard/np_ready/dashboard_app_controller.tsx +++ b/src/legacy/core_plugins/kibana/public/dashboard/np_ready/dashboard_app_controller.tsx @@ -30,8 +30,7 @@ import { DashboardEmptyScreen, DashboardEmptyScreenProps } from './dashboard_emp import { migrateLegacyQuery, SavedObjectSaveOpts, subscribeWithScope } from '../legacy_imports'; import { - COMPARE_ALL_OPTIONS, - compareFilters, + esFilters, IndexPattern, IndexPatternsContract, Query, @@ -319,10 +318,10 @@ export class DashboardAppController { // appState.save which will cause refreshDashboardContainer to be called. if ( - !compareFilters( + !esFilters.compareFilters( container.getInput().filters, queryFilter.getFilters(), - COMPARE_ALL_OPTIONS + esFilters.COMPARE_ALL_OPTIONS ) ) { // Add filters modifies the object passed to it, hence the clone deep. @@ -422,7 +421,11 @@ export class DashboardAppController { // Filters shouldn't be compared using regular isEqual if ( - !compareFilters(containerInput.filters, appStateDashboardInput.filters, COMPARE_ALL_OPTIONS) + !esFilters.compareFilters( + containerInput.filters, + appStateDashboardInput.filters, + esFilters.COMPARE_ALL_OPTIONS + ) ) { differences.filters = appStateDashboardInput.filters; } diff --git a/src/legacy/core_plugins/kibana/public/dashboard/np_ready/dashboard_state_manager.ts b/src/legacy/core_plugins/kibana/public/dashboard/np_ready/dashboard_state_manager.ts index 987afd65bb67bf..fa5354a17b6d93 100644 --- a/src/legacy/core_plugins/kibana/public/dashboard/np_ready/dashboard_state_manager.ts +++ b/src/legacy/core_plugins/kibana/public/dashboard/np_ready/dashboard_state_manager.ts @@ -27,7 +27,7 @@ import { DashboardContainer } from 'src/legacy/core_plugins/dashboard_embeddable import { ViewMode } from '../../../../../../plugins/embeddable/public'; import { migrateLegacyQuery } from '../legacy_imports'; import { - esFilters, + Filter, Query, TimefilterContract as Timefilter, } from '../../../../../../plugins/data/public'; @@ -62,7 +62,7 @@ export class DashboardStateManager { public lastSavedDashboardFilters: { timeTo?: string | Moment; timeFrom?: string | Moment; - filterBars: esFilters.Filter[]; + filterBars: Filter[]; query: Query; }; private stateDefaults: DashboardAppStateDefaults; @@ -251,7 +251,7 @@ export class DashboardStateManager { this.stateContainer.transitions.set('fullScreenMode', fullScreenMode); } - public setFilters(filters: esFilters.Filter[]) { + public setFilters(filters: Filter[]) { this.stateContainer.transitions.set('filters', filters); } @@ -367,7 +367,7 @@ export class DashboardStateManager { return this.savedDashboard.timeRestore; } - public getLastSavedFilterBars(): esFilters.Filter[] { + public getLastSavedFilterBars(): Filter[] { return this.lastSavedDashboardFilters.filterBars; } @@ -546,7 +546,7 @@ export class DashboardStateManager { * Applies the current filter state to the dashboard. * @param filter An array of filter bar filters. */ - public applyFilters(query: Query, filters: esFilters.Filter[]) { + public applyFilters(query: Query, filters: Filter[]) { this.savedDashboard.searchSource.setField('query', query); this.savedDashboard.searchSource.setField('filter', filters); this.stateContainer.transitions.set('query', query); diff --git a/src/legacy/core_plugins/kibana/public/dashboard/np_ready/lib/filter_utils.ts b/src/legacy/core_plugins/kibana/public/dashboard/np_ready/lib/filter_utils.ts index 6fbc04969b1c8c..f7b45b0371378d 100644 --- a/src/legacy/core_plugins/kibana/public/dashboard/np_ready/lib/filter_utils.ts +++ b/src/legacy/core_plugins/kibana/public/dashboard/np_ready/lib/filter_utils.ts @@ -19,7 +19,7 @@ import _ from 'lodash'; import moment, { Moment } from 'moment'; -import { esFilters } from '../../../../../../../plugins/data/public'; +import { Filter } from '../../../../../../../plugins/data/public'; /** * @typedef {Object} QueryFilter @@ -65,9 +65,9 @@ export class FilterUtils { * @param filters {Array.} * @returns {Array.} */ - public static cleanFiltersForComparison(filters: esFilters.Filter[]) { + public static cleanFiltersForComparison(filters: Filter[]) { return _.map(filters, filter => { - const f: Partial = _.omit(filter, ['$$hashKey', '$state']); + const f: Partial = _.omit(filter, ['$$hashKey', '$state']); if (f.meta) { // f.meta.value is the value displayed in the filter bar. // It may also be loaded differently and shouldn't be used in this comparison. diff --git a/src/legacy/core_plugins/kibana/public/dashboard/np_ready/types.ts b/src/legacy/core_plugins/kibana/public/dashboard/np_ready/types.ts index 146affda282008..0f3a7e322ebf3a 100644 --- a/src/legacy/core_plugins/kibana/public/dashboard/np_ready/types.ts +++ b/src/legacy/core_plugins/kibana/public/dashboard/np_ready/types.ts @@ -26,7 +26,7 @@ import { RawSavedDashboardPanel640To720, RawSavedDashboardPanel730ToLatest, } from '../migrations/types'; -import { Query, esFilters } from '../../../../../../plugins/data/public'; +import { Query, Filter } from '../../../../../../plugins/data/public'; export type NavAction = (anchorElement?: any) => void; @@ -103,7 +103,7 @@ export interface DashboardAppState { useMargins: boolean; }; query: Query | string; - filters: esFilters.Filter[]; + filters: Filter[]; viewMode: ViewMode; savedQuery?: string; } diff --git a/src/legacy/core_plugins/kibana/public/dashboard/saved_dashboard/saved_dashboard.ts b/src/legacy/core_plugins/kibana/public/dashboard/saved_dashboard/saved_dashboard.ts index 08a6f067d20260..5babaf8061de9a 100644 --- a/src/legacy/core_plugins/kibana/public/dashboard/saved_dashboard/saved_dashboard.ts +++ b/src/legacy/core_plugins/kibana/public/dashboard/saved_dashboard/saved_dashboard.ts @@ -21,7 +21,7 @@ import { createSavedObjectClass } from 'ui/saved_objects/saved_object'; import { extractReferences, injectReferences } from './saved_dashboard_references'; import { - esFilters, + Filter, ISearchSource, Query, RefreshInterval, @@ -42,7 +42,7 @@ export interface SavedObjectDashboard extends SavedObject { refreshInterval?: RefreshInterval; searchSource: ISearchSource; getQuery(): Query; - getFilters(): esFilters.Filter[]; + getFilters(): Filter[]; } // Used only by the savedDashboards service, usually no reason to change this diff --git a/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/context/api/context.ts b/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/context/api/context.ts index a6c6d910846254..097722149f4367 100644 --- a/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/context/api/context.ts +++ b/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/context/api/context.ts @@ -24,7 +24,7 @@ import { fetchHitsInInterval } from './utils/fetch_hits_in_interval'; import { generateIntervals } from './utils/generate_intervals'; import { getEsQuerySearchAfter } from './utils/get_es_query_search_after'; import { getEsQuerySort } from './utils/get_es_query_sort'; -import { esFilters, IndexPatternsContract } from '../../../../../../../../../plugins/data/public'; +import { Filter, IndexPatternsContract } from '../../../../../../../../../plugins/data/public'; export type SurrDocType = 'successors' | 'predecessors'; export interface EsHitRecord { @@ -65,7 +65,7 @@ function fetchContextProvider(indexPatterns: IndexPatternsContract) { tieBreakerField: string, sortDir: SortDirection, size: number, - filters: esFilters.Filter[] + filters: Filter[] ) { if (typeof anchor !== 'object' || anchor === null) { return []; @@ -110,7 +110,7 @@ function fetchContextProvider(indexPatterns: IndexPatternsContract) { return documents; } - async function createSearchSource(indexPattern: IndexPattern, filters: esFilters.Filter[]) { + async function createSearchSource(indexPattern: IndexPattern, filters: Filter[]) { return new SearchSource() .setParent(undefined) .setField('index', indexPattern) diff --git a/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/context/query_parameters/actions.js b/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/context/query_parameters/actions.js index c5f1836bcc0e1c..5be1179a9ae09c 100644 --- a/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/context/query_parameters/actions.js +++ b/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/context/query_parameters/actions.js @@ -19,7 +19,7 @@ import _ from 'lodash'; import { getServices } from '../../../../kibana_services'; -import { generateFilters } from '../../../../../../../../../plugins/data/public'; +import { esFilters } from '../../../../../../../../../plugins/data/public'; import { MAX_CONTEXT_SIZE, MIN_CONTEXT_SIZE, QUERY_PARAMETER_KEYS } from './constants'; @@ -49,7 +49,13 @@ export function getQueryParameterActions() { const addFilter = state => async (field, values, operation) => { const indexPatternId = state.queryParameters.indexPatternId; - const newFilters = generateFilters(filterManager, field, values, operation, indexPatternId); + const newFilters = esFilters.generateFilters( + filterManager, + field, + values, + operation, + indexPatternId + ); filterManager.addFilters(newFilters); const indexPattern = await getServices().indexPatterns.get(indexPatternId); indexPattern.popularizeField(field.name, 1); diff --git a/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/discover.js b/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/discover.js index 69f69d449354c6..39a9ca6641fd16 100644 --- a/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/discover.js +++ b/src/legacy/core_plugins/kibana/public/discover/np_ready/angular/discover.js @@ -75,7 +75,7 @@ const { import { getRootBreadcrumbs, getSavedSearchBreadcrumbs } from '../helpers/breadcrumbs'; import { - generateFilters, + esFilters, indexPatterns as indexPatternsUtils, } from '../../../../../../../plugins/data/public'; import { getIndexPatternId } from '../helpers/get_index_pattern_id'; @@ -901,7 +901,7 @@ function discoverController( // TODO: On array fields, negating does not negate the combination, rather all terms $scope.filterQuery = function(field, values, operation) { $scope.indexPattern.popularizeField(field, 1); - const newFilters = generateFilters( + const newFilters = esFilters.generateFilters( filterManager, field, values, diff --git a/src/legacy/core_plugins/kibana/public/discover/np_ready/embeddable/search_embeddable.ts b/src/legacy/core_plugins/kibana/public/discover/np_ready/embeddable/search_embeddable.ts index 3f877520b5bf90..2bb76386bb7ba9 100644 --- a/src/legacy/core_plugins/kibana/public/discover/np_ready/embeddable/search_embeddable.ts +++ b/src/legacy/core_plugins/kibana/public/discover/np_ready/embeddable/search_embeddable.ts @@ -24,10 +24,9 @@ import { ExecuteTriggerActions } from 'src/plugins/ui_actions/public'; import { RequestAdapter, Adapters } from '../../../../../../../plugins/inspector/public'; import { esFilters, + Filter, TimeRange, FilterManager, - onlyDisabledFiltersChanged, - generateFilters, getTime, Query, IFieldType, @@ -97,7 +96,7 @@ export class SearchEmbeddable extends Embeddable private abortController?: AbortController; private prevTimeRange?: TimeRange; - private prevFilters?: esFilters.Filter[]; + private prevFilters?: Filter[]; private prevQuery?: Query; constructor( @@ -236,7 +235,13 @@ export class SearchEmbeddable extends Embeddable }; searchScope.filter = async (field, value, operator) => { - let filters = generateFilters(this.filterManager, field, value, operator, indexPattern.id!); + let filters = esFilters.generateFilters( + this.filterManager, + field, + value, + operator, + indexPattern.id! + ); filters = filters.map(filter => ({ ...filter, $state: { store: esFilters.FilterStateStore.APP_STATE }, @@ -316,7 +321,7 @@ export class SearchEmbeddable extends Embeddable private pushContainerStateParamsToScope(searchScope: SearchScope) { const isFetchRequired = - !onlyDisabledFiltersChanged(this.input.filters, this.prevFilters) || + !esFilters.onlyDisabledFiltersChanged(this.input.filters, this.prevFilters) || !_.isEqual(this.prevQuery, this.input.query) || !_.isEqual(this.prevTimeRange, this.input.timeRange) || !_.isEqual(searchScope.sort, this.input.sort || this.savedSearch.sort); diff --git a/src/legacy/core_plugins/kibana/public/discover/np_ready/embeddable/types.ts b/src/legacy/core_plugins/kibana/public/discover/np_ready/embeddable/types.ts index 3d6acb0963bed6..e7aa390cda858f 100644 --- a/src/legacy/core_plugins/kibana/public/discover/np_ready/embeddable/types.ts +++ b/src/legacy/core_plugins/kibana/public/discover/np_ready/embeddable/types.ts @@ -20,17 +20,12 @@ import { EmbeddableInput, EmbeddableOutput, IEmbeddable } from 'src/plugins/embeddable/public'; import { SavedSearch } from '../types'; import { SortOrder } from '../angular/doc_table/components/table_header/helpers'; -import { - esFilters, - IIndexPattern, - TimeRange, - Query, -} from '../../../../../../../plugins/data/public'; +import { Filter, IIndexPattern, TimeRange, Query } from '../../../../../../../plugins/data/public'; export interface SearchInput extends EmbeddableInput { timeRange: TimeRange; query?: Query; - filters?: esFilters.Filter[]; + filters?: Filter[]; hidePanelTitles?: boolean; columns?: string[]; sort?: SortOrder[]; diff --git a/src/legacy/core_plugins/kibana/public/visualize/np_ready/types.d.ts b/src/legacy/core_plugins/kibana/public/visualize/np_ready/types.d.ts index d3a8602226b574..17be5e4051b12a 100644 --- a/src/legacy/core_plugins/kibana/public/visualize/np_ready/types.d.ts +++ b/src/legacy/core_plugins/kibana/public/visualize/np_ready/types.d.ts @@ -17,7 +17,7 @@ * under the License. */ -import { TimeRange, Query, esFilters, DataPublicPluginStart } from 'src/plugins/data/public'; +import { TimeRange, Query, Filter, DataPublicPluginStart } from 'src/plugins/data/public'; import { IEmbeddableStart } from 'src/plugins/embeddable/public'; import { LegacyCoreStart } from 'kibana/public'; import { VisSavedObject, AppState, PersistedState } from '../legacy_imports'; @@ -27,7 +27,7 @@ export interface EditorRenderProps { core: LegacyCoreStart; data: DataPublicPluginStart; embeddables: IEmbeddableStart; - filters: esFilters.Filter[]; + filters: Filter[]; uiState: PersistedState; timeRange: TimeRange; query?: Query; diff --git a/src/legacy/core_plugins/vis_type_timelion/public/helpers/timelion_request_handler.ts b/src/legacy/core_plugins/vis_type_timelion/public/helpers/timelion_request_handler.ts index 6ce2538567e5b7..603c911438f2a2 100644 --- a/src/legacy/core_plugins/vis_type_timelion/public/helpers/timelion_request_handler.ts +++ b/src/legacy/core_plugins/vis_type_timelion/public/helpers/timelion_request_handler.ts @@ -20,7 +20,7 @@ import { i18n } from '@kbn/i18n'; import { KIBANA_CONTEXT_NAME } from 'src/plugins/expressions/public'; import { VisParams } from 'src/legacy/core_plugins/visualizations/public'; -import { TimeRange, esFilters, esQuery, Query } from '../../../../../plugins/data/public'; +import { TimeRange, Filter, esQuery, Query } from '../../../../../plugins/data/public'; import { timezoneProvider } from '../legacy_imports'; import { TimelionVisDependencies } from '../plugin'; @@ -75,7 +75,7 @@ export function getTimelionRequestHandler({ visParams, }: { timeRange: TimeRange; - filters: esFilters.Filter[]; + filters: Filter[]; query: Query; visParams: VisParams; forceFetch?: boolean; diff --git a/src/legacy/core_plugins/vis_type_vega/public/vega_request_handler.ts b/src/legacy/core_plugins/vis_type_vega/public/vega_request_handler.ts index 576786567a6f9d..f63efc0007c3bc 100644 --- a/src/legacy/core_plugins/vis_type_vega/public/vega_request_handler.ts +++ b/src/legacy/core_plugins/vis_type_vega/public/vega_request_handler.ts @@ -19,7 +19,7 @@ // eslint-disable-next-line @kbn/eslint/no-restricted-paths import { getSearchService } from '../../../../plugins/data/public/services'; -import { esFilters, esQuery, TimeRange, Query } from '../../../../plugins/data/public'; +import { Filter, esQuery, TimeRange, Query } from '../../../../plugins/data/public'; // @ts-ignore import { VegaParser } from './data_model/vega_parser'; @@ -33,7 +33,7 @@ import { VisParams } from './vega_fn'; interface VegaRequestHandlerParams { query: Query; - filters: esFilters.Filter; + filters: Filter; timeRange: TimeRange; visParams: VisParams; } diff --git a/src/legacy/core_plugins/visualizations/public/embeddable/query_geohash_bounds.ts b/src/legacy/core_plugins/visualizations/public/embeddable/query_geohash_bounds.ts index 719d69e21a826d..f37bc858efab09 100644 --- a/src/legacy/core_plugins/visualizations/public/embeddable/query_geohash_bounds.ts +++ b/src/legacy/core_plugins/visualizations/public/embeddable/query_geohash_bounds.ts @@ -24,10 +24,10 @@ import { toastNotifications } from 'ui/notify'; import { IAggConfig } from 'ui/agg_types'; import { timefilter } from 'ui/timefilter'; import { Vis } from '../np_ready/public'; -import { esFilters, Query, SearchSource, ISearchSource } from '../../../../../plugins/data/public'; +import { Filter, Query, SearchSource, ISearchSource } from '../../../../../plugins/data/public'; interface QueryGeohashBoundsParams { - filters?: esFilters.Filter[]; + filters?: Filter[]; query?: Query; searchSource?: ISearchSource; } @@ -78,7 +78,7 @@ export async function queryGeohashBounds(vis: Vis, params: QueryGeohashBoundsPar const useTimeFilter = !!indexPattern.timeFieldName; if (useTimeFilter) { const filter = timefilter.createFilter(indexPattern); - if (filter) activeFilters.push((filter as any) as esFilters.Filter); + if (filter) activeFilters.push((filter as any) as Filter); } return activeFilters; }); diff --git a/src/legacy/core_plugins/visualizations/public/embeddable/visualize_embeddable.ts b/src/legacy/core_plugins/visualizations/public/embeddable/visualize_embeddable.ts index 049dec792ff4d2..126e9d769f0a21 100644 --- a/src/legacy/core_plugins/visualizations/public/embeddable/visualize_embeddable.ts +++ b/src/legacy/core_plugins/visualizations/public/embeddable/visualize_embeddable.ts @@ -31,8 +31,8 @@ import { IIndexPattern, TimeRange, Query, - onlyDisabledFiltersChanged, esFilters, + Filter, ISearchSource, } from '../../../../../plugins/data/public'; import { @@ -75,7 +75,7 @@ export interface VisualizeEmbeddableConfiguration { export interface VisualizeInput extends EmbeddableInput { timeRange?: TimeRange; query?: Query; - filters?: esFilters.Filter[]; + filters?: Filter[]; vis?: { colors?: { [key: string]: string }; }; @@ -100,7 +100,7 @@ export class VisualizeEmbeddable extends Embeddable 1) { const indexPatterns = await Promise.all( @@ -72,7 +66,7 @@ export function createFilterAction( }) ); - const filterSelectionPromise: Promise = new Promise(resolve => { + const filterSelectionPromise: Promise = new Promise(resolve => { const overlay = getOverlays().openModal( toMountPoint( applyFiltersPopover( @@ -82,7 +76,7 @@ export function createFilterAction( overlay.close(); resolve([]); }, - (filterSelection: esFilters.Filter[]) => { + (filterSelection: Filter[]) => { overlay.close(); resolve(filterSelection); } @@ -98,13 +92,13 @@ export function createFilterAction( } if (timeFieldName) { - const { timeRangeFilter, restOfFilters } = extractTimeFilter( + const { timeRangeFilter, restOfFilters } = esFilters.extractTimeFilter( timeFieldName, selectedFilters ); filterManager.addFilters(restOfFilters); if (timeRangeFilter) { - changeTimeFilter(timeFilter, timeRangeFilter); + esFilters.changeTimeFilter(timeFilter, timeRangeFilter); } } else { filterManager.addFilters(selectedFilters); diff --git a/src/plugins/data/public/index.ts b/src/plugins/data/public/index.ts index 14a5d8641bcb8a..13a3127b6a463a 100644 --- a/src/plugins/data/public/index.ts +++ b/src/plugins/data/public/index.ts @@ -19,12 +19,101 @@ import { PluginInitializerContext } from '../../../core/public'; +/* + * Filters: + */ + +import { + FILTERS, + buildEmptyFilter, + buildPhrasesFilter, + buildExistsFilter, + buildPhraseFilter, + buildQueryFilter, + buildRangeFilter, + toggleFilterNegated, + disableFilter, + FilterStateStore, + getPhraseFilterField, + getPhraseFilterValue, + isPhraseFilter, + isExistsFilter, + isPhrasesFilter, + isRangeFilter, + isMatchAllFilter, + isMissingFilter, + isQueryStringFilter, + getDisplayValueFromFilter, + isFilterPinned, +} from '../common'; + +import { FilterLabel } from './ui/filter_bar'; + +import { + compareFilters, + COMPARE_ALL_OPTIONS, + generateFilters, + onlyDisabledFiltersChanged, + changeTimeFilter, + mapAndFlattenFilters, + extractTimeFilter, +} from './query'; + +// Filter helpers namespace: +export const esFilters = { + FilterLabel, + + FILTERS, + FilterStateStore, + + buildEmptyFilter, + buildPhrasesFilter, + buildExistsFilter, + buildPhraseFilter, + buildQueryFilter, + buildRangeFilter, + + isPhraseFilter, + isExistsFilter, + isPhrasesFilter, + isRangeFilter, + isMatchAllFilter, + isMissingFilter, + isQueryStringFilter, + isFilterPinned, + + toggleFilterNegated, + disableFilter, + getPhraseFilterField, + getPhraseFilterValue, + getDisplayValueFromFilter, + + compareFilters, + COMPARE_ALL_OPTIONS, + generateFilters, + onlyDisabledFiltersChanged, + + changeTimeFilter, + mapAndFlattenFilters, + extractTimeFilter, +}; + +export { + RangeFilter, + RangeFilterMeta, + RangeFilterParams, + ExistsFilter, + PhrasesFilter, + PhraseFilter, + CustomFilter, + MatchAllFilter, +} from '../common'; + /* * esQuery and esKuery: */ import { - doesKueryExpressionHaveLuceneSyntaxError, fromKueryExpression, toElasticsearchQuery, nodeTypes, @@ -37,7 +126,6 @@ import { export const esKuery = { nodeTypes, - doesKueryExpressionHaveLuceneSyntaxError, fromKueryExpression, toElasticsearchQuery, }; @@ -80,6 +168,7 @@ import { TruncateFormat, } from '../common/field_formats'; +// Field formats helpers namespace: export const fieldFormats = { FieldFormat, FieldFormatsRegistry, // exported only for tests. Consider mock. @@ -134,6 +223,7 @@ import { formatHitProvider, } from './index_patterns'; +// Index patterns namespace: export const indexPatterns = { ILLEGAL_CHARACTERS_KEY, CONTAINS_SPACES_KEY, @@ -145,7 +235,7 @@ export const indexPatterns = { validate: validateIndexPattern, getFromSavedObject, flattenHitWrapper, - // exported only in stub_index_pattern test. Move into data plugin and remove export. + // TODO: exported only in stub_index_pattern test. Move into data plugin and remove export. getRoutes, formatHitProvider, }; @@ -156,7 +246,7 @@ export { Field as IndexPatternField, TypeMeta as IndexPatternTypeMeta, AggregationRestrictions as IndexPatternAggRestrictions, - // exported only in stub_index_pattern test. Move into data plugin and remove export. + // TODO: exported only in stub_index_pattern test. Move into data plugin and remove export. FieldList as IndexPatternFieldList, } from './index_patterns'; @@ -181,33 +271,57 @@ export { QuerySuggestionField, } from './autocomplete'; -export function plugin(initializerContext: PluginInitializerContext) { - return new DataPublicPlugin(initializerContext); -} +/* + * Search: + */ + +export { IRequestTypesMap, IResponseTypesMap } from './search'; +export * from './search'; /** * Types to be shared externally * @public */ -export { IRequestTypesMap, IResponseTypesMap } from './search'; -export * from './types'; -export { Query, RefreshInterval, TimeRange } from '../common'; +export { Filter, Query, RefreshInterval, TimeRange } from '../common'; -export * from './search'; -export * from './query'; +export { + createSavedQueryService, + syncAppFilters, + syncQuery, + getTime, + getQueryLog, + getQueryStateContainer, + FilterManager, + SavedQuery, + SavedQueryService, + SavedQueryTimeFilter, + SavedQueryAttributes, + InputTimeRange, + TimefilterSetup, + TimeHistory, + TimefilterContract, + TimeHistoryContract, +} from './query'; export * from './ui'; -export * from './field_formats'; export { - // es query - esFilters, // kbn field types castEsToKbnFieldTypeName, - getKbnFieldType, getKbnTypeNames, // utils parseInterval, } from '../common'; -// Export plugin after all other imports +/* + * Plugin setup + */ + import { DataPublicPlugin } from './plugin'; + +export function plugin(initializerContext: PluginInitializerContext) { + return new DataPublicPlugin(initializerContext); +} + +export { DataPublicPluginSetup, DataPublicPluginStart, IDataPluginServices } from './types'; + +// Export plugin after all other imports export { DataPublicPlugin as Plugin }; diff --git a/src/plugins/data/public/query/filter_manager/filter_manager.test.ts b/src/plugins/data/public/query/filter_manager/filter_manager.test.ts index 8c790ac2ddc461..ce574ace457053 100644 --- a/src/plugins/data/public/query/filter_manager/filter_manager.test.ts +++ b/src/plugins/data/public/query/filter_manager/filter_manager.test.ts @@ -24,7 +24,7 @@ import { Subscription } from 'rxjs'; import { FilterManager } from './filter_manager'; import { getFilter } from './test_helpers/get_stub_filter'; import { getFiltersArray } from './test_helpers/get_filters_array'; -import { esFilters } from '../../../common'; +import { Filter, FilterStateStore } from '../../../common'; import { coreMock } from '../../../../../core/public/mocks'; const setupMock = coreMock.createSetup(); @@ -46,7 +46,7 @@ describe('filter_manager', () => { let updateListener: sinon.SinonSpy; let filterManager: FilterManager; - let readyFilters: esFilters.Filter[]; + let readyFilters: Filter[]; beforeEach(() => { updateListener = sinon.stub(); @@ -89,7 +89,7 @@ describe('filter_manager', () => { test('app state should be set', async () => { updateSubscription = filterManager.getUpdates$().subscribe(updateListener); - const f1 = getFilter(esFilters.FilterStateStore.APP_STATE, false, false, 'age', 34); + const f1 = getFilter(FilterStateStore.APP_STATE, false, false, 'age', 34); filterManager.setFilters([f1]); expect(filterManager.getAppFilters()).toHaveLength(1); expect(filterManager.getGlobalFilters()).toHaveLength(0); @@ -103,7 +103,7 @@ describe('filter_manager', () => { test('global state should be set', async () => { updateSubscription = filterManager.getUpdates$().subscribe(updateListener); - const f1 = getFilter(esFilters.FilterStateStore.GLOBAL_STATE, false, false, 'age', 34); + const f1 = getFilter(FilterStateStore.GLOBAL_STATE, false, false, 'age', 34); filterManager.setFilters([f1]); expect(filterManager.getAppFilters()).toHaveLength(0); expect(filterManager.getGlobalFilters()).toHaveLength(1); @@ -117,8 +117,8 @@ describe('filter_manager', () => { test('both states should be set', async () => { updateSubscription = filterManager.getUpdates$().subscribe(updateListener); - const f1 = getFilter(esFilters.FilterStateStore.GLOBAL_STATE, false, false, 'age', 34); - const f2 = getFilter(esFilters.FilterStateStore.APP_STATE, false, false, 'gender', 'FEMALE'); + const f1 = getFilter(FilterStateStore.GLOBAL_STATE, false, false, 'age', 34); + const f2 = getFilter(FilterStateStore.APP_STATE, false, false, 'gender', 'FEMALE'); filterManager.setFilters([f1, f2]); expect(filterManager.getAppFilters()).toHaveLength(1); expect(filterManager.getGlobalFilters()).toHaveLength(1); @@ -135,8 +135,8 @@ describe('filter_manager', () => { test('set state should override previous state', async () => { updateSubscription = filterManager.getUpdates$().subscribe(updateListener); - const f1 = getFilter(esFilters.FilterStateStore.GLOBAL_STATE, false, false, 'age', 34); - const f2 = getFilter(esFilters.FilterStateStore.APP_STATE, false, false, 'gender', 'FEMALE'); + const f1 = getFilter(FilterStateStore.GLOBAL_STATE, false, false, 'age', 34); + const f2 = getFilter(FilterStateStore.APP_STATE, false, false, 'gender', 'FEMALE'); filterManager.setFilters([f1]); filterManager.setFilters([f2]); @@ -157,7 +157,7 @@ describe('filter_manager', () => { test('changing a disabled filter should fire only update event', async function() { const updateStub = jest.fn(); const fetchStub = jest.fn(); - const f1 = getFilter(esFilters.FilterStateStore.GLOBAL_STATE, true, false, 'age', 34); + const f1 = getFilter(FilterStateStore.GLOBAL_STATE, true, false, 'age', 34); filterManager.setFilters([f1]); @@ -183,12 +183,12 @@ describe('filter_manager', () => { const appFilter1 = _.cloneDeep(readyFilters[1]); appFilter1.meta.negate = true; appFilter1.$state = { - store: esFilters.FilterStateStore.APP_STATE, + store: FilterStateStore.APP_STATE, }; const appFilter2 = _.cloneDeep(readyFilters[2]); appFilter2.meta.negate = true; appFilter2.$state = { - store: esFilters.FilterStateStore.APP_STATE, + store: FilterStateStore.APP_STATE, }; const globalFilters = filterManager.getFilters(); @@ -199,7 +199,7 @@ describe('filter_manager', () => { expect(res).toHaveLength(3); expect( res.filter(function(filter) { - return filter.$state && filter.$state.store === esFilters.FilterStateStore.GLOBAL_STATE; + return filter.$state && filter.$state.store === FilterStateStore.GLOBAL_STATE; }).length ).toBe(3); }); @@ -233,7 +233,7 @@ describe('filter_manager', () => { }); test('set filter with no state, and force pin', async () => { - const f1 = getFilter(esFilters.FilterStateStore.GLOBAL_STATE, false, false, 'age', 38); + const f1 = getFilter(FilterStateStore.GLOBAL_STATE, false, false, 'age', 38); f1.$state = undefined; filterManager.setFilters([f1], true); @@ -242,7 +242,7 @@ describe('filter_manager', () => { }); test('set filter with no state, and no pin', async () => { - const f1 = getFilter(esFilters.FilterStateStore.GLOBAL_STATE, false, false, 'age', 38); + const f1 = getFilter(FilterStateStore.GLOBAL_STATE, false, false, 'age', 38); f1.$state = undefined; filterManager.setFilters([f1], false); @@ -251,7 +251,7 @@ describe('filter_manager', () => { }); test('set filters with default pin', async () => { - const f1 = getFilter(esFilters.FilterStateStore.GLOBAL_STATE, false, false, 'age', 38); + const f1 = getFilter(FilterStateStore.GLOBAL_STATE, false, false, 'age', 38); f1.$state = undefined; setupMock.uiSettings.get.mockImplementationOnce(uiSettingsMock(true)); @@ -261,7 +261,7 @@ describe('filter_manager', () => { }); test('set filters without default pin', async () => { - const f1 = getFilter(esFilters.FilterStateStore.GLOBAL_STATE, false, false, 'age', 38); + const f1 = getFilter(FilterStateStore.GLOBAL_STATE, false, false, 'age', 38); f1.$state = undefined; setupMock.uiSettings.get.mockImplementationOnce(uiSettingsMock(false)); @@ -274,7 +274,7 @@ describe('filter_manager', () => { describe('add filters', () => { test('app state should accept a single filter', async function() { updateSubscription = filterManager.getUpdates$().subscribe(updateListener); - const f1 = getFilter(esFilters.FilterStateStore.APP_STATE, false, false, 'age', 34); + const f1 = getFilter(FilterStateStore.APP_STATE, false, false, 'age', 34); filterManager.addFilters(f1); const appFilters = filterManager.getAppFilters(); expect(appFilters).toHaveLength(1); @@ -284,8 +284,8 @@ describe('filter_manager', () => { }); test('app state should accept array and preserve order', async () => { - const f1 = getFilter(esFilters.FilterStateStore.APP_STATE, false, false, 'age', 34); - const f2 = getFilter(esFilters.FilterStateStore.APP_STATE, false, false, 'gender', 'female'); + const f1 = getFilter(FilterStateStore.APP_STATE, false, false, 'age', 34); + const f2 = getFilter(FilterStateStore.APP_STATE, false, false, 'gender', 'female'); filterManager.addFilters([f1]); filterManager.addFilters([f2]); @@ -297,7 +297,7 @@ describe('filter_manager', () => { test('global state should accept a single filer', async () => { updateSubscription = filterManager.getUpdates$().subscribe(updateListener); - const f1 = getFilter(esFilters.FilterStateStore.GLOBAL_STATE, false, false, 'age', 34); + const f1 = getFilter(FilterStateStore.GLOBAL_STATE, false, false, 'age', 34); filterManager.addFilters(f1); expect(filterManager.getAppFilters()).toHaveLength(0); const globalFilters = filterManager.getGlobalFilters(); @@ -307,14 +307,8 @@ describe('filter_manager', () => { }); test('global state should be accept array and preserve order', async () => { - const f1 = getFilter(esFilters.FilterStateStore.GLOBAL_STATE, false, false, 'age', 34); - const f2 = getFilter( - esFilters.FilterStateStore.GLOBAL_STATE, - false, - false, - 'gender', - 'female' - ); + const f1 = getFilter(FilterStateStore.GLOBAL_STATE, false, false, 'age', 34); + const f2 = getFilter(FilterStateStore.GLOBAL_STATE, false, false, 'gender', 'female'); filterManager.addFilters([f1, f2]); expect(filterManager.getAppFilters()).toHaveLength(0); @@ -324,8 +318,8 @@ describe('filter_manager', () => { }); test('mixed filters: global filters should stay in the beginning', async () => { - const f1 = getFilter(esFilters.FilterStateStore.GLOBAL_STATE, false, false, 'age', 34); - const f2 = getFilter(esFilters.FilterStateStore.APP_STATE, false, false, 'gender', 'female'); + const f1 = getFilter(FilterStateStore.GLOBAL_STATE, false, false, 'age', 34); + const f2 = getFilter(FilterStateStore.APP_STATE, false, false, 'gender', 'female'); filterManager.addFilters([f1, f2]); const filters = filterManager.getFilters(); expect(filters).toHaveLength(2); @@ -333,14 +327,8 @@ describe('filter_manager', () => { }); test('mixed filters: global filters should move to the beginning', async () => { - const f1 = getFilter(esFilters.FilterStateStore.APP_STATE, false, false, 'age', 34); - const f2 = getFilter( - esFilters.FilterStateStore.GLOBAL_STATE, - false, - false, - 'gender', - 'female' - ); + const f1 = getFilter(FilterStateStore.APP_STATE, false, false, 'age', 34); + const f2 = getFilter(FilterStateStore.GLOBAL_STATE, false, false, 'gender', 'female'); filterManager.addFilters([f1, f2]); const filters = filterManager.getFilters(); expect(filters).toHaveLength(2); @@ -349,14 +337,8 @@ describe('filter_manager', () => { test('add multiple filters at once', async () => { updateSubscription = filterManager.getUpdates$().subscribe(updateListener); - const f1 = getFilter(esFilters.FilterStateStore.GLOBAL_STATE, false, false, 'age', 34); - const f2 = getFilter( - esFilters.FilterStateStore.GLOBAL_STATE, - false, - false, - 'gender', - 'female' - ); + const f1 = getFilter(FilterStateStore.GLOBAL_STATE, false, false, 'age', 34); + const f2 = getFilter(FilterStateStore.GLOBAL_STATE, false, false, 'gender', 'female'); filterManager.addFilters([f1, f2]); expect(filterManager.getAppFilters()).toHaveLength(0); expect(filterManager.getGlobalFilters()).toHaveLength(2); @@ -365,8 +347,8 @@ describe('filter_manager', () => { test('add same filter to global and app', async () => { updateSubscription = filterManager.getUpdates$().subscribe(updateListener); - const f1 = getFilter(esFilters.FilterStateStore.GLOBAL_STATE, false, false, 'age', 34); - const f2 = getFilter(esFilters.FilterStateStore.APP_STATE, false, false, 'age', 34); + const f1 = getFilter(FilterStateStore.GLOBAL_STATE, false, false, 'age', 34); + const f2 = getFilter(FilterStateStore.APP_STATE, false, false, 'age', 34); filterManager.addFilters([f1, f2]); // FILTER SHOULD BE ADDED ONLY ONCE, TO GLOBAL @@ -377,8 +359,8 @@ describe('filter_manager', () => { test('add same filter with different values to global and app', async () => { updateSubscription = filterManager.getUpdates$().subscribe(updateListener); - const f1 = getFilter(esFilters.FilterStateStore.GLOBAL_STATE, false, false, 'age', 38); - const f2 = getFilter(esFilters.FilterStateStore.APP_STATE, false, false, 'age', 34); + const f1 = getFilter(FilterStateStore.GLOBAL_STATE, false, false, 'age', 38); + const f2 = getFilter(FilterStateStore.APP_STATE, false, false, 'age', 34); filterManager.addFilters([f1, f2]); // FILTER SHOULD BE ADDED TWICE @@ -388,7 +370,7 @@ describe('filter_manager', () => { }); test('add filter with no state, and force pin', async () => { - const f1 = getFilter(esFilters.FilterStateStore.GLOBAL_STATE, false, false, 'age', 38); + const f1 = getFilter(FilterStateStore.GLOBAL_STATE, false, false, 'age', 38); f1.$state = undefined; filterManager.addFilters([f1], true); @@ -397,12 +379,12 @@ describe('filter_manager', () => { const f1Output = filterManager.getFilters()[0]; expect(f1Output.$state).toBeDefined(); if (f1Output.$state) { - expect(f1Output.$state.store).toBe(esFilters.FilterStateStore.GLOBAL_STATE); + expect(f1Output.$state.store).toBe(FilterStateStore.GLOBAL_STATE); } }); test('add filter with no state, and dont force pin', async () => { - const f1 = getFilter(esFilters.FilterStateStore.GLOBAL_STATE, false, false, 'age', 38); + const f1 = getFilter(FilterStateStore.GLOBAL_STATE, false, false, 'age', 38); f1.$state = undefined; filterManager.addFilters([f1], false); @@ -411,7 +393,7 @@ describe('filter_manager', () => { const f1Output = filterManager.getFilters()[0]; expect(f1Output.$state).toBeDefined(); if (f1Output.$state) { - expect(f1Output.$state.store).toBe(esFilters.FilterStateStore.APP_STATE); + expect(f1Output.$state.store).toBe(FilterStateStore.APP_STATE); } }); @@ -423,11 +405,11 @@ describe('filter_manager', () => { // global filters should be listed first let res = filterManager.getFilters(); expect(res).toHaveLength(2); - expect(res[0].$state && res[0].$state.store).toEqual(esFilters.FilterStateStore.GLOBAL_STATE); + expect(res[0].$state && res[0].$state.store).toEqual(FilterStateStore.GLOBAL_STATE); expect(res[0].meta.disabled).toEqual(filters[1].meta.disabled); expect(res[0].query).toEqual(filters[1].query); - expect(res[1].$state && res[1].$state.store).toEqual(esFilters.FilterStateStore.APP_STATE); + expect(res[1].$state && res[1].$state.store).toEqual(FilterStateStore.APP_STATE); expect(res[1].meta.disabled).toEqual(filters[0].meta.disabled); expect(res[1].query).toEqual(filters[0].query); @@ -447,7 +429,7 @@ describe('filter_manager', () => { const res = filterManager.getFilters(); expect(res).toHaveLength(3); _.each(res, function(filter) { - expect(filter.$state && filter.$state.store).toBe(esFilters.FilterStateStore.GLOBAL_STATE); + expect(filter.$state && filter.$state.store).toBe(FilterStateStore.GLOBAL_STATE); }); }); @@ -530,7 +512,7 @@ describe('filter_manager', () => { }); test('should de-dupe global filters being set', async () => { - const f1 = getFilter(esFilters.FilterStateStore.GLOBAL_STATE, false, false, 'age', 34); + const f1 = getFilter(FilterStateStore.GLOBAL_STATE, false, false, 'age', 34); const f2 = _.cloneDeep(f1); filterManager.setFilters([f1, f2]); expect(filterManager.getAppFilters()).toHaveLength(0); @@ -539,7 +521,7 @@ describe('filter_manager', () => { }); test('should de-dupe app filters being set', async () => { - const f1 = getFilter(esFilters.FilterStateStore.APP_STATE, false, false, 'age', 34); + const f1 = getFilter(FilterStateStore.APP_STATE, false, false, 'age', 34); const f2 = _.cloneDeep(f1); filterManager.setFilters([f1, f2]); expect(filterManager.getAppFilters()).toHaveLength(1); @@ -554,7 +536,7 @@ describe('filter_manager', () => { const appFilter = _.cloneDeep(readyFilters[idx]); appFilter.meta.negate = true; appFilter.$state = { - store: esFilters.FilterStateStore.APP_STATE, + store: FilterStateStore.APP_STATE, }; filterManager.addFilters(appFilter); const res = filterManager.getFilters(); @@ -571,7 +553,7 @@ describe('filter_manager', () => { const appFilter = _.cloneDeep(readyFilters[1]); appFilter.meta.negate = true; appFilter.$state = { - store: esFilters.FilterStateStore.APP_STATE, + store: FilterStateStore.APP_STATE, }; filterManager.addFilters(appFilter, false); @@ -580,7 +562,7 @@ describe('filter_manager', () => { expect(res).toHaveLength(3); expect( res.filter(function(filter) { - return filter.$state && filter.$state.store === esFilters.FilterStateStore.GLOBAL_STATE; + return filter.$state && filter.$state.store === FilterStateStore.GLOBAL_STATE; }).length ).toBe(3); }); @@ -633,8 +615,8 @@ describe('filter_manager', () => { }); test('remove on full should clean and fire events', async () => { - const f1 = getFilter(esFilters.FilterStateStore.GLOBAL_STATE, false, false, 'age', 34); - const f2 = getFilter(esFilters.FilterStateStore.APP_STATE, false, false, 'gender', 'FEMALE'); + const f1 = getFilter(FilterStateStore.GLOBAL_STATE, false, false, 'age', 34); + const f2 = getFilter(FilterStateStore.APP_STATE, false, false, 'gender', 'FEMALE'); filterManager.setFilters([f1, f2]); updateSubscription = filterManager.getUpdates$().subscribe(updateListener); @@ -644,9 +626,9 @@ describe('filter_manager', () => { }); test('remove non existing filter should do nothing and not fire events', async () => { - const f1 = getFilter(esFilters.FilterStateStore.GLOBAL_STATE, false, false, 'age', 34); - const f2 = getFilter(esFilters.FilterStateStore.APP_STATE, false, false, 'gender', 'FEMALE'); - const f3 = getFilter(esFilters.FilterStateStore.APP_STATE, false, false, 'country', 'US'); + const f1 = getFilter(FilterStateStore.GLOBAL_STATE, false, false, 'age', 34); + const f2 = getFilter(FilterStateStore.APP_STATE, false, false, 'gender', 'FEMALE'); + const f3 = getFilter(FilterStateStore.APP_STATE, false, false, 'country', 'US'); filterManager.setFilters([f1, f2]); expect(filterManager.getFilters()).toHaveLength(2); @@ -657,9 +639,9 @@ describe('filter_manager', () => { }); test('remove existing filter should remove and fire events', async () => { - const f1 = getFilter(esFilters.FilterStateStore.GLOBAL_STATE, false, false, 'age', 34); - const f2 = getFilter(esFilters.FilterStateStore.APP_STATE, false, false, 'gender', 'FEMALE'); - const f3 = getFilter(esFilters.FilterStateStore.APP_STATE, false, false, 'country', 'US'); + const f1 = getFilter(FilterStateStore.GLOBAL_STATE, false, false, 'age', 34); + const f2 = getFilter(FilterStateStore.APP_STATE, false, false, 'gender', 'FEMALE'); + const f3 = getFilter(FilterStateStore.APP_STATE, false, false, 'country', 'US'); filterManager.setFilters([f1, f2, f3]); expect(filterManager.getFilters()).toHaveLength(3); diff --git a/src/plugins/data/public/query/filter_manager/filter_manager.ts b/src/plugins/data/public/query/filter_manager/filter_manager.ts index aa77f10d89f638..c951953b26555d 100644 --- a/src/plugins/data/public/query/filter_manager/filter_manager.ts +++ b/src/plugins/data/public/query/filter_manager/filter_manager.ts @@ -28,10 +28,10 @@ import { mapAndFlattenFilters } from './lib/map_and_flatten_filters'; import { uniqFilters } from './lib/uniq_filters'; import { onlyDisabledFiltersChanged } from './lib/only_disabled'; import { PartitionedFilters } from './types'; -import { esFilters } from '../../../common'; +import { FilterStateStore, Filter, isFilterPinned } from '../../../common'; export class FilterManager { - private filters: esFilters.Filter[] = []; + private filters: Filter[] = []; private updated$: Subject = new Subject(); private fetch$: Subject = new Subject(); private uiSettings: IUiSettingsClient; @@ -40,13 +40,13 @@ export class FilterManager { this.uiSettings = uiSettings; } - private mergeIncomingFilters(partitionedFilters: PartitionedFilters): esFilters.Filter[] { + private mergeIncomingFilters(partitionedFilters: PartitionedFilters): Filter[] { const globalFilters = partitionedFilters.globalFilters; const appFilters = partitionedFilters.appFilters; // existing globalFilters should be mutated by appFilters // ignore original appFilters which are already inside globalFilters - const cleanedAppFilters: esFilters.Filter[] = []; + const cleanedAppFilters: Filter[] = []; _.each(appFilters, function(filter, i) { const match = _.find(globalFilters, function(globalFilter) { return compareFilters(globalFilter, filter); @@ -64,22 +64,19 @@ export class FilterManager { return FilterManager.mergeFilters(cleanedAppFilters, globalFilters); } - private static mergeFilters( - appFilters: esFilters.Filter[], - globalFilters: esFilters.Filter[] - ): esFilters.Filter[] { + private static mergeFilters(appFilters: Filter[], globalFilters: Filter[]): Filter[] { return uniqFilters(appFilters.reverse().concat(globalFilters.reverse())).reverse(); } - private static partitionFilters(filters: esFilters.Filter[]): PartitionedFilters { - const [globalFilters, appFilters] = _.partition(filters, esFilters.isFilterPinned); + private static partitionFilters(filters: Filter[]): PartitionedFilters { + const [globalFilters, appFilters] = _.partition(filters, isFilterPinned); return { globalFilters, appFilters, }; } - private handleStateUpdate(newFilters: esFilters.Filter[]) { + private handleStateUpdate(newFilters: Filter[]) { newFilters.sort(sortFilters); const filtersUpdated = !compareFilters(this.filters, newFilters, COMPARE_ALL_OPTIONS); @@ -125,7 +122,7 @@ export class FilterManager { /* Setters */ public addFilters( - filters: esFilters.Filter[] | esFilters.Filter, + filters: Filter[] | Filter, pinFilterStatus: boolean = this.uiSettings.get('filters:pinnedByDefault') ) { if (!Array.isArray(filters)) { @@ -136,9 +133,7 @@ export class FilterManager { return; } - const store = pinFilterStatus - ? esFilters.FilterStateStore.GLOBAL_STATE - : esFilters.FilterStateStore.APP_STATE; + const store = pinFilterStatus ? FilterStateStore.GLOBAL_STATE : FilterStateStore.APP_STATE; FilterManager.setFiltersStore(filters, store); @@ -155,12 +150,10 @@ export class FilterManager { } public setFilters( - newFilters: esFilters.Filter[], + newFilters: Filter[], pinFilterStatus: boolean = this.uiSettings.get('filters:pinnedByDefault') ) { - const store = pinFilterStatus - ? esFilters.FilterStateStore.GLOBAL_STATE - : esFilters.FilterStateStore.APP_STATE; + const store = pinFilterStatus ? FilterStateStore.GLOBAL_STATE : FilterStateStore.APP_STATE; FilterManager.setFiltersStore(newFilters, store); @@ -175,9 +168,9 @@ export class FilterManager { * Removes app filters for which there is a duplicate within new global filters * @param newGlobalFilters */ - public setGlobalFilters(newGlobalFilters: esFilters.Filter[]) { + public setGlobalFilters(newGlobalFilters: Filter[]) { newGlobalFilters = mapAndFlattenFilters(newGlobalFilters); - FilterManager.setFiltersStore(newGlobalFilters, esFilters.FilterStateStore.GLOBAL_STATE, true); + FilterManager.setFiltersStore(newGlobalFilters, FilterStateStore.GLOBAL_STATE, true); const { appFilters: currentAppFilters } = this.getPartitionedFilters(); // remove duplicates from current app filters, to make sure global will take precedence const filteredAppFilters = currentAppFilters.filter( @@ -196,9 +189,9 @@ export class FilterManager { * Removes app filters for which there is a duplicate within new global filters * @param newAppFilters */ - public setAppFilters(newAppFilters: esFilters.Filter[]) { + public setAppFilters(newAppFilters: Filter[]) { newAppFilters = mapAndFlattenFilters(newAppFilters); - FilterManager.setFiltersStore(newAppFilters, esFilters.FilterStateStore.APP_STATE, true); + FilterManager.setFiltersStore(newAppFilters, FilterStateStore.APP_STATE, true); const { globalFilters: currentGlobalFilters } = this.getPartitionedFilters(); // remove duplicates from current global filters, to make sure app will take precedence const filteredGlobalFilters = currentGlobalFilters.filter( @@ -212,7 +205,7 @@ export class FilterManager { this.handleStateUpdate(newFilters); } - public removeFilter(filter: esFilters.Filter) { + public removeFilter(filter: Filter) { const filterIndex = _.findIndex(this.filters, item => { return _.isEqual(item.meta, filter.meta) && _.isEqual(item.query, filter.query); }); @@ -229,11 +222,11 @@ export class FilterManager { } public static setFiltersStore( - filters: esFilters.Filter[], - store: esFilters.FilterStateStore, + filters: Filter[], + store: FilterStateStore, shouldOverrideStore = false ) { - _.map(filters, (filter: esFilters.Filter) => { + _.map(filters, (filter: Filter) => { // Override status only for filters that didn't have state in the first place. // or if shouldOverrideStore is explicitly true if (shouldOverrideStore || filter.$state === undefined) { diff --git a/src/plugins/data/public/query/filter_manager/lib/compare_filters.test.ts b/src/plugins/data/public/query/filter_manager/lib/compare_filters.test.ts index 9cc5938750c4ed..e7e947c49d0e4a 100644 --- a/src/plugins/data/public/query/filter_manager/lib/compare_filters.test.ts +++ b/src/plugins/data/public/query/filter_manager/lib/compare_filters.test.ts @@ -18,28 +18,28 @@ */ import { compareFilters, COMPARE_ALL_OPTIONS } from './compare_filters'; -import { esFilters } from '../../../../common'; +import { buildEmptyFilter, buildQueryFilter, FilterStateStore } from '../../../../common'; describe('filter manager utilities', () => { describe('compare filters', () => { test('should compare filters', () => { - const f1 = esFilters.buildQueryFilter( + const f1 = buildQueryFilter( { _type: { match: { query: 'apache', type: 'phrase' } } }, 'index', '' ); - const f2 = esFilters.buildEmptyFilter(true); + const f2 = buildEmptyFilter(true); expect(compareFilters(f1, f2)).toBeFalsy(); }); test('should compare duplicates', () => { - const f1 = esFilters.buildQueryFilter( + const f1 = buildQueryFilter( { _type: { match: { query: 'apache', type: 'phrase' } } }, 'index', '' ); - const f2 = esFilters.buildQueryFilter( + const f2 = buildQueryFilter( { _type: { match: { query: 'apache', type: 'phrase' } } }, 'index', '' @@ -49,12 +49,12 @@ describe('filter manager utilities', () => { }); test('should compare duplicates, ignoring meta attributes', () => { - const f1 = esFilters.buildQueryFilter( + const f1 = buildQueryFilter( { _type: { match: { query: 'apache', type: 'phrase' } } }, 'index1', '' ); - const f2 = esFilters.buildQueryFilter( + const f2 = buildQueryFilter( { _type: { match: { query: 'apache', type: 'phrase' } } }, 'index2', '' @@ -65,33 +65,25 @@ describe('filter manager utilities', () => { test('should compare duplicates, ignoring $state attributes', () => { const f1 = { - $state: { store: esFilters.FilterStateStore.APP_STATE }, - ...esFilters.buildQueryFilter( - { _type: { match: { query: 'apache', type: 'phrase' } } }, - 'index', - '' - ), + $state: { store: FilterStateStore.APP_STATE }, + ...buildQueryFilter({ _type: { match: { query: 'apache', type: 'phrase' } } }, 'index', ''), }; const f2 = { - $state: { store: esFilters.FilterStateStore.GLOBAL_STATE }, - ...esFilters.buildQueryFilter( - { _type: { match: { query: 'apache', type: 'phrase' } } }, - 'index', - '' - ), + $state: { store: FilterStateStore.GLOBAL_STATE }, + ...buildQueryFilter({ _type: { match: { query: 'apache', type: 'phrase' } } }, 'index', ''), }; expect(compareFilters(f1, f2)).toBeTruthy(); }); test('should compare filters array to non array', () => { - const f1 = esFilters.buildQueryFilter( + const f1 = buildQueryFilter( { _type: { match: { query: 'apache', type: 'phrase' } } }, 'index', '' ); - const f2 = esFilters.buildQueryFilter( + const f2 = buildQueryFilter( { _type: { match: { query: 'mochi', type: 'phrase' } } }, 'index', '' @@ -101,13 +93,13 @@ describe('filter manager utilities', () => { }); test('should compare filters array to partial array', () => { - const f1 = esFilters.buildQueryFilter( + const f1 = buildQueryFilter( { _type: { match: { query: 'apache', type: 'phrase' } } }, 'index', '' ); - const f2 = esFilters.buildQueryFilter( + const f2 = buildQueryFilter( { _type: { match: { query: 'mochi', type: 'phrase' } } }, 'index', '' @@ -117,13 +109,13 @@ describe('filter manager utilities', () => { }); test('should compare filters array to exact array', () => { - const f1 = esFilters.buildQueryFilter( + const f1 = buildQueryFilter( { _type: { match: { query: 'apache', type: 'phrase' } } }, 'index', '' ); - const f2 = esFilters.buildQueryFilter( + const f2 = buildQueryFilter( { _type: { match: { query: 'mochi', type: 'phrase' } } }, 'index', '' @@ -133,12 +125,12 @@ describe('filter manager utilities', () => { }); test('should compare array of duplicates, ignoring meta attributes', () => { - const f1 = esFilters.buildQueryFilter( + const f1 = buildQueryFilter( { _type: { match: { query: 'apache', type: 'phrase' } } }, 'index1', '' ); - const f2 = esFilters.buildQueryFilter( + const f2 = buildQueryFilter( { _type: { match: { query: 'apache', type: 'phrase' } } }, 'index2', '' @@ -149,20 +141,12 @@ describe('filter manager utilities', () => { test('should compare array of duplicates, ignoring $state attributes', () => { const f1 = { - $state: { store: esFilters.FilterStateStore.APP_STATE }, - ...esFilters.buildQueryFilter( - { _type: { match: { query: 'apache', type: 'phrase' } } }, - 'index', - '' - ), + $state: { store: FilterStateStore.APP_STATE }, + ...buildQueryFilter({ _type: { match: { query: 'apache', type: 'phrase' } } }, 'index', ''), }; const f2 = { - $state: { store: esFilters.FilterStateStore.GLOBAL_STATE }, - ...esFilters.buildQueryFilter( - { _type: { match: { query: 'apache', type: 'phrase' } } }, - 'index', - '' - ), + $state: { store: FilterStateStore.GLOBAL_STATE }, + ...buildQueryFilter({ _type: { match: { query: 'apache', type: 'phrase' } } }, 'index', ''), }; expect(compareFilters([f1], [f2])).toBeTruthy(); @@ -170,20 +154,12 @@ describe('filter manager utilities', () => { test('should compare duplicates with COMPARE_ALL_OPTIONS should check store', () => { const f1 = { - $state: { store: esFilters.FilterStateStore.APP_STATE }, - ...esFilters.buildQueryFilter( - { _type: { match: { query: 'apache', type: 'phrase' } } }, - 'index', - '' - ), + $state: { store: FilterStateStore.APP_STATE }, + ...buildQueryFilter({ _type: { match: { query: 'apache', type: 'phrase' } } }, 'index', ''), }; const f2 = { - $state: { store: esFilters.FilterStateStore.GLOBAL_STATE }, - ...esFilters.buildQueryFilter( - { _type: { match: { query: 'apache', type: 'phrase' } } }, - 'index', - '' - ), + $state: { store: FilterStateStore.GLOBAL_STATE }, + ...buildQueryFilter({ _type: { match: { query: 'apache', type: 'phrase' } } }, 'index', ''), }; expect(compareFilters([f1], [f2], COMPARE_ALL_OPTIONS)).toBeFalsy(); @@ -191,20 +167,12 @@ describe('filter manager utilities', () => { test('should compare duplicates with COMPARE_ALL_OPTIONS should not check key and value ', () => { const f1 = { - $state: { store: esFilters.FilterStateStore.GLOBAL_STATE }, - ...esFilters.buildQueryFilter( - { _type: { match: { query: 'apache', type: 'phrase' } } }, - 'index', - '' - ), + $state: { store: FilterStateStore.GLOBAL_STATE }, + ...buildQueryFilter({ _type: { match: { query: 'apache', type: 'phrase' } } }, 'index', ''), }; const f2 = { - $state: { store: esFilters.FilterStateStore.GLOBAL_STATE }, - ...esFilters.buildQueryFilter( - { _type: { match: { query: 'apache', type: 'phrase' } } }, - 'index', - '' - ), + $state: { store: FilterStateStore.GLOBAL_STATE }, + ...buildQueryFilter({ _type: { match: { query: 'apache', type: 'phrase' } } }, 'index', ''), }; f2.meta.key = 'wassup'; diff --git a/src/plugins/data/public/query/filter_manager/lib/compare_filters.ts b/src/plugins/data/public/query/filter_manager/lib/compare_filters.ts index 218b9d492b61f6..cd4a966184f832 100644 --- a/src/plugins/data/public/query/filter_manager/lib/compare_filters.ts +++ b/src/plugins/data/public/query/filter_manager/lib/compare_filters.ts @@ -18,7 +18,7 @@ */ import { defaults, isEqual, omit, map } from 'lodash'; -import { esFilters } from '../../../../common'; +import { FilterMeta, Filter } from '../../../../common'; export interface FilterCompareOptions { disabled?: boolean; @@ -36,11 +36,11 @@ export const COMPARE_ALL_OPTIONS: FilterCompareOptions = { }; const mapFilter = ( - filter: esFilters.Filter, + filter: Filter, comparators: FilterCompareOptions, excludedAttributes: string[] ) => { - const cleaned: esFilters.FilterMeta = omit(filter, excludedAttributes); + const cleaned: FilterMeta = omit(filter, excludedAttributes); if (comparators.negate) cleaned.negate = filter.meta && Boolean(filter.meta.negate); if (comparators.disabled) cleaned.disabled = filter.meta && Boolean(filter.meta.disabled); @@ -49,28 +49,26 @@ const mapFilter = ( }; const mapFilterArray = ( - filters: esFilters.Filter[], + filters: Filter[], comparators: FilterCompareOptions, excludedAttributes: string[] ) => { - return map(filters, (filter: esFilters.Filter) => - mapFilter(filter, comparators, excludedAttributes) - ); + return map(filters, (filter: Filter) => mapFilter(filter, comparators, excludedAttributes)); }; /** * Compare two filters or filter arrays to see if they match. * For filter arrays, the assumption is they are sorted. * - * @param {esFilters.Filter | esFilters.Filter[]} first The first filter or filter array to compare - * @param {esFilters.Filter | esFilters.Filter[]} second The second filter or filter array to compare + * @param {Filter | Filter[]} first The first filter or filter array to compare + * @param {Filter | Filter[]} second The second filter or filter array to compare * @param {FilterCompareOptions} comparatorOptions Parameters to use for comparison * * @returns {bool} Filters are the same */ export const compareFilters = ( - first: esFilters.Filter | esFilters.Filter[], - second: esFilters.Filter | esFilters.Filter[], + first: Filter | Filter[], + second: Filter | Filter[], comparatorOptions: FilterCompareOptions = {} ) => { let comparators: FilterCompareOptions = {}; diff --git a/src/plugins/data/public/query/filter_manager/lib/dedup_filters.test.ts b/src/plugins/data/public/query/filter_manager/lib/dedup_filters.test.ts index ebad5ad6b02c5f..ecc0ec94e07c8e 100644 --- a/src/plugins/data/public/query/filter_manager/lib/dedup_filters.test.ts +++ b/src/plugins/data/public/query/filter_manager/lib/dedup_filters.test.ts @@ -18,7 +18,14 @@ */ import { dedupFilters } from './dedup_filters'; -import { esFilters, IIndexPattern, IFieldType } from '../../../../common'; +import { + Filter, + IIndexPattern, + IFieldType, + buildRangeFilter, + buildQueryFilter, + FilterStateStore, +} from '../../../../common'; describe('filter manager utilities', () => { let indexPattern: IIndexPattern; @@ -31,31 +38,18 @@ describe('filter manager utilities', () => { describe('dedupFilters(existing, filters)', () => { test('should return only filters which are not in the existing', () => { - const existing: esFilters.Filter[] = [ - esFilters.buildRangeFilter( - { name: 'bytes' } as IFieldType, - { from: 0, to: 1024 }, - indexPattern, - '' - ), - esFilters.buildQueryFilter( - { match: { _term: { query: 'apache', type: 'phrase' } } }, - 'index', - '' - ), + const existing: Filter[] = [ + buildRangeFilter({ name: 'bytes' } as IFieldType, { from: 0, to: 1024 }, indexPattern, ''), + buildQueryFilter({ match: { _term: { query: 'apache', type: 'phrase' } } }, 'index', ''), ]; - const filters: esFilters.Filter[] = [ - esFilters.buildRangeFilter( + const filters: Filter[] = [ + buildRangeFilter( { name: 'bytes' } as IFieldType, { from: 1024, to: 2048 }, indexPattern, '' ), - esFilters.buildQueryFilter( - { match: { _term: { query: 'apache', type: 'phrase' } } }, - 'index', - '' - ), + buildQueryFilter({ match: { _term: { query: 'apache', type: 'phrase' } } }, 'index', ''), ]; const results = dedupFilters(existing, filters); @@ -64,15 +58,10 @@ describe('filter manager utilities', () => { }); test('should ignore the disabled attribute when comparing ', () => { - const existing: esFilters.Filter[] = [ - esFilters.buildRangeFilter( - { name: 'bytes' } as IFieldType, - { from: 0, to: 1024 }, - indexPattern, - '' - ), + const existing: Filter[] = [ + buildRangeFilter({ name: 'bytes' } as IFieldType, { from: 0, to: 1024 }, indexPattern, ''), { - ...esFilters.buildQueryFilter( + ...buildQueryFilter( { match: { _term: { query: 'apache', type: 'phrase' } } }, 'index1', '' @@ -80,18 +69,14 @@ describe('filter manager utilities', () => { meta: { disabled: true, negate: false, alias: null }, }, ]; - const filters: esFilters.Filter[] = [ - esFilters.buildRangeFilter( + const filters: Filter[] = [ + buildRangeFilter( { name: 'bytes' } as IFieldType, { from: 1024, to: 2048 }, indexPattern, '' ), - esFilters.buildQueryFilter( - { match: { _term: { query: 'apache', type: 'phrase' } } }, - 'index1', - '' - ), + buildQueryFilter({ match: { _term: { query: 'apache', type: 'phrase' } } }, 'index1', ''), ]; const results = dedupFilters(existing, filters); @@ -100,36 +85,31 @@ describe('filter manager utilities', () => { }); test('should ignore $state attribute', () => { - const existing: esFilters.Filter[] = [ - esFilters.buildRangeFilter( - { name: 'bytes' } as IFieldType, - { from: 0, to: 1024 }, - indexPattern, - '' - ), + const existing: Filter[] = [ + buildRangeFilter({ name: 'bytes' } as IFieldType, { from: 0, to: 1024 }, indexPattern, ''), { - ...esFilters.buildQueryFilter( + ...buildQueryFilter( { match: { _term: { query: 'apache', type: 'phrase' } } }, 'index', '' ), - $state: { store: esFilters.FilterStateStore.APP_STATE }, + $state: { store: FilterStateStore.APP_STATE }, }, ]; - const filters: esFilters.Filter[] = [ - esFilters.buildRangeFilter( + const filters: Filter[] = [ + buildRangeFilter( { name: 'bytes' } as IFieldType, { from: 1024, to: 2048 }, indexPattern, '' ), { - ...esFilters.buildQueryFilter( + ...buildQueryFilter( { match: { _term: { query: 'apache', type: 'phrase' } } }, 'index', '' ), - $state: { store: esFilters.FilterStateStore.GLOBAL_STATE }, + $state: { store: FilterStateStore.GLOBAL_STATE }, }, ]; const results = dedupFilters(existing, filters); diff --git a/src/plugins/data/public/query/filter_manager/lib/dedup_filters.ts b/src/plugins/data/public/query/filter_manager/lib/dedup_filters.ts index 897a645e87b5a7..d5d0e70504b412 100644 --- a/src/plugins/data/public/query/filter_manager/lib/dedup_filters.ts +++ b/src/plugins/data/public/query/filter_manager/lib/dedup_filters.ts @@ -19,7 +19,7 @@ import { filter, find } from 'lodash'; import { compareFilters, FilterCompareOptions } from './compare_filters'; -import { esFilters } from '../../../../common'; +import { Filter } from '../../../../common'; /** * Combine 2 filter collections, removing duplicates @@ -31,8 +31,8 @@ import { esFilters } from '../../../../common'; * @returns {object} An array of filters that were not in existing */ export const dedupFilters = ( - existingFilters: esFilters.Filter[], - filters: esFilters.Filter[], + existingFilters: Filter[], + filters: Filter[], comparatorOptions: FilterCompareOptions = {} ) => { if (!Array.isArray(filters)) { @@ -41,8 +41,8 @@ export const dedupFilters = ( return filter( filters, - (f: esFilters.Filter) => - !find(existingFilters, (existingFilter: esFilters.Filter) => + (f: Filter) => + !find(existingFilters, (existingFilter: Filter) => compareFilters(existingFilter, f, comparatorOptions) ) ); diff --git a/src/plugins/data/public/query/filter_manager/lib/generate_filter.test.ts b/src/plugins/data/public/query/filter_manager/lib/generate_filter.test.ts index b8de08fc3a6105..659f28e3ce9cca 100644 --- a/src/plugins/data/public/query/filter_manager/lib/generate_filter.test.ts +++ b/src/plugins/data/public/query/filter_manager/lib/generate_filter.test.ts @@ -20,7 +20,15 @@ import { generateFilters } from './generate_filters'; import { FilterManager } from '../filter_manager'; -import { esFilters, IFieldType, IIndexPattern } from '../../../../common'; +import { + Filter, + IFieldType, + IIndexPattern, + isExistsFilter, + buildExistsFilter, + PhraseFilter, + isPhraseFilter, +} from '../../../../common'; const INDEX_NAME = 'my-index'; const EXISTS_FIELD_NAME = '_exists_'; @@ -31,7 +39,7 @@ const PHRASE_VALUE = 'my-value'; describe('Generate filters', () => { let mockFilterManager: FilterManager; - let filtersArray: esFilters.Filter[]; + let filtersArray: Filter[]; beforeEach(() => { filtersArray = []; @@ -53,7 +61,7 @@ describe('Generate filters', () => { expect(filters).toHaveLength(1); expect(filters[0].meta.index === INDEX_NAME); expect(filters[0].meta.negate).toBeFalsy(); - expect(esFilters.isExistsFilter(filters[0])).toBeTruthy(); + expect(isExistsFilter(filters[0])).toBeTruthy(); }); it('should create negated exists filter', () => { @@ -67,11 +75,11 @@ describe('Generate filters', () => { expect(filters).toHaveLength(1); expect(filters[0].meta.index === INDEX_NAME); expect(filters[0].meta.negate).toBeTruthy(); - expect(esFilters.isExistsFilter(filters[0])).toBeTruthy(); + expect(isExistsFilter(filters[0])).toBeTruthy(); }); it('should update and re-enable EXISTING exists filter', () => { - const filter = esFilters.buildExistsFilter(FIELD, { id: INDEX_NAME } as IIndexPattern); + const filter = buildExistsFilter(FIELD, { id: INDEX_NAME } as IIndexPattern); filter.meta.disabled = true; filtersArray.push(filter); @@ -80,7 +88,7 @@ describe('Generate filters', () => { expect(filters[0].meta.index === INDEX_NAME); expect(filters[0].meta.negate).toBeTruthy(); expect(filters[0].meta.disabled).toBeFalsy(); - expect(esFilters.isExistsFilter(filters[0])).toBeTruthy(); + expect(isExistsFilter(filters[0])).toBeTruthy(); }); it('should create phrase filter', () => { @@ -88,8 +96,8 @@ describe('Generate filters', () => { expect(filters).toHaveLength(1); expect(filters[0].meta.index === INDEX_NAME); expect(filters[0].meta.negate).toBeFalsy(); - expect(esFilters.isPhraseFilter(filters[0])).toBeTruthy(); - expect((filters[0] as esFilters.PhraseFilter).query.match_phrase).toEqual({ + expect(isPhraseFilter(filters[0])).toBeTruthy(); + expect((filters[0] as PhraseFilter).query.match_phrase).toEqual({ [FIELD.name]: PHRASE_VALUE, }); }); @@ -99,8 +107,8 @@ describe('Generate filters', () => { expect(filters).toHaveLength(1); expect(filters[0].meta.index === INDEX_NAME); expect(filters[0].meta.negate).toBeTruthy(); - expect(esFilters.isPhraseFilter(filters[0])).toBeTruthy(); - expect((filters[0] as esFilters.PhraseFilter).query.match_phrase).toEqual({ + expect(isPhraseFilter(filters[0])).toBeTruthy(); + expect((filters[0] as PhraseFilter).query.match_phrase).toEqual({ [FIELD.name]: PHRASE_VALUE, }); }); @@ -119,12 +127,12 @@ describe('Generate filters', () => { expect(filters[0].meta.negate).toBeFalsy(); expect(filters[1].meta.index === INDEX_NAME); expect(filters[1].meta.negate).toBeFalsy(); - expect(esFilters.isPhraseFilter(filters[0])).toBeTruthy(); - expect(esFilters.isPhraseFilter(filters[1])).toBeTruthy(); - expect((filters[0] as esFilters.PhraseFilter).query.match_phrase).toEqual({ + expect(isPhraseFilter(filters[0])).toBeTruthy(); + expect(isPhraseFilter(filters[1])).toBeTruthy(); + expect((filters[0] as PhraseFilter).query.match_phrase).toEqual({ [FIELD.name]: PHRASE_VALUE, }); - expect((filters[1] as esFilters.PhraseFilter).query.match_phrase).toEqual({ + expect((filters[1] as PhraseFilter).query.match_phrase).toEqual({ [FIELD.name]: ANOTHER_PHRASE, }); }); diff --git a/src/plugins/data/public/query/filter_manager/lib/generate_filters.ts b/src/plugins/data/public/query/filter_manager/lib/generate_filters.ts index b4d46ae9fb3cf7..105e932f696f07 100644 --- a/src/plugins/data/public/query/filter_manager/lib/generate_filters.ts +++ b/src/plugins/data/public/query/filter_manager/lib/generate_filters.ts @@ -18,36 +18,45 @@ */ import _ from 'lodash'; -import { esFilters, IFieldType, IIndexPattern } from '../../../../common'; +import { + IFieldType, + IIndexPattern, + Filter, + isExistsFilter, + isPhraseFilter, + getPhraseFilterValue, + getPhraseFilterField, + isScriptedPhraseFilter, + buildFilter, + FilterStateStore, + FILTERS, +} from '../../../../common'; import { FilterManager } from '../filter_manager'; function getExistingFilter( - appFilters: esFilters.Filter[], + appFilters: Filter[], fieldName: string, value: any -): esFilters.Filter | undefined { +): Filter | undefined { // TODO: On array fields, negating does not negate the combination, rather all terms return _.find(appFilters, function(filter) { if (!filter) return; - if (fieldName === '_exists_' && esFilters.isExistsFilter(filter)) { + if (fieldName === '_exists_' && isExistsFilter(filter)) { return filter.exists!.field === value; } - if (esFilters.isPhraseFilter(filter)) { - return ( - esFilters.getPhraseFilterField(filter) === fieldName && - esFilters.getPhraseFilterValue(filter) === value - ); + if (isPhraseFilter(filter)) { + return getPhraseFilterField(filter) === fieldName && getPhraseFilterValue(filter) === value; } - if (esFilters.isScriptedPhraseFilter(filter)) { + if (isScriptedPhraseFilter(filter)) { return filter.meta.field === fieldName && filter.script!.script.params.value === value; } }); } -function updateExistingFilter(existingFilter: esFilters.Filter, negate: boolean) { +function updateExistingFilter(existingFilter: Filter, negate: boolean) { existingFilter.meta.disabled = false; if (existingFilter.meta.negate !== negate) { existingFilter.meta.negate = !existingFilter.meta.negate; @@ -72,7 +81,7 @@ export function generateFilters( values: any, operation: string, index: string -): esFilters.Filter[] { +): Filter[] { values = Array.isArray(values) ? values : [values]; const fieldObj = (_.isObject(field) ? field @@ -80,7 +89,7 @@ export function generateFilters( name: field, }) as IFieldType; const fieldName = fieldObj.name; - const newFilters: esFilters.Filter[] = []; + const newFilters: Filter[] = []; const appFilters = filterManager.getAppFilters(); const negate = operation === '-'; @@ -95,9 +104,8 @@ export function generateFilters( } else { const tmpIndexPattern = { id: index } as IIndexPattern; - const filterType = - fieldName === '_exists_' ? esFilters.FILTERS.EXISTS : esFilters.FILTERS.PHRASE; - filter = esFilters.buildFilter( + const filterType = fieldName === '_exists_' ? FILTERS.EXISTS : FILTERS.PHRASE; + filter = buildFilter( tmpIndexPattern, fieldObj, filterType, @@ -105,7 +113,7 @@ export function generateFilters( false, value, null, - esFilters.FilterStateStore.APP_STATE + FilterStateStore.APP_STATE ); } diff --git a/src/plugins/data/public/query/filter_manager/lib/generate_mapping_chain.test.ts b/src/plugins/data/public/query/filter_manager/lib/generate_mapping_chain.test.ts index 9e386bdc7c80d8..8322e79dd67d14 100644 --- a/src/plugins/data/public/query/filter_manager/lib/generate_mapping_chain.test.ts +++ b/src/plugins/data/public/query/filter_manager/lib/generate_mapping_chain.test.ts @@ -19,7 +19,7 @@ import sinon from 'sinon'; import { generateMappingChain } from './generate_mapping_chain'; -import { esFilters } from '../../../../common'; +import { buildEmptyFilter } from '../../../../common'; describe('filter manager utilities', () => { let mapping: any; @@ -32,7 +32,7 @@ describe('filter manager utilities', () => { describe('generateMappingChain()', () => { test('should create a chaining function which calls the next function if the error is thrown', async () => { - const filter = esFilters.buildEmptyFilter(true); + const filter = buildEmptyFilter(true); mapping.throws(filter); next.returns('good'); @@ -45,7 +45,7 @@ describe('filter manager utilities', () => { }); test('should create a chaining function which DOES NOT call the next function if the result is returned', async () => { - const filter = esFilters.buildEmptyFilter(true); + const filter = buildEmptyFilter(true); mapping.returns('good'); next.returns('bad'); @@ -57,7 +57,7 @@ describe('filter manager utilities', () => { }); test('should resolve result for the mapping function', async () => { - const filter = esFilters.buildEmptyFilter(true); + const filter = buildEmptyFilter(true); mapping.returns({ key: 'test', value: 'example' }); @@ -70,7 +70,7 @@ describe('filter manager utilities', () => { test('should call the mapping function with the argument to the chain', async () => { // @ts-ignore - const filter: esFilters.Filter = { test: 'example' }; + const filter: Filter = { test: 'example' }; mapping.returns({ key: 'test', value: 'example' }); @@ -84,7 +84,7 @@ describe('filter manager utilities', () => { }); test('should resolve result for the next function', async () => { - const filter = esFilters.buildEmptyFilter(true); + const filter = buildEmptyFilter(true); mapping.throws(filter); next.returns({ key: 'test', value: 'example' }); @@ -98,7 +98,7 @@ describe('filter manager utilities', () => { }); test('should throw an error if no functions match', async done => { - const filter = esFilters.buildEmptyFilter(true); + const filter = buildEmptyFilter(true); mapping.throws(filter); diff --git a/src/plugins/data/public/query/filter_manager/lib/generate_mapping_chain.ts b/src/plugins/data/public/query/filter_manager/lib/generate_mapping_chain.ts index 1af8482a96e0f4..ce805cd8893b5b 100644 --- a/src/plugins/data/public/query/filter_manager/lib/generate_mapping_chain.ts +++ b/src/plugins/data/public/query/filter_manager/lib/generate_mapping_chain.ts @@ -16,14 +16,14 @@ * specific language governing permissions and limitations * under the License. */ -import { esFilters } from '../../../../common'; +import { Filter } from '../../../../common'; const noop = () => { throw new Error('No mappings have been found for filter.'); }; export const generateMappingChain = (fn: Function, next: Function = noop) => { - return (filter: esFilters.Filter) => { + return (filter: Filter) => { try { return fn(filter); } catch (result) { diff --git a/src/plugins/data/public/query/filter_manager/lib/map_and_flatten_filters.test.ts b/src/plugins/data/public/query/filter_manager/lib/map_and_flatten_filters.test.ts index 3190b6777a9e14..1b2d4765709029 100644 --- a/src/plugins/data/public/query/filter_manager/lib/map_and_flatten_filters.test.ts +++ b/src/plugins/data/public/query/filter_manager/lib/map_and_flatten_filters.test.ts @@ -18,13 +18,13 @@ */ import { mapAndFlattenFilters } from './map_and_flatten_filters'; -import { esFilters } from '../../../../common'; +import { Filter } from '../../../../common'; describe('filter manager utilities', () => { describe('mapAndFlattenFilters()', () => { let filters: unknown; - function getDisplayName(filter: esFilters.Filter) { + function getDisplayName(filter: Filter) { return typeof filter.meta.value === 'function' ? filter.meta.value() : filter.meta.value; } @@ -45,7 +45,7 @@ describe('filter manager utilities', () => { }); test('should map and flatten the filters', () => { - const results = mapAndFlattenFilters(filters as esFilters.Filter[]); + const results = mapAndFlattenFilters(filters as Filter[]); expect(results).toHaveLength(5); expect(results[0]).toHaveProperty('meta'); diff --git a/src/plugins/data/public/query/filter_manager/lib/map_and_flatten_filters.ts b/src/plugins/data/public/query/filter_manager/lib/map_and_flatten_filters.ts index 28b5e8d151ff6d..13c99e1655d4c4 100644 --- a/src/plugins/data/public/query/filter_manager/lib/map_and_flatten_filters.ts +++ b/src/plugins/data/public/query/filter_manager/lib/map_and_flatten_filters.ts @@ -19,8 +19,8 @@ import { compact, flatten } from 'lodash'; import { mapFilter } from './map_filter'; -import { esFilters } from '../../../../common'; +import { Filter } from '../../../../common'; -export const mapAndFlattenFilters = (filters: esFilters.Filter[]) => { - return compact(flatten(filters)).map((item: esFilters.Filter) => mapFilter(item)); +export const mapAndFlattenFilters = (filters: Filter[]) => { + return compact(flatten(filters)).map((item: Filter) => mapFilter(item)); }; diff --git a/src/plugins/data/public/query/filter_manager/lib/map_filter.test.ts b/src/plugins/data/public/query/filter_manager/lib/map_filter.test.ts index 9df07718d5bcbc..f75970d4dec181 100644 --- a/src/plugins/data/public/query/filter_manager/lib/map_filter.test.ts +++ b/src/plugins/data/public/query/filter_manager/lib/map_filter.test.ts @@ -18,10 +18,10 @@ */ import { mapFilter } from './map_filter'; -import { esFilters } from '../../../../common'; +import { Filter } from '../../../../common'; describe('filter manager utilities', () => { - function getDisplayName(filter: esFilters.Filter) { + function getDisplayName(filter: Filter) { return typeof filter.meta.value === 'function' ? filter.meta.value() : filter.meta.value; } @@ -31,7 +31,7 @@ describe('filter manager utilities', () => { meta: { index: 'logstash-*' }, query: { match: { _type: { query: 'apache', type: 'phrase' } } }, }; - const after = mapFilter(before as esFilters.Filter); + const after = mapFilter(before as Filter); expect(after).toHaveProperty('meta'); expect(after.meta).toHaveProperty('key', '_type'); @@ -43,7 +43,7 @@ describe('filter manager utilities', () => { test('should map exists filters', async () => { const before: any = { meta: { index: 'logstash-*' }, exists: { field: '@timestamp' } }; - const after = mapFilter(before as esFilters.Filter); + const after = mapFilter(before as Filter); expect(after).toHaveProperty('meta'); expect(after.meta).toHaveProperty('key', '@timestamp'); @@ -55,7 +55,7 @@ describe('filter manager utilities', () => { test('should map missing filters', async () => { const before: any = { meta: { index: 'logstash-*' }, missing: { field: '@timestamp' } }; - const after = mapFilter(before as esFilters.Filter); + const after = mapFilter(before as Filter); expect(after).toHaveProperty('meta'); expect(after.meta).toHaveProperty('key', '@timestamp'); @@ -67,7 +67,7 @@ describe('filter manager utilities', () => { test('should map json filter', async () => { const before: any = { meta: { index: 'logstash-*' }, query: { match_all: {} } }; - const after = mapFilter(before as esFilters.Filter); + const after = mapFilter(before as Filter); expect(after).toHaveProperty('meta'); expect(after.meta).toHaveProperty('key', 'query'); @@ -81,7 +81,7 @@ describe('filter manager utilities', () => { const before: any = { meta: { index: 'logstash-*' } }; try { - mapFilter(before as esFilters.Filter); + mapFilter(before as Filter); } catch (e) { expect(e).toBeInstanceOf(Error); expect(e.message).toBe('No mappings have been found for filter.'); diff --git a/src/plugins/data/public/query/filter_manager/lib/map_filter.ts b/src/plugins/data/public/query/filter_manager/lib/map_filter.ts index dc3deb93bd27b2..7b223a68455598 100644 --- a/src/plugins/data/public/query/filter_manager/lib/map_filter.ts +++ b/src/plugins/data/public/query/filter_manager/lib/map_filter.ts @@ -31,9 +31,9 @@ import { mapGeoBoundingBox } from './mappers/map_geo_bounding_box'; import { mapGeoPolygon } from './mappers/map_geo_polygon'; import { mapDefault } from './mappers/map_default'; import { generateMappingChain } from './generate_mapping_chain'; -import { esFilters } from '../../../../common'; +import { Filter } from '../../../../common'; -export function mapFilter(filter: esFilters.Filter) { +export function mapFilter(filter: Filter) { /** Mappers **/ // Each mapper is a simple promise function that test if the mapper can diff --git a/src/plugins/data/public/query/filter_manager/lib/mappers/map_default.test.ts b/src/plugins/data/public/query/filter_manager/lib/mappers/map_default.test.ts index f6baaa9218d74d..1fdace52e89f5c 100644 --- a/src/plugins/data/public/query/filter_manager/lib/mappers/map_default.test.ts +++ b/src/plugins/data/public/query/filter_manager/lib/mappers/map_default.test.ts @@ -18,12 +18,12 @@ */ import { mapDefault } from './map_default'; -import { esFilters } from '../../../../../common'; +import { buildQueryFilter, buildEmptyFilter } from '../../../../../common'; describe('filter manager utilities', () => { describe('mapDefault()', () => { test('should return the key and value for matching filters', async () => { - const filter = esFilters.buildQueryFilter({ match_all: {} }, 'index', ''); + const filter = buildQueryFilter({ match_all: {} }, 'index', ''); const result = mapDefault(filter); expect(result).toHaveProperty('key', 'query'); @@ -31,7 +31,7 @@ describe('filter manager utilities', () => { }); test('should return undefined if there is no valid key', async () => { - const filter = esFilters.buildEmptyFilter(true); + const filter = buildEmptyFilter(true); try { mapDefault(filter); diff --git a/src/plugins/data/public/query/filter_manager/lib/mappers/map_default.ts b/src/plugins/data/public/query/filter_manager/lib/mappers/map_default.ts index 3fee6a063be5a4..c90c056f4eb350 100644 --- a/src/plugins/data/public/query/filter_manager/lib/mappers/map_default.ts +++ b/src/plugins/data/public/query/filter_manager/lib/mappers/map_default.ts @@ -18,14 +18,14 @@ */ import { find, keys, get } from 'lodash'; -import { esFilters } from '../../../../../common'; +import { Filter, FILTERS } from '../../../../../common'; -export const mapDefault = (filter: esFilters.Filter) => { +export const mapDefault = (filter: Filter) => { const metaProperty = /(^\$|meta)/; const key = find(keys(filter), item => !item.match(metaProperty)); if (key) { - const type = esFilters.FILTERS.CUSTOM; + const type = FILTERS.CUSTOM; const value = JSON.stringify(get(filter, key, {})); return { type, key, value }; diff --git a/src/plugins/data/public/query/filter_manager/lib/mappers/map_exists.test.ts b/src/plugins/data/public/query/filter_manager/lib/mappers/map_exists.test.ts index 2f0ab136bc59ff..83c39e449d3eac 100644 --- a/src/plugins/data/public/query/filter_manager/lib/mappers/map_exists.test.ts +++ b/src/plugins/data/public/query/filter_manager/lib/mappers/map_exists.test.ts @@ -19,7 +19,12 @@ import { mapExists } from './map_exists'; import { mapQueryString } from './map_query_string'; -import { esFilters, IIndexPattern, IFieldType } from '../../../../../common'; +import { + IIndexPattern, + IFieldType, + buildExistsFilter, + buildEmptyFilter, +} from '../../../../../common'; describe('filter manager utilities', () => { describe('mapExists()', () => { @@ -32,7 +37,7 @@ describe('filter manager utilities', () => { }); test('should return the key and value for matching filters', async () => { - const filter = esFilters.buildExistsFilter({ name: '_type' } as IFieldType, indexPattern); + const filter = buildExistsFilter({ name: '_type' } as IFieldType, indexPattern); const result = mapExists(filter); expect(result).toHaveProperty('key', '_type'); @@ -40,7 +45,7 @@ describe('filter manager utilities', () => { }); test('should return undefined for none matching', async done => { - const filter = esFilters.buildEmptyFilter(true); + const filter = buildEmptyFilter(true); try { mapQueryString(filter); diff --git a/src/plugins/data/public/query/filter_manager/lib/mappers/map_exists.ts b/src/plugins/data/public/query/filter_manager/lib/mappers/map_exists.ts index 38f9b1554c5c87..6555652a37ca87 100644 --- a/src/plugins/data/public/query/filter_manager/lib/mappers/map_exists.ts +++ b/src/plugins/data/public/query/filter_manager/lib/mappers/map_exists.ts @@ -18,13 +18,13 @@ */ import { get } from 'lodash'; -import { esFilters } from '../../../../../common'; +import { Filter, isExistsFilter, FILTERS } from '../../../../../common'; -export const mapExists = (filter: esFilters.Filter) => { - if (esFilters.isExistsFilter(filter)) { +export const mapExists = (filter: Filter) => { + if (isExistsFilter(filter)) { return { - type: esFilters.FILTERS.EXISTS, - value: esFilters.FILTERS.EXISTS, + type: FILTERS.EXISTS, + value: FILTERS.EXISTS, key: get(filter, 'exists.field'), }; } diff --git a/src/plugins/data/public/query/filter_manager/lib/mappers/map_geo_bounding_box.test.ts b/src/plugins/data/public/query/filter_manager/lib/mappers/map_geo_bounding_box.test.ts index 322b086c2cf49a..97f275b05a520e 100644 --- a/src/plugins/data/public/query/filter_manager/lib/mappers/map_geo_bounding_box.test.ts +++ b/src/plugins/data/public/query/filter_manager/lib/mappers/map_geo_bounding_box.test.ts @@ -18,7 +18,7 @@ */ import { mapGeoBoundingBox } from './map_geo_bounding_box'; -import { esFilters } from '../../../../../common'; +import { Filter, GeoBoundingBoxFilter } from '../../../../../common'; describe('filter manager utilities', () => { describe('mapGeoBoundingBox()', () => { @@ -34,7 +34,7 @@ describe('filter manager utilities', () => { bottom_right: { lat: 15, lon: 20 }, }, }, - } as esFilters.GeoBoundingBoxFilter; + } as GeoBoundingBoxFilter; const result = mapGeoBoundingBox(filter); @@ -63,7 +63,7 @@ describe('filter manager utilities', () => { bottom_right: { lat: 15, lon: 20 }, }, }, - } as esFilters.GeoBoundingBoxFilter; + } as GeoBoundingBoxFilter; const result = mapGeoBoundingBox(filter); @@ -83,7 +83,7 @@ describe('filter manager utilities', () => { const filter = { meta: { index: 'logstash-*' }, query: { query_string: { query: 'foo:bar' } }, - } as esFilters.Filter; + } as Filter; try { mapGeoBoundingBox(filter); diff --git a/src/plugins/data/public/query/filter_manager/lib/mappers/map_geo_bounding_box.ts b/src/plugins/data/public/query/filter_manager/lib/mappers/map_geo_bounding_box.ts index be63d2de5b0df4..f32c459baee5d8 100644 --- a/src/plugins/data/public/query/filter_manager/lib/mappers/map_geo_bounding_box.ts +++ b/src/plugins/data/public/query/filter_manager/lib/mappers/map_geo_bounding_box.ts @@ -16,10 +16,16 @@ * specific language governing permissions and limitations * under the License. */ -import { esFilters } from '../../../../../common'; +import { + FilterValueFormatter, + GeoBoundingBoxFilter, + FILTERS, + isGeoBoundingBoxFilter, + Filter, +} from '../../../../../common'; const getFormattedValueFn = (params: any) => { - return (formatter?: esFilters.FilterValueFormatter) => { + return (formatter?: FilterValueFormatter) => { const corners = formatter ? { topLeft: formatter.convert(params.top_left), @@ -34,20 +40,20 @@ const getFormattedValueFn = (params: any) => { }; }; -const getParams = (filter: esFilters.GeoBoundingBoxFilter) => { +const getParams = (filter: GeoBoundingBoxFilter) => { const key = Object.keys(filter.geo_bounding_box).filter(k => k !== 'ignore_unmapped')[0]; const params = filter.geo_bounding_box[key]; return { key, params, - type: esFilters.FILTERS.GEO_BOUNDING_BOX, + type: FILTERS.GEO_BOUNDING_BOX, value: getFormattedValueFn(params), }; }; -export const mapGeoBoundingBox = (filter: esFilters.Filter) => { - if (!esFilters.isGeoBoundingBoxFilter(filter)) { +export const mapGeoBoundingBox = (filter: Filter) => { + if (!isGeoBoundingBoxFilter(filter)) { throw filter; } diff --git a/src/plugins/data/public/query/filter_manager/lib/mappers/map_geo_polygon.test.ts b/src/plugins/data/public/query/filter_manager/lib/mappers/map_geo_polygon.test.ts index 2713f0fd177344..4af881aa585422 100644 --- a/src/plugins/data/public/query/filter_manager/lib/mappers/map_geo_polygon.test.ts +++ b/src/plugins/data/public/query/filter_manager/lib/mappers/map_geo_polygon.test.ts @@ -18,10 +18,10 @@ */ import { mapGeoPolygon } from './map_geo_polygon'; -import { esFilters } from '../../../../../common'; +import { Filter, GeoPolygonFilter } from '../../../../../common'; describe('filter manager utilities', () => { - let filter: esFilters.GeoPolygonFilter; + let filter: GeoPolygonFilter; beforeEach(() => { filter = { @@ -36,7 +36,7 @@ describe('filter manager utilities', () => { ], }, }, - } as esFilters.GeoPolygonFilter; + } as GeoPolygonFilter; }); describe('mapGeoPolygon()', () => { @@ -74,7 +74,7 @@ describe('filter manager utilities', () => { const wrongFilter = { meta: { index: 'logstash-*' }, query: { query_string: { query: 'foo:bar' } }, - } as esFilters.Filter; + } as Filter; try { mapGeoPolygon(wrongFilter); diff --git a/src/plugins/data/public/query/filter_manager/lib/mappers/map_geo_polygon.ts b/src/plugins/data/public/query/filter_manager/lib/mappers/map_geo_polygon.ts index 8cca92a81cb5fd..df5379289dd28f 100644 --- a/src/plugins/data/public/query/filter_manager/lib/mappers/map_geo_polygon.ts +++ b/src/plugins/data/public/query/filter_manager/lib/mappers/map_geo_polygon.ts @@ -17,32 +17,38 @@ * under the License. */ -import { esFilters } from '../../../../../common'; +import { + FilterValueFormatter, + GeoPolygonFilter, + FILTERS, + Filter, + isGeoPolygonFilter, +} from '../../../../../common'; const POINTS_SEPARATOR = ', '; const getFormattedValueFn = (points: string[]) => { - return (formatter?: esFilters.FilterValueFormatter) => { + return (formatter?: FilterValueFormatter) => { return points .map((point: string) => (formatter ? formatter.convert(point) : JSON.stringify(point))) .join(POINTS_SEPARATOR); }; }; -function getParams(filter: esFilters.GeoPolygonFilter) { +function getParams(filter: GeoPolygonFilter) { const key = Object.keys(filter.geo_polygon).filter(k => k !== 'ignore_unmapped')[0]; const params = filter.geo_polygon[key]; return { key, params, - type: esFilters.FILTERS.GEO_POLYGON, + type: FILTERS.GEO_POLYGON, value: getFormattedValueFn(params.points || []), }; } -export function mapGeoPolygon(filter: esFilters.Filter) { - if (!esFilters.isGeoPolygonFilter(filter)) { +export function mapGeoPolygon(filter: Filter) { + if (!isGeoPolygonFilter(filter)) { throw filter; } return getParams(filter); diff --git a/src/plugins/data/public/query/filter_manager/lib/mappers/map_match_all.test.ts b/src/plugins/data/public/query/filter_manager/lib/mappers/map_match_all.test.ts index 4d6bba6429b47e..b22583ff8bb24b 100644 --- a/src/plugins/data/public/query/filter_manager/lib/mappers/map_match_all.test.ts +++ b/src/plugins/data/public/query/filter_manager/lib/mappers/map_match_all.test.ts @@ -18,11 +18,11 @@ */ import { mapMatchAll } from './map_match_all'; -import { esFilters } from '../../../../../common'; +import { MatchAllFilter } from '../../../../../common'; describe('filter_manager/lib', () => { describe('mapMatchAll()', () => { - let filter: esFilters.MatchAllFilter; + let filter: MatchAllFilter; beforeEach(() => { filter = { diff --git a/src/plugins/data/public/query/filter_manager/lib/mappers/map_match_all.ts b/src/plugins/data/public/query/filter_manager/lib/mappers/map_match_all.ts index 9a4ea8430a305a..b93642618c96c6 100644 --- a/src/plugins/data/public/query/filter_manager/lib/mappers/map_match_all.ts +++ b/src/plugins/data/public/query/filter_manager/lib/mappers/map_match_all.ts @@ -16,12 +16,12 @@ * specific language governing permissions and limitations * under the License. */ -import { esFilters } from '../../../../../common'; +import { Filter, isMatchAllFilter, FILTERS } from '../../../../../common'; -export const mapMatchAll = (filter: esFilters.Filter) => { - if (esFilters.isMatchAllFilter(filter)) { +export const mapMatchAll = (filter: Filter) => { + if (isMatchAllFilter(filter)) { return { - type: esFilters.FILTERS.MATCH_ALL, + type: FILTERS.MATCH_ALL, key: filter.meta.field, value: filter.meta.formattedValue || 'all', }; diff --git a/src/plugins/data/public/query/filter_manager/lib/mappers/map_missing.test.ts b/src/plugins/data/public/query/filter_manager/lib/mappers/map_missing.test.ts index faf4b54989e203..67e5987818fb5d 100644 --- a/src/plugins/data/public/query/filter_manager/lib/mappers/map_missing.test.ts +++ b/src/plugins/data/public/query/filter_manager/lib/mappers/map_missing.test.ts @@ -18,14 +18,14 @@ */ import { mapMissing } from './map_missing'; -import { esFilters } from '../../../../../common'; +import { MissingFilter, buildEmptyFilter } from '../../../../../common'; describe('filter manager utilities', () => { describe('mapMissing()', () => { test('should return the key and value for matching filters', async () => { - const filter: esFilters.MissingFilter = { + const filter: MissingFilter = { missing: { field: '_type' }, - ...esFilters.buildEmptyFilter(true), + ...buildEmptyFilter(true), }; const result = mapMissing(filter); @@ -34,7 +34,7 @@ describe('filter manager utilities', () => { }); test('should return undefined for none matching', async done => { - const filter = esFilters.buildEmptyFilter(true); + const filter = buildEmptyFilter(true); try { mapMissing(filter); diff --git a/src/plugins/data/public/query/filter_manager/lib/mappers/map_missing.ts b/src/plugins/data/public/query/filter_manager/lib/mappers/map_missing.ts index a1b6474365f402..875e3a9c3353d1 100644 --- a/src/plugins/data/public/query/filter_manager/lib/mappers/map_missing.ts +++ b/src/plugins/data/public/query/filter_manager/lib/mappers/map_missing.ts @@ -17,13 +17,13 @@ * under the License. */ -import { esFilters } from '../../../../../common'; +import { Filter, isMissingFilter, FILTERS } from '../../../../../common'; -export const mapMissing = (filter: esFilters.Filter) => { - if (esFilters.isMissingFilter(filter)) { +export const mapMissing = (filter: Filter) => { + if (isMissingFilter(filter)) { return { - type: esFilters.FILTERS.MISSING, - value: esFilters.FILTERS.MISSING, + type: FILTERS.MISSING, + value: FILTERS.MISSING, key: filter.missing.field, }; } diff --git a/src/plugins/data/public/query/filter_manager/lib/mappers/map_phrase.test.ts b/src/plugins/data/public/query/filter_manager/lib/mappers/map_phrase.test.ts index 5150b32f118aeb..5dd10ce30111fc 100644 --- a/src/plugins/data/public/query/filter_manager/lib/mappers/map_phrase.test.ts +++ b/src/plugins/data/public/query/filter_manager/lib/mappers/map_phrase.test.ts @@ -17,7 +17,7 @@ * under the License. */ import { mapPhrase } from './map_phrase'; -import { esFilters } from '../../../../../common'; +import { PhraseFilter, Filter } from '../../../../../common'; describe('filter manager utilities', () => { describe('mapPhrase()', () => { @@ -25,7 +25,7 @@ describe('filter manager utilities', () => { const filter = { meta: { index: 'logstash-*' }, query: { match: { _type: { query: 'apache', type: 'phrase' } } }, - } as esFilters.PhraseFilter; + } as PhraseFilter; const result = mapPhrase(filter); @@ -42,7 +42,7 @@ describe('filter manager utilities', () => { const filter = { meta: { index: 'logstash-*' }, query: { query_string: { query: 'foo:bar' } }, - } as esFilters.Filter; + } as Filter; try { mapPhrase(filter); diff --git a/src/plugins/data/public/query/filter_manager/lib/mappers/map_phrase.ts b/src/plugins/data/public/query/filter_manager/lib/mappers/map_phrase.ts index ae7701bf3a501c..a5e92d57d6a5b6 100644 --- a/src/plugins/data/public/query/filter_manager/lib/mappers/map_phrase.ts +++ b/src/plugins/data/public/query/filter_manager/lib/mappers/map_phrase.ts @@ -18,36 +18,45 @@ */ import { get } from 'lodash'; -import { esFilters } from '../../../../../common'; +import { + PhraseFilter, + FilterValueFormatter, + getPhraseFilterValue, + getPhraseFilterField, + FILTERS, + isScriptedPhraseFilter, + Filter, + isPhraseFilter, +} from '../../../../../common'; -const getScriptedPhraseValue = (filter: esFilters.PhraseFilter) => +const getScriptedPhraseValue = (filter: PhraseFilter) => get(filter, ['script', 'script', 'params', 'value']); const getFormattedValueFn = (value: any) => { - return (formatter?: esFilters.FilterValueFormatter) => { + return (formatter?: FilterValueFormatter) => { return formatter ? formatter.convert(value) : value; }; }; -const getParams = (filter: esFilters.PhraseFilter) => { +const getParams = (filter: PhraseFilter) => { const scriptedPhraseValue = getScriptedPhraseValue(filter); const isScriptedFilter = Boolean(scriptedPhraseValue); - const key = isScriptedFilter ? filter.meta.field || '' : esFilters.getPhraseFilterField(filter); - const query = scriptedPhraseValue || esFilters.getPhraseFilterValue(filter); + const key = isScriptedFilter ? filter.meta.field || '' : getPhraseFilterField(filter); + const query = scriptedPhraseValue || getPhraseFilterValue(filter); const params = { query }; return { key, params, - type: esFilters.FILTERS.PHRASE, + type: FILTERS.PHRASE, value: getFormattedValueFn(query), }; }; -export const isMapPhraseFilter = (filter: any): filter is esFilters.PhraseFilter => - esFilters.isPhraseFilter(filter) || esFilters.isScriptedPhraseFilter(filter); +export const isMapPhraseFilter = (filter: any): filter is PhraseFilter => + isPhraseFilter(filter) || isScriptedPhraseFilter(filter); -export const mapPhrase = (filter: esFilters.Filter) => { +export const mapPhrase = (filter: Filter) => { if (!isMapPhraseFilter(filter)) { throw filter; } diff --git a/src/plugins/data/public/query/filter_manager/lib/mappers/map_phrases.ts b/src/plugins/data/public/query/filter_manager/lib/mappers/map_phrases.ts index f8f2aba1309b74..9d02e29522448e 100644 --- a/src/plugins/data/public/query/filter_manager/lib/mappers/map_phrases.ts +++ b/src/plugins/data/public/query/filter_manager/lib/mappers/map_phrases.ts @@ -17,10 +17,10 @@ * under the License. */ -import { esFilters } from '../../../../../common'; +import { Filter, isPhrasesFilter } from '../../../../../common'; -export const mapPhrases = (filter: esFilters.Filter) => { - if (!esFilters.isPhrasesFilter(filter)) { +export const mapPhrases = (filter: Filter) => { + if (!isPhrasesFilter(filter)) { throw filter; } diff --git a/src/plugins/data/public/query/filter_manager/lib/mappers/map_query_string.test.ts b/src/plugins/data/public/query/filter_manager/lib/mappers/map_query_string.test.ts index c65bc00b7df61c..05892159555629 100644 --- a/src/plugins/data/public/query/filter_manager/lib/mappers/map_query_string.test.ts +++ b/src/plugins/data/public/query/filter_manager/lib/mappers/map_query_string.test.ts @@ -18,27 +18,23 @@ */ import { mapQueryString } from './map_query_string'; -import { esFilters } from '../../../../../common'; +import { buildQueryFilter, buildEmptyFilter, Filter } from '../../../../../common'; describe('filter manager utilities', () => { describe('mapQueryString()', () => { test('should return the key and value for matching filters', async () => { - const filter = esFilters.buildQueryFilter( - { query_string: { query: 'foo:bar' } }, - 'index', - '' - ); - const result = mapQueryString(filter as esFilters.Filter); + const filter = buildQueryFilter({ query_string: { query: 'foo:bar' } }, 'index', ''); + const result = mapQueryString(filter as Filter); expect(result).toHaveProperty('key', 'query'); expect(result).toHaveProperty('value', 'foo:bar'); }); test('should return undefined for none matching', async done => { - const filter = esFilters.buildEmptyFilter(true); + const filter = buildEmptyFilter(true); try { - mapQueryString(filter as esFilters.Filter); + mapQueryString(filter as Filter); } catch (e) { expect(e).toBe(filter); done(); diff --git a/src/plugins/data/public/query/filter_manager/lib/mappers/map_query_string.ts b/src/plugins/data/public/query/filter_manager/lib/mappers/map_query_string.ts index e8e4e68318973b..c49247cd96eaae 100644 --- a/src/plugins/data/public/query/filter_manager/lib/mappers/map_query_string.ts +++ b/src/plugins/data/public/query/filter_manager/lib/mappers/map_query_string.ts @@ -16,12 +16,12 @@ * specific language governing permissions and limitations * under the License. */ -import { esFilters } from '../../../../../common'; +import { FILTERS, Filter, isQueryStringFilter } from '../../../../../common'; -export const mapQueryString = (filter: esFilters.Filter) => { - if (esFilters.isQueryStringFilter(filter)) { +export const mapQueryString = (filter: Filter) => { + if (isQueryStringFilter(filter)) { return { - type: esFilters.FILTERS.QUERY_STRING, + type: FILTERS.QUERY_STRING, key: 'query', value: filter.query.query_string.query, }; diff --git a/src/plugins/data/public/query/filter_manager/lib/mappers/map_range.test.ts b/src/plugins/data/public/query/filter_manager/lib/mappers/map_range.test.ts index 2d312351c0f317..c8868b412707bd 100644 --- a/src/plugins/data/public/query/filter_manager/lib/mappers/map_range.test.ts +++ b/src/plugins/data/public/query/filter_manager/lib/mappers/map_range.test.ts @@ -18,15 +18,15 @@ */ import { mapRange } from './map_range'; -import { esFilters } from '../../../../../common'; +import { FilterMeta, RangeFilter, Filter } from '../../../../../common'; describe('filter manager utilities', () => { describe('mapRange()', () => { test('should return the key and value for matching filters with gt/lt', async () => { const filter = { - meta: { index: 'logstash-*' } as esFilters.FilterMeta, + meta: { index: 'logstash-*' } as FilterMeta, range: { bytes: { lt: 2048, gt: 1024 } }, - } as esFilters.RangeFilter; + } as RangeFilter; const result = mapRange(filter); expect(result).toHaveProperty('key', 'bytes'); @@ -41,7 +41,7 @@ describe('filter manager utilities', () => { const filter = { meta: { index: 'logstash-*' }, query: { query_string: { query: 'foo:bar' } }, - } as esFilters.Filter; + } as Filter; try { mapRange(filter); diff --git a/src/plugins/data/public/query/filter_manager/lib/mappers/map_range.ts b/src/plugins/data/public/query/filter_manager/lib/mappers/map_range.ts index affc8e63430763..d2d5a4b0692186 100644 --- a/src/plugins/data/public/query/filter_manager/lib/mappers/map_range.ts +++ b/src/plugins/data/public/query/filter_manager/lib/mappers/map_range.ts @@ -18,10 +18,17 @@ */ import { get, has } from 'lodash'; -import { esFilters } from '../../../../../common'; +import { + FilterValueFormatter, + RangeFilter, + isScriptedRangeFilter, + isRangeFilter, + Filter, + FILTERS, +} from '../../../../../common'; const getFormattedValueFn = (left: any, right: any) => { - return (formatter?: esFilters.FilterValueFormatter) => { + return (formatter?: FilterValueFormatter) => { let displayValue = `${left} to ${right}`; if (formatter) { const convert = formatter.getConverterFor('text'); @@ -31,12 +38,11 @@ const getFormattedValueFn = (left: any, right: any) => { }; }; -const getFirstRangeKey = (filter: esFilters.RangeFilter) => - filter.range && Object.keys(filter.range)[0]; -const getRangeByKey = (filter: esFilters.RangeFilter, key: string) => get(filter, ['range', key]); +const getFirstRangeKey = (filter: RangeFilter) => filter.range && Object.keys(filter.range)[0]; +const getRangeByKey = (filter: RangeFilter, key: string) => get(filter, ['range', key]); -function getParams(filter: esFilters.RangeFilter) { - const isScriptedRange = esFilters.isScriptedRangeFilter(filter); +function getParams(filter: RangeFilter) { + const isScriptedRange = isScriptedRangeFilter(filter); const key: string = (isScriptedRange ? filter.meta.field : getFirstRangeKey(filter)) || ''; const params: any = isScriptedRange ? get(filter, 'script.script.params') @@ -50,13 +56,13 @@ function getParams(filter: esFilters.RangeFilter) { const value = getFormattedValueFn(left, right); - return { type: esFilters.FILTERS.RANGE, key, value, params }; + return { type: FILTERS.RANGE, key, value, params }; } -export const isMapRangeFilter = (filter: any): filter is esFilters.RangeFilter => - esFilters.isRangeFilter(filter) || esFilters.isScriptedRangeFilter(filter); +export const isMapRangeFilter = (filter: any): filter is RangeFilter => + isRangeFilter(filter) || isScriptedRangeFilter(filter); -export const mapRange = (filter: esFilters.Filter) => { +export const mapRange = (filter: Filter) => { if (!isMapRangeFilter(filter)) { throw filter; } diff --git a/src/plugins/data/public/query/filter_manager/lib/mappers/map_spatial_filter.test.ts b/src/plugins/data/public/query/filter_manager/lib/mappers/map_spatial_filter.test.ts index 70876b4e2be774..aee1bf257be015 100644 --- a/src/plugins/data/public/query/filter_manager/lib/mappers/map_spatial_filter.test.ts +++ b/src/plugins/data/public/query/filter_manager/lib/mappers/map_spatial_filter.test.ts @@ -18,7 +18,7 @@ */ import { mapSpatialFilter } from './map_spatial_filter'; -import { esFilters } from '../../../../../common'; +import { FilterMeta, Filter, FILTERS } from '../../../../../common'; describe('mapSpatialFilter()', () => { test('should return the key for matching multi polygon filter', async () => { @@ -26,8 +26,8 @@ describe('mapSpatialFilter()', () => { meta: { key: 'location', alias: 'my spatial filter', - type: esFilters.FILTERS.SPATIAL_FILTER, - } as esFilters.FilterMeta, + type: FILTERS.SPATIAL_FILTER, + } as FilterMeta, query: { bool: { should: [ @@ -39,12 +39,12 @@ describe('mapSpatialFilter()', () => { ], }, }, - } as esFilters.Filter; + } as Filter; const result = mapSpatialFilter(filter); expect(result).toHaveProperty('key', 'location'); expect(result).toHaveProperty('value', ''); - expect(result).toHaveProperty('type', esFilters.FILTERS.SPATIAL_FILTER); + expect(result).toHaveProperty('type', FILTERS.SPATIAL_FILTER); }); test('should return the key for matching polygon filter', async () => { @@ -52,17 +52,17 @@ describe('mapSpatialFilter()', () => { meta: { key: 'location', alias: 'my spatial filter', - type: esFilters.FILTERS.SPATIAL_FILTER, - } as esFilters.FilterMeta, + type: FILTERS.SPATIAL_FILTER, + } as FilterMeta, geo_polygon: { geoCoordinates: { points: [] }, }, - } as esFilters.Filter; + } as Filter; const result = mapSpatialFilter(filter); expect(result).toHaveProperty('key', 'location'); expect(result).toHaveProperty('value', ''); - expect(result).toHaveProperty('type', esFilters.FILTERS.SPATIAL_FILTER); + expect(result).toHaveProperty('type', FILTERS.SPATIAL_FILTER); }); test('should return undefined for none matching', async done => { @@ -70,11 +70,11 @@ describe('mapSpatialFilter()', () => { meta: { key: 'location', alias: 'my spatial filter', - } as esFilters.FilterMeta, + } as FilterMeta, geo_polygon: { geoCoordinates: { points: [] }, }, - } as esFilters.Filter; + } as Filter; try { mapSpatialFilter(filter); diff --git a/src/plugins/data/public/query/filter_manager/lib/mappers/map_spatial_filter.ts b/src/plugins/data/public/query/filter_manager/lib/mappers/map_spatial_filter.ts index ed2e5df82e37ea..2d66d116eb4f2f 100644 --- a/src/plugins/data/public/query/filter_manager/lib/mappers/map_spatial_filter.ts +++ b/src/plugins/data/public/query/filter_manager/lib/mappers/map_spatial_filter.ts @@ -16,15 +16,15 @@ * specific language governing permissions and limitations * under the License. */ -import { esFilters } from '../../../../../common'; +import { Filter, FILTERS } from '../../../../../common'; // Use mapSpatialFilter mapper to avoid bloated meta with value and params for spatial filters. -export const mapSpatialFilter = (filter: esFilters.Filter) => { +export const mapSpatialFilter = (filter: Filter) => { if ( filter.meta && filter.meta.key && filter.meta.alias && - filter.meta.type === esFilters.FILTERS.SPATIAL_FILTER + filter.meta.type === FILTERS.SPATIAL_FILTER ) { return { key: filter.meta.key, diff --git a/src/plugins/data/public/query/filter_manager/lib/only_disabled.test.ts b/src/plugins/data/public/query/filter_manager/lib/only_disabled.test.ts index a9863696d47cdc..34a0636869e9df 100644 --- a/src/plugins/data/public/query/filter_manager/lib/only_disabled.test.ts +++ b/src/plugins/data/public/query/filter_manager/lib/only_disabled.test.ts @@ -18,7 +18,7 @@ */ import { onlyDisabledFiltersChanged } from './only_disabled'; -import { esFilters } from '../../../../common'; +import { Filter } from '../../../../common'; describe('filter manager utilities', () => { describe('onlyDisabledFiltersChanged()', () => { @@ -27,20 +27,20 @@ describe('filter manager utilities', () => { { meta: { disabled: true } }, { meta: { disabled: true } }, { meta: { disabled: true } }, - ] as esFilters.Filter[]; - const newFilters = [{ meta: { disabled: true } }] as esFilters.Filter[]; + ] as Filter[]; + const newFilters = [{ meta: { disabled: true } }] as Filter[]; expect(onlyDisabledFiltersChanged(newFilters, filters)).toBe(true); }); test('should return false if there are no old filters', () => { - const newFilters = [{ meta: { disabled: false } }] as esFilters.Filter[]; + const newFilters = [{ meta: { disabled: false } }] as Filter[]; expect(onlyDisabledFiltersChanged(newFilters, undefined)).toBe(false); }); test('should return false if there are no new filters', () => { - const filters = [{ meta: { disabled: false } }] as esFilters.Filter[]; + const filters = [{ meta: { disabled: false } }] as Filter[]; expect(onlyDisabledFiltersChanged(undefined, filters)).toBe(false); }); @@ -50,8 +50,8 @@ describe('filter manager utilities', () => { { meta: { disabled: false } }, { meta: { disabled: false } }, { meta: { disabled: false } }, - ] as esFilters.Filter[]; - const newFilters = [{ meta: { disabled: false } }] as esFilters.Filter[]; + ] as Filter[]; + const newFilters = [{ meta: { disabled: false } }] as Filter[]; expect(onlyDisabledFiltersChanged(newFilters, filters)).toBe(false); }); @@ -61,8 +61,8 @@ describe('filter manager utilities', () => { { meta: { disabled: true } }, { meta: { disabled: true } }, { meta: { disabled: true } }, - ] as esFilters.Filter[]; - const newFilters = [{ meta: { disabled: false } }] as esFilters.Filter[]; + ] as Filter[]; + const newFilters = [{ meta: { disabled: false } }] as Filter[]; expect(onlyDisabledFiltersChanged(newFilters, filters)).toBe(false); }); @@ -72,8 +72,8 @@ describe('filter manager utilities', () => { { meta: { disabled: false } }, { meta: { disabled: false } }, { meta: { disabled: false } }, - ] as esFilters.Filter[]; - const newFilters = [{ meta: { disabled: true } }] as esFilters.Filter[]; + ] as Filter[]; + const newFilters = [{ meta: { disabled: true } }] as Filter[]; expect(onlyDisabledFiltersChanged(newFilters, filters)).toBe(false); }); @@ -83,8 +83,8 @@ describe('filter manager utilities', () => { { meta: { disabled: true } }, { meta: { disabled: true } }, { meta: { disabled: true } }, - ] as esFilters.Filter[]; - const newFilters = [] as esFilters.Filter[]; + ] as Filter[]; + const newFilters = [] as Filter[]; expect(onlyDisabledFiltersChanged(newFilters, filters)).toBe(true); }); @@ -94,8 +94,8 @@ describe('filter manager utilities', () => { { meta: { disabled: false } }, { meta: { disabled: false } }, { meta: { disabled: false } }, - ] as esFilters.Filter[]; - const newFilters = [] as esFilters.Filter[]; + ] as Filter[]; + const newFilters = [] as Filter[]; expect(onlyDisabledFiltersChanged(newFilters, filters)).toBe(false); }); @@ -104,11 +104,11 @@ describe('filter manager utilities', () => { const filters = [ { meta: { disabled: true, negate: false } }, { meta: { disabled: true, negate: false } }, - ] as esFilters.Filter[]; + ] as Filter[]; const newFilters = [ { meta: { disabled: true, negate: true } }, { meta: { disabled: true, negate: true } }, - ] as esFilters.Filter[]; + ] as Filter[]; expect(onlyDisabledFiltersChanged(newFilters, filters)).toBe(true); }); @@ -118,8 +118,8 @@ describe('filter manager utilities', () => { { meta: { disabled: false } }, { meta: { disabled: false } }, { meta: { disabled: true } }, - ] as esFilters.Filter[]; - const newFilters = [{ meta: { disabled: false } }] as esFilters.Filter[]; + ] as Filter[]; + const newFilters = [{ meta: { disabled: false } }] as Filter[]; expect(onlyDisabledFiltersChanged(newFilters, filters)).toBe(false); }); @@ -129,15 +129,15 @@ describe('filter manager utilities', () => { { meta: { disabled: true } }, { meta: { disabled: false } }, { meta: { disabled: true } }, - ] as esFilters.Filter[]; - const newFilters = [] as esFilters.Filter[]; + ] as Filter[]; + const newFilters = [] as Filter[]; expect(onlyDisabledFiltersChanged(newFilters, filters)).toBe(false); }); test('should not throw with null filters', () => { - const filters = [null, { meta: { disabled: true } }] as esFilters.Filter[]; - const newFilters = [] as esFilters.Filter[]; + const filters = [null, { meta: { disabled: true } }] as Filter[]; + const newFilters = [] as Filter[]; expect(() => { onlyDisabledFiltersChanged(newFilters, filters); diff --git a/src/plugins/data/public/query/filter_manager/lib/only_disabled.ts b/src/plugins/data/public/query/filter_manager/lib/only_disabled.ts index 3f35c94a3f858f..34e1ac38ae95ff 100644 --- a/src/plugins/data/public/query/filter_manager/lib/only_disabled.ts +++ b/src/plugins/data/public/query/filter_manager/lib/only_disabled.ts @@ -18,20 +18,17 @@ */ import { filter } from 'lodash'; -import { esFilters } from '../../../../common'; +import { Filter } from '../../../../common'; import { compareFilters, COMPARE_ALL_OPTIONS } from './compare_filters'; -const isEnabled = (f: esFilters.Filter) => f && f.meta && !f.meta.disabled; +const isEnabled = (f: Filter) => f && f.meta && !f.meta.disabled; /** * Checks to see if only disabled filters have been changed * * @returns {bool} Only disabled filters */ -export const onlyDisabledFiltersChanged = ( - newFilters?: esFilters.Filter[], - oldFilters?: esFilters.Filter[] -) => { +export const onlyDisabledFiltersChanged = (newFilters?: Filter[], oldFilters?: Filter[]) => { // If it's the same - compare only enabled filters const newEnabledFilters = filter(newFilters || [], isEnabled); const oldEnabledFilters = filter(oldFilters || [], isEnabled); diff --git a/src/plugins/data/public/query/filter_manager/lib/sort_filters.test.ts b/src/plugins/data/public/query/filter_manager/lib/sort_filters.test.ts index 949c57e43ce743..009102f50d4907 100644 --- a/src/plugins/data/public/query/filter_manager/lib/sort_filters.test.ts +++ b/src/plugins/data/public/query/filter_manager/lib/sort_filters.test.ts @@ -18,26 +18,18 @@ */ import { sortFilters } from './sort_filters'; -import { esFilters } from '../../../../common'; +import { FilterStateStore, buildQueryFilter } from '../../../../common'; describe('sortFilters', () => { describe('sortFilters()', () => { test('Not sort two application level filters', () => { const f1 = { - $state: { store: esFilters.FilterStateStore.APP_STATE }, - ...esFilters.buildQueryFilter( - { _type: { match: { query: 'apache', type: 'phrase' } } }, - 'index', - '' - ), + $state: { store: FilterStateStore.APP_STATE }, + ...buildQueryFilter({ _type: { match: { query: 'apache', type: 'phrase' } } }, 'index', ''), }; const f2 = { - $state: { store: esFilters.FilterStateStore.APP_STATE }, - ...esFilters.buildQueryFilter( - { _type: { match: { query: 'apache', type: 'phrase' } } }, - 'index', - '' - ), + $state: { store: FilterStateStore.APP_STATE }, + ...buildQueryFilter({ _type: { match: { query: 'apache', type: 'phrase' } } }, 'index', ''), }; const filters = [f1, f2].sort(sortFilters); @@ -46,20 +38,12 @@ describe('sortFilters', () => { test('Not sort two global level filters', () => { const f1 = { - $state: { store: esFilters.FilterStateStore.GLOBAL_STATE }, - ...esFilters.buildQueryFilter( - { _type: { match: { query: 'apache', type: 'phrase' } } }, - 'index', - '' - ), + $state: { store: FilterStateStore.GLOBAL_STATE }, + ...buildQueryFilter({ _type: { match: { query: 'apache', type: 'phrase' } } }, 'index', ''), }; const f2 = { - $state: { store: esFilters.FilterStateStore.GLOBAL_STATE }, - ...esFilters.buildQueryFilter( - { _type: { match: { query: 'apache', type: 'phrase' } } }, - 'index', - '' - ), + $state: { store: FilterStateStore.GLOBAL_STATE }, + ...buildQueryFilter({ _type: { match: { query: 'apache', type: 'phrase' } } }, 'index', ''), }; const filters = [f1, f2].sort(sortFilters); @@ -68,20 +52,12 @@ describe('sortFilters', () => { test('Move global level filter to the beginning of the array', () => { const f1 = { - $state: { store: esFilters.FilterStateStore.APP_STATE }, - ...esFilters.buildQueryFilter( - { _type: { match: { query: 'apache', type: 'phrase' } } }, - 'index', - '' - ), + $state: { store: FilterStateStore.APP_STATE }, + ...buildQueryFilter({ _type: { match: { query: 'apache', type: 'phrase' } } }, 'index', ''), }; const f2 = { - $state: { store: esFilters.FilterStateStore.GLOBAL_STATE }, - ...esFilters.buildQueryFilter( - { _type: { match: { query: 'apache', type: 'phrase' } } }, - 'index', - '' - ), + $state: { store: FilterStateStore.GLOBAL_STATE }, + ...buildQueryFilter({ _type: { match: { query: 'apache', type: 'phrase' } } }, 'index', ''), }; const filters = [f1, f2].sort(sortFilters); diff --git a/src/plugins/data/public/query/filter_manager/lib/sort_filters.ts b/src/plugins/data/public/query/filter_manager/lib/sort_filters.ts index 657c80fe0ccb23..d7c8ee64a341f2 100644 --- a/src/plugins/data/public/query/filter_manager/lib/sort_filters.ts +++ b/src/plugins/data/public/query/filter_manager/lib/sort_filters.ts @@ -17,7 +17,7 @@ * under the License. */ -import { esFilters } from '../../../../common'; +import { Filter, FilterStateStore } from '../../../../common'; /** * Sort filters according to their store - global filters go first @@ -27,15 +27,11 @@ import { esFilters } from '../../../../common'; * * @returns {number} Sorting order of filters */ -export const sortFilters = ( - { $state: a }: esFilters.Filter, - { $state: b }: esFilters.Filter -): number => { +export const sortFilters = ({ $state: a }: Filter, { $state: b }: Filter): number => { if (a!.store === b!.store) { return 0; } else { - return a!.store === esFilters.FilterStateStore.GLOBAL_STATE && - b!.store !== esFilters.FilterStateStore.GLOBAL_STATE + return a!.store === FilterStateStore.GLOBAL_STATE && b!.store !== FilterStateStore.GLOBAL_STATE ? -1 : 1; } diff --git a/src/plugins/data/public/query/filter_manager/lib/uniq_filters.test.ts b/src/plugins/data/public/query/filter_manager/lib/uniq_filters.test.ts index f71ac2940f32b5..8b525a3d2a2e40 100644 --- a/src/plugins/data/public/query/filter_manager/lib/uniq_filters.test.ts +++ b/src/plugins/data/public/query/filter_manager/lib/uniq_filters.test.ts @@ -18,22 +18,14 @@ */ import { uniqFilters } from './uniq_filters'; -import { esFilters } from '../../../../common'; +import { buildQueryFilter, Filter, FilterStateStore } from '../../../../common'; describe('filter manager utilities', () => { describe('niqFilter', () => { test('should filter out dups', () => { - const before: esFilters.Filter[] = [ - esFilters.buildQueryFilter( - { _type: { match: { query: 'apache', type: 'phrase' } } }, - 'index', - '' - ), - esFilters.buildQueryFilter( - { _type: { match: { query: 'apache', type: 'phrase' } } }, - 'index', - '' - ), + const before: Filter[] = [ + buildQueryFilter({ _type: { match: { query: 'apache', type: 'phrase' } } }, 'index', ''), + buildQueryFilter({ _type: { match: { query: 'apache', type: 'phrase' } } }, 'index', ''), ]; const results = uniqFilters(before); @@ -41,17 +33,9 @@ describe('filter manager utilities', () => { }); test('should filter out duplicates, ignoring meta attributes', () => { - const before: esFilters.Filter[] = [ - esFilters.buildQueryFilter( - { _type: { match: { query: 'apache', type: 'phrase' } } }, - 'index1', - '' - ), - esFilters.buildQueryFilter( - { _type: { match: { query: 'apache', type: 'phrase' } } }, - 'index2', - '' - ), + const before: Filter[] = [ + buildQueryFilter({ _type: { match: { query: 'apache', type: 'phrase' } } }, 'index1', ''), + buildQueryFilter({ _type: { match: { query: 'apache', type: 'phrase' } } }, 'index2', ''), ]; const results = uniqFilters(before); @@ -59,18 +43,18 @@ describe('filter manager utilities', () => { }); test('should filter out duplicates, ignoring $state attributes', () => { - const before: esFilters.Filter[] = [ + const before: Filter[] = [ { - $state: { store: esFilters.FilterStateStore.APP_STATE }, - ...esFilters.buildQueryFilter( + $state: { store: FilterStateStore.APP_STATE }, + ...buildQueryFilter( { _type: { match: { query: 'apache', type: 'phrase' } } }, 'index', '' ), }, { - $state: { store: esFilters.FilterStateStore.GLOBAL_STATE }, - ...esFilters.buildQueryFilter( + $state: { store: FilterStateStore.GLOBAL_STATE }, + ...buildQueryFilter( { _type: { match: { query: 'apache', type: 'phrase' } } }, 'index', '' diff --git a/src/plugins/data/public/query/filter_manager/lib/uniq_filters.ts b/src/plugins/data/public/query/filter_manager/lib/uniq_filters.ts index b6001d698c5f1d..44c102d7ab15d4 100644 --- a/src/plugins/data/public/query/filter_manager/lib/uniq_filters.ts +++ b/src/plugins/data/public/query/filter_manager/lib/uniq_filters.ts @@ -18,7 +18,7 @@ */ import { each, union } from 'lodash'; import { dedupFilters } from './dedup_filters'; -import { esFilters } from '../../../../common'; +import { Filter } from '../../../../common'; /** * Remove duplicate filters from an array of filters @@ -28,10 +28,10 @@ import { esFilters } from '../../../../common'; * @returns {object} The original filters array with duplicates removed */ -export const uniqFilters = (filters: esFilters.Filter[], comparatorOptions: any = {}) => { - let results: esFilters.Filter[] = []; +export const uniqFilters = (filters: Filter[], comparatorOptions: any = {}) => { + let results: Filter[] = []; - each(filters, (filter: esFilters.Filter) => { + each(filters, (filter: Filter) => { results = union(results, dedupFilters(results, [filter]), comparatorOptions); }); diff --git a/src/plugins/data/public/query/filter_manager/test_helpers/get_filters_array.ts b/src/plugins/data/public/query/filter_manager/test_helpers/get_filters_array.ts index c5f0b11ce13f87..b381fe10a0b8a8 100644 --- a/src/plugins/data/public/query/filter_manager/test_helpers/get_filters_array.ts +++ b/src/plugins/data/public/query/filter_manager/test_helpers/get_filters_array.ts @@ -17,9 +17,9 @@ * under the License. */ -import { esFilters } from '../../../../common'; +import { Filter } from '../../../../common'; -export function getFiltersArray(): esFilters.Filter[] { +export function getFiltersArray(): Filter[] { return [ { query: { match: { extension: { query: 'jpg', type: 'phrase' } } }, diff --git a/src/plugins/data/public/query/filter_manager/test_helpers/get_stub_filter.ts b/src/plugins/data/public/query/filter_manager/test_helpers/get_stub_filter.ts index a531ce7e039842..6748a83d5d6cb4 100644 --- a/src/plugins/data/public/query/filter_manager/test_helpers/get_stub_filter.ts +++ b/src/plugins/data/public/query/filter_manager/test_helpers/get_stub_filter.ts @@ -17,15 +17,15 @@ * under the License. */ -import { esFilters } from '../../../../common'; +import { Filter, FilterStateStore } from '../../../../common'; export function getFilter( - store: esFilters.FilterStateStore, + store: FilterStateStore, disabled: boolean, negated: boolean, queryKey: string, queryValue: any -): esFilters.Filter { +): Filter { return { $state: { store, diff --git a/src/plugins/data/public/query/filter_manager/types.ts b/src/plugins/data/public/query/filter_manager/types.ts index 0f74a243ca91ae..95b784eac79f6d 100644 --- a/src/plugins/data/public/query/filter_manager/types.ts +++ b/src/plugins/data/public/query/filter_manager/types.ts @@ -17,9 +17,9 @@ * under the License. */ -import { esFilters } from '../../../common'; +import { Filter } from '../../../common'; export interface PartitionedFilters { - globalFilters: esFilters.Filter[]; - appFilters: esFilters.Filter[]; + globalFilters: Filter[]; + appFilters: Filter[]; } diff --git a/src/plugins/data/public/query/saved_query/saved_query_service.test.ts b/src/plugins/data/public/query/saved_query/saved_query_service.test.ts index ecb3fc2d606ec7..a6b8de32a00bd4 100644 --- a/src/plugins/data/public/query/saved_query/saved_query_service.test.ts +++ b/src/plugins/data/public/query/saved_query/saved_query_service.test.ts @@ -18,7 +18,8 @@ */ import { createSavedQueryService } from './saved_query_service'; -import { esFilters, SavedQueryAttributes } from '../..'; +import { SavedQueryAttributes } from '../..'; +import { FilterStateStore } from '../../../common'; const savedQueryAttributes: SavedQueryAttributes = { title: 'foo', @@ -42,7 +43,7 @@ const savedQueryAttributesWithFilters: SavedQueryAttributes = { filters: [ { query: { match_all: {} }, - $state: { store: esFilters.FilterStateStore.APP_STATE }, + $state: { store: FilterStateStore.APP_STATE }, meta: { disabled: false, negate: false, diff --git a/src/plugins/data/public/query/saved_query/types.ts b/src/plugins/data/public/query/saved_query/types.ts index c278c2476c2e72..d05eada7b29e62 100644 --- a/src/plugins/data/public/query/saved_query/types.ts +++ b/src/plugins/data/public/query/saved_query/types.ts @@ -17,7 +17,7 @@ * under the License. */ -import { RefreshInterval, TimeRange, Query, esFilters } from '../..'; +import { RefreshInterval, TimeRange, Query, Filter } from '../..'; export type SavedQueryTimeFilter = TimeRange & { refreshInterval: RefreshInterval; @@ -32,7 +32,7 @@ export interface SavedQueryAttributes { title: string; description: string; query: Query; - filters?: esFilters.Filter[]; + filters?: Filter[]; timefilter?: SavedQueryTimeFilter; } diff --git a/src/plugins/data/public/query/state_sync/sync_app_filters.test.ts b/src/plugins/data/public/query/state_sync/sync_app_filters.test.ts index 61270ecc099794..e01547b1c0fd8c 100644 --- a/src/plugins/data/public/query/state_sync/sync_app_filters.test.ts +++ b/src/plugins/data/public/query/state_sync/sync_app_filters.test.ts @@ -20,7 +20,7 @@ import { Subscription } from 'rxjs'; import { FilterManager } from '../filter_manager'; import { getFilter } from '../filter_manager/test_helpers/get_stub_filter'; -import { esFilters } from '../../../common'; +import { Filter, FilterStateStore } from '../../../common'; import { syncAppFilters } from './sync_app_filters'; import { coreMock } from '../../../../../core/public/mocks'; import { BaseStateContainer, createStateContainer } from '../../../../kibana_utils/public'; @@ -33,30 +33,30 @@ setupMock.uiSettings.get.mockImplementation((key: string) => { describe('sync_app_filters', () => { let filterManager: FilterManager; - let appState: BaseStateContainer; + let appState: BaseStateContainer; let appStateSub: Subscription; let appStateChangeTriggered = jest.fn(); let filterManagerChangeSub: Subscription; let filterManagerChangeTriggered = jest.fn(); - let gF1: esFilters.Filter; - let gF2: esFilters.Filter; - let aF1: esFilters.Filter; - let aF2: esFilters.Filter; + let gF1: Filter; + let gF2: Filter; + let aF1: Filter; + let aF2: Filter; beforeEach(() => { filterManager = new FilterManager(setupMock.uiSettings); - appState = createStateContainer([] as esFilters.Filter[]); + appState = createStateContainer([] as Filter[]); appStateChangeTriggered = jest.fn(); appStateSub = appState.state$.subscribe(appStateChangeTriggered); filterManagerChangeTriggered = jest.fn(); filterManagerChangeSub = filterManager.getUpdates$().subscribe(filterManagerChangeTriggered); - gF1 = getFilter(esFilters.FilterStateStore.GLOBAL_STATE, true, true, 'key1', 'value1'); - gF2 = getFilter(esFilters.FilterStateStore.GLOBAL_STATE, false, false, 'key2', 'value2'); - aF1 = getFilter(esFilters.FilterStateStore.APP_STATE, true, true, 'key3', 'value3'); - aF2 = getFilter(esFilters.FilterStateStore.APP_STATE, false, false, 'key4', 'value4'); + gF1 = getFilter(FilterStateStore.GLOBAL_STATE, true, true, 'key1', 'value1'); + gF2 = getFilter(FilterStateStore.GLOBAL_STATE, false, false, 'key2', 'value2'); + aF1 = getFilter(FilterStateStore.APP_STATE, true, true, 'key3', 'value3'); + aF2 = getFilter(FilterStateStore.APP_STATE, false, false, 'key4', 'value4'); }); afterEach(() => { appStateSub.unsubscribe(); diff --git a/src/plugins/data/public/query/state_sync/sync_app_filters.ts b/src/plugins/data/public/query/state_sync/sync_app_filters.ts index 7954729cd86651..d9956fcc0f6ae5 100644 --- a/src/plugins/data/public/query/state_sync/sync_app_filters.ts +++ b/src/plugins/data/public/query/state_sync/sync_app_filters.ts @@ -20,7 +20,7 @@ import _ from 'lodash'; import { filter, map } from 'rxjs/operators'; import { COMPARE_ALL_OPTIONS, compareFilters } from '../filter_manager/lib/compare_filters'; -import { esFilters } from '../../../common'; +import { Filter } from '../../../common'; import { FilterManager } from '../filter_manager'; import { BaseStateContainer } from '../../../../../plugins/kibana_utils/public'; @@ -31,7 +31,7 @@ import { BaseStateContainer } from '../../../../../plugins/kibana_utils/public'; */ export function syncAppFilters( filterManager: FilterManager, - appState: BaseStateContainer + appState: BaseStateContainer ) { // make sure initial app filters are picked by filterManager filterManager.setAppFilters(_.cloneDeep(appState.get())); diff --git a/src/plugins/data/public/query/state_sync/sync_query.test.ts b/src/plugins/data/public/query/state_sync/sync_query.test.ts index 4796da4f5fd4bb..1e7db2b9fd22f7 100644 --- a/src/plugins/data/public/query/state_sync/sync_query.test.ts +++ b/src/plugins/data/public/query/state_sync/sync_query.test.ts @@ -21,7 +21,7 @@ import { Subscription } from 'rxjs'; import { createBrowserHistory, History } from 'history'; import { FilterManager } from '../filter_manager'; import { getFilter } from '../filter_manager/test_helpers/get_stub_filter'; -import { esFilters } from '../../../common'; +import { Filter, FilterStateStore } from '../../../common'; import { coreMock } from '../../../../../core/public/mocks'; import { createKbnUrlStateStorage, @@ -59,8 +59,8 @@ describe('sync_query', () => { let filterManagerChangeSub: Subscription; let filterManagerChangeTriggered = jest.fn(); - let gF: esFilters.Filter; - let aF: esFilters.Filter; + let gF: Filter; + let aF: Filter; const pathWithFilter = "/#?_g=(filters:!(('$state':(store:globalState),meta:(alias:!n,disabled:!t,index:'logstash-*',key:query,negate:!t,type:custom,value:'%7B%22match%22:%7B%22key1%22:%22value1%22%7D%7D'),query:(match:(key1:value1)))),refreshInterval:(pause:!t,value:0),time:(from:now-15m,to:now))"; @@ -82,8 +82,8 @@ describe('sync_query', () => { history = createBrowserHistory(); kbnUrlStateStorage = createKbnUrlStateStorage({ useHash: false, history }); - gF = getFilter(esFilters.FilterStateStore.GLOBAL_STATE, true, true, 'key1', 'value1'); - aF = getFilter(esFilters.FilterStateStore.APP_STATE, true, true, 'key3', 'value3'); + gF = getFilter(FilterStateStore.GLOBAL_STATE, true, true, 'key1', 'value1'); + aF = getFilter(FilterStateStore.APP_STATE, true, true, 'key3', 'value3'); }); afterEach(() => { filterManagerChangeSub.unsubscribe(); diff --git a/src/plugins/data/public/query/state_sync/sync_query.ts b/src/plugins/data/public/query/state_sync/sync_query.ts index 9a4e9cbba2990c..373f9aa0a56685 100644 --- a/src/plugins/data/public/query/state_sync/sync_query.ts +++ b/src/plugins/data/public/query/state_sync/sync_query.ts @@ -26,7 +26,7 @@ import { syncState, } from '../../../../kibana_utils/public'; import { COMPARE_ALL_OPTIONS, compareFilters } from '../filter_manager/lib/compare_filters'; -import { esFilters, RefreshInterval, TimeRange } from '../../../common'; +import { Filter, RefreshInterval, TimeRange } from '../../../common'; import { QuerySetup, QueryStart } from '../query_service'; const GLOBAL_STATE_STORAGE_KEY = '_g'; @@ -34,7 +34,7 @@ const GLOBAL_STATE_STORAGE_KEY = '_g'; export interface QuerySyncState { time?: TimeRange; refreshInterval?: RefreshInterval; - filters?: esFilters.Filter[]; + filters?: Filter[]; } /** @@ -140,7 +140,7 @@ export const getQueryStateContainer = ( ...state, refreshInterval, }), - setFilters: (state: QuerySyncState) => (filters: esFilters.Filter[]) => ({ + setFilters: (state: QuerySyncState) => (filters: Filter[]) => ({ ...state, filters, }), diff --git a/src/plugins/data/public/query/timefilter/get_time.ts b/src/plugins/data/public/query/timefilter/get_time.ts index 76f39da1cf7068..fa154061890412 100644 --- a/src/plugins/data/public/query/timefilter/get_time.ts +++ b/src/plugins/data/public/query/timefilter/get_time.ts @@ -19,10 +19,7 @@ import dateMath from '@elastic/datemath'; import { IIndexPattern } from '../..'; -import { TimeRange, IFieldType } from '../../../common'; - -// TODO: remove this -import { esFilters } from '../../../common'; +import { TimeRange, IFieldType, buildRangeFilter } from '../../../common'; interface CalculateBoundsOptions { forceNow?: Date; @@ -57,7 +54,7 @@ export function getTime( if (!bounds) { return; } - return esFilters.buildRangeFilter( + return buildRangeFilter( timefield, { ...(bounds.min && { gte: bounds.min.toISOString() }), diff --git a/src/plugins/data/public/query/timefilter/lib/change_time_filter.test.ts b/src/plugins/data/public/query/timefilter/lib/change_time_filter.test.ts index 62805cde159363..f99bf50fc8b4df 100644 --- a/src/plugins/data/public/query/timefilter/lib/change_time_filter.test.ts +++ b/src/plugins/data/public/query/timefilter/lib/change_time_filter.test.ts @@ -18,7 +18,7 @@ */ import { changeTimeFilter } from './change_time_filter'; import { timefilterServiceMock } from '../timefilter_service.mock'; -import { TimeRange, esFilters } from '../../../../common'; +import { TimeRange, RangeFilter } from '../../../../common'; const timefilterMock = timefilterServiceMock.createSetupContract(); const timefilter = timefilterMock.timefilter; @@ -41,7 +41,7 @@ describe('changeTimeFilter()', () => { test('should change the timefilter to match the range gt/lt', () => { const filter: any = { range: { '@timestamp': { gt, lt } } }; - changeTimeFilter(timefilter, filter as esFilters.RangeFilter); + changeTimeFilter(timefilter, filter as RangeFilter); const { to, from } = timefilter.getTime(); @@ -51,7 +51,7 @@ describe('changeTimeFilter()', () => { test('should change the timefilter to match the range gte/lte', () => { const filter: any = { range: { '@timestamp': { gte: gt, lte: lt } } }; - changeTimeFilter(timefilter, filter as esFilters.RangeFilter); + changeTimeFilter(timefilter, filter as RangeFilter); const { to, from } = timefilter.getTime(); diff --git a/src/plugins/data/public/query/timefilter/lib/change_time_filter.ts b/src/plugins/data/public/query/timefilter/lib/change_time_filter.ts index cae464f1449bca..8da83580ef5d6b 100644 --- a/src/plugins/data/public/query/timefilter/lib/change_time_filter.ts +++ b/src/plugins/data/public/query/timefilter/lib/change_time_filter.ts @@ -20,9 +20,9 @@ import moment from 'moment'; import { keys } from 'lodash'; import { TimefilterContract } from '../../timefilter'; -import { esFilters } from '../../../../common'; +import { RangeFilter } from '../../../../common'; -export function convertRangeFilterToTimeRange(filter: esFilters.RangeFilter) { +export function convertRangeFilterToTimeRange(filter: RangeFilter) { const key = keys(filter.range)[0]; const values = filter.range[key]; @@ -32,6 +32,6 @@ export function convertRangeFilterToTimeRange(filter: esFilters.RangeFilter) { }; } -export function changeTimeFilter(timeFilter: TimefilterContract, filter: esFilters.RangeFilter) { +export function changeTimeFilter(timeFilter: TimefilterContract, filter: RangeFilter) { timeFilter.setTime(convertRangeFilterToTimeRange(filter)); } diff --git a/src/plugins/data/public/query/timefilter/lib/extract_time_filter.test.ts b/src/plugins/data/public/query/timefilter/lib/extract_time_filter.test.ts index d371f4587d2b81..6942a4501f9a42 100644 --- a/src/plugins/data/public/query/timefilter/lib/extract_time_filter.test.ts +++ b/src/plugins/data/public/query/timefilter/lib/extract_time_filter.test.ts @@ -18,7 +18,14 @@ */ import { extractTimeFilter } from './extract_time_filter'; -import { esFilters, IIndexPattern, IFieldType } from '../../../../common'; +import { + Filter, + IIndexPattern, + IFieldType, + buildQueryFilter, + buildRangeFilter, + buildPhraseFilter, +} from '../../../../common'; describe('filter manager utilities', () => { let indexPattern: IIndexPattern; @@ -31,13 +38,13 @@ describe('filter manager utilities', () => { describe('extractTimeFilter()', () => { test('should detect timeFilter', async () => { - const filters: esFilters.Filter[] = [ - esFilters.buildQueryFilter( + const filters: Filter[] = [ + buildQueryFilter( { _type: { match: { query: 'apache', type: 'phrase' } } }, 'logstash-*', '' ), - esFilters.buildRangeFilter( + buildRangeFilter( { name: 'time' } as IFieldType, { gt: 1388559600000, lt: 1388646000000 }, indexPattern @@ -50,13 +57,13 @@ describe('filter manager utilities', () => { }); test("should not return timeFilter when name doesn't match", async () => { - const filters: esFilters.Filter[] = [ - esFilters.buildQueryFilter( + const filters: Filter[] = [ + buildQueryFilter( { _type: { match: { query: 'apache', type: 'phrase' } } }, 'logstash-*', '' ), - esFilters.buildRangeFilter( + buildRangeFilter( { name: '@timestamp' } as IFieldType, { from: 1, to: 2 }, indexPattern, @@ -70,13 +77,13 @@ describe('filter manager utilities', () => { }); test('should not return a non range filter, even when names match', async () => { - const filters: esFilters.Filter[] = [ - esFilters.buildQueryFilter( + const filters: Filter[] = [ + buildQueryFilter( { _type: { match: { query: 'apache', type: 'phrase' } } }, 'logstash-*', '' ), - esFilters.buildPhraseFilter({ name: 'time' } as IFieldType, 'banana', indexPattern), + buildPhraseFilter({ name: 'time' } as IFieldType, 'banana', indexPattern), ]; const result = await extractTimeFilter('time', filters); diff --git a/src/plugins/data/public/query/timefilter/lib/extract_time_filter.ts b/src/plugins/data/public/query/timefilter/lib/extract_time_filter.ts index af2e8be65fb62f..23dd1547baf10b 100644 --- a/src/plugins/data/public/query/timefilter/lib/extract_time_filter.ts +++ b/src/plugins/data/public/query/timefilter/lib/extract_time_filter.ts @@ -18,13 +18,13 @@ */ import { keys, partition } from 'lodash'; -import { esFilters } from '../../../../common'; +import { Filter, isRangeFilter, RangeFilter } from '../../../../common'; -export function extractTimeFilter(timeFieldName: string, filters: esFilters.Filter[]) { - const [timeRangeFilter, restOfFilters] = partition(filters, (obj: esFilters.Filter) => { +export function extractTimeFilter(timeFieldName: string, filters: Filter[]) { + const [timeRangeFilter, restOfFilters] = partition(filters, (obj: Filter) => { let key; - if (esFilters.isRangeFilter(obj)) { + if (isRangeFilter(obj)) { key = keys(obj.range)[0]; } @@ -33,6 +33,6 @@ export function extractTimeFilter(timeFieldName: string, filters: esFilters.Filt return { restOfFilters, - timeRangeFilter: timeRangeFilter[0] as esFilters.RangeFilter | undefined, + timeRangeFilter: timeRangeFilter[0] as RangeFilter | undefined, }; } diff --git a/src/plugins/data/public/search/search_source/search_source.ts b/src/plugins/data/public/search/search_source/search_source.ts index 95fbf069dcff09..21e5ded6983acb 100644 --- a/src/plugins/data/public/search/search_source/search_source.ts +++ b/src/plugins/data/public/search/search_source/search_source.ts @@ -73,14 +73,12 @@ import _ from 'lodash'; import { normalizeSortRequest } from './normalize_sort_request'; import { filterDocvalueFields } from './filter_docvalue_fields'; import { fieldWildcardFilter } from '../../../../kibana_utils/public'; - -import { esFilters, SearchRequest } from '../..'; - +import { SearchRequest } from '../..'; import { SearchSourceOptions, SearchSourceFields } from './types'; import { fetchSoon, FetchOptions, RequestFailure } from '../fetch'; import { getSearchService, getUiSettings, getInjectedMetadata } from '../../services'; -import { getEsQueryConfig, buildEsQuery } from '../../../common/es_query'; +import { getEsQueryConfig, buildEsQuery, Filter } from '../../../common'; import { getHighlightRequest } from '../../../common/field_formats'; export type ISearchSource = Pick; @@ -390,7 +388,7 @@ export class SearchSource { delete searchRequest.highlightAll; } - const translateToQuery = (filter: esFilters.Filter) => filter && (filter.query || filter); + const translateToQuery = (filter: Filter) => filter && (filter.query || filter); // re-write filters within filter aggregations (function recurse(aggBranch) { diff --git a/src/plugins/data/public/search/search_source/types.ts b/src/plugins/data/public/search/search_source/types.ts index 268d24aaa6df11..c2f8701a64fa35 100644 --- a/src/plugins/data/public/search/search_source/types.ts +++ b/src/plugins/data/public/search/search_source/types.ts @@ -17,7 +17,8 @@ * under the License. */ import { NameList } from 'elasticsearch'; -import { esFilters, IndexPattern, Query } from '../..'; +import { IndexPattern, Query } from '../..'; +import { Filter } from '../../../common'; export type EsQuerySearchAfter = [string | number, string | number]; @@ -36,10 +37,7 @@ export type EsQuerySortValue = Record esFilters.Filter[] | esFilters.Filter | undefined); + filter?: Filter[] | Filter | (() => Filter[] | Filter | undefined); sort?: EsQuerySortValue | EsQuerySortValue[]; highlight?: any; highlightAll?: boolean; diff --git a/src/plugins/data/public/ui/apply_filters/apply_filter_popover_content.tsx b/src/plugins/data/public/ui/apply_filters/apply_filter_popover_content.tsx index 92582ef1d15c22..33928e4f87afc6 100644 --- a/src/plugins/data/public/ui/apply_filters/apply_filter_popover_content.tsx +++ b/src/plugins/data/public/ui/apply_filters/apply_filter_popover_content.tsx @@ -30,14 +30,16 @@ import { } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n/react'; import React, { Component } from 'react'; -import { mapAndFlattenFilters, esFilters, IIndexPattern } from '../..'; +import { IIndexPattern } from '../..'; +import { getDisplayValueFromFilter, Filter } from '../../../common'; import { FilterLabel } from '../filter_bar'; +import { mapAndFlattenFilters } from '../../query'; interface Props { - filters: esFilters.Filter[]; + filters: Filter[]; indexPatterns: IIndexPattern[]; onCancel: () => void; - onSubmit: (filters: esFilters.Filter[]) => void; + onSubmit: (filters: Filter[]) => void; } interface State { @@ -55,8 +57,8 @@ export class ApplyFiltersPopoverContent extends Component { isFilterSelected: props.filters.map(() => true), }; } - private getLabel(filter: esFilters.Filter) { - const valueLabel = esFilters.getDisplayValueFromFilter(filter, this.props.indexPatterns); + private getLabel(filter: Filter) { + const valueLabel = getDisplayValueFromFilter(filter, this.props.indexPatterns); return ; } diff --git a/src/plugins/data/public/ui/apply_filters/apply_filters_popover.tsx b/src/plugins/data/public/ui/apply_filters/apply_filters_popover.tsx index 71a042adffa391..cffcad66cbc24b 100644 --- a/src/plugins/data/public/ui/apply_filters/apply_filters_popover.tsx +++ b/src/plugins/data/public/ui/apply_filters/apply_filters_popover.tsx @@ -19,13 +19,13 @@ import React from 'react'; import { ApplyFiltersPopoverContent } from './apply_filter_popover_content'; -import { IIndexPattern, esFilters } from '../..'; +import { IIndexPattern, Filter } from '../..'; type CancelFnType = () => void; -type SubmitFnType = (filters: esFilters.Filter[]) => void; +type SubmitFnType = (filters: Filter[]) => void; export const applyFiltersPopover = ( - filters: esFilters.Filter[], + filters: Filter[], indexPatterns: IIndexPattern[], onCancel: CancelFnType, onSubmit: SubmitFnType diff --git a/src/plugins/data/public/ui/filter_bar/filter_bar.tsx b/src/plugins/data/public/ui/filter_bar/filter_bar.tsx index 2aaceddd68f0ce..6852152d059be5 100644 --- a/src/plugins/data/public/ui/filter_bar/filter_bar.tsx +++ b/src/plugins/data/public/ui/filter_bar/filter_bar.tsx @@ -26,11 +26,21 @@ import { FilterEditor } from './filter_editor'; import { FilterItem } from './filter_item'; import { FilterOptions } from './filter_options'; import { useKibana } from '../../../../kibana_react/public'; -import { IIndexPattern, esFilters } from '../..'; +import { IIndexPattern } from '../..'; +import { + buildEmptyFilter, + Filter, + enableFilter, + disableFilter, + pinFilter, + toggleFilterDisabled, + toggleFilterNegated, + unpinFilter, +} from '../../../common'; interface Props { - filters: esFilters.Filter[]; - onFiltersUpdated?: (filters: esFilters.Filter[]) => void; + filters: Filter[]; + onFiltersUpdated?: (filters: Filter[]) => void; className: string; indexPatterns: IIndexPattern[]; intl: InjectedIntl; @@ -43,7 +53,7 @@ function FilterBarUI(props: Props) { const uiSettings = kibana.services.uiSettings; if (!uiSettings) return null; - function onFiltersUpdated(filters: esFilters.Filter[]) { + function onFiltersUpdated(filters: Filter[]) { if (props.onFiltersUpdated) { props.onFiltersUpdated(filters); } @@ -68,7 +78,7 @@ function FilterBarUI(props: Props) { const isPinned = uiSettings!.get('filters:pinnedByDefault'); const [indexPattern] = props.indexPatterns; const index = indexPattern && indexPattern.id; - const newFilter = esFilters.buildEmptyFilter(isPinned, index); + const newFilter = buildEmptyFilter(isPinned, index); const button = ( void; + onSubmit: (filter: Filter) => void; onCancel: () => void; intl: InjectedIntl; } @@ -76,10 +85,10 @@ class FilterEditorUI extends Component { selectedIndexPattern: this.getIndexPatternFromFilter(), selectedField: this.getFieldFromFilter(), selectedOperator: this.getSelectedOperator(), - params: esFilters.getFilterParams(props.filter), + params: getFilterParams(props.filter), useCustomLabel: props.filter.meta.alias !== null, customLabel: props.filter.meta.alias, - queryDsl: JSON.stringify(esFilters.cleanFilter(props.filter), null, 2), + queryDsl: JSON.stringify(cleanFilter(props.filter), null, 2), isCustomEditorOpen: this.isUnknownFilterType(), }; } @@ -372,14 +381,12 @@ class FilterEditorUI extends Component { } private getIndexPatternFromFilter() { - return esFilters.getIndexPatternFromFilter(this.props.filter, this.props.indexPatterns); + return getIndexPatternFromFilter(this.props.filter, this.props.indexPatterns); } private getFieldFromFilter() { const indexPattern = this.getIndexPatternFromFilter(); - return ( - indexPattern && getFieldFromFilter(this.props.filter as esFilters.FieldFilter, indexPattern) - ); + return indexPattern && getFieldFromFilter(this.props.filter as FieldFilter, indexPattern); } private getSelectedOperator() { @@ -470,17 +477,10 @@ class FilterEditorUI extends Component { const { index, disabled, negate } = this.props.filter.meta; const newIndex = index || this.props.indexPatterns[0].id!; const body = JSON.parse(queryDsl); - const filter = esFilters.buildCustomFilter( - newIndex, - body, - disabled, - negate, - alias, - $state.store - ); + const filter = buildCustomFilter(newIndex, body, disabled, negate, alias, $state.store); this.props.onSubmit(filter); } else if (indexPattern && field && operator) { - const filter = esFilters.buildFilter( + const filter = buildFilter( indexPattern, field, operator.type, diff --git a/src/plugins/data/public/ui/filter_bar/filter_editor/lib/filter_editor_utils.test.ts b/src/plugins/data/public/ui/filter_bar/filter_editor/lib/filter_editor_utils.test.ts index fb3fbc10d74552..771743a3e5df29 100644 --- a/src/plugins/data/public/ui/filter_bar/filter_editor/lib/filter_editor_utils.test.ts +++ b/src/plugins/data/public/ui/filter_bar/filter_editor/lib/filter_editor_utils.test.ts @@ -25,7 +25,7 @@ import { stubIndexPattern, stubFields, } from '../../../../stubs'; -import { esFilters } from '../../../../index'; +import { toggleFilterNegated } from '../../../../../common'; import { getFieldFromFilter, getFilterableFields, @@ -54,7 +54,7 @@ describe('Filter editor utils', () => { }); it('should return "is not" for phrase filter', () => { - const negatedPhraseFilter = esFilters.toggleFilterNegated(phraseFilter); + const negatedPhraseFilter = toggleFilterNegated(phraseFilter); const operator = getOperatorFromFilter(negatedPhraseFilter); expect(operator).not.toBeUndefined(); expect(operator && operator.type).toBe('phrase'); @@ -69,7 +69,7 @@ describe('Filter editor utils', () => { }); it('should return "is not one of" for negated phrases filter', () => { - const negatedPhrasesFilter = esFilters.toggleFilterNegated(phrasesFilter); + const negatedPhrasesFilter = toggleFilterNegated(phrasesFilter); const operator = getOperatorFromFilter(negatedPhrasesFilter); expect(operator).not.toBeUndefined(); expect(operator && operator.type).toBe('phrases'); @@ -84,7 +84,7 @@ describe('Filter editor utils', () => { }); it('should return "is not between" for negated range filter', () => { - const negatedRangeFilter = esFilters.toggleFilterNegated(rangeFilter); + const negatedRangeFilter = toggleFilterNegated(rangeFilter); const operator = getOperatorFromFilter(negatedRangeFilter); expect(operator).not.toBeUndefined(); expect(operator && operator.type).toBe('range'); @@ -99,7 +99,7 @@ describe('Filter editor utils', () => { }); it('should return "does not exists" for negated exists filter', () => { - const negatedExistsFilter = esFilters.toggleFilterNegated(existsFilter); + const negatedExistsFilter = toggleFilterNegated(existsFilter); const operator = getOperatorFromFilter(negatedExistsFilter); expect(operator).not.toBeUndefined(); expect(operator && operator.type).toBe('exists'); diff --git a/src/plugins/data/public/ui/filter_bar/filter_editor/lib/filter_editor_utils.ts b/src/plugins/data/public/ui/filter_bar/filter_editor/lib/filter_editor_utils.ts index dbf84a6b546c94..beb7714ffcca3d 100644 --- a/src/plugins/data/public/ui/filter_bar/filter_editor/lib/filter_editor_utils.ts +++ b/src/plugins/data/public/ui/filter_bar/filter_editor/lib/filter_editor_utils.ts @@ -20,14 +20,19 @@ import dateMath from '@elastic/datemath'; import { Ipv4Address } from '../../../../../../kibana_utils/public'; import { FILTER_OPERATORS, Operator } from './filter_operators'; -import { esFilters } from '../../../..'; -import { isFilterable, IIndexPattern, IFieldType } from '../../../../../common'; +import { + isFilterable, + IIndexPattern, + IFieldType, + Filter, + FieldFilter, +} from '../../../../../common'; -export function getFieldFromFilter(filter: esFilters.FieldFilter, indexPattern: IIndexPattern) { +export function getFieldFromFilter(filter: FieldFilter, indexPattern: IIndexPattern) { return indexPattern.fields.find(field => field.name === filter.meta.key); } -export function getOperatorFromFilter(filter: esFilters.Filter) { +export function getOperatorFromFilter(filter: Filter) { return FILTER_OPERATORS.find(operator => { return filter.meta.type === operator.type && filter.meta.negate === operator.negate; }); diff --git a/src/plugins/data/public/ui/filter_bar/filter_editor/lib/filter_label.tsx b/src/plugins/data/public/ui/filter_bar/filter_editor/lib/filter_label.tsx index 49a0d6f2ab3bdb..8f9be6b9c079a6 100644 --- a/src/plugins/data/public/ui/filter_bar/filter_editor/lib/filter_label.tsx +++ b/src/plugins/data/public/ui/filter_bar/filter_editor/lib/filter_label.tsx @@ -21,10 +21,10 @@ import React, { Fragment } from 'react'; import { EuiTextColor } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { existsOperator, isOneOfOperator } from './filter_operators'; -import { esFilters } from '../../../..'; +import { Filter, FILTERS } from '../../../../../common'; interface Props { - filter: esFilters.Filter; + filter: Filter; valueLabel?: string; } @@ -51,43 +51,43 @@ export function FilterLabel({ filter, valueLabel }: Props) { } switch (filter.meta.type) { - case esFilters.FILTERS.EXISTS: + case FILTERS.EXISTS: return ( {prefix} {filter.meta.key} {existsOperator.message} ); - case esFilters.FILTERS.GEO_BOUNDING_BOX: + case FILTERS.GEO_BOUNDING_BOX: return ( {prefix} {filter.meta.key}: {valueLabel} ); - case esFilters.FILTERS.GEO_POLYGON: + case FILTERS.GEO_POLYGON: return ( {prefix} {filter.meta.key}: {valueLabel} ); - case esFilters.FILTERS.PHRASES: + case FILTERS.PHRASES: return ( {prefix} {filter.meta.key} {isOneOfOperator.message} {valueLabel} ); - case esFilters.FILTERS.QUERY_STRING: + case FILTERS.QUERY_STRING: return ( {prefix} {valueLabel} ); - case esFilters.FILTERS.PHRASE: - case esFilters.FILTERS.RANGE: + case FILTERS.PHRASE: + case FILTERS.RANGE: return ( {prefix} diff --git a/src/plugins/data/public/ui/filter_bar/filter_item.tsx b/src/plugins/data/public/ui/filter_bar/filter_item.tsx index 788663041fd038..0febfe807a946d 100644 --- a/src/plugins/data/public/ui/filter_bar/filter_item.tsx +++ b/src/plugins/data/public/ui/filter_bar/filter_item.tsx @@ -24,14 +24,22 @@ import React, { Component, MouseEvent } from 'react'; import { IUiSettingsClient } from 'src/core/public'; import { FilterEditor } from './filter_editor'; import { FilterView } from './filter_view'; -import { esFilters, IIndexPattern } from '../..'; +import { IIndexPattern } from '../..'; +import { + Filter, + isFilterPinned, + getDisplayValueFromFilter, + toggleFilterNegated, + toggleFilterPinned, + toggleFilterDisabled, +} from '../../../common'; interface Props { id: string; - filter: esFilters.Filter; + filter: Filter; indexPatterns: IIndexPattern[]; className?: string; - onUpdate: (filter: esFilters.Filter) => void; + onUpdate: (filter: Filter) => void; onRemove: () => void; intl: InjectedIntl; uiSettings: IUiSettingsClient; @@ -61,13 +69,13 @@ class FilterItemUI extends Component { 'globalFilterItem', { 'globalFilterItem-isDisabled': disabled, - 'globalFilterItem-isPinned': esFilters.isFilterPinned(filter), + 'globalFilterItem-isPinned': isFilterPinned(filter), 'globalFilterItem-isExcluded': negate, }, this.props.className ); - const valueLabel = esFilters.getDisplayValueFromFilter(filter, this.props.indexPatterns); + const valueLabel = getDisplayValueFromFilter(filter, this.props.indexPatterns); const dataTestSubjKey = filter.meta.key ? `filter-key-${filter.meta.key}` : ''; const dataTestSubjValue = filter.meta.value ? `filter-value-${valueLabel}` : ''; const dataTestSubjDisabled = `filter-${ @@ -90,7 +98,7 @@ class FilterItemUI extends Component { id: 0, items: [ { - name: esFilters.isFilterPinned(filter) + name: isFilterPinned(filter) ? this.props.intl.formatMessage({ id: 'data.filter.filterBar.unpinFilterButtonLabel', defaultMessage: 'Unpin', @@ -208,23 +216,23 @@ class FilterItemUI extends Component { }); }; - private onSubmit = (filter: esFilters.Filter) => { + private onSubmit = (filter: Filter) => { this.closePopover(); this.props.onUpdate(filter); }; private onTogglePinned = () => { - const filter = esFilters.toggleFilterPinned(this.props.filter); + const filter = toggleFilterPinned(this.props.filter); this.props.onUpdate(filter); }; private onToggleNegated = () => { - const filter = esFilters.toggleFilterNegated(this.props.filter); + const filter = toggleFilterNegated(this.props.filter); this.props.onUpdate(filter); }; private onToggleDisabled = () => { - const filter = esFilters.toggleFilterDisabled(this.props.filter); + const filter = toggleFilterDisabled(this.props.filter); this.props.onUpdate(filter); }; } diff --git a/src/plugins/data/public/ui/filter_bar/filter_view/index.tsx b/src/plugins/data/public/ui/filter_bar/filter_view/index.tsx index ed33afeca69c29..6ff261e3cfb8a4 100644 --- a/src/plugins/data/public/ui/filter_bar/filter_view/index.tsx +++ b/src/plugins/data/public/ui/filter_bar/filter_view/index.tsx @@ -21,10 +21,10 @@ import { EuiBadge, useInnerText } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import React, { FC } from 'react'; import { FilterLabel } from '../filter_editor/lib/filter_label'; -import { esFilters } from '../../..'; +import { Filter, isFilterPinned } from '../../../../common'; interface Props { - filter: esFilters.Filter; + filter: Filter; valueLabel: string; [propName: string]: any; } @@ -43,7 +43,7 @@ export const FilterView: FC = ({ values: { innerText }, }); - if (esFilters.isFilterPinned(filter)) { + if (isFilterPinned(filter)) { title = `${i18n.translate('data.filter.filterBar.pinnedFilterPrefix', { defaultMessage: 'Pinned', })} ${title}`; diff --git a/src/plugins/data/public/ui/query_string_input/query_bar_top_row.tsx b/src/plugins/data/public/ui/query_string_input/query_bar_top_row.tsx index e2c396100dd5dc..ad9c8401389fac 100644 --- a/src/plugins/data/public/ui/query_string_input/query_bar_top_row.tsx +++ b/src/plugins/data/public/ui/query_string_input/query_bar_top_row.tsx @@ -33,18 +33,11 @@ import { import { EuiSuperUpdateButton, OnRefreshProps } from '@elastic/eui'; import { FormattedMessage, InjectedIntl, injectI18n } from '@kbn/i18n/react'; import { Toast } from 'src/core/public'; -import { - IDataPluginServices, - IIndexPattern, - TimeRange, - TimeHistoryContract, - Query, - PersistedLog, - getQueryLog, -} from '../..'; +import { IDataPluginServices, IIndexPattern, TimeRange, TimeHistoryContract, Query } from '../..'; import { useKibana, toMountPoint } from '../../../../kibana_react/public'; import { QueryStringInput } from './query_string_input'; import { doesKueryExpressionHaveLuceneSyntaxError } from '../../../common'; +import { PersistedLog, getQueryLog } from '../../query'; interface Props { query?: Query; diff --git a/src/plugins/data/public/ui/query_string_input/query_string_input.tsx b/src/plugins/data/public/ui/query_string_input/query_string_input.tsx index f8cb4050efdfb6..f1f055160a3ca5 100644 --- a/src/plugins/data/public/ui/query_string_input/query_string_input.tsx +++ b/src/plugins/data/public/ui/query_string_input/query_string_input.tsx @@ -34,22 +34,13 @@ import { import { InjectedIntl, injectI18n, FormattedMessage } from '@kbn/i18n/react'; import { debounce, compact, isEqual } from 'lodash'; import { Toast } from 'src/core/public'; -import { - IDataPluginServices, - IIndexPattern, - PersistedLog, - SuggestionsComponent, - toUser, - fromUser, - matchPairs, - getQueryLog, - Query, -} from '../..'; +import { IDataPluginServices, IIndexPattern, SuggestionsComponent, Query } from '../..'; import { QuerySuggestion, QuerySuggestionTypes } from '../../autocomplete'; import { withKibana, KibanaReactContextValue, toMountPoint } from '../../../../kibana_react/public'; import { fetchIndexPatterns } from './fetch_index_patterns'; import { QueryLanguageSwitcher } from './language_switcher'; +import { PersistedLog, getQueryLog, matchPairs, toUser, fromUser } from '../../query'; interface Props { kibana: KibanaReactContextValue; diff --git a/src/plugins/data/public/ui/search_bar/create_search_bar.tsx b/src/plugins/data/public/ui/search_bar/create_search_bar.tsx index c24c20bd08fb8e..632385e019e4c4 100644 --- a/src/plugins/data/public/ui/search_bar/create_search_bar.tsx +++ b/src/plugins/data/public/ui/search_bar/create_search_bar.tsx @@ -21,7 +21,7 @@ import React, { useState, useEffect } from 'react'; import { CoreStart } from 'src/core/public'; import { IStorageWrapper } from 'src/plugins/kibana_utils/public'; import { KibanaContextProvider } from '../../../../kibana_react/public'; -import { DataPublicPluginStart, esFilters, Query, TimeRange, SavedQuery } from '../..'; +import { DataPublicPluginStart, Filter, Query, TimeRange, SavedQuery } from '../..'; import { QueryStart } from '../../query'; import { SearchBarOwnProps, SearchBar } from './search_bar'; import { useFilterManager } from './lib/use_filter_manager'; @@ -43,7 +43,7 @@ export type StatefulSearchBarProps = SearchBarOwnProps & { // Respond to user changing the filters const defaultFiltersUpdated = (queryService: QueryStart) => { - return (filters: esFilters.Filter[]) => { + return (filters: Filter[]) => { queryService.filterManager.setFilters(filters); }; }; diff --git a/src/plugins/data/public/ui/search_bar/lib/populate_state_from_saved_query.test.ts b/src/plugins/data/public/ui/search_bar/lib/populate_state_from_saved_query.test.ts index 3242b37becd95a..1db900053e078b 100644 --- a/src/plugins/data/public/ui/search_bar/lib/populate_state_from_saved_query.test.ts +++ b/src/plugins/data/public/ui/search_bar/lib/populate_state_from_saved_query.test.ts @@ -21,7 +21,8 @@ import { populateStateFromSavedQuery } from './populate_state_from_saved_query'; import { dataPluginMock } from '../../../mocks'; import { DataPublicPluginStart } from '../../../types'; -import { SavedQuery, esFilters } from '../../..'; +import { SavedQuery } from '../../..'; +import { FilterStateStore } from '../../../../common'; import { getFilter } from '../../../query/filter_manager/test_helpers/get_stub_filter'; describe('populateStateFromSavedQuery', () => { @@ -59,7 +60,7 @@ describe('populateStateFromSavedQuery', () => { const savedQuery: SavedQuery = { ...baseSavedQuery, }; - const f1 = getFilter(esFilters.FilterStateStore.APP_STATE, false, false, 'age', 34); + const f1 = getFilter(FilterStateStore.APP_STATE, false, false, 'age', 34); savedQuery.attributes.filters = [f1]; populateStateFromSavedQuery(dataMock.query, setQueryState, savedQuery); expect(setQueryState).toHaveBeenCalled(); @@ -67,19 +68,13 @@ describe('populateStateFromSavedQuery', () => { }); it('should preserve global filters', async () => { - const globalFilter = getFilter( - esFilters.FilterStateStore.GLOBAL_STATE, - false, - false, - 'age', - 34 - ); + const globalFilter = getFilter(FilterStateStore.GLOBAL_STATE, false, false, 'age', 34); dataMock.query.filterManager.getGlobalFilters = jest.fn().mockReturnValue([globalFilter]); const setQueryState = jest.fn(); const savedQuery: SavedQuery = { ...baseSavedQuery, }; - const f1 = getFilter(esFilters.FilterStateStore.APP_STATE, false, false, 'age', 34); + const f1 = getFilter(FilterStateStore.APP_STATE, false, false, 'age', 34); savedQuery.attributes.filters = [f1]; populateStateFromSavedQuery(dataMock.query, setQueryState, savedQuery); expect(setQueryState).toHaveBeenCalled(); diff --git a/src/plugins/data/public/ui/search_bar/lib/populate_state_from_saved_query.ts b/src/plugins/data/public/ui/search_bar/lib/populate_state_from_saved_query.ts index fd1517097753eb..7ae6726b36df09 100644 --- a/src/plugins/data/public/ui/search_bar/lib/populate_state_from_saved_query.ts +++ b/src/plugins/data/public/ui/search_bar/lib/populate_state_from_saved_query.ts @@ -17,7 +17,7 @@ * under the License. */ -import { QueryStart, SavedQuery } from '../../..'; +import { QueryStart, SavedQuery } from '../../../query'; export const populateStateFromSavedQuery = ( queryService: QueryStart, diff --git a/src/plugins/data/public/ui/search_bar/lib/use_filter_manager.ts b/src/plugins/data/public/ui/search_bar/lib/use_filter_manager.ts index e889583aef6094..70cb40bf05601e 100644 --- a/src/plugins/data/public/ui/search_bar/lib/use_filter_manager.ts +++ b/src/plugins/data/public/ui/search_bar/lib/use_filter_manager.ts @@ -19,10 +19,10 @@ import { useState, useEffect } from 'react'; import { Subscription } from 'rxjs'; -import { DataPublicPluginStart, esFilters } from '../../..'; +import { DataPublicPluginStart, Filter } from '../../..'; interface UseFilterManagerProps { - filters?: esFilters.Filter[]; + filters?: Filter[]; filterManager: DataPublicPluginStart['query']['filterManager']; } diff --git a/src/plugins/data/public/ui/search_bar/search_bar.tsx b/src/plugins/data/public/ui/search_bar/search_bar.tsx index 8d2219bc5731fd..66ad4dfb12e977 100644 --- a/src/plugins/data/public/ui/search_bar/search_bar.tsx +++ b/src/plugins/data/public/ui/search_bar/search_bar.tsx @@ -29,24 +29,23 @@ import { IDataPluginServices, TimeRange, Query, - esFilters, + Filter, IIndexPattern, - TimeHistoryContract, FilterBar, SavedQuery, SavedQueryMeta, SaveQueryForm, SavedQueryManagementComponent, - SavedQueryAttributes, } from '../..'; import { QueryBarTopRow } from '../query_string_input/query_bar_top_row'; +import { SavedQueryAttributes, TimeHistoryContract } from '../../query'; interface SearchBarInjectedDeps { kibana: KibanaReactContextValue; intl: InjectedIntl; timeHistory: TimeHistoryContract; // Filter bar - onFiltersUpdated?: (filters: esFilters.Filter[]) => void; + onFiltersUpdated?: (filters: Filter[]) => void; // Autorefresh onRefreshChange?: (options: { isPaused: boolean; refreshInterval: number }) => void; } @@ -63,7 +62,7 @@ export interface SearchBarOwnProps { showFilterBar?: boolean; showDatePicker?: boolean; showAutoRefreshOnly?: boolean; - filters?: esFilters.Filter[]; + filters?: Filter[]; // Date picker isRefreshPaused?: boolean; refreshInterval?: number; diff --git a/src/plugins/data/server/autocomplete/value_suggestions_route.ts b/src/plugins/data/server/autocomplete/value_suggestions_route.ts index c49b62f407da78..f032890e98901b 100644 --- a/src/plugins/data/server/autocomplete/value_suggestions_route.ts +++ b/src/plugins/data/server/autocomplete/value_suggestions_route.ts @@ -21,7 +21,7 @@ import { get, map } from 'lodash'; import { schema } from '@kbn/config-schema'; import { IRouter } from 'kibana/server'; -import { IFieldType, esFilters } from '../index'; +import { IFieldType, Filter } from '../index'; import { findIndexPatternById, getFieldByName } from '../index_patterns'; export function registerValueSuggestionsRoute(router: IRouter) { @@ -80,7 +80,7 @@ async function getBody( { timeout, terminate_after }: Record, field: IFieldType | string, query: string, - boolFilter: esFilters.Filter[] = [] + boolFilter: Filter[] = [] ) { const isFieldObject = (f: any): f is IFieldType => Boolean(f && f.name); diff --git a/src/plugins/data/server/index.ts b/src/plugins/data/server/index.ts index 02e69c610af430..e8f422d94909f3 100644 --- a/src/plugins/data/server/index.ts +++ b/src/plugins/data/server/index.ts @@ -20,6 +20,34 @@ import { PluginInitializerContext } from '../../../core/server'; import { DataServerPlugin, DataPluginSetup, DataPluginStart } from './plugin'; +import { + buildQueryFilter, + buildCustomFilter, + buildEmptyFilter, + buildExistsFilter, + buildFilter, + buildPhraseFilter, + buildPhrasesFilter, + buildRangeFilter, + isFilterDisabled, +} from '../common'; + +/* + * Filter helper namespace: + */ + +export const esFilters = { + buildQueryFilter, + buildCustomFilter, + buildEmptyFilter, + buildExistsFilter, + buildFilter, + buildPhraseFilter, + buildPhrasesFilter, + buildRangeFilter, + isFilterDisabled, +}; + /* * esQuery and esKuery: */ @@ -117,24 +145,23 @@ export { KBN_FIELD_TYPES, } from '../common'; -export function plugin(initializerContext: PluginInitializerContext) { - return new DataServerPlugin(initializerContext); -} +/** + * Search + */ + +export { IRequestTypesMap, IResponseTypesMap } from './search'; +export * from './search'; /** * Types to be shared externally * @public */ -export { IRequestTypesMap, IResponseTypesMap } from './search'; export { - // es query - esFilters, // kbn field types castEsToKbnFieldTypeName, - getKbnFieldType, - getKbnTypeNames, // query + Filter, Query, // timefilter RefreshInterval, @@ -148,7 +175,9 @@ export { * @public */ -export * from './search'; +export function plugin(initializerContext: PluginInitializerContext) { + return new DataServerPlugin(initializerContext); +} export { DataServerPlugin as Plugin, diff --git a/src/plugins/data/server/index_patterns/fetcher/lib/field_capabilities/field_caps_response.test.js b/src/plugins/data/server/index_patterns/fetcher/lib/field_capabilities/field_caps_response.test.js index 8ddd18c2c67f4d..de905ce4f336d9 100644 --- a/src/plugins/data/server/index_patterns/fetcher/lib/field_capabilities/field_caps_response.test.js +++ b/src/plugins/data/server/index_patterns/fetcher/lib/field_capabilities/field_caps_response.test.js @@ -24,7 +24,7 @@ import sinon from 'sinon'; import * as shouldReadFieldFromDocValuesNS from './should_read_field_from_doc_values'; import { shouldReadFieldFromDocValues } from './should_read_field_from_doc_values'; -import { getKbnFieldType } from '../../../../../../data/server'; +import { getKbnFieldType } from '../../../../../common'; import { readFieldCapsResponse } from './field_caps_response'; import esResponse from './__fixtures__/es_field_caps_response.json'; diff --git a/src/plugins/embeddable/public/lib/actions/apply_filter_action.ts b/src/plugins/embeddable/public/lib/actions/apply_filter_action.ts index f471d70e5455ab..9aeb7e1c84d7e5 100644 --- a/src/plugins/embeddable/public/lib/actions/apply_filter_action.ts +++ b/src/plugins/embeddable/public/lib/actions/apply_filter_action.ts @@ -20,14 +20,14 @@ import { i18n } from '@kbn/i18n'; import { Action, createAction, IncompatibleActionError } from '../ui_actions'; import { IEmbeddable, EmbeddableInput } from '../embeddables'; -import { esFilters } from '../../../../../plugins/data/public'; +import { Filter } from '../../../../../plugins/data/public'; export const APPLY_FILTER_ACTION = 'APPLY_FILTER_ACTION'; -type RootEmbeddable = IEmbeddable; +type RootEmbeddable = IEmbeddable; interface ActionContext { embeddable: IEmbeddable; - filters: esFilters.Filter[]; + filters: Filter[]; } async function isCompatible(context: ActionContext) { diff --git a/src/plugins/embeddable/public/lib/panel/panel_header/panel_actions/add_panel/add_panel_action.test.tsx b/src/plugins/embeddable/public/lib/panel/panel_header/panel_actions/add_panel/add_panel_action.test.tsx index 47113ffc59561c..028d6a530236a6 100644 --- a/src/plugins/embeddable/public/lib/panel/panel_header/panel_actions/add_panel/add_panel_action.test.tsx +++ b/src/plugins/embeddable/public/lib/panel/panel_header/panel_actions/add_panel/add_panel_action.test.tsx @@ -31,7 +31,7 @@ import { GetEmbeddableFactory } from '../../../../types'; // eslint-disable-next-line import { coreMock } from '../../../../../../../../core/public/mocks'; import { ContactCardEmbeddable } from '../../../../test_samples'; -import { esFilters } from '../../../../../../../../plugins/data/public'; +import { esFilters, Filter } from '../../../../../../../../plugins/data/public'; const embeddableFactories = new Map(); embeddableFactories.set(FILTERABLE_EMBEDDABLE, new FilterableEmbeddableFactory()); @@ -51,7 +51,7 @@ beforeEach(async () => { () => null ); - const derivedFilter: esFilters.Filter = { + const derivedFilter: Filter = { $state: { store: esFilters.FilterStateStore.APP_STATE }, meta: { disabled: false, alias: 'name', negate: false }, query: { match: {} }, diff --git a/src/plugins/embeddable/public/lib/panel/panel_header/panel_actions/remove_panel_action.test.tsx b/src/plugins/embeddable/public/lib/panel/panel_header/panel_actions/remove_panel_action.test.tsx index 684a8c45a4e890..be096a4cc60cef 100644 --- a/src/plugins/embeddable/public/lib/panel/panel_header/panel_actions/remove_panel_action.test.tsx +++ b/src/plugins/embeddable/public/lib/panel/panel_header/panel_actions/remove_panel_action.test.tsx @@ -29,7 +29,7 @@ import { FilterableEmbeddableFactory } from '../../../test_samples/embeddables/f import { FilterableContainer } from '../../../test_samples/embeddables/filterable_container'; import { GetEmbeddableFactory, ViewMode } from '../../../types'; import { ContactCardEmbeddable } from '../../../test_samples/embeddables/contact_card/contact_card_embeddable'; -import { esFilters } from '../../../../../../../plugins/data/public'; +import { esFilters, Filter } from '../../../../../../../plugins/data/public'; const embeddableFactories = new Map(); embeddableFactories.set(FILTERABLE_EMBEDDABLE, new FilterableEmbeddableFactory()); @@ -39,7 +39,7 @@ let container: FilterableContainer; let embeddable: FilterableEmbeddable; beforeEach(async () => { - const derivedFilter: esFilters.Filter = { + const derivedFilter: Filter = { $state: { store: esFilters.FilterStateStore.APP_STATE }, meta: { disabled: false, alias: 'name', negate: false }, query: { match: {} }, diff --git a/src/plugins/embeddable/public/lib/test_samples/embeddables/filterable_container.tsx b/src/plugins/embeddable/public/lib/test_samples/embeddables/filterable_container.tsx index de708b778c3c7c..f7412804a17ca1 100644 --- a/src/plugins/embeddable/public/lib/test_samples/embeddables/filterable_container.tsx +++ b/src/plugins/embeddable/public/lib/test_samples/embeddables/filterable_container.tsx @@ -19,12 +19,12 @@ import { Container, ContainerInput } from '../../containers'; import { GetEmbeddableFactory } from '../../types'; -import { esFilters } from '../../../../../data/public'; +import { Filter } from '../../../../../data/public'; export const FILTERABLE_CONTAINER = 'FILTERABLE_CONTAINER'; export interface FilterableContainerInput extends ContainerInput { - filters: esFilters.Filter[]; + filters: Filter[]; } /** @@ -34,7 +34,7 @@ export interface FilterableContainerInput extends ContainerInput { */ // eslint-disable-next-line @typescript-eslint/consistent-type-definitions export type InheritedChildrenInput = { - filters: esFilters.Filter[]; + filters: Filter[]; id?: string; }; diff --git a/src/plugins/embeddable/public/lib/test_samples/embeddables/filterable_embeddable.tsx b/src/plugins/embeddable/public/lib/test_samples/embeddables/filterable_embeddable.tsx index 56aa7688f37a69..fd6ea3b9aa2b28 100644 --- a/src/plugins/embeddable/public/lib/test_samples/embeddables/filterable_embeddable.tsx +++ b/src/plugins/embeddable/public/lib/test_samples/embeddables/filterable_embeddable.tsx @@ -19,12 +19,12 @@ import { IContainer } from '../../containers'; import { EmbeddableOutput, EmbeddableInput, Embeddable } from '../../embeddables'; -import { esFilters } from '../../../../../data/public'; +import { Filter } from '../../../../../data/public'; export const FILTERABLE_EMBEDDABLE = 'FILTERABLE_EMBEDDABLE'; export interface FilterableEmbeddableInput extends EmbeddableInput { - filters: esFilters.Filter[]; + filters: Filter[]; } export class FilterableEmbeddable extends Embeddable { diff --git a/src/plugins/embeddable/public/tests/container.test.ts b/src/plugins/embeddable/public/tests/container.test.ts index 10836c2a9a84f1..be19ac206999d3 100644 --- a/src/plugins/embeddable/public/tests/container.test.ts +++ b/src/plugins/embeddable/public/tests/container.test.ts @@ -47,7 +47,7 @@ import { import { coreMock } from '../../../../core/public/mocks'; import { testPlugin } from './test_plugin'; import { of } from './helpers'; -import { esFilters } from '../../../../plugins/data/public'; +import { esFilters, Filter } from '../../../../plugins/data/public'; async function creatHelloWorldContainerAndEmbeddable( containerInput: ContainerInput = { id: 'hello', panels: {} }, @@ -439,7 +439,7 @@ test('Test nested reactions', async done => { test('Explicit embeddable input mapped to undefined will default to inherited', async () => { const { start } = await creatHelloWorldContainerAndEmbeddable(); - const derivedFilter: esFilters.Filter = { + const derivedFilter: Filter = { $state: { store: esFilters.FilterStateStore.APP_STATE }, meta: { disabled: false, alias: 'name', negate: false }, query: { match: {} }, diff --git a/src/plugins/embeddable/public/tests/explicit_input.test.ts b/src/plugins/embeddable/public/tests/explicit_input.test.ts index 08875210c71650..f0a7219531b596 100644 --- a/src/plugins/embeddable/public/tests/explicit_input.test.ts +++ b/src/plugins/embeddable/public/tests/explicit_input.test.ts @@ -35,7 +35,7 @@ import { isErrorEmbeddable } from '../lib'; import { HelloWorldContainer } from '../lib/test_samples/embeddables/hello_world_container'; // eslint-disable-next-line import { coreMock } from '../../../../core/public/mocks'; -import { esFilters } from '../../../../plugins/data/public'; +import { esFilters, Filter } from '../../../../plugins/data/public'; const { setup, doStart, coreStart, uiActions } = testPlugin( coreMock.createSetup(), @@ -52,7 +52,7 @@ setup.registerEmbeddableFactory(CONTACT_CARD_EMBEDDABLE, factory); setup.registerEmbeddableFactory(HELLO_WORLD_EMBEDDABLE, new HelloWorldEmbeddableFactory()); test('Explicit embeddable input mapped to undefined will default to inherited', async () => { - const derivedFilter: esFilters.Filter = { + const derivedFilter: Filter = { $state: { store: esFilters.FilterStateStore.APP_STATE }, meta: { disabled: false, alias: 'name', negate: false }, query: { match: {} }, diff --git a/src/plugins/expressions/common/execution/types.ts b/src/plugins/expressions/common/execution/types.ts index e05eb7cc944863..ac0061c59c031a 100644 --- a/src/plugins/expressions/common/execution/types.ts +++ b/src/plugins/expressions/common/execution/types.ts @@ -19,7 +19,7 @@ import { ExpressionType } from '../expression_types'; import { DataAdapter, RequestAdapter } from '../../../inspector/common'; -import { TimeRange, Query, esFilters } from '../../../data/common'; +import { TimeRange, Query, Filter } from '../../../data/common'; /** * `ExecutionContext` is an object available to all functions during a single execution; @@ -66,7 +66,7 @@ export interface DefaultInspectorAdapters { } export interface ExecutionContextSearch { - filters?: esFilters.Filter[]; + filters?: Filter[]; query?: Query | Query[]; timeRange?: TimeRange; } diff --git a/x-pack/legacy/plugins/canvas/canvas_plugin_src/functions/common/saved_map.ts b/x-pack/legacy/plugins/canvas/canvas_plugin_src/functions/common/saved_map.ts index 0d4616635d5c73..bc30ca858bd504 100644 --- a/x-pack/legacy/plugins/canvas/canvas_plugin_src/functions/common/saved_map.ts +++ b/x-pack/legacy/plugins/canvas/canvas_plugin_src/functions/common/saved_map.ts @@ -15,7 +15,7 @@ import { EmbeddableExpression, } from '../../expression_types'; import { getFunctionHelp } from '../../../i18n'; -import { esFilters } from '../../../../../../../src/plugins/data/public'; +import { Filter as DataFilter } from '../../../../../../../src/plugins/data/public'; interface Arguments { id: string; @@ -36,7 +36,7 @@ export type SavedMapInput = EmbeddableInput & { interval: number; }; hideFilterActions: true; - filters: esFilters.Filter[]; + filters: DataFilter[]; mapCenter?: { lat: number; lon: number; diff --git a/x-pack/legacy/plugins/canvas/server/lib/build_embeddable_filters.ts b/x-pack/legacy/plugins/canvas/server/lib/build_embeddable_filters.ts index 1a78a1e0570164..05d4c6570bcfbf 100644 --- a/x-pack/legacy/plugins/canvas/server/lib/build_embeddable_filters.ts +++ b/x-pack/legacy/plugins/canvas/server/lib/build_embeddable_filters.ts @@ -13,10 +13,14 @@ import { buildBoolArray } from './build_bool_array'; // by the browser. This file should probably be refactored so that the pieces required // on the client live in a `public` directory instead. See kibana/issues/52343 // eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { TimeRange, esFilters } from '../../../../../../src/plugins/data/common'; +import { + TimeRange, + esFilters, + Filter as DataFilter, +} from '../../../../../../src/plugins/data/server'; export interface EmbeddableFilterInput { - filters: esFilters.Filter[]; + filters: DataFilter[]; timeRange?: TimeRange; } @@ -35,7 +39,7 @@ function getTimeRangeFromFilters(filters: Filter[]): TimeRange | undefined { : undefined; } -export function getQueryFilters(filters: Filter[]): esFilters.Filter[] { +export function getQueryFilters(filters: Filter[]): DataFilter[] { return buildBoolArray(filters).map(esFilters.buildQueryFilter); } diff --git a/x-pack/legacy/plugins/lens/public/app_plugin/app.tsx b/x-pack/legacy/plugins/lens/public/app_plugin/app.tsx index 23c595bf770d21..c901d4c0c14978 100644 --- a/x-pack/legacy/plugins/lens/public/app_plugin/app.tsx +++ b/x-pack/legacy/plugins/lens/public/app_plugin/app.tsx @@ -20,7 +20,7 @@ import { EditorFrameInstance } from '../types'; import { NativeRenderer } from '../native_renderer'; import { trackUiEvent } from '../lens_ui_telemetry'; import { - esFilters, + Filter, IndexPattern as IndexPatternInstance, IndexPatternsContract, SavedQuery, @@ -39,7 +39,7 @@ interface State { toDate: string; }; query: Query; - filters: esFilters.Filter[]; + filters: Filter[]; savedQuery?: SavedQuery; } diff --git a/x-pack/legacy/plugins/lens/public/editor_frame_plugin/editor_frame/data_panel_wrapper.tsx b/x-pack/legacy/plugins/lens/public/editor_frame_plugin/editor_frame/data_panel_wrapper.tsx index 8ecb6d0599bc77..2a9499077f3c1f 100644 --- a/x-pack/legacy/plugins/lens/public/editor_frame_plugin/editor_frame/data_panel_wrapper.tsx +++ b/x-pack/legacy/plugins/lens/public/editor_frame_plugin/editor_frame/data_panel_wrapper.tsx @@ -12,7 +12,7 @@ import { NativeRenderer } from '../../native_renderer'; import { Action } from './state_management'; import { DragContext } from '../../drag_drop'; import { StateSetter, FramePublicAPI } from '../../types'; -import { Query, esFilters } from '../../../../../../../src/plugins/data/public'; +import { Query, Filter } from '../../../../../../../src/plugins/data/public'; interface DataPanelWrapperProps { datasourceState: unknown; @@ -23,7 +23,7 @@ interface DataPanelWrapperProps { core: DatasourceDataPanelProps['core']; query: Query; dateRange: FramePublicAPI['dateRange']; - filters: esFilters.Filter[]; + filters: Filter[]; } export const DataPanelWrapper = memo((props: DataPanelWrapperProps) => { diff --git a/x-pack/legacy/plugins/lens/public/editor_frame_plugin/editor_frame/editor_frame.tsx b/x-pack/legacy/plugins/lens/public/editor_frame_plugin/editor_frame/editor_frame.tsx index 399eaf5888286c..c8d7cf29a35614 100644 --- a/x-pack/legacy/plugins/lens/public/editor_frame_plugin/editor_frame/editor_frame.tsx +++ b/x-pack/legacy/plugins/lens/public/editor_frame_plugin/editor_frame/editor_frame.tsx @@ -25,7 +25,7 @@ import { getSavedObjectFormat } from './save'; import { WorkspacePanelWrapper } from './workspace_panel_wrapper'; import { generateId } from '../../id_generator'; import { SavedQuery } from '../../../../../../../src/legacy/core_plugins/data/public'; -import { esFilters, Query } from '../../../../../../../src/plugins/data/public'; +import { Filter, Query } from '../../../../../../../src/plugins/data/public'; export interface EditorFrameProps { doc?: Document; @@ -41,7 +41,7 @@ export interface EditorFrameProps { toDate: string; }; query: Query; - filters: esFilters.Filter[]; + filters: Filter[]; savedQuery?: SavedQuery; onChange: (arg: { filterableIndexPatterns: DatasourceMetaData['filterableIndexPatterns']; diff --git a/x-pack/legacy/plugins/lens/public/editor_frame_plugin/editor_frame/expression_helpers.ts b/x-pack/legacy/plugins/lens/public/editor_frame_plugin/editor_frame/expression_helpers.ts index 19882b15d40a74..d264e6d0da3ad5 100644 --- a/x-pack/legacy/plugins/lens/public/editor_frame_plugin/editor_frame/expression_helpers.ts +++ b/x-pack/legacy/plugins/lens/public/editor_frame_plugin/editor_frame/expression_helpers.ts @@ -6,7 +6,7 @@ import { Ast, fromExpression, ExpressionFunctionAST } from '@kbn/interpreter/common'; import { Visualization, Datasource, FramePublicAPI } from '../../types'; -import { esFilters, TimeRange, Query } from '../../../../../../../src/plugins/data/public'; +import { Filter, TimeRange, Query } from '../../../../../../../src/plugins/data/public'; export function prependDatasourceExpression( visualizationExpression: Ast | string | null, @@ -73,7 +73,7 @@ export function prependKibanaContext( }: { timeRange?: TimeRange; query?: Query; - filters?: esFilters.Filter[]; + filters?: Filter[]; } ): Ast { const parsedExpression = typeof expression === 'string' ? fromExpression(expression) : expression; diff --git a/x-pack/legacy/plugins/lens/public/editor_frame_plugin/embeddable/embeddable.test.tsx b/x-pack/legacy/plugins/lens/public/editor_frame_plugin/embeddable/embeddable.test.tsx index 59e1378e636614..a07bd475cdfcbf 100644 --- a/x-pack/legacy/plugins/lens/public/editor_frame_plugin/embeddable/embeddable.test.tsx +++ b/x-pack/legacy/plugins/lens/public/editor_frame_plugin/embeddable/embeddable.test.tsx @@ -6,7 +6,7 @@ import { Embeddable } from './embeddable'; import { ReactExpressionRendererProps } from 'src/plugins/expressions/public'; -import { Query, TimeRange, esFilters } from 'src/plugins/data/public'; +import { Query, TimeRange, Filter } from 'src/plugins/data/public'; import { Document } from '../../persistence'; jest.mock('../../../../../../../src/plugins/inspector/public/', () => ({ @@ -61,9 +61,7 @@ describe('embeddable', () => { it('should re-render if new input is pushed', () => { const timeRange: TimeRange = { from: 'now-15d', to: 'now' }; const query: Query = { language: 'kquery', query: '' }; - const filters: esFilters.Filter[] = [ - { meta: { alias: 'test', negate: false, disabled: false } }, - ]; + const filters: Filter[] = [{ meta: { alias: 'test', negate: false, disabled: false } }]; const embeddable = new Embeddable( expressionRenderer, @@ -88,9 +86,7 @@ describe('embeddable', () => { it('should pass context to embeddable', () => { const timeRange: TimeRange = { from: 'now-15d', to: 'now' }; const query: Query = { language: 'kquery', query: '' }; - const filters: esFilters.Filter[] = [ - { meta: { alias: 'test', negate: false, disabled: false } }, - ]; + const filters: Filter[] = [{ meta: { alias: 'test', negate: false, disabled: false } }]; const embeddable = new Embeddable( expressionRenderer, @@ -113,9 +109,7 @@ describe('embeddable', () => { it('should not re-render if only change is in disabled filter', () => { const timeRange: TimeRange = { from: 'now-15d', to: 'now' }; const query: Query = { language: 'kquery', query: '' }; - const filters: esFilters.Filter[] = [ - { meta: { alias: 'test', negate: false, disabled: true } }, - ]; + const filters: Filter[] = [{ meta: { alias: 'test', negate: false, disabled: true } }]; const embeddable = new Embeddable( expressionRenderer, diff --git a/x-pack/legacy/plugins/lens/public/editor_frame_plugin/embeddable/embeddable.tsx b/x-pack/legacy/plugins/lens/public/editor_frame_plugin/embeddable/embeddable.tsx index 117b2a3a949ea9..a3a55f26ff7c21 100644 --- a/x-pack/legacy/plugins/lens/public/editor_frame_plugin/embeddable/embeddable.tsx +++ b/x-pack/legacy/plugins/lens/public/editor_frame_plugin/embeddable/embeddable.tsx @@ -7,8 +7,7 @@ import _ from 'lodash'; import React from 'react'; import { render, unmountComponentAtNode } from 'react-dom'; -import { Query, TimeRange, esFilters } from 'src/plugins/data/public'; -import { IIndexPattern } from 'src/plugins/data/public'; +import { Query, TimeRange, Filter, IIndexPattern } from 'src/plugins/data/public'; import { Subscription } from 'rxjs'; import { ReactExpressionRendererType } from '../../../../../../../src/plugins/expressions/public'; import { @@ -30,7 +29,7 @@ export interface LensEmbeddableConfiguration { export interface LensEmbeddableInput extends EmbeddableInput { timeRange?: TimeRange; query?: Query; - filters?: esFilters.Filter[]; + filters?: Filter[]; } export interface LensEmbeddableOutput extends EmbeddableOutput { @@ -48,7 +47,7 @@ export class Embeddable extends AbstractEmbeddable; visualization: unknown; query: Query; - filters: esFilters.Filter[]; + filters: Filter[]; }; } diff --git a/x-pack/legacy/plugins/lens/public/types.ts b/x-pack/legacy/plugins/lens/public/types.ts index e2157deb43e499..d3d7039552c50f 100644 --- a/x-pack/legacy/plugins/lens/public/types.ts +++ b/x-pack/legacy/plugins/lens/public/types.ts @@ -12,7 +12,7 @@ import { KibanaDatatable } from '../../../../../src/plugins/expressions/public'; import { DragContextState } from './drag_drop'; import { Document } from './persistence'; import { DateRange } from '../../../../plugins/lens/common'; -import { Query, esFilters } from '../../../../../src/plugins/data/public'; +import { Query, Filter } from '../../../../../src/plugins/data/public'; // eslint-disable-next-line export interface EditorFrameOptions {} @@ -31,7 +31,7 @@ export interface EditorFrameProps { doc?: Document; dateRange: DateRange; query: Query; - filters: esFilters.Filter[]; + filters: Filter[]; savedQuery?: SavedQuery; // Frame loader (app or embeddable) is expected to call this when it loads and updates @@ -177,7 +177,7 @@ export interface DatasourceDataPanelProps { core: Pick; query: Query; dateRange: DateRange; - filters: esFilters.Filter[]; + filters: Filter[]; } // The only way a visualization has to restrict the query building @@ -308,7 +308,7 @@ export interface FramePublicAPI { dateRange: DateRange; query: Query; - filters: esFilters.Filter[]; + filters: Filter[]; // Adds a new layer. This has a side effect of updating the datasource state addNewLayer: () => string; diff --git a/x-pack/legacy/plugins/maps/public/embeddable/map_embeddable.js b/x-pack/legacy/plugins/maps/public/embeddable/map_embeddable.js index c723e996ee6797..5988a128232d60 100644 --- a/x-pack/legacy/plugins/maps/public/embeddable/map_embeddable.js +++ b/x-pack/legacy/plugins/maps/public/embeddable/map_embeddable.js @@ -14,7 +14,7 @@ import { Embeddable, APPLY_FILTER_TRIGGER, } from '../../../../../../src/legacy/core_plugins/embeddable_api/public/np_ready/public'; -import { onlyDisabledFiltersChanged } from '../../../../../../src/plugins/data/public'; +import { esFilters } from '../../../../../../src/plugins/data/public'; import { I18nContext } from 'ui/i18n'; @@ -71,7 +71,7 @@ export class MapEmbeddable extends Embeddable { if ( !_.isEqual(containerState.timeRange, this._prevTimeRange) || !_.isEqual(containerState.query, this._prevQuery) || - !onlyDisabledFiltersChanged(containerState.filters, this._prevFilters) + !esFilters.onlyDisabledFiltersChanged(containerState.filters, this._prevFilters) ) { this._dispatchSetQuery(containerState); } diff --git a/x-pack/legacy/plugins/reporting/export_types/csv_from_savedobject/server/lib/generate_csv_search.ts b/x-pack/legacy/plugins/reporting/export_types/csv_from_savedobject/server/lib/generate_csv_search.ts index 9262d5910c247d..65ded70147c36c 100644 --- a/x-pack/legacy/plugins/reporting/export_types/csv_from_savedobject/server/lib/generate_csv_search.ts +++ b/x-pack/legacy/plugins/reporting/export_types/csv_from_savedobject/server/lib/generate_csv_search.ts @@ -27,7 +27,7 @@ import { getFilters } from './get_filters'; import { esQuery, EsQueryConfig, - esFilters, + Filter, IIndexPattern, Query, // Reporting uses an unconventional directory structure so the linter marks this as a violation, server files should @@ -146,7 +146,7 @@ export async function generateCsvSearch( query: esQuery.buildEsQuery( indexPatternSavedObject as IIndexPattern, (searchSourceQuery as unknown) as Query, - (combinedFilter as unknown) as esFilters.Filter, + (combinedFilter as unknown) as Filter, esQueryConfig ), script_fields: scriptFieldsConfig, diff --git a/x-pack/legacy/plugins/siem/public/components/alerts_viewer/alerts_table.tsx b/x-pack/legacy/plugins/siem/public/components/alerts_viewer/alerts_table.tsx index 65ade52ef7d3cf..05d8f97bb8849b 100644 --- a/x-pack/legacy/plugins/siem/public/components/alerts_viewer/alerts_table.tsx +++ b/x-pack/legacy/plugins/siem/public/components/alerts_viewer/alerts_table.tsx @@ -6,7 +6,7 @@ import React, { useMemo } from 'react'; -import { esFilters } from '../../../../../../../src/plugins/data/common/es_query'; +import { Filter } from '../../../../../../../src/plugins/data/public'; import { StatefulEventsViewer } from '../events_viewer'; import * as i18n from './translations'; import { alertsDefaultModel } from './default_headers'; @@ -18,7 +18,7 @@ export interface OwnProps { } const ALERTS_TABLE_ID = 'timeline-alerts-table'; -const defaultAlertsFilters: esFilters.Filter[] = [ +const defaultAlertsFilters: Filter[] = [ { meta: { alias: null, @@ -54,7 +54,7 @@ const defaultAlertsFilters: esFilters.Filter[] = [ interface Props { endDate: number; startDate: number; - pageFilters?: esFilters.Filter[]; + pageFilters?: Filter[]; } const AlertsTableComponent: React.FC = ({ endDate, startDate, pageFilters = [] }) => { diff --git a/x-pack/legacy/plugins/siem/public/components/alerts_viewer/types.ts b/x-pack/legacy/plugins/siem/public/components/alerts_viewer/types.ts index 004e01f3f66598..e6d6fdf273ec86 100644 --- a/x-pack/legacy/plugins/siem/public/components/alerts_viewer/types.ts +++ b/x-pack/legacy/plugins/siem/public/components/alerts_viewer/types.ts @@ -4,7 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ -import { esFilters } from '../../../../../../../src/plugins/data/common'; +import { Filter } from '../../../../../../../src/plugins/data/public'; import { HostsComponentsQueryProps } from '../../pages/hosts/navigation/types'; import { NetworkComponentQueryProps } from '../../pages/network/navigation/types'; import { MatrixHistogramOption } from '../matrix_histogram/types'; @@ -22,8 +22,8 @@ export interface AlertsComponentsQueryProps | 'type' | 'updateDateRange' > { - pageFilters: esFilters.Filter[]; + pageFilters: Filter[]; stackByOptions?: MatrixHistogramOption[]; - defaultFilters?: esFilters.Filter[]; + defaultFilters?: Filter[]; defaultStackByOption?: MatrixHistogramOption; } diff --git a/x-pack/legacy/plugins/siem/public/components/embeddables/embedded_map.tsx b/x-pack/legacy/plugins/siem/public/components/embeddables/embedded_map.tsx index b1b47f7c6b775b..d0b1d8ffcb5ae0 100644 --- a/x-pack/legacy/plugins/siem/public/components/embeddables/embedded_map.tsx +++ b/x-pack/legacy/plugins/siem/public/components/embeddables/embedded_map.tsx @@ -23,7 +23,7 @@ import { IndexPatternsMissingPrompt } from './index_patterns_missing_prompt'; import { MapToolTip } from './map_tool_tip/map_tool_tip'; import * as i18n from './translations'; import { MapEmbeddable, SetQuery } from './types'; -import { Query, esFilters } from '../../../../../../../src/plugins/data/public'; +import { Query, Filter } from '../../../../../../../src/plugins/data/public'; import { useKibana, useUiSetting$ } from '../../lib/kibana'; import { getSavedObjectFinder } from '../../../../../../../src/plugins/saved_objects/public'; @@ -70,7 +70,7 @@ EmbeddableMap.displayName = 'EmbeddableMap'; export interface EmbeddedMapProps { query: Query; - filters: esFilters.Filter[]; + filters: Filter[]; startDate: number; endDate: number; setQuery: SetQuery; diff --git a/x-pack/legacy/plugins/siem/public/components/embeddables/embedded_map_helpers.tsx b/x-pack/legacy/plugins/siem/public/components/embeddables/embedded_map_helpers.tsx index e370cbbf64a4a1..0c93cd51abd79e 100644 --- a/x-pack/legacy/plugins/siem/public/components/embeddables/embedded_map_helpers.tsx +++ b/x-pack/legacy/plugins/siem/public/components/embeddables/embedded_map_helpers.tsx @@ -20,7 +20,7 @@ import { getLayerList } from './map_config'; // @ts-ignore Missing type defs as maps moves to Typescript import { MAP_SAVED_OBJECT_TYPE } from '../../../../maps/common/constants'; import * as i18n from './translations'; -import { Query, esFilters } from '../../../../../../../src/plugins/data/public'; +import { Query, Filter } from '../../../../../../../src/plugins/data/public'; import { IndexPatternSavedObject } from '../../hooks/types'; /** @@ -38,7 +38,7 @@ import { IndexPatternSavedObject } from '../../hooks/types'; * @throws Error if EmbeddableFactory does not exist */ export const createEmbeddable = async ( - filters: esFilters.Filter[], + filters: Filter[], indexPatterns: IndexPatternMapping[], query: Query, startDate: number, diff --git a/x-pack/legacy/plugins/siem/public/components/embeddables/types.ts b/x-pack/legacy/plugins/siem/public/components/embeddables/types.ts index 6715a83e1b5090..812d327ce4488b 100644 --- a/x-pack/legacy/plugins/siem/public/components/embeddables/types.ts +++ b/x-pack/legacy/plugins/siem/public/components/embeddables/types.ts @@ -12,10 +12,10 @@ import { EmbeddableFactory, } from '../../../../../../../src/legacy/core_plugins/embeddable_api/public/np_ready/public'; import { inputsModel } from '../../store/inputs'; -import { Query, esFilters } from '../../../../../../../src/plugins/data/public'; +import { Query, Filter } from '../../../../../../../src/plugins/data/public'; export interface MapEmbeddableInput extends EmbeddableInput { - filters: esFilters.Filter[]; + filters: Filter[]; query: Query; refreshConfig: { isPaused: boolean; diff --git a/x-pack/legacy/plugins/siem/public/components/events_viewer/events_viewer.tsx b/x-pack/legacy/plugins/siem/public/components/events_viewer/events_viewer.tsx index f0f28f1dc246cb..14473605a7c889 100644 --- a/x-pack/legacy/plugins/siem/public/components/events_viewer/events_viewer.tsx +++ b/x-pack/legacy/plugins/siem/public/components/events_viewer/events_viewer.tsx @@ -30,7 +30,7 @@ import { isCompactFooter } from '../timeline/timeline'; import { ManageTimelineContext, TimelineTypeContextProps } from '../timeline/timeline_context'; import * as i18n from './translations'; import { - esFilters, + Filter, esQuery, IIndexPattern, Query, @@ -54,7 +54,7 @@ interface Props { dataProviders: DataProvider[]; deletedEventIds: Readonly; end: number; - filters: esFilters.Filter[]; + filters: Filter[]; headerFilterGroup?: React.ReactNode; height?: number; id: string; diff --git a/x-pack/legacy/plugins/siem/public/components/events_viewer/index.tsx b/x-pack/legacy/plugins/siem/public/components/events_viewer/index.tsx index d56898cae7d23d..c7ccff5bdfcffb 100644 --- a/x-pack/legacy/plugins/siem/public/components/events_viewer/index.tsx +++ b/x-pack/legacy/plugins/siem/public/components/events_viewer/index.tsx @@ -15,7 +15,7 @@ import { ColumnHeader } from '../timeline/body/column_headers/column_header'; import { DataProvider } from '../timeline/data_providers/data_provider'; import { Sort } from '../timeline/body/sort'; import { OnChangeItemsPerPage } from '../timeline/events'; -import { esFilters, Query } from '../../../../../../../src/plugins/data/public'; +import { Filter, Query } from '../../../../../../../src/plugins/data/public'; import { useUiSetting } from '../../lib/kibana'; import { EventsViewer } from './events_viewer'; @@ -33,7 +33,7 @@ export interface OwnProps { id: string; start: number; headerFilterGroup?: React.ReactNode; - pageFilters?: esFilters.Filter[]; + pageFilters?: Filter[]; timelineTypeContext?: TimelineTypeContextProps; utilityBar?: (refetch: inputsModel.Refetch, totalCount: number) => React.ReactNode; } @@ -41,7 +41,7 @@ export interface OwnProps { interface StateReduxProps { columns: ColumnHeader[]; dataProviders?: DataProvider[]; - filters: esFilters.Filter[]; + filters: Filter[]; isLive: boolean; itemsPerPage?: number; itemsPerPageOptions?: number[]; diff --git a/x-pack/legacy/plugins/siem/public/components/navigation/helpers.ts b/x-pack/legacy/plugins/siem/public/components/navigation/helpers.ts index 7a5cc106dbcd8d..f010cd67c10bc5 100644 --- a/x-pack/legacy/plugins/siem/public/components/navigation/helpers.ts +++ b/x-pack/legacy/plugins/siem/public/components/navigation/helpers.ts @@ -15,7 +15,7 @@ import { replaceStateKeyInQueryString, getQueryStringFromLocation, } from '../url_state/helpers'; -import { Query, esFilters } from '../../../../../../../src/plugins/data/public'; +import { Query, Filter } from '../../../../../../../src/plugins/data/public'; import { TabNavigationProps } from './tab_navigation/types'; import { SearchNavTab } from './types'; @@ -24,7 +24,7 @@ export const getSearch = (tab: SearchNavTab, urlState: TabNavigationProps): stri if (tab && tab.urlKey != null && URL_STATE_KEYS[tab.urlKey] != null) { return URL_STATE_KEYS[tab.urlKey].reduce( (myLocation: Location, urlKey: KeyUrlState) => { - let urlStateToReplace: UrlInputsModel | Query | esFilters.Filter[] | Timeline | string = ''; + let urlStateToReplace: UrlInputsModel | Query | Filter[] | Timeline | string = ''; if (urlKey === CONSTANTS.appQuery && urlState.query != null) { if (urlState.query.query === '') { diff --git a/x-pack/legacy/plugins/siem/public/components/navigation/tab_navigation/types.ts b/x-pack/legacy/plugins/siem/public/components/navigation/tab_navigation/types.ts index 3fac783b550479..bf8e036ad5ce47 100644 --- a/x-pack/legacy/plugins/siem/public/components/navigation/tab_navigation/types.ts +++ b/x-pack/legacy/plugins/siem/public/components/navigation/tab_navigation/types.ts @@ -8,7 +8,7 @@ import { UrlInputsModel } from '../../../store/inputs/model'; import { CONSTANTS } from '../../url_state/constants'; import { Timeline } from '../../url_state/types'; import { HostsTableType } from '../../../store/hosts/model'; -import { esFilters, Query } from '../../../../../../../../src/plugins/data/public'; +import { Filter, Query } from '../../../../../../../../src/plugins/data/public'; import { SiemNavigationProps } from '../types'; @@ -17,7 +17,7 @@ export interface TabNavigationProps extends SiemNavigationProps { pageName: string; tabName: HostsTableType | undefined; [CONSTANTS.appQuery]?: Query; - [CONSTANTS.filters]?: esFilters.Filter[]; + [CONSTANTS.filters]?: Filter[]; [CONSTANTS.savedQuery]?: string; [CONSTANTS.timerange]: UrlInputsModel; [CONSTANTS.timeline]: Timeline; diff --git a/x-pack/legacy/plugins/siem/public/components/navigation/types.ts b/x-pack/legacy/plugins/siem/public/components/navigation/types.ts index 845642256be8a5..cc60c470e21f32 100644 --- a/x-pack/legacy/plugins/siem/public/components/navigation/types.ts +++ b/x-pack/legacy/plugins/siem/public/components/navigation/types.ts @@ -4,7 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ -import { esFilters, Query } from '../../../../../../../src/plugins/data/public'; +import { Filter, Query } from '../../../../../../../src/plugins/data/public'; import { HostsTableType } from '../../store/hosts/model'; import { UrlInputsModel } from '../../store/inputs/model'; import { CONSTANTS, UrlStateType } from '../url_state/constants'; @@ -21,7 +21,7 @@ export interface SiemNavigationComponentProps { tabName: HostsTableType | undefined; urlState: { [CONSTANTS.appQuery]?: Query; - [CONSTANTS.filters]?: esFilters.Filter[]; + [CONSTANTS.filters]?: Filter[]; [CONSTANTS.savedQuery]?: string; [CONSTANTS.timerange]: UrlInputsModel; [CONSTANTS.timeline]: Timeline; diff --git a/x-pack/legacy/plugins/siem/public/components/page/add_filter_to_global_search_bar/helpers.ts b/x-pack/legacy/plugins/siem/public/components/page/add_filter_to_global_search_bar/helpers.ts index 6fb53d67c1a6d8..bafe033368c835 100644 --- a/x-pack/legacy/plugins/siem/public/components/page/add_filter_to_global_search_bar/helpers.ts +++ b/x-pack/legacy/plugins/siem/public/components/page/add_filter_to_global_search_bar/helpers.ts @@ -4,12 +4,9 @@ * you may not use this file except in compliance with the Elastic License. */ -import { esFilters } from '../../../../../../../../src/plugins/data/public'; +import { Filter } from '../../../../../../../../src/plugins/data/public'; -export const createFilter = ( - key: string, - value: string[] | string | null | undefined -): esFilters.Filter => { +export const createFilter = (key: string, value: string[] | string | null | undefined): Filter => { const queryValue = value != null ? (Array.isArray(value) ? value[0] : value) : null; return queryValue != null ? { @@ -45,5 +42,5 @@ export const createFilter = ( type: 'exists', value: 'exists', }, - } as esFilters.Filter); + } as Filter); }; diff --git a/x-pack/legacy/plugins/siem/public/components/page/add_filter_to_global_search_bar/index.tsx b/x-pack/legacy/plugins/siem/public/components/page/add_filter_to_global_search_bar/index.tsx index d6f1e2dd509bef..160cd020796db4 100644 --- a/x-pack/legacy/plugins/siem/public/components/page/add_filter_to_global_search_bar/index.tsx +++ b/x-pack/legacy/plugins/siem/public/components/page/add_filter_to_global_search_bar/index.tsx @@ -8,7 +8,7 @@ import { EuiIcon, EuiPanel, EuiToolTip } from '@elastic/eui'; import React, { useCallback } from 'react'; import styled from 'styled-components'; -import { esFilters } from '../../../../../../../../src/plugins/data/public'; +import { Filter } from '../../../../../../../../src/plugins/data/public'; import { WithHoverActions } from '../../with_hover_actions'; import { useKibana } from '../../../lib/kibana'; @@ -18,7 +18,7 @@ export * from './helpers'; interface OwnProps { children: JSX.Element; - filter: esFilters.Filter; + filter: Filter; onFilterAdded?: () => void; } diff --git a/x-pack/legacy/plugins/siem/public/components/query_bar/index.tsx b/x-pack/legacy/plugins/siem/public/components/query_bar/index.tsx index b2843348cc2e30..03a8143c89517f 100644 --- a/x-pack/legacy/plugins/siem/public/components/query_bar/index.tsx +++ b/x-pack/legacy/plugins/siem/public/components/query_bar/index.tsx @@ -8,7 +8,7 @@ import { isEqual } from 'lodash/fp'; import React, { memo, useState, useEffect, useMemo, useCallback } from 'react'; import { - esFilters, + Filter, IIndexPattern, FilterManager, Query, @@ -30,7 +30,7 @@ export interface QueryBarComponentProps { isRefreshPaused?: boolean; filterQuery: Query; filterManager: FilterManager; - filters: esFilters.Filter[]; + filters: Filter[]; onChangedQuery: (query: Query) => void; onSubmitQuery: (query: Query, timefilter?: SavedQueryTimeFilter) => void; refreshInterval?: number; @@ -110,7 +110,7 @@ export const QueryBar = memo( }, [filterManager, onSubmitQuery, onSavedQuery, savedQuery]); const onFiltersUpdated = useCallback( - (newFilters: esFilters.Filter[]) => { + (newFilters: Filter[]) => { filterManager.setFilters(newFilters); }, [filterManager] diff --git a/x-pack/legacy/plugins/siem/public/components/search_bar/index.tsx b/x-pack/legacy/plugins/siem/public/components/search_bar/index.tsx index 7ea13ca97a9c8e..2c3f677cc585de 100644 --- a/x-pack/legacy/plugins/siem/public/components/search_bar/index.tsx +++ b/x-pack/legacy/plugins/siem/public/components/search_bar/index.tsx @@ -10,7 +10,7 @@ import { connect } from 'react-redux'; import { Dispatch } from 'redux'; import { Subscription } from 'rxjs'; import styled from 'styled-components'; -import { FilterManager, IIndexPattern, TimeRange, Query, esFilters } from 'src/plugins/data/public'; +import { FilterManager, IIndexPattern, TimeRange, Query, Filter } from 'src/plugins/data/public'; import { SavedQuery } from 'src/legacy/core_plugins/data/public'; import { OnTimeChangeProps } from '@elastic/eui'; @@ -54,7 +54,7 @@ interface SiemSearchBarDispatch { id: InputsModelId; savedQuery: SavedQuery | undefined; }) => void; - setSearchBarFilter: ({ id, filters }: { id: InputsModelId; filters: esFilters.Filter[] }) => void; + setSearchBarFilter: ({ id, filters }: { id: InputsModelId; filters: Filter[] }) => void; } interface SiemSearchBarProps { @@ -313,7 +313,7 @@ SearchBarComponent.displayName = 'SiemSearchBar'; interface UpdateReduxSearchBar extends OnTimeChangeProps { id: InputsModelId; - filters?: esFilters.Filter[]; + filters?: Filter[]; filterManager: FilterManager; query?: Query; savedQuery?: SavedQuery; @@ -399,7 +399,7 @@ const mapDispatchToProps = (dispatch: Dispatch) => ({ updateSearch: dispatchUpdateSearch(dispatch), setSavedQuery: ({ id, savedQuery }: { id: InputsModelId; savedQuery: SavedQuery | undefined }) => dispatch(inputsActions.setSavedQuery({ id, savedQuery })), - setSearchBarFilter: ({ id, filters }: { id: InputsModelId; filters: esFilters.Filter[] }) => + setSearchBarFilter: ({ id, filters }: { id: InputsModelId; filters: Filter[] }) => dispatch(inputsActions.setSearchBarFilter({ id, filters })), }); diff --git a/x-pack/legacy/plugins/siem/public/components/timeline/helpers.test.tsx b/x-pack/legacy/plugins/siem/public/components/timeline/helpers.test.tsx index 613afc742aaceb..9fd71f071ec600 100644 --- a/x-pack/legacy/plugins/siem/public/components/timeline/helpers.test.tsx +++ b/x-pack/legacy/plugins/siem/public/components/timeline/helpers.test.tsx @@ -10,7 +10,7 @@ import { mockIndexPattern } from '../../mock'; import { mockDataProviders } from './data_providers/mock/mock_data_providers'; import { buildGlobalQuery, combineQueries } from './helpers'; import { mockBrowserFields } from '../../containers/source/mock'; -import { EsQueryConfig, esFilters } from '../../../../../../../src/plugins/data/public'; +import { EsQueryConfig, Filter, esFilters } from '../../../../../../../src/plugins/data/public'; const cleanUpKqlQuery = (str: string) => str.replace(/\n/g, '').replace(/\s\s+/g, ' '); const startDate = new Date('2018-03-23T18:49:23.132Z').valueOf(); @@ -191,7 +191,7 @@ describe('Combined Queries', () => { value: 'exists', }, exists: { field: 'host.name' }, - } as esFilters.Filter, + } as Filter, ], kqlQuery: { query: '', language: 'kuery' }, kqlMode: 'search', diff --git a/x-pack/legacy/plugins/siem/public/components/timeline/helpers.tsx b/x-pack/legacy/plugins/siem/public/components/timeline/helpers.tsx index d4380738461bc3..611d08e61be227 100644 --- a/x-pack/legacy/plugins/siem/public/components/timeline/helpers.tsx +++ b/x-pack/legacy/plugins/siem/public/components/timeline/helpers.tsx @@ -15,7 +15,7 @@ import { IIndexPattern, Query, EsQueryConfig, - esFilters, + Filter, } from '../../../../../../../src/plugins/data/public'; const convertDateFieldToQuery = (field: string, value: string | number) => @@ -109,7 +109,7 @@ export const combineQueries = ({ dataProviders: DataProvider[]; indexPattern: IIndexPattern; browserFields: BrowserFields; - filters: esFilters.Filter[]; + filters: Filter[]; kqlQuery: Query; kqlMode: string; start: number; diff --git a/x-pack/legacy/plugins/siem/public/components/timeline/index.tsx b/x-pack/legacy/plugins/siem/public/components/timeline/index.tsx index a224e0355b5d35..b6a57ebacb11c3 100644 --- a/x-pack/legacy/plugins/siem/public/components/timeline/index.tsx +++ b/x-pack/legacy/plugins/siem/public/components/timeline/index.tsx @@ -9,7 +9,7 @@ import React, { useEffect, useCallback, useMemo } from 'react'; import { connect } from 'react-redux'; import { ActionCreator } from 'typescript-fsa'; -import { esFilters } from '../../../../../../../src/plugins/data/public'; +import { Filter } from '../../../../../../../src/plugins/data/public'; import { WithSource } from '../../containers/source'; import { inputsModel, inputsSelectors, State, timelineSelectors } from '../../store'; @@ -44,7 +44,7 @@ interface StateReduxProps { dataProviders?: DataProvider[]; eventType: EventType; end: number; - filters: esFilters.Filter[]; + filters: Filter[]; isLive: boolean; itemsPerPage?: number; itemsPerPageOptions?: number[]; diff --git a/x-pack/legacy/plugins/siem/public/components/timeline/query_bar/index.tsx b/x-pack/legacy/plugins/siem/public/components/timeline/query_bar/index.tsx index c3b46c6cd0f729..96b8df6d8ada70 100644 --- a/x-pack/legacy/plugins/siem/public/components/timeline/query_bar/index.tsx +++ b/x-pack/legacy/plugins/siem/public/components/timeline/query_bar/index.tsx @@ -11,6 +11,7 @@ import { Subscription } from 'rxjs'; import { IIndexPattern, Query, + Filter, esFilters, FilterManager, SavedQuery, @@ -32,7 +33,7 @@ export interface QueryBarTimelineComponentProps { applyKqlFilterQuery: (expression: string, kind: KueryFilterQueryKind) => void; browserFields: BrowserFields; dataProviders: DataProvider[]; - filters: esFilters.Filter[]; + filters: Filter[]; filterQuery: KueryFilterQuery; filterQueryDraft: KueryFilterQuery; from: number; @@ -42,7 +43,7 @@ export interface QueryBarTimelineComponentProps { isRefreshPaused: boolean; refreshInterval: number; savedQueryId: string | null; - setFilters: (filters: esFilters.Filter[]) => void; + setFilters: (filters: Filter[]) => void; setKqlFilterQueryDraft: (expression: string, kind: KueryFilterQueryKind) => void; setSavedQueryId: (savedQueryId: string | null) => void; timelineId: string; @@ -88,7 +89,7 @@ export const QueryBarTimeline = memo( query: filterQuery != null ? filterQuery.expression : '', language: filterQuery != null ? filterQuery.kind : 'kuery', }); - const [queryBarFilters, setQueryBarFilters] = useState([]); + const [queryBarFilters, setQueryBarFilters] = useState([]); const [dataProvidersDsl, setDataProvidersDsl] = useState( convertKueryToElasticSearchQuery(buildGlobalQuery(dataProviders, browserFields), indexPattern) ); @@ -108,7 +109,7 @@ export const QueryBarTimeline = memo( if (isSubscribed) { const filterWithoutDropArea = filterManager .getFilters() - .filter((f: esFilters.Filter) => f.meta.controlledBy !== timelineFilterDropArea); + .filter((f: Filter) => f.meta.controlledBy !== timelineFilterDropArea); setFilters(filterWithoutDropArea); setQueryBarFilters(filterWithoutDropArea); } @@ -125,7 +126,7 @@ export const QueryBarTimeline = memo( useEffect(() => { const filterWithoutDropArea = filterManager .getFilters() - .filter((f: esFilters.Filter) => f.meta.controlledBy !== timelineFilterDropArea); + .filter((f: Filter) => f.meta.controlledBy !== timelineFilterDropArea); if (!isEqual(filters, filterWithoutDropArea)) { filterManager.setFilters(filters); } @@ -298,7 +299,7 @@ export const QueryBarTimeline = memo( } ); -export const getDataProviderFilter = (dataProviderDsl: string): esFilters.Filter => { +export const getDataProviderFilter = (dataProviderDsl: string): Filter => { const dslObject = JSON.parse(dataProviderDsl); const key = Object.keys(dslObject); return { diff --git a/x-pack/legacy/plugins/siem/public/components/timeline/search_or_filter/index.tsx b/x-pack/legacy/plugins/siem/public/components/timeline/search_or_filter/index.tsx index d25ebe8e80ad59..3c47823fbbc3b9 100644 --- a/x-pack/legacy/plugins/siem/public/components/timeline/search_or_filter/index.tsx +++ b/x-pack/legacy/plugins/siem/public/components/timeline/search_or_filter/index.tsx @@ -9,7 +9,7 @@ import React, { useCallback } from 'react'; import { connect } from 'react-redux'; import { Dispatch } from 'redux'; -import { esFilters, IIndexPattern } from '../../../../../../../../src/plugins/data/public'; +import { Filter, IIndexPattern } from '../../../../../../../../src/plugins/data/public'; import { BrowserFields } from '../../../containers/source'; import { convertKueryToElasticSearchQuery } from '../../../lib/keury'; import { @@ -35,7 +35,7 @@ interface OwnProps { interface StateReduxProps { dataProviders: DataProvider[]; eventType: EventType; - filters: esFilters.Filter[]; + filters: Filter[]; filterQuery: KueryFilterQuery; filterQueryDraft: KueryFilterQuery; from: number; @@ -66,7 +66,7 @@ interface DispatchProps { filterQueryDraft: KueryFilterQuery; }) => void; setSavedQueryId: ({ id, savedQueryId }: { id: string; savedQueryId: string | null }) => void; - setFilters: ({ id, filters }: { id: string; filters: esFilters.Filter[] }) => void; + setFilters: ({ id, filters }: { id: string; filters: Filter[] }) => void; updateReduxTime: DispatchUpdateReduxTime; } @@ -126,7 +126,7 @@ const StatefulSearchOrFilterComponent = React.memo( ); const setFiltersInTimeline = useCallback( - (newFilters: esFilters.Filter[]) => + (newFilters: Filter[]) => setFilters({ id: timelineId, filters: newFilters, @@ -260,7 +260,7 @@ const mapDispatchToProps = (dispatch: Dispatch) => ({ ), setSavedQueryId: ({ id, savedQueryId }: { id: string; savedQueryId: string | null }) => dispatch(timelineActions.setSavedQueryId({ id, savedQueryId })), - setFilters: ({ id, filters }: { id: string; filters: esFilters.Filter[] }) => + setFilters: ({ id, filters }: { id: string; filters: Filter[] }) => dispatch(timelineActions.setFilters({ id, filters })), updateReduxTime: dispatchUpdateReduxTime(dispatch), }); diff --git a/x-pack/legacy/plugins/siem/public/components/timeline/search_or_filter/search_or_filter.tsx b/x-pack/legacy/plugins/siem/public/components/timeline/search_or_filter/search_or_filter.tsx index 881540485fcfb3..7bdd92e745f216 100644 --- a/x-pack/legacy/plugins/siem/public/components/timeline/search_or_filter/search_or_filter.tsx +++ b/x-pack/legacy/plugins/siem/public/components/timeline/search_or_filter/search_or_filter.tsx @@ -8,7 +8,7 @@ import { EuiFlexGroup, EuiFlexItem, EuiSuperSelect, EuiToolTip } from '@elastic/ import React from 'react'; import styled, { createGlobalStyle } from 'styled-components'; -import { esFilters, IIndexPattern } from '../../../../../../../../src/plugins/data/public'; +import { Filter, IIndexPattern } from '../../../../../../../../src/plugins/data/public'; import { BrowserFields } from '../../../containers/source'; import { KueryFilterQuery, KueryFilterQueryKind } from '../../../store'; import { KqlMode, EventType } from '../../../store/timeline/model'; @@ -54,10 +54,10 @@ interface Props { timelineId: string; updateKqlMode: ({ id, kqlMode }: { id: string; kqlMode: KqlMode }) => void; refreshInterval: number; - setFilters: (filters: esFilters.Filter[]) => void; + setFilters: (filters: Filter[]) => void; setKqlFilterQueryDraft: (expression: string, kind: KueryFilterQueryKind) => void; setSavedQueryId: (savedQueryId: string | null) => void; - filters: esFilters.Filter[]; + filters: Filter[]; savedQueryId: string | null; to: number; toStr: string; diff --git a/x-pack/legacy/plugins/siem/public/components/timeline/timeline.tsx b/x-pack/legacy/plugins/siem/public/components/timeline/timeline.tsx index 11886b45b0bec2..9d70b69124f30a 100644 --- a/x-pack/legacy/plugins/siem/public/components/timeline/timeline.tsx +++ b/x-pack/legacy/plugins/siem/public/components/timeline/timeline.tsx @@ -35,7 +35,7 @@ import { TimelineHeader } from './header'; import { calculateBodyHeight, combineQueries } from './helpers'; import { TimelineRefetch } from './refetch_timeline'; import { ManageTimelineContext } from './timeline_context'; -import { esQuery, esFilters, IIndexPattern } from '../../../../../../../src/plugins/data/public'; +import { esQuery, Filter, IIndexPattern } from '../../../../../../../src/plugins/data/public'; const WrappedByAutoSizer = styled.div` width: 100%; @@ -61,7 +61,7 @@ interface Props { dataProviders: DataProvider[]; end: number; eventType: EventType; - filters: esFilters.Filter[]; + filters: Filter[]; flyoutHeaderHeight: number; flyoutHeight: number; id: string; diff --git a/x-pack/legacy/plugins/siem/public/components/url_state/helpers.ts b/x-pack/legacy/plugins/siem/public/components/url_state/helpers.ts index 03fdbe2219accd..34f1ea156eee79 100644 --- a/x-pack/legacy/plugins/siem/public/components/url_state/helpers.ts +++ b/x-pack/legacy/plugins/siem/public/components/url_state/helpers.ts @@ -7,7 +7,7 @@ import { decode, encode } from 'rison-node'; import * as H from 'history'; import { QueryString } from 'ui/utils/query_string'; -import { Query, esFilters } from 'src/plugins/data/public'; +import { Query, Filter } from 'src/plugins/data/public'; import { isEmpty } from 'lodash/fp'; import { SiemPageName } from '../../pages/home/types'; @@ -149,7 +149,7 @@ export const makeMapStateToProps = () => { let searchAttr: { [CONSTANTS.appQuery]?: Query; - [CONSTANTS.filters]?: esFilters.Filter[]; + [CONSTANTS.filters]?: Filter[]; [CONSTANTS.savedQuery]?: string; } = { [CONSTANTS.appQuery]: getGlobalQuerySelector(state), @@ -232,7 +232,7 @@ export const updateUrlStateString = ({ }); } } else if (urlKey === CONSTANTS.filters) { - const queryState = decodeRisonUrlState(newUrlStateString); + const queryState = decodeRisonUrlState(newUrlStateString); if (isEmpty(queryState)) { return replaceStateInLocation({ history, diff --git a/x-pack/legacy/plugins/siem/public/components/url_state/initialize_redux_by_url.tsx b/x-pack/legacy/plugins/siem/public/components/url_state/initialize_redux_by_url.tsx index 7796fde0fbcb42..772afac6f8ba41 100644 --- a/x-pack/legacy/plugins/siem/public/components/url_state/initialize_redux_by_url.tsx +++ b/x-pack/legacy/plugins/siem/public/components/url_state/initialize_redux_by_url.tsx @@ -6,7 +6,7 @@ import { get, isEmpty } from 'lodash/fp'; import { Dispatch } from 'redux'; -import { Query, esFilters } from 'src/plugins/data/public'; +import { Query, Filter } from 'src/plugins/data/public'; import { inputsActions } from '../../store/actions'; import { InputsModelId, TimeRangeKinds } from '../../store/inputs/constants'; @@ -55,7 +55,7 @@ export const dispatchSetInitialStateFromUrl = ( } if (urlKey === CONSTANTS.filters) { - const filters = decodeRisonUrlState(newUrlStateString); + const filters = decodeRisonUrlState(newUrlStateString); filterManager.setFilters(filters || []); } diff --git a/x-pack/legacy/plugins/siem/public/components/url_state/types.ts b/x-pack/legacy/plugins/siem/public/components/url_state/types.ts index 9ee469f4fd4272..fea1bc016fd49b 100644 --- a/x-pack/legacy/plugins/siem/public/components/url_state/types.ts +++ b/x-pack/legacy/plugins/siem/public/components/url_state/types.ts @@ -10,7 +10,7 @@ import { ActionCreator } from 'typescript-fsa'; import { IIndexPattern, Query, - esFilters, + Filter, FilterManager, SavedQueryService, } from 'src/plugins/data/public'; @@ -79,7 +79,7 @@ export interface Timeline { export interface UrlState { [CONSTANTS.appQuery]?: Query; - [CONSTANTS.filters]?: esFilters.Filter[]; + [CONSTANTS.filters]?: Filter[]; [CONSTANTS.savedQuery]?: string; [CONSTANTS.timerange]: UrlInputsModel; [CONSTANTS.timeline]: Timeline; diff --git a/x-pack/legacy/plugins/siem/public/lib/keury/index.ts b/x-pack/legacy/plugins/siem/public/lib/keury/index.ts index da7d03ebef6210..53f845de48fb31 100644 --- a/x-pack/legacy/plugins/siem/public/lib/keury/index.ts +++ b/x-pack/legacy/plugins/siem/public/lib/keury/index.ts @@ -8,7 +8,7 @@ import { isEmpty, isString, flow } from 'lodash/fp'; import { EsQueryConfig, Query, - esFilters, + Filter, esQuery, esKuery, IIndexPattern, @@ -93,7 +93,7 @@ export const convertToBuildEsQuery = ({ config: EsQueryConfig; indexPattern: IIndexPattern; queries: Query[]; - filters: esFilters.Filter[]; + filters: Filter[]; }) => { try { return JSON.stringify( diff --git a/x-pack/legacy/plugins/siem/public/pages/detection_engine/components/signals/default_config.tsx b/x-pack/legacy/plugins/siem/public/pages/detection_engine/components/signals/default_config.tsx index 6cf515050a39fe..a0d24f53c6b4e4 100644 --- a/x-pack/legacy/plugins/siem/public/pages/detection_engine/components/signals/default_config.tsx +++ b/x-pack/legacy/plugins/siem/public/pages/detection_engine/components/signals/default_config.tsx @@ -10,7 +10,7 @@ import { EuiButtonIcon, EuiToolTip } from '@elastic/eui'; import ApolloClient from 'apollo-client'; import React from 'react'; -import { esFilters } from '../../../../../../../../../src/plugins/data/common/es_query'; +import { Filter } from '../../../../../../../../../src/plugins/data/common/es_query'; import { ColumnHeader } from '../../../../components/timeline/body/column_headers/column_header'; import { TimelineAction, TimelineActionProps } from '../../../../components/timeline/body/actions'; import { defaultColumnHeaderType } from '../../../../components/timeline/body/column_headers/default_headers'; @@ -25,7 +25,7 @@ import { sendSignalToTimelineAction, updateSignalStatusAction } from './actions' import * as i18n from './translations'; import { CreateTimeline, SetEventsDeletedProps, SetEventsLoadingProps } from './types'; -export const signalsOpenFilters: esFilters.Filter[] = [ +export const signalsOpenFilters: Filter[] = [ { meta: { alias: null, @@ -45,7 +45,7 @@ export const signalsOpenFilters: esFilters.Filter[] = [ }, ]; -export const signalsClosedFilters: esFilters.Filter[] = [ +export const signalsClosedFilters: Filter[] = [ { meta: { alias: null, @@ -65,7 +65,7 @@ export const signalsClosedFilters: esFilters.Filter[] = [ }, ]; -export const buildSignalsRuleIdFilter = (ruleId: string): esFilters.Filter[] => [ +export const buildSignalsRuleIdFilter = (ruleId: string): Filter[] => [ { meta: { alias: null, diff --git a/x-pack/legacy/plugins/siem/public/pages/detection_engine/components/signals/helpers.ts b/x-pack/legacy/plugins/siem/public/pages/detection_engine/components/signals/helpers.ts index f9ad2bdea47567..715d98ed336949 100644 --- a/x-pack/legacy/plugins/siem/public/pages/detection_engine/components/signals/helpers.ts +++ b/x-pack/legacy/plugins/siem/public/pages/detection_engine/components/signals/helpers.ts @@ -5,7 +5,7 @@ */ import { get, isEmpty } from 'lodash/fp'; -import { esFilters, esKuery, KueryNode } from '../../../../../../../../../src/plugins/data/public'; +import { Filter, esKuery, KueryNode } from '../../../../../../../../../src/plugins/data/public'; import { DataProvider, DataProvidersAnd, @@ -80,7 +80,7 @@ export const replaceTemplateFieldFromQuery = (query: string, ecsData: Ecs) => { return ''; }; -export const replaceTemplateFieldFromMatchFilters = (filters: esFilters.Filter[], ecsData: Ecs) => +export const replaceTemplateFieldFromMatchFilters = (filters: Filter[], ecsData: Ecs) => filters.map(filter => { if ( filter.meta.type === 'phrase' && diff --git a/x-pack/legacy/plugins/siem/public/pages/detection_engine/components/signals/index.tsx b/x-pack/legacy/plugins/siem/public/pages/detection_engine/components/signals/index.tsx index 4ee25066a9f4ac..8108e24cfa2c39 100644 --- a/x-pack/legacy/plugins/siem/public/pages/detection_engine/components/signals/index.tsx +++ b/x-pack/legacy/plugins/siem/public/pages/detection_engine/components/signals/index.tsx @@ -11,7 +11,7 @@ import { connect } from 'react-redux'; import { Dispatch } from 'redux'; import { ActionCreator } from 'typescript-fsa'; -import { esFilters, esQuery, Query } from '../../../../../../../../../src/plugins/data/public'; +import { Filter, esQuery, Query } from '../../../../../../../../../src/plugins/data/public'; import { useFetchIndexPatterns } from '../../../../containers/detection_engine/rules/fetch_index_patterns'; import { StatefulEventsViewer } from '../../../../components/events_viewer'; import { HeaderSection } from '../../../../components/header_section'; @@ -53,7 +53,7 @@ const SIGNALS_PAGE_TIMELINE_ID = 'signals-page'; interface ReduxProps { globalQuery: Query; - globalFilters: esFilters.Filter[]; + globalFilters: Filter[]; deletedEventIds: string[]; isSelectAllChecked: boolean; loadingEventIds: string[]; @@ -80,7 +80,7 @@ interface DispatchProps { interface OwnProps { canUserCRUD: boolean; - defaultFilters?: esFilters.Filter[]; + defaultFilters?: Filter[]; hasIndexWrite: boolean; from: number; loading: boolean; diff --git a/x-pack/legacy/plugins/siem/public/pages/detection_engine/components/signals_histogram_panel/index.tsx b/x-pack/legacy/plugins/siem/public/pages/detection_engine/components/signals_histogram_panel/index.tsx index 67b74712bc16ce..079293bd452314 100644 --- a/x-pack/legacy/plugins/siem/public/pages/detection_engine/components/signals_histogram_panel/index.tsx +++ b/x-pack/legacy/plugins/siem/public/pages/detection_engine/components/signals_histogram_panel/index.tsx @@ -12,7 +12,7 @@ import { isEmpty } from 'lodash/fp'; import { HeaderSection } from '../../../../components/header_section'; import { SignalsHistogram } from './signals_histogram'; -import { esFilters, esQuery, Query } from '../../../../../../../../../src/plugins/data/public'; +import { Filter, esQuery, Query } from '../../../../../../../../../src/plugins/data/public'; import { RegisterQuery, SignalsHistogramOption, SignalsAggregation, SignalsTotal } from './types'; import { signalsHistogramOptions } from './config'; import { getDetectionEngineUrl } from '../../../../components/link_to'; @@ -49,7 +49,7 @@ interface SignalsHistogramPanelProps { chartHeight?: number; defaultStackByOption?: SignalsHistogramOption; deleteQuery?: ({ id }: { id: string }) => void; - filters?: esFilters.Filter[]; + filters?: Filter[]; from: number; query?: Query; legendPosition?: Position; diff --git a/x-pack/legacy/plugins/siem/public/pages/detection_engine/detection_engine.tsx b/x-pack/legacy/plugins/siem/public/pages/detection_engine/detection_engine.tsx index 229593901691b9..8a374617467736 100644 --- a/x-pack/legacy/plugins/siem/public/pages/detection_engine/detection_engine.tsx +++ b/x-pack/legacy/plugins/siem/public/pages/detection_engine/detection_engine.tsx @@ -12,7 +12,7 @@ import { connect } from 'react-redux'; import { ActionCreator } from 'typescript-fsa'; import { Query } from '../../../../../../../src/plugins/data/common/query'; -import { esFilters } from '../../../../../../../src/plugins/data/common/es_query'; +import { Filter } from '../../../../../../../src/plugins/data/common/es_query'; import { GlobalTime } from '../../containers/global_time'; import { indicesExistOrDataTemporarilyUnavailable, WithSource } from '../../containers/source'; @@ -48,7 +48,7 @@ import * as i18n from './translations'; import { DetectionEngineTab } from './types'; interface ReduxProps { - filters: esFilters.Filter[]; + filters: Filter[]; query: Query; } diff --git a/x-pack/legacy/plugins/siem/public/pages/detection_engine/rules/components/description_step/filter_label.tsx b/x-pack/legacy/plugins/siem/public/pages/detection_engine/rules/components/description_step/filter_label.tsx deleted file mode 100644 index bc2cd39da44be7..00000000000000 --- a/x-pack/legacy/plugins/siem/public/pages/detection_engine/rules/components/description_step/filter_label.tsx +++ /dev/null @@ -1,95 +0,0 @@ -/* - * 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, { memo } from 'react'; -import { EuiTextColor } from '@elastic/eui'; -import { i18n } from '@kbn/i18n'; - -import { esFilters } from '../../../../../../../../../../src/plugins/data/public'; -import { existsOperator, isOneOfOperator } from './filter_operator'; - -interface Props { - filter: esFilters.Filter; - valueLabel?: string; -} - -const FilterLabelComponent: React.FC = ({ filter, valueLabel }) => { - const prefixText = filter.meta.negate - ? ` ${i18n.translate('xpack.siem.detectionEngine.createRule.filterLabel.negatedFilterPrefix', { - defaultMessage: 'NOT ', - })}` - : ''; - const prefix = - filter.meta.negate && !filter.meta.disabled ? ( - {prefixText} - ) : ( - prefixText - ); - - if (filter.meta.alias !== null) { - return ( - <> - {prefix} - {filter.meta.alias} - - ); - } - - switch (filter.meta.type) { - case esFilters.FILTERS.EXISTS: - return ( - <> - {prefix} - {`${filter.meta.key}: ${existsOperator.message}`} - - ); - case esFilters.FILTERS.GEO_BOUNDING_BOX: - return ( - <> - {prefix} - {`${filter.meta.key}: ${valueLabel}`} - - ); - case esFilters.FILTERS.GEO_POLYGON: - return ( - <> - {prefix} - {`${filter.meta.key}: ${valueLabel}`} - - ); - case esFilters.FILTERS.PHRASES: - return ( - <> - {prefix} - {filter.meta.key} {isOneOfOperator.message} {valueLabel} - - ); - case esFilters.FILTERS.QUERY_STRING: - return ( - <> - {prefix} - {valueLabel} - - ); - case esFilters.FILTERS.PHRASE: - case esFilters.FILTERS.RANGE: - return ( - <> - {prefix} - {`${filter.meta.key}: ${valueLabel}`} - - ); - default: - return ( - <> - {prefix} - {JSON.stringify(filter.query)} - - ); - } -}; - -export const FilterLabel = memo(FilterLabelComponent); diff --git a/x-pack/legacy/plugins/siem/public/pages/detection_engine/rules/components/description_step/filter_operator.tsx b/x-pack/legacy/plugins/siem/public/pages/detection_engine/rules/components/description_step/filter_operator.tsx deleted file mode 100644 index 7aa5b0beed2d65..00000000000000 --- a/x-pack/legacy/plugins/siem/public/pages/detection_engine/rules/components/description_step/filter_operator.tsx +++ /dev/null @@ -1,119 +0,0 @@ -/* - * 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 { i18n } from '@kbn/i18n'; - -import { esFilters } from '../../../../../../../../../../src/plugins/data/public'; - -export interface Operator { - message: string; - type: esFilters.FILTERS; - negate: boolean; - fieldTypes?: string[]; -} - -export const isOperator = { - message: i18n.translate( - 'xpack.siem.detectionEngine.createRule.filterLabel.isOperatorOptionLabel', - { - defaultMessage: 'is', - } - ), - type: esFilters.FILTERS.PHRASE, - negate: false, -}; - -export const isNotOperator = { - message: i18n.translate( - 'xpack.siem.detectionEngine.createRule.filterLabel.isNotOperatorOptionLabel', - { - defaultMessage: 'is not', - } - ), - type: esFilters.FILTERS.PHRASE, - negate: true, -}; - -export const isOneOfOperator = { - message: i18n.translate( - 'xpack.siem.detectionEngine.createRule.filterLabel.isOneOfOperatorOptionLabel', - { - defaultMessage: 'is one of', - } - ), - type: esFilters.FILTERS.PHRASES, - negate: false, - fieldTypes: ['string', 'number', 'date', 'ip', 'geo_point', 'geo_shape'], -}; - -export const isNotOneOfOperator = { - message: i18n.translate( - 'xpack.siem.detectionEngine.createRule.filterLabel.isNotOneOfOperatorOptionLabel', - { - defaultMessage: 'is not one of', - } - ), - type: esFilters.FILTERS.PHRASES, - negate: true, - fieldTypes: ['string', 'number', 'date', 'ip', 'geo_point', 'geo_shape'], -}; - -export const isBetweenOperator = { - message: i18n.translate( - 'xpack.siem.detectionEngine.createRule.filterLabel.isBetweenOperatorOptionLabel', - { - defaultMessage: 'is between', - } - ), - type: esFilters.FILTERS.RANGE, - negate: false, - fieldTypes: ['number', 'date', 'ip'], -}; - -export const isNotBetweenOperator = { - message: i18n.translate( - 'xpack.siem.detectionEngine.createRule.filterLabel.isNotBetweenOperatorOptionLabel', - { - defaultMessage: 'is not between', - } - ), - type: esFilters.FILTERS.RANGE, - negate: true, - fieldTypes: ['number', 'date', 'ip'], -}; - -export const existsOperator = { - message: i18n.translate( - 'xpack.siem.detectionEngine.createRule.filterLabel.existsOperatorOptionLabel', - { - defaultMessage: 'exists', - } - ), - type: esFilters.FILTERS.EXISTS, - negate: false, -}; - -export const doesNotExistOperator = { - message: i18n.translate( - 'xpack.siem.detectionEngine.createRule.filterLabel.doesNotExistOperatorOptionLabel', - { - defaultMessage: 'does not exist', - } - ), - type: esFilters.FILTERS.EXISTS, - negate: true, -}; - -export const FILTER_OPERATORS: Operator[] = [ - isOperator, - isNotOperator, - isOneOfOperator, - isNotOneOfOperator, - isBetweenOperator, - isNotBetweenOperator, - existsOperator, - doesNotExistOperator, -]; diff --git a/x-pack/legacy/plugins/siem/public/pages/detection_engine/rules/components/description_step/helpers.tsx b/x-pack/legacy/plugins/siem/public/pages/detection_engine/rules/components/description_step/helpers.tsx index e1cbc6ee92393f..df767fbd4ff8cd 100644 --- a/x-pack/legacy/plugins/siem/public/pages/detection_engine/rules/components/description_step/helpers.tsx +++ b/x-pack/legacy/plugins/siem/public/pages/detection_engine/rules/components/description_step/helpers.tsx @@ -22,7 +22,6 @@ import { esFilters } from '../../../../../../../../../../src/plugins/data/public import { tacticsOptions, techniquesOptions } from '../../../mitre/mitre_tactics_techniques'; -import { FilterLabel } from './filter_label'; import * as i18n from './translations'; import { BuildQueryBarDescription, BuildThreatDescription, ListItems } from './types'; import { SeverityBadge } from '../severity_badge'; @@ -58,7 +57,7 @@ export const buildQueryBarDescription = ({ {indexPatterns != null ? ( - diff --git a/x-pack/legacy/plugins/siem/public/pages/detection_engine/rules/components/description_step/index.test.tsx b/x-pack/legacy/plugins/siem/public/pages/detection_engine/rules/components/description_step/index.test.tsx index fab689f7d821f2..84c662dd001992 100644 --- a/x-pack/legacy/plugins/siem/public/pages/detection_engine/rules/components/description_step/index.test.tsx +++ b/x-pack/legacy/plugins/siem/public/pages/detection_engine/rules/components/description_step/index.test.tsx @@ -6,12 +6,12 @@ import { addFilterStateIfNotThere } from './'; -import { esFilters } from '../../../../../../../../../../src/plugins/data/public'; +import { esFilters, Filter } from '../../../../../../../../../../src/plugins/data/public'; describe('description_step', () => { describe('addFilterStateIfNotThere', () => { test('it does not change the state if it is global', () => { - const filters: esFilters.Filter[] = [ + const filters: Filter[] = [ { $state: { store: esFilters.FilterStateStore.GLOBAL_STATE, @@ -54,7 +54,7 @@ describe('description_step', () => { }, ]; const output = addFilterStateIfNotThere(filters); - const expected: esFilters.Filter[] = [ + const expected: Filter[] = [ { $state: { store: esFilters.FilterStateStore.GLOBAL_STATE, @@ -100,7 +100,7 @@ describe('description_step', () => { }); test('it adds the state if it does not exist as local', () => { - const filters: esFilters.Filter[] = [ + const filters: Filter[] = [ { meta: { alias: null, @@ -137,7 +137,7 @@ describe('description_step', () => { }, ]; const output = addFilterStateIfNotThere(filters); - const expected: esFilters.Filter[] = [ + const expected: Filter[] = [ { $state: { store: esFilters.FilterStateStore.APP_STATE, diff --git a/x-pack/legacy/plugins/siem/public/pages/detection_engine/rules/components/description_step/index.tsx b/x-pack/legacy/plugins/siem/public/pages/detection_engine/rules/components/description_step/index.tsx index 687c9a94a76af2..09f4c13acbf69d 100644 --- a/x-pack/legacy/plugins/siem/public/pages/detection_engine/rules/components/description_step/index.tsx +++ b/x-pack/legacy/plugins/siem/public/pages/detection_engine/rules/components/description_step/index.tsx @@ -10,6 +10,7 @@ import React, { memo, useState } from 'react'; import { IIndexPattern, + Filter, esFilters, FilterManager, Query, @@ -97,7 +98,7 @@ const buildListItems = ( [] ); -export const addFilterStateIfNotThere = (filters: esFilters.Filter[]): esFilters.Filter[] => { +export const addFilterStateIfNotThere = (filters: Filter[]): Filter[] => { return filters.map(filter => { if (filter.$state == null) { return { $state: { store: esFilters.FilterStateStore.APP_STATE }, ...filter }; diff --git a/x-pack/legacy/plugins/siem/public/pages/detection_engine/rules/components/description_step/types.ts b/x-pack/legacy/plugins/siem/public/pages/detection_engine/rules/components/description_step/types.ts index c120d4a4106d02..ab73c52ae9070c 100644 --- a/x-pack/legacy/plugins/siem/public/pages/detection_engine/rules/components/description_step/types.ts +++ b/x-pack/legacy/plugins/siem/public/pages/detection_engine/rules/components/description_step/types.ts @@ -7,7 +7,7 @@ import { ReactNode } from 'react'; import { IIndexPattern, - esFilters, + Filter, FilterManager, Query, } from '../../../../../../../../../../src/plugins/data/public'; @@ -20,7 +20,7 @@ export interface ListItems { export interface BuildQueryBarDescription { field: string; - filters: esFilters.Filter[]; + filters: Filter[]; filterManager: FilterManager; query: Query; savedId: string; diff --git a/x-pack/legacy/plugins/siem/public/pages/detection_engine/rules/components/query_bar/index.tsx b/x-pack/legacy/plugins/siem/public/pages/detection_engine/rules/components/query_bar/index.tsx index 46a7a13ec03f16..7f55d76c6d6b11 100644 --- a/x-pack/legacy/plugins/siem/public/pages/detection_engine/rules/components/query_bar/index.tsx +++ b/x-pack/legacy/plugins/siem/public/pages/detection_engine/rules/components/query_bar/index.tsx @@ -11,7 +11,7 @@ import { Subscription } from 'rxjs'; import styled from 'styled-components'; import { - esFilters, + Filter, IIndexPattern, Query, FilterManager, @@ -33,7 +33,7 @@ import { FieldHook, getFieldValidityAndErrorMessage } from '../shared_imports'; import * as i18n from './translations'; export interface FieldValueQueryBar { - filters: esFilters.Filter[]; + filters: Filter[]; query: Query; saved_id: string | null; } diff --git a/x-pack/legacy/plugins/siem/public/pages/detection_engine/rules/details/index.tsx b/x-pack/legacy/plugins/siem/public/pages/detection_engine/rules/details/index.tsx index bac1494c4fdd81..dc1ebd60525381 100644 --- a/x-pack/legacy/plugins/siem/public/pages/detection_engine/rules/details/index.tsx +++ b/x-pack/legacy/plugins/siem/public/pages/detection_engine/rules/details/index.tsx @@ -60,7 +60,7 @@ import * as i18n from './translations'; import { GlobalTime } from '../../../../containers/global_time'; import { signalsHistogramOptions } from '../../components/signals_histogram_panel/config'; import { InputsModelId } from '../../../../store/inputs/constants'; -import { esFilters } from '../../../../../../../../../src/plugins/data/common/es_query'; +import { Filter } from '../../../../../../../../../src/plugins/data/common/es_query'; import { Query } from '../../../../../../../../../src/plugins/data/common/query'; import { inputsSelectors } from '../../../../store/inputs'; import { State } from '../../../../store'; @@ -72,7 +72,7 @@ import { FailureHistory } from './failure_history'; import { RuleStatus } from '../components/rule_status'; interface ReduxProps { - filters: esFilters.Filter[]; + filters: Filter[]; query: Query; } diff --git a/x-pack/legacy/plugins/siem/public/pages/detection_engine/rules/helpers.tsx b/x-pack/legacy/plugins/siem/public/pages/detection_engine/rules/helpers.tsx index 4e98fc17404c92..cfff71851b2e17 100644 --- a/x-pack/legacy/plugins/siem/public/pages/detection_engine/rules/helpers.tsx +++ b/x-pack/legacy/plugins/siem/public/pages/detection_engine/rules/helpers.tsx @@ -9,7 +9,7 @@ import { get, pick } from 'lodash/fp'; import moment from 'moment'; import { useLocation } from 'react-router-dom'; -import { esFilters } from '../../../../../../../../src/plugins/data/public'; +import { Filter } from '../../../../../../../../src/plugins/data/public'; import { Rule } from '../../../containers/detection_engine/rules'; import { FormData, FormHook, FormSchema } from './components/shared_imports'; import { AboutStepRule, DefineStepRule, IMitreEnterpriseAttack, ScheduleStepRule } from './types'; @@ -34,7 +34,7 @@ export const getStepsData = ({ index: rule.index, queryBar: { query: { query: rule.query as string, language: rule.language }, - filters: rule.filters as esFilters.Filter[], + filters: rule.filters as Filter[], saved_id: rule.saved_id ?? null, }, } diff --git a/x-pack/legacy/plugins/siem/public/pages/detection_engine/rules/types.ts b/x-pack/legacy/plugins/siem/public/pages/detection_engine/rules/types.ts index effaa90d685df4..fc2e3fba244491 100644 --- a/x-pack/legacy/plugins/siem/public/pages/detection_engine/rules/types.ts +++ b/x-pack/legacy/plugins/siem/public/pages/detection_engine/rules/types.ts @@ -4,7 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ -import { esFilters } from '../../../../../../../../src/plugins/data/common'; +import { Filter } from '../../../../../../../../src/plugins/data/common'; import { Rule } from '../../../containers/detection_engine/rules'; import { FieldValueQueryBar } from './components/query_bar'; import { FormData, FormHook } from './components/shared_imports'; @@ -93,7 +93,7 @@ export interface ScheduleStepRule extends StepRuleData { export interface DefineStepRuleJson { index: string[]; - filters: esFilters.Filter[]; + filters: Filter[]; saved_id?: string; query: string; language: string; diff --git a/x-pack/legacy/plugins/siem/public/pages/hosts/details/helpers.test.ts b/x-pack/legacy/plugins/siem/public/pages/hosts/details/helpers.test.ts index 747bf9bc7e56dd..69268d841e12ee 100644 --- a/x-pack/legacy/plugins/siem/public/pages/hosts/details/helpers.test.ts +++ b/x-pack/legacy/plugins/siem/public/pages/hosts/details/helpers.test.ts @@ -5,7 +5,7 @@ */ import { getHostDetailsEventsKqlQueryExpression, getHostDetailsPageFilters } from './helpers'; -import { esFilters } from '../../../../../../../../src/plugins/data/common/es_query'; +import { Filter } from '../../../../../../../../src/plugins/data/common/es_query'; describe('hosts page helpers', () => { describe('getHostDetailsEventsKqlQueryExpression', () => { @@ -39,7 +39,7 @@ describe('hosts page helpers', () => { describe('getHostDetailsPageFilters', () => { it('correctly constructs pageFilters for the given hostName', () => { - const expected: esFilters.Filter[] = [ + const expected: Filter[] = [ { meta: { alias: null, diff --git a/x-pack/legacy/plugins/siem/public/pages/hosts/details/helpers.ts b/x-pack/legacy/plugins/siem/public/pages/hosts/details/helpers.ts index 054c85b4450932..461fde2bba0caa 100644 --- a/x-pack/legacy/plugins/siem/public/pages/hosts/details/helpers.ts +++ b/x-pack/legacy/plugins/siem/public/pages/hosts/details/helpers.ts @@ -5,7 +5,7 @@ */ import { escapeQueryValue } from '../../../lib/keury'; -import { esFilters } from '../../../../../../../../src/plugins/data/common/es_query'; +import { Filter } from '../../../../../../../../src/plugins/data/public'; /** Returns the kqlQueryExpression for the `Events` widget on the `Host Details` page */ export const getHostDetailsEventsKqlQueryExpression = ({ @@ -24,7 +24,7 @@ export const getHostDetailsEventsKqlQueryExpression = ({ } }; -export const getHostDetailsPageFilters = (hostName: string): esFilters.Filter[] => [ +export const getHostDetailsPageFilters = (hostName: string): Filter[] => [ { meta: { alias: null, diff --git a/x-pack/legacy/plugins/siem/public/pages/hosts/details/index.tsx b/x-pack/legacy/plugins/siem/public/pages/hosts/details/index.tsx index fb9145b442d14a..a02e2b4aed22e9 100644 --- a/x-pack/legacy/plugins/siem/public/pages/hosts/details/index.tsx +++ b/x-pack/legacy/plugins/siem/public/pages/hosts/details/index.tsx @@ -34,7 +34,7 @@ import { inputsSelectors, State } from '../../../store'; import { setHostDetailsTablesActivePageToZero as dispatchHostDetailsTablesActivePageToZero } from '../../../store/hosts/actions'; import { setAbsoluteRangeDatePicker as dispatchAbsoluteRangeDatePicker } from '../../../store/inputs/actions'; import { SpyRoute } from '../../../utils/route/spy_routes'; -import { esQuery, esFilters } from '../../../../../../../../src/plugins/data/public'; +import { esQuery, Filter } from '../../../../../../../../src/plugins/data/public'; import { HostsEmptyPage } from '../hosts_empty_page'; import { HostDetailsTabs } from './details_tabs'; @@ -65,10 +65,9 @@ const HostDetailsComponent = React.memo( }, [setHostDetailsTablesActivePageToZero, detailName]); const capabilities = useContext(MlCapabilitiesContext); const kibana = useKibana(); - const hostDetailsPageFilters: esFilters.Filter[] = useMemo( - () => getHostDetailsPageFilters(detailName), - [detailName] - ); + const hostDetailsPageFilters: Filter[] = useMemo(() => getHostDetailsPageFilters(detailName), [ + detailName, + ]); const getFilters = () => [...hostDetailsPageFilters, ...filters]; const narrowDateRange = useCallback( (min: number, max: number) => { diff --git a/x-pack/legacy/plugins/siem/public/pages/hosts/details/types.ts b/x-pack/legacy/plugins/siem/public/pages/hosts/details/types.ts index 81bc7999bcb9ff..03c8646bae1478 100644 --- a/x-pack/legacy/plugins/siem/public/pages/hosts/details/types.ts +++ b/x-pack/legacy/plugins/siem/public/pages/hosts/details/types.ts @@ -5,7 +5,7 @@ */ import { ActionCreator } from 'typescript-fsa'; -import { Query, IIndexPattern, esFilters } from 'src/plugins/data/public'; +import { Query, IIndexPattern, Filter } from 'src/plugins/data/public'; import { InputsModelId } from '../../../store/inputs/constants'; import { HostComponentProps } from '../../../components/link_to/redirect_to_hosts'; import { HostsTableType } from '../../../store/hosts/model'; @@ -16,7 +16,7 @@ import { hostsModel } from '../../../store'; interface HostDetailsComponentReduxProps { query: Query; - filters: esFilters.Filter[]; + filters: Filter[]; } interface HostBodyComponentDispatchProps { @@ -58,7 +58,7 @@ export type HostDetailsNavTab = Record; export type HostDetailsTabsProps = HostBodyComponentDispatchProps & HostsQueryProps & { - pageFilters?: esFilters.Filter[]; + pageFilters?: Filter[]; filterQuery: string; indexPattern: IIndexPattern; type: hostsModel.HostsType; diff --git a/x-pack/legacy/plugins/siem/public/pages/hosts/hosts.test.tsx b/x-pack/legacy/plugins/siem/public/pages/hosts/hosts.test.tsx index 065d91b3fc2faa..71dc3aac756ba1 100644 --- a/x-pack/legacy/plugins/siem/public/pages/hosts/hosts.test.tsx +++ b/x-pack/legacy/plugins/siem/public/pages/hosts/hosts.test.tsx @@ -11,7 +11,7 @@ import { Router } from 'react-router-dom'; import { MockedProvider } from 'react-apollo/test-utils'; import { ActionCreator } from 'typescript-fsa'; -import { esFilters } from '../../../../../../../src/plugins/data/common/es_query'; +import { Filter } from '../../../../../../../src/plugins/data/common/es_query'; import '../../mock/match_media'; import { mocksSource } from '../../containers/source/mock'; import { wait } from '../../lib/helpers'; @@ -142,7 +142,7 @@ describe('Hosts - rendering', () => { }); test('it should add the new filters after init', async () => { - const newFilters: esFilters.Filter[] = [ + const newFilters: Filter[] = [ { query: { bool: { diff --git a/x-pack/legacy/plugins/siem/public/pages/hosts/navigation/alerts_query_tab_body.tsx b/x-pack/legacy/plugins/siem/public/pages/hosts/navigation/alerts_query_tab_body.tsx index e9809766dc01b5..ebcb07131bb247 100644 --- a/x-pack/legacy/plugins/siem/public/pages/hosts/navigation/alerts_query_tab_body.tsx +++ b/x-pack/legacy/plugins/siem/public/pages/hosts/navigation/alerts_query_tab_body.tsx @@ -6,11 +6,11 @@ import React, { useMemo } from 'react'; -import { esFilters } from '../../../../../../../../src/plugins/data/common/es_query'; +import { Filter } from '../../../../../../../../src/plugins/data/public'; import { AlertsView } from '../../../components/alerts_viewer'; import { AlertsComponentQueryProps } from './types'; -export const filterHostData: esFilters.Filter[] = [ +export const filterHostData: Filter[] = [ { query: { bool: { diff --git a/x-pack/legacy/plugins/siem/public/pages/hosts/navigation/types.ts b/x-pack/legacy/plugins/siem/public/pages/hosts/navigation/types.ts index 03bbe7bbc7e175..cb5fc62b965828 100644 --- a/x-pack/legacy/plugins/siem/public/pages/hosts/navigation/types.ts +++ b/x-pack/legacy/plugins/siem/public/pages/hosts/navigation/types.ts @@ -4,7 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ -import { IIndexPattern } from '../../../../../../../../src/plugins/data/common/'; +import { Filter, IIndexPattern } from '../../../../../../../../src/plugins/data/public'; import { NarrowDateRange } from '../../../components/ml/types'; import { ESTermQuery } from '../../../../common/typed_json'; import { InspectQuery, Refetch } from '../../../store/inputs/model'; @@ -12,7 +12,6 @@ import { InspectQuery, Refetch } from '../../../store/inputs/model'; import { HostsTableType, HostsType } from '../../../store/hosts/model'; import { NavTab } from '../../../components/navigation/types'; import { UpdateDateRange } from '../../../components/charts/common'; -import { esFilters } from '../../../../../../../../src/plugins/data/common/es_query'; export type KeyHostsNavTabWithoutMlPermission = HostsTableType.hosts & HostsTableType.authentications & @@ -47,7 +46,7 @@ export interface QueryTabBodyProps { export type HostsComponentsQueryProps = QueryTabBodyProps & { deleteQuery?: ({ id }: { id: string }) => void; indexPattern: IIndexPattern; - pageFilters?: esFilters.Filter[]; + pageFilters?: Filter[]; skip: boolean; setQuery: SetQuery; updateDateRange?: UpdateDateRange; @@ -56,7 +55,7 @@ export type HostsComponentsQueryProps = QueryTabBodyProps & { export type AlertsComponentQueryProps = HostsComponentsQueryProps & { filterQuery: string; - pageFilters?: esFilters.Filter[]; + pageFilters?: Filter[]; }; export type CommonChildren = (args: HostsComponentsQueryProps) => JSX.Element; diff --git a/x-pack/legacy/plugins/siem/public/pages/hosts/types.ts b/x-pack/legacy/plugins/siem/public/pages/hosts/types.ts index 2121a3840926a2..5900937d2108e5 100644 --- a/x-pack/legacy/plugins/siem/public/pages/hosts/types.ts +++ b/x-pack/legacy/plugins/siem/public/pages/hosts/types.ts @@ -5,7 +5,7 @@ */ import { ActionCreator } from 'typescript-fsa'; -import { IIndexPattern, Query, esFilters } from 'src/plugins/data/public'; +import { IIndexPattern, Query, Filter } from 'src/plugins/data/public'; import { SiemPageName } from '../home/types'; import { hostsModel } from '../../store'; @@ -17,7 +17,7 @@ export const hostDetailsPagePath = `${hostsPagePath}/:detailName`; export interface HostsComponentReduxProps { query: Query; - filters: esFilters.Filter[]; + filters: Filter[]; } export interface HostsComponentDispatchProps { diff --git a/x-pack/legacy/plugins/siem/public/pages/network/ip_details/types.ts b/x-pack/legacy/plugins/siem/public/pages/network/ip_details/types.ts index d29f58e90360eb..b53d58e6664af1 100644 --- a/x-pack/legacy/plugins/siem/public/pages/network/ip_details/types.ts +++ b/x-pack/legacy/plugins/siem/public/pages/network/ip_details/types.ts @@ -5,7 +5,7 @@ */ import { ActionCreator } from 'typescript-fsa'; -import { IIndexPattern, Query, esFilters } from 'src/plugins/data/public'; +import { IIndexPattern, Query, Filter } from 'src/plugins/data/public'; import { NetworkType } from '../../../store/network/model'; import { ESTermQuery } from '../../../../common/typed_json'; @@ -23,7 +23,7 @@ type SetAbsoluteRangeDatePicker = ActionCreator<{ }>; interface IPDetailsComponentReduxProps { - filters: esFilters.Filter[]; + filters: Filter[]; flowTarget: FlowTarget; query: Query; } diff --git a/x-pack/legacy/plugins/siem/public/pages/network/navigation/alerts_query_tab_body.tsx b/x-pack/legacy/plugins/siem/public/pages/network/navigation/alerts_query_tab_body.tsx index 88fadab1d3f0e0..a5d0207f526d10 100644 --- a/x-pack/legacy/plugins/siem/public/pages/network/navigation/alerts_query_tab_body.tsx +++ b/x-pack/legacy/plugins/siem/public/pages/network/navigation/alerts_query_tab_body.tsx @@ -6,11 +6,11 @@ import React from 'react'; -import { esFilters } from '../../../../../../../../src/plugins/data/common/es_query'; +import { Filter } from '../../../../../../../../src/plugins/data/common/es_query'; import { AlertsView } from '../../../components/alerts_viewer'; import { NetworkComponentQueryProps } from './types'; -export const filterNetworkData: esFilters.Filter[] = [ +export const filterNetworkData: Filter[] = [ { query: { bool: { diff --git a/x-pack/legacy/plugins/siem/public/pages/network/network.test.tsx b/x-pack/legacy/plugins/siem/public/pages/network/network.test.tsx index 3a22e800d893fc..797fef15865184 100644 --- a/x-pack/legacy/plugins/siem/public/pages/network/network.test.tsx +++ b/x-pack/legacy/plugins/siem/public/pages/network/network.test.tsx @@ -11,7 +11,7 @@ import { Router } from 'react-router-dom'; import { MockedProvider } from 'react-apollo/test-utils'; import '../../mock/match_media'; -import { esFilters } from '../../../../../../../src/plugins/data/common/es_query'; +import { Filter } from '../../../../../../../src/plugins/data/common/es_query'; import { mocksSource } from '../../containers/source/mock'; import { TestProviders, mockGlobalState, apolloClientObservable } from '../../mock'; import { State, createStore } from '../../store'; @@ -116,7 +116,7 @@ describe('rendering - rendering', () => { }); test('it should add the new filters after init', async () => { - const newFilters: esFilters.Filter[] = [ + const newFilters: Filter[] = [ { query: { bool: { diff --git a/x-pack/legacy/plugins/siem/public/pages/network/types.ts b/x-pack/legacy/plugins/siem/public/pages/network/types.ts index 1941d8f9bfb7bb..8a9914133c9af9 100644 --- a/x-pack/legacy/plugins/siem/public/pages/network/types.ts +++ b/x-pack/legacy/plugins/siem/public/pages/network/types.ts @@ -8,7 +8,7 @@ import { RouteComponentProps } from 'react-router-dom'; import { ActionCreator } from 'typescript-fsa'; import { GlobalTimeArgs } from '../../containers/global_time'; import { InputsModelId } from '../../store/inputs/constants'; -import { Query, esFilters } from '../../../../../../../src/plugins/data/public'; +import { Query, Filter } from '../../../../../../../src/plugins/data/public'; export type SetAbsoluteRangeDatePicker = ActionCreator<{ id: InputsModelId; @@ -17,7 +17,7 @@ export type SetAbsoluteRangeDatePicker = ActionCreator<{ }>; interface NetworkComponentReduxProps { - filters: esFilters.Filter[]; + filters: Filter[]; query: Query; setAbsoluteRangeDatePicker: SetAbsoluteRangeDatePicker; } diff --git a/x-pack/legacy/plugins/siem/public/pages/overview/alerts_by_category/index.tsx b/x-pack/legacy/plugins/siem/public/pages/overview/alerts_by_category/index.tsx index 07b01761724019..98ae3f30085a9b 100644 --- a/x-pack/legacy/plugins/siem/public/pages/overview/alerts_by_category/index.tsx +++ b/x-pack/legacy/plugins/siem/public/pages/overview/alerts_by_category/index.tsx @@ -22,7 +22,7 @@ import { useKibana, useUiSetting$ } from '../../../lib/kibana'; import { convertToBuildEsQuery } from '../../../lib/keury'; import { SetAbsoluteRangeDatePicker } from '../../network/types'; import { - esFilters, + Filter, esQuery, IIndexPattern, Query, @@ -34,13 +34,13 @@ import * as i18n from '../translations'; const ID = 'alertsByCategoryOverview'; -const NO_FILTERS: esFilters.Filter[] = []; +const NO_FILTERS: Filter[] = []; const DEFAULT_QUERY: Query = { query: '', language: 'kuery' }; const DEFAULT_STACK_BY = 'event.module'; interface Props { deleteQuery?: ({ id }: { id: string }) => void; - filters?: esFilters.Filter[]; + filters?: Filter[]; from: number; hideHeaderChildren?: boolean; indexPattern: IIndexPattern; diff --git a/x-pack/legacy/plugins/siem/public/pages/overview/event_counts/index.tsx b/x-pack/legacy/plugins/siem/public/pages/overview/event_counts/index.tsx index b13f723772c95e..0fc37935b6062a 100644 --- a/x-pack/legacy/plugins/siem/public/pages/overview/event_counts/index.tsx +++ b/x-pack/legacy/plugins/siem/public/pages/overview/event_counts/index.tsx @@ -15,7 +15,7 @@ import { useKibana } from '../../../lib/kibana'; import { convertToBuildEsQuery } from '../../../lib/keury'; import { filterNetworkData } from '../../network/navigation/alerts_query_tab_body'; import { - esFilters, + Filter, esQuery, IIndexPattern, Query, @@ -26,11 +26,11 @@ const HorizontalSpacer = styled(EuiFlexItem)` width: 24px; `; -const NO_FILTERS: esFilters.Filter[] = []; +const NO_FILTERS: Filter[] = []; const DEFAULT_QUERY: Query = { query: '', language: 'kuery' }; interface Props { - filters?: esFilters.Filter[]; + filters?: Filter[]; from: number; indexPattern: IIndexPattern; query?: Query; diff --git a/x-pack/legacy/plugins/siem/public/pages/overview/events_by_dataset/index.tsx b/x-pack/legacy/plugins/siem/public/pages/overview/events_by_dataset/index.tsx index 3269c1e585f5a8..5b6ad69bcb15d0 100644 --- a/x-pack/legacy/plugins/siem/public/pages/overview/events_by_dataset/index.tsx +++ b/x-pack/legacy/plugins/siem/public/pages/overview/events_by_dataset/index.tsx @@ -21,7 +21,7 @@ import { MatrixHistogramGqlQuery } from '../../../containers/matrix_histogram/in import { eventsStackByOptions } from '../../hosts/navigation'; import { useKibana, useUiSetting$ } from '../../../lib/kibana'; import { - esFilters, + Filter, esQuery, IIndexPattern, Query, @@ -32,7 +32,7 @@ import { DEFAULT_NUMBER_FORMAT } from '../../../../common/constants'; import * as i18n from '../translations'; -const NO_FILTERS: esFilters.Filter[] = []; +const NO_FILTERS: Filter[] = []; const DEFAULT_QUERY: Query = { query: '', language: 'kuery' }; const DEFAULT_STACK_BY = 'event.dataset'; @@ -40,7 +40,7 @@ const ID = 'eventsByDatasetOverview'; interface Props { deleteQuery?: ({ id }: { id: string }) => void; - filters?: esFilters.Filter[]; + filters?: Filter[]; from: number; indexPattern: IIndexPattern; query?: Query; diff --git a/x-pack/legacy/plugins/siem/public/pages/overview/overview.tsx b/x-pack/legacy/plugins/siem/public/pages/overview/overview.tsx index 2009878a51c611..6f8446a6b1609f 100644 --- a/x-pack/legacy/plugins/siem/public/pages/overview/overview.tsx +++ b/x-pack/legacy/plugins/siem/public/pages/overview/overview.tsx @@ -9,7 +9,7 @@ import React from 'react'; import { connect } from 'react-redux'; import { StickyContainer } from 'react-sticky'; import { compose } from 'redux'; -import { Query, esFilters } from 'src/plugins/data/public'; +import { Query, Filter } from 'src/plugins/data/public'; import styled from 'styled-components'; import { AlertsByCategory } from './alerts_by_category'; @@ -29,7 +29,7 @@ import { setAbsoluteRangeDatePicker as dispatchSetAbsoluteRangeDatePicker } from import { SpyRoute } from '../../utils/route/spy_routes'; const DEFAULT_QUERY: Query = { query: '', language: 'kuery' }; -const NO_FILTERS: esFilters.Filter[] = []; +const NO_FILTERS: Filter[] = []; const SidebarFlexItem = styled(EuiFlexItem)` margin-right: 24px; @@ -37,7 +37,7 @@ const SidebarFlexItem = styled(EuiFlexItem)` interface OverviewComponentReduxProps { query?: Query; - filters?: esFilters.Filter[]; + filters?: Filter[]; setAbsoluteRangeDatePicker?: SetAbsoluteRangeDatePicker; } diff --git a/x-pack/legacy/plugins/siem/public/pages/overview/signals_by_category/index.tsx b/x-pack/legacy/plugins/siem/public/pages/overview/signals_by_category/index.tsx index 7b25c6838a787e..5f78c4c10eb372 100644 --- a/x-pack/legacy/plugins/siem/public/pages/overview/signals_by_category/index.tsx +++ b/x-pack/legacy/plugins/siem/public/pages/overview/signals_by_category/index.tsx @@ -10,17 +10,17 @@ import { SignalsHistogramPanel } from '../../detection_engine/components/signals import { signalsHistogramOptions } from '../../detection_engine/components/signals_histogram_panel/config'; import { useSignalIndex } from '../../../containers/detection_engine/signals/use_signal_index'; import { SetAbsoluteRangeDatePicker } from '../../network/types'; -import { esFilters, IIndexPattern, Query } from '../../../../../../../../src/plugins/data/public'; +import { Filter, IIndexPattern, Query } from '../../../../../../../../src/plugins/data/public'; import { inputsModel } from '../../../store'; import * as i18n from '../translations'; const DEFAULT_QUERY: Query = { query: '', language: 'kuery' }; const DEFAULT_STACK_BY = 'signal.rule.threat.tactic.name'; -const NO_FILTERS: esFilters.Filter[] = []; +const NO_FILTERS: Filter[] = []; interface Props { deleteQuery?: ({ id }: { id: string }) => void; - filters?: esFilters.Filter[]; + filters?: Filter[]; from: number; indexPattern: IIndexPattern; query?: Query; diff --git a/x-pack/legacy/plugins/siem/public/store/inputs/actions.ts b/x-pack/legacy/plugins/siem/public/store/inputs/actions.ts index aefcd2ea8c696c..8255ba41d2bb17 100644 --- a/x-pack/legacy/plugins/siem/public/store/inputs/actions.ts +++ b/x-pack/legacy/plugins/siem/public/store/inputs/actions.ts @@ -9,7 +9,7 @@ import actionCreatorFactory from 'typescript-fsa'; import { SavedQuery } from 'src/legacy/core_plugins/data/public'; import { InspectQuery, Refetch } from './model'; import { InputsModelId } from './constants'; -import { esFilters } from '../../../../../../../src/plugins/data/public'; +import { Filter } from '../../../../../../../src/plugins/data/public'; const actionCreator = actionCreatorFactory('x-pack/siem/local/inputs'); @@ -83,5 +83,5 @@ export const setSavedQuery = actionCreator<{ export const setSearchBarFilter = actionCreator<{ id: InputsModelId; - filters: esFilters.Filter[]; + filters: Filter[]; }>('SET_SEARCH_BAR_FILTER'); diff --git a/x-pack/legacy/plugins/siem/public/store/inputs/model.ts b/x-pack/legacy/plugins/siem/public/store/inputs/model.ts index 54409b1f744548..dab6ef3113df00 100644 --- a/x-pack/legacy/plugins/siem/public/store/inputs/model.ts +++ b/x-pack/legacy/plugins/siem/public/store/inputs/model.ts @@ -9,7 +9,7 @@ import { SavedQuery } from 'src/legacy/core_plugins/data/public'; import { Omit } from '../../../common/utility_types'; import { InputsModelId } from './constants'; import { CONSTANTS } from '../../components/url_state/constants'; -import { Query, esFilters } from '../../../../../../../src/plugins/data/public'; +import { Query, Filter } from '../../../../../../../src/plugins/data/public'; export interface AbsoluteTimeRange { kind: 'absolute'; @@ -83,7 +83,7 @@ export interface InputsRange { queries: GlobalQuery[]; linkTo: InputsModelId[]; query: Query; - filters: esFilters.Filter[]; + filters: Filter[]; savedQuery?: SavedQuery; } diff --git a/x-pack/legacy/plugins/siem/public/store/timeline/actions.ts b/x-pack/legacy/plugins/siem/public/store/timeline/actions.ts index 7af17a40da312e..f05512787f0f77 100644 --- a/x-pack/legacy/plugins/siem/public/store/timeline/actions.ts +++ b/x-pack/legacy/plugins/siem/public/store/timeline/actions.ts @@ -6,7 +6,7 @@ import actionCreatorFactory from 'typescript-fsa'; -import { esFilters } from '../../../../../../../src/plugins/data/public'; +import { Filter } from '../../../../../../../src/plugins/data/public'; import { ColumnHeader } from '../../components/timeline/body/column_headers/column_header'; import { Sort } from '../../components/timeline/body/sort'; import { @@ -55,7 +55,7 @@ export const createTimeline = actionCreator<{ start: number; end: number; }; - filters?: esFilters.Filter[]; + filters?: Filter[]; columns: ColumnHeader[]; itemsPerPage?: number; kqlQuery?: { @@ -209,7 +209,7 @@ export const setSavedQueryId = actionCreator<{ export const setFilters = actionCreator<{ id: string; - filters: esFilters.Filter[]; + filters: Filter[]; }>('SET_TIMELINE_FILTERS'); export const setSelected = actionCreator<{ diff --git a/x-pack/legacy/plugins/siem/public/store/timeline/epic.test.ts b/x-pack/legacy/plugins/siem/public/store/timeline/epic.test.ts index 1633f7320a18ba..13d30825a169cb 100644 --- a/x-pack/legacy/plugins/siem/public/store/timeline/epic.test.ts +++ b/x-pack/legacy/plugins/siem/public/store/timeline/epic.test.ts @@ -8,7 +8,7 @@ import { TimelineModel } from './model'; import { Direction } from '../../graphql/types'; import { convertTimelineAsInput } from './epic'; -import { esFilters } from '../../../../../../../src/plugins/data/public'; +import { Filter, esFilters } from '../../../../../../../src/plugins/data/public'; describe('Epic Timeline', () => { describe('#convertTimelineAsInput ', () => { @@ -115,7 +115,7 @@ describe('Epic Timeline', () => { value: 'exists', }, exists: { field: '@timestamp' }, - } as esFilters.Filter, + } as Filter, ], isFavorite: false, isLive: false, diff --git a/x-pack/legacy/plugins/siem/public/store/timeline/epic.ts b/x-pack/legacy/plugins/siem/public/store/timeline/epic.ts index 7d8bb7591c04fd..c243221a1b8c7c 100644 --- a/x-pack/legacy/plugins/siem/public/store/timeline/epic.ts +++ b/x-pack/legacy/plugins/siem/public/store/timeline/epic.ts @@ -28,7 +28,7 @@ import { takeUntil, } from 'rxjs/operators'; -import { esFilters } from '../../../../../../../src/plugins/data/public'; +import { esFilters, Filter, MatchAllFilter } from '../../../../../../../src/plugins/data/public'; import { ColumnHeader } from '../../components/timeline/body/column_headers/column_header'; import { persistTimelineMutation } from '../../containers/timeline/persist.gql_query'; import { @@ -281,7 +281,7 @@ export const convertTimelineAsInput = ( return set( key, filters != null - ? filters.map((myFilter: esFilters.Filter) => { + ? filters.map((myFilter: Filter) => { const basicFilter = omit(['$state'], myFilter); return { ...basicFilter, @@ -306,9 +306,7 @@ export const convertTimelineAsInput = ( }, ...(esFilters.isMatchAllFilter(basicFilter) ? { - match_all: convertToString( - (basicFilter as esFilters.MatchAllFilter).match_all - ), + match_all: convertToString((basicFilter as MatchAllFilter).match_all), } : { match_all: null }), ...(esFilters.isMissingFilter(basicFilter) && basicFilter.missing != null diff --git a/x-pack/legacy/plugins/siem/public/store/timeline/helpers.ts b/x-pack/legacy/plugins/siem/public/store/timeline/helpers.ts index d3dacb68d4cde6..4155e25a676884 100644 --- a/x-pack/legacy/plugins/siem/public/store/timeline/helpers.ts +++ b/x-pack/legacy/plugins/siem/public/store/timeline/helpers.ts @@ -6,7 +6,7 @@ import { getOr, omit, uniq, isEmpty, isEqualWith, union } from 'lodash/fp'; -import { esFilters } from '../../../../../../../src/plugins/data/public'; +import { Filter } from '../../../../../../../src/plugins/data/public'; import { ColumnHeader } from '../../components/timeline/body/column_headers/column_header'; import { getColumnWidthFromType } from '../../components/timeline/body/helpers'; import { Sort } from '../../components/timeline/body/sort'; @@ -135,7 +135,7 @@ interface AddNewTimelineParams { start: number; end: number; }; - filters?: esFilters.Filter[]; + filters?: Filter[]; id: string; itemsPerPage?: number; kqlQuery?: { @@ -1296,7 +1296,7 @@ export const updateSavedQuery = ({ interface UpdateFiltersParams { id: string; - filters: esFilters.Filter[]; + filters: Filter[]; timelineById: TimelineById; } diff --git a/x-pack/legacy/plugins/siem/public/store/timeline/model.ts b/x-pack/legacy/plugins/siem/public/store/timeline/model.ts index d9f1bab1e0033c..1c54031dfe3fd1 100644 --- a/x-pack/legacy/plugins/siem/public/store/timeline/model.ts +++ b/x-pack/legacy/plugins/siem/public/store/timeline/model.ts @@ -4,7 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ -import { esFilters } from '../../../../../../../src/plugins/data/public'; +import { Filter } from '../../../../../../../src/plugins/data/public'; import { ColumnHeader } from '../../components/timeline/body/column_headers/column_header'; import { DataProvider } from '../../components/timeline/data_providers/data_provider'; import { DEFAULT_TIMELINE_WIDTH } from '../../components/timeline/body/helpers'; @@ -29,7 +29,7 @@ export interface TimelineModel { eventType?: EventType; /** A map of events in this timeline to the chronologically ordered notes (in this timeline) associated with the event */ eventIdToNoteIds: Record; - filters?: esFilters.Filter[]; + filters?: Filter[]; /** The chronological history of actions related to this timeline */ historyIds: string[]; /** The chronological history of actions related to this timeline */ diff --git a/x-pack/legacy/plugins/siem/server/lib/detection_engine/signals/get_filter.ts b/x-pack/legacy/plugins/siem/server/lib/detection_engine/signals/get_filter.ts index 8a67d0cb5c5b62..cb6b8fc75f610d 100644 --- a/x-pack/legacy/plugins/siem/server/lib/detection_engine/signals/get_filter.ts +++ b/x-pack/legacy/plugins/siem/server/lib/detection_engine/signals/get_filter.ts @@ -7,6 +7,7 @@ import { AlertServices } from '../../../../../alerting/server/types'; import { assertUnreachable } from '../../../utils/build_query'; import { + Filter, Query, esQuery, esFilters, @@ -33,7 +34,7 @@ export const getQueryFilter = ( dateFormatTZ: 'Zulu', }; - const enabledFilters = ((filters as unknown) as esFilters.Filter[]).filter( + const enabledFilters = ((filters as unknown) as Filter[]).filter( f => f && !esFilters.isFilterDisabled(f) ); diff --git a/x-pack/legacy/plugins/siem/server/lib/detection_engine/types.ts b/x-pack/legacy/plugins/siem/server/lib/detection_engine/types.ts index e1069db98c8fc5..e15053db75777d 100644 --- a/x-pack/legacy/plugins/siem/server/lib/detection_engine/types.ts +++ b/x-pack/legacy/plugins/siem/server/lib/detection_engine/types.ts @@ -4,10 +4,10 @@ * you may not use this file except in compliance with the Elastic License. */ -import { esFilters } from '../../../../../../../src/plugins/data/server'; +import { Filter } from '../../../../../../../src/plugins/data/server'; import { IRuleStatusAttributes } from './rules/types'; -export type PartialFilter = Partial; +export type PartialFilter = Partial; export interface IMitreAttack { id: string; diff --git a/x-pack/legacy/plugins/uptime/public/components/functional/location_map/embeddables/types.ts b/x-pack/legacy/plugins/uptime/public/components/functional/location_map/embeddables/types.ts index 5cac204ffb0713..03cb33c3459d2d 100644 --- a/x-pack/legacy/plugins/uptime/public/components/functional/location_map/embeddables/types.ts +++ b/x-pack/legacy/plugins/uptime/public/components/functional/location_map/embeddables/types.ts @@ -12,10 +12,10 @@ import { IEmbeddable, } from '../../../../../../../../../src/legacy/core_plugins/embeddable_api/public/np_ready/public'; -import { esFilters } from '../../../../../../../../../src/plugins/data/public'; +import { Filter } from '../../../../../../../../../src/plugins/data/public'; export interface MapEmbeddableInput extends EmbeddableInput { - filters: esFilters.Filter[]; + filters: Filter[]; query: Query; refreshConfig: { isPaused: boolean;