From 0b8522be502988d8b9bf64a8ea203068adf5957d Mon Sep 17 00:00:00 2001 From: Maxime Beauchemin Date: Tue, 14 Mar 2017 12:18:33 -0700 Subject: [PATCH] [filter_box] fix time filter and inverted instantFilter (#2402) * [filter_box] fix time filter and inverted instantFilter * Added a few comments --- .../assets/javascripts/modules/superset.js | 32 ++++++------------- superset/assets/visualizations/filter_box.jsx | 6 ++-- superset/views/core.py | 6 ---- superset/viz.py | 22 +++++++++---- 4 files changed, 27 insertions(+), 39 deletions(-) diff --git a/superset/assets/javascripts/modules/superset.js b/superset/assets/javascripts/modules/superset.js index d310dbab2a..35bdd499cb 100644 --- a/superset/assets/javascripts/modules/superset.js +++ b/superset/assets/javascripts/modules/superset.js @@ -63,36 +63,18 @@ const px = function () { const container = $(selector); const sliceId = data.slice_id; const formData = applyDefaultFormData(data.form_data); - const jsonEndpoint = getExploreUrl(formData, 'json'); - const origJsonEndpoint = jsonEndpoint; let dttm = 0; const stopwatch = function () { dttm += 10; const num = dttm / 1000; $('#timer').text(num.toFixed(2) + ' sec'); }; - let qrystr = ''; slice = { data, formData, container, containerId, selector, - querystring() { - const parser = document.createElement('a'); - parser.href = jsonEndpoint; - if (controller.type === 'dashboard') { - parser.href = origJsonEndpoint; - let flts = controller.effectiveExtraFilters(sliceId); - flts = encodeURIComponent(JSON.stringify(flts)); - qrystr = parser.search + '&extra_filters=' + flts; - } else if ($('#query').length === 0) { - qrystr = parser.search; - } else { - qrystr = '?' + $('#query').serialize(); - } - return qrystr; - }, getWidgetHeader() { return this.container.parents('div.widget').find('.chart-header'); }, @@ -104,16 +86,20 @@ const px = function () { return Mustache.render(s, context); }, jsonEndpoint() { - const parser = document.createElement('a'); - parser.href = jsonEndpoint; - let endpoint = parser.pathname + this.querystring(); + return this.endpoint('json'); + }, + endpoint(endpointType = 'json') { + const formDataExtra = Object.assign({}, formData); + const flts = controller.effectiveExtraFilters(sliceId); + if (flts) { + formDataExtra.extra_filters = flts; + } + let endpoint = getExploreUrl(formDataExtra, endpointType, this.force); if (endpoint.charAt(0) !== '/') { // Known issue for IE <= 11: // https://connect.microsoft.com/IE/feedbackdetail/view/1002846/pathname-incorrect-for-out-of-document-elements endpoint = '/' + endpoint; } - endpoint += '&json=true'; - endpoint += '&force=' + this.force; return endpoint; }, d3format(col, number) { diff --git a/superset/assets/visualizations/filter_box.jsx b/superset/assets/visualizations/filter_box.jsx index 9a4c76451b..34f6b7ff81 100644 --- a/superset/assets/visualizations/filter_box.jsx +++ b/superset/assets/visualizations/filter_box.jsx @@ -50,7 +50,7 @@ class FilterBox extends React.Component { const selectedValues = Object.assign({}, this.state.selectedValues); selectedValues[filter] = vals; this.setState({ selectedValues, hasChanged: true }); - this.props.onChange(filter, vals, false, !this.props.instantFiltering); + this.props.onChange(filter, vals, false, this.props.instantFiltering); } render() { let dateFilter; @@ -63,7 +63,7 @@ class FilterBox extends React.Component { } const options = choices.map((s) => ({ value: s, label: s })); return ( -
+
{field.replace('__', '')} {dateFilter} {filters} - {this.props.instantFiltering && + {!this.props.instantFiltering &&