mirror of
https://github.com/elastic/kibana.git
synced 2025-04-24 01:38:56 -04:00
Fix spatial filters when Kuery is in use (#14158)
In https://github.com/elastic/kibana/pull/13912/files#r137840240 I updated the filter_bar_click_handler to create Kuery filters directly instead of relying on $newFilters watchers in every app. I forgot tile_map manipulates $newFilters directly instead of using the filter_bar_click_handler. So if Kuery was selected as the query language and you attempted to create a spatial filter, nothing would happen. I've updated tile_map to use vis.API instead of modifying $newFilters. This fixed the Kuery issue, as well as a strange lag time I was seeing between mouse click and actual filter creation with the lucene filters.
This commit is contained in:
parent
34250a81e8
commit
e0dce5ffbb
3 changed files with 40 additions and 9 deletions
|
@ -272,10 +272,40 @@ export function MapsVisualizationProvider(serviceSettings, Notifier, getAppState
|
|||
|
||||
const indexPatternName = agg.vis.indexPattern.id;
|
||||
const field = agg.fieldName();
|
||||
const filter = { meta: { negate: false, index: indexPatternName } };
|
||||
filter[filterName] = { ignore_unmapped: true };
|
||||
filter[filterName][field] = filterData;
|
||||
getAppState().$newFilters = [filter];
|
||||
const query = this.vis.API.queryManager.getQuery();
|
||||
const language = query.language;
|
||||
|
||||
if (language === 'lucene') {
|
||||
const filter = { meta: { negate: false, index: indexPatternName } };
|
||||
filter[filterName] = { ignore_unmapped: true };
|
||||
filter[filterName][field] = filterData;
|
||||
|
||||
this.vis.API.queryFilter.addFilters([filter]);
|
||||
}
|
||||
else if (language === 'kuery') {
|
||||
const { fromKueryExpression, toKueryExpression, nodeTypes } = this.vis.API.kuery;
|
||||
let newQuery;
|
||||
|
||||
if (filterName === 'geo_bounding_box') {
|
||||
newQuery = nodeTypes.function.buildNode('geoBoundingBox', field, _.mapKeys(filterData, (value, key) => _.camelCase(key)));
|
||||
}
|
||||
else if (filterName === 'geo_polygon') {
|
||||
newQuery = nodeTypes.function.buildNode('geoPolygon', field, filterData.points);
|
||||
}
|
||||
else {
|
||||
throw new Error(`Kuery does not support ${filterName} queries`);
|
||||
}
|
||||
|
||||
const allQueries = _.isEmpty(query.query)
|
||||
? [newQuery]
|
||||
: [fromKueryExpression(query.query), newQuery];
|
||||
|
||||
this.vis.API.queryManager.setQuery({
|
||||
query: toKueryExpression(nodeTypes.function.buildNode('and', allQueries, 'implicit')),
|
||||
language: 'kuery'
|
||||
});
|
||||
}
|
||||
|
||||
this.vis.updateState();
|
||||
}
|
||||
|
||||
|
|
|
@ -1,14 +1,15 @@
|
|||
import _ from 'lodash';
|
||||
|
||||
export function queryManagerFactory(state) {
|
||||
export function queryManagerFactory(getState) {
|
||||
|
||||
function getQuery() {
|
||||
return {
|
||||
...state.query
|
||||
...getState().query
|
||||
};
|
||||
}
|
||||
|
||||
function updateQuery(newQuery) {
|
||||
function setQuery(newQuery) {
|
||||
const state = getState();
|
||||
state.query = newQuery;
|
||||
|
||||
if (_.isFunction(state.save)) {
|
||||
|
@ -18,7 +19,7 @@ export function queryManagerFactory(state) {
|
|||
|
||||
return {
|
||||
getQuery,
|
||||
updateQuery,
|
||||
setQuery,
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
@ -61,7 +61,7 @@ export function VisProvider(Private, indexPatterns, timefilter, getAppState) {
|
|||
indexPatterns: indexPatterns,
|
||||
timeFilter: timefilter,
|
||||
queryFilter: queryFilter,
|
||||
queryManager: queryManagerFactory(getAppState()),
|
||||
queryManager: queryManagerFactory(getAppState),
|
||||
kuery: kueryAPI,
|
||||
events: {
|
||||
filter: (event) => {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue