Skip to content

Commit

Permalink
support timefilter, filter removal
Browse files Browse the repository at this point in the history
  • Loading branch information
nyurik committed Apr 11, 2018
1 parent 3059d2e commit 8da7236
Show file tree
Hide file tree
Showing 2 changed files with 71 additions and 18 deletions.
82 changes: 67 additions & 15 deletions src/core_plugins/vega/public/vega_view/vega_base_view.js
@@ -1,4 +1,5 @@
import $ from 'jquery';
import moment from 'moment';
import * as vega from 'vega-lib';
import * as vegaLite from 'vega-lite';
import { areIndexPatternsProvided } from 'ui/filter_editor/lib/filter_editor_utils';
Expand All @@ -9,18 +10,25 @@ vega.scheme('elastic', VISUALIZATION_COLORS);

// Vega's extension functions are global. When called,
// we forward execution to the instance-specific handler
if (!vega.expressionFunction('kibanaAddFilter')) {
vega.expressionFunction(
'kibanaAddFilter',
function kibanaAddFilter(...args) {
const view = this.context.dataflow;
const handler = view.kibanaAddFilterHandler;
if (!handler) throw new Error('kibanaAddFilter() is not defined for this graph');
view.runAfter(() => handler(...args));
}
);
function addGlobalVegaHandler(funcName, handlerName) {
if (!vega.expressionFunction(funcName)) {
vega.expressionFunction(
funcName,
function handlerFwd(...args) {
const view = this.context.dataflow;
const handler = view[handlerName];
if (!handler) throw new Error(`${funcName}() is not defined for this graph`);
view.runAfter(() => handler(...args));
}
);
}
}

addGlobalVegaHandler('kibanaAddFilter', 'kibanaAddFilterHandler');
addGlobalVegaHandler('kibanaRemoveFilter', 'kibanaRemoveFilterHandler');
addGlobalVegaHandler('kibanaRemoveAllFilters', 'kibanaRemoveAllFiltersHandler');
addGlobalVegaHandler('kibanaSetTimeFilter', 'kibanaSetTimeFilterHandler');

const bypassToken = Symbol();

export function bypassExternalUrlCheck(url) {
Expand All @@ -35,7 +43,8 @@ export class VegaBaseView {
this._$parentEl = $(opts.parentEl);
this._parser = opts.vegaParser;
this._serviceSettings = opts.serviceSettings;
this._queryFilter = opts.queryFilter;
this._queryfilter = opts.queryfilter;
this._timefilter = opts.timefilter;
this._indexPatterns = opts.indexPatterns;
this._view = null;
this._vegaViewConfig = null;
Expand Down Expand Up @@ -170,13 +179,56 @@ export class VegaBaseView {
this._view = view;
if (view) {
/**
* @param {object} filter Elastic Query DSL snippet, as used in the query DSL editor
* @param {object} query Elastic Query DSL snippet, as used in the query DSL editor
* @param {object} [meta] Optional Metadata for the filter
*/
view.kibanaAddFilterHandler = (filter) => {
filter.meta = filter.meta || {};
view.kibanaAddFilterHandler = (query, meta) => {
const filter = { query: query, meta: meta || {} };
filter.meta.index = filter.meta.index || this._indexPatterns[0].id;
this._queryfilter.addFilters(filter);
};

/**
* @param {object} query Elastic Query DSL snippet, as used in the query DSL editor
* @param {object} [meta] Optional Metadata for the filter
*/
view.kibanaRemoveFilterHandler = (query, meta) => {
const filter = { query: query, meta: meta || {} };
filter.meta.index = filter.meta.index || this._indexPatterns[0].id;
this._queryfilter.removeFilter(filter);
};

view.kibanaRemoveAllFiltersHandler = () => {
this._queryfilter.removeAll();
};

/**
* @param {number|string|Date} start
* @param {number|string|Date} end
* @param {string} [mode]
*/
view.kibanaSetTimeFilterHandler = (start, end, mode) => {
const tf = this._timefilter;

let from = moment(start);
let to = moment(end);

if (from.isValid() && to.isValid()) {
if (from.isAfter(to)) {
[from, to] = [to, from];
}
} else if (typeof start === 'string' && typeof end === 'string') {

// TODO/FIXME: should strings be allowed as is, or is there a parser?
// Also, should the default mode be changed in this case?

[from, to] = [start, end];
}

this._queryFilter.addFilters(filter);
tf.time.from = from;
tf.time.to = to;
tf.time.mode = mode || 'absolute';
tf.update();
};
}
}
Expand Down
7 changes: 4 additions & 3 deletions src/core_plugins/vega/public/vega_visualization.js
Expand Up @@ -3,10 +3,10 @@ import { VegaView } from './vega_view/vega_view';
import { VegaMapView } from './vega_view/vega_map_view';
import { FilterBarQueryFilterProvider } from 'ui/filter_bar/query_filter';

export function VegaVisualizationProvider(Private, vegaConfig, serviceSettings, indexPatterns) {
export function VegaVisualizationProvider(Private, vegaConfig, serviceSettings, indexPatterns, timefilter) {

const notify = new Notifier({ location: 'Vega' });
const queryFilter = Private(FilterBarQueryFilterProvider);
const queryfilter = Private(FilterBarQueryFilterProvider);

return class VegaVisualization {
constructor(el, vis) {
Expand Down Expand Up @@ -54,7 +54,8 @@ export function VegaVisualizationProvider(Private, vegaConfig, serviceSettings,
parentEl: this._el,
vegaParser,
serviceSettings,
queryFilter,
queryfilter,
timefilter,
indexPatterns
};

Expand Down

0 comments on commit 8da7236

Please sign in to comment.