From acf0753504095a5c0e320b049370aaf6f04e5a4f Mon Sep 17 00:00:00 2001 From: Grace Guo Date: Mon, 25 Nov 2019 10:21:09 -0800 Subject: [PATCH] [dashboard scoped filters] Add all time related options to filter scope settings (#8636) --- .../dashboard/util/activeDashboardFilters.js | 5 ++- .../util/getFilterConfigsFromFormdata.js | 44 +++++++++++++++++-- .../visualizations/FilterBox/FilterBox.jsx | 5 ++- 3 files changed, 47 insertions(+), 7 deletions(-) diff --git a/superset/assets/src/dashboard/util/activeDashboardFilters.js b/superset/assets/src/dashboard/util/activeDashboardFilters.js index 3674eb3960..01d66ac2c2 100644 --- a/superset/assets/src/dashboard/util/activeDashboardFilters.js +++ b/superset/assets/src/dashboard/util/activeDashboardFilters.js @@ -24,6 +24,7 @@ import { getDashboardFilterKey, } from './getDashboardFilterKey'; import { CHART_TYPE } from '../util/componentTypes'; +import { DASHBOARD_FILTER_SCOPE_GLOBAL } from '../reducers/dashboardFilters'; let allFilterBoxChartIds = []; let activeFilters = {}; @@ -61,7 +62,9 @@ export function getAppliedFilterValues(chartId) { return appliedFilterValuesByChart[chartId]; } -export function getChartIdsInFilterScope({ filterScope }) { +export function getChartIdsInFilterScope({ + filterScope = DASHBOARD_FILTER_SCOPE_GLOBAL, +}) { function traverse(chartIds = [], component = {}, immuneChartIds = []) { if (!component) { return; diff --git a/superset/assets/src/dashboard/util/getFilterConfigsFromFormdata.js b/superset/assets/src/dashboard/util/getFilterConfigsFromFormdata.js index 12c275cfec..dccb6a27f9 100644 --- a/superset/assets/src/dashboard/util/getFilterConfigsFromFormdata.js +++ b/superset/assets/src/dashboard/util/getFilterConfigsFromFormdata.js @@ -18,12 +18,20 @@ */ /* eslint-disable camelcase */ import { + TIME_FILTER_MAP, TIME_RANGE, FILTER_LABELS, } from '../../visualizations/FilterBox/FilterBox'; export default function getFilterConfigsFromFormdata(form_data = {}) { - const { date_filter, filter_configs = [] } = form_data; + const { + date_filter, + filter_configs = [], + show_druid_time_granularity, + show_druid_time_origin, + show_sqla_time_column, + show_sqla_time_granularity, + } = form_data; let configs = filter_configs.reduce( ({ columns, labels }, config) => { const updatedColumns = { @@ -44,15 +52,43 @@ export default function getFilterConfigsFromFormdata(form_data = {}) { ); if (date_filter) { - const updatedColumns = { + let updatedColumns = { ...configs.columns, - [TIME_RANGE]: form_data[TIME_RANGE], + [TIME_FILTER_MAP.time_range]: form_data.time_range, }; const updatedLabels = { ...configs.labels, - [TIME_RANGE]: FILTER_LABELS[TIME_RANGE], + [TIME_FILTER_MAP.time_range]: FILTER_LABELS[TIME_RANGE], }; + if (show_sqla_time_column) { + updatedColumns = { + ...updatedColumns, + [TIME_FILTER_MAP.time_grain_sqla]: form_data.time_grain_sqla, + }; + } + + if (show_sqla_time_granularity) { + updatedColumns = { + ...updatedColumns, + [TIME_FILTER_MAP.granularity_sqla]: form_data.granularity_sqla, + }; + } + + if (show_druid_time_granularity) { + updatedColumns = { + ...updatedColumns, + [TIME_FILTER_MAP.granularity]: form_data.granularity, + }; + } + + if (show_druid_time_origin) { + updatedColumns = { + ...updatedColumns, + [TIME_FILTER_MAP.druid_time_origin]: form_data.druid_time_origin, + }; + } + configs = { ...configs, columns: updatedColumns, diff --git a/superset/assets/src/visualizations/FilterBox/FilterBox.jsx b/superset/assets/src/visualizations/FilterBox/FilterBox.jsx index fad0bff3f5..40a954eb46 100644 --- a/superset/assets/src/visualizations/FilterBox/FilterBox.jsx +++ b/superset/assets/src/visualizations/FilterBox/FilterBox.jsx @@ -36,7 +36,7 @@ import FilterBadgeIcon from '../../components/FilterBadgeIcon'; import './FilterBox.less'; // maps control names to their key in extra_filters -const TIME_FILTER_MAP = { +export const TIME_FILTER_MAP = { time_range: '__time_range', granularity_sqla: '__time_col', time_grain_sqla: '__time_grain', @@ -44,7 +44,8 @@ const TIME_FILTER_MAP = { granularity: '__granularity', }; -export const TIME_RANGE = '__time_range'; +// a shortcut to a map key, used by many components +export const TIME_RANGE = TIME_FILTER_MAP.time_range; export const FILTER_LABELS = { [TIME_RANGE]: 'Time range', };