graceguo-supercat commented on a change in pull request #9593:
URL:
https://github.com/apache/incubator-superset/pull/9593#discussion_r411920531
##########
File path: superset-frontend/src/dashboard/util/getFilterConfigsFromFormdata.js
##########
@@ -20,89 +20,85 @@
import { TIME_FILTER_MAP } from '../../visualizations/FilterBox/FilterBox';
import { TIME_FILTER_LABELS } from '../../explore/constants';
-export default function getFilterConfigsFromFormdata(form_data = {}) {
+/**
+ * Parse filters for Table chart. All non-metric columns are considered
+ * filterable values.
+ */
+function getFilterConfigsFromTableChart(form_data = {}) {
+ const { groupby = [], all_columns = [] } = form_data;
+ const configs = { columns: {}, labels: {} };
+ // `groupby` is from GROUP BY mode (aggregations)
+ // `all_columns` is from NOT GROUP BY mode (raw records)
+ const columns = groupby.concat(all_columns);
+ columns.forEach(column => {
+ configs.columns[column] = undefined;
+ configs.labels[column] = column;
+ });
+ return configs;
+}
+
+/**
+ * Parse filter configs for FilterBox.
+ */
+function getFilterConfigsFromFilterBox(form_data = {}) {
const {
date_filter,
filter_configs = [],
show_druid_time_granularity,
show_druid_time_origin,
show_sqla_time_column,
show_sqla_time_granularity,
+ table_filter,
} = form_data;
- let configs = filter_configs.reduce(
- ({ columns, labels }, config) => {
- let defaultValues = config.defaultValue;
- // defaultValue could be ; separated values,
- // could be null or ''
- if (config.defaultValue) {
- defaultValues = config.defaultValue.split(';');
- }
- const updatedColumns = {
- ...columns,
- [config.column]: config.vals || defaultValues,
- };
- const updatedLabels = {
- ...labels,
- [config.column]: config.label,
- };
+ const configs = { columns: {}, labels: {} };
- return {
- columns: updatedColumns,
- labels: updatedLabels,
- };
- },
- { columns: {}, labels: {} },
- );
+ filter_configs.forEach(({ column, label, defaultValue, vals }) => {
+ const defaultValues =
+ typeof defaultValue === 'string' ? defaultValue.split(';') :
defaultValue;
+ configs.columns[column] = vals || defaultValues;
+ configs.labels[column] = label;
+ });
if (date_filter) {
- let updatedColumns = {
- ...configs.columns,
- [TIME_FILTER_MAP.time_range]: form_data.time_range,
- };
- const updatedLabels = {
- ...configs.labels,
- ...Object.entries(TIME_FILTER_MAP).reduce(
- (map, [key, value]) => ({
- ...map,
- [value]: TIME_FILTER_LABELS[key],
- }),
- {},
- ),
- };
-
+ configs.columns[TIME_FILTER_MAP.time_range] = form_data.time_range;
+ // a map from frontend enum key to backend column
+ Object.entries(TIME_FILTER_MAP).forEach(([key, column]) => {
+ configs.labels[column] = TIME_FILTER_LABELS[key];
+ });
if (show_sqla_time_granularity) {
- updatedColumns = {
- ...updatedColumns,
- [TIME_FILTER_MAP.time_grain_sqla]: form_data.time_grain_sqla,
- };
+ configs.columns[TIME_FILTER_MAP.time_grain_sqla] =
+ form_data.time_grain_sqla;
}
-
if (show_sqla_time_column) {
- updatedColumns = {
- ...updatedColumns,
- [TIME_FILTER_MAP.granularity_sqla]: form_data.granularity_sqla,
- };
+ configs.columns[TIME_FILTER_MAP.granularity_sqla] =
+ form_data.granularity_sqla;
}
-
if (show_druid_time_granularity) {
- updatedColumns = {
- ...updatedColumns,
- [TIME_FILTER_MAP.granularity]: form_data.granularity,
- };
+ configs.columns[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.columns[TIME_FILTER_MAP.druid_time_origin] =
+ form_data.druid_time_origin;
}
+ }
+ return configs;
+}
- configs = {
- ...configs,
- columns: updatedColumns,
- labels: updatedLabels,
- };
+export default function getFilterConfigsFromFormdata(
+ form_data = {},
+ filters = undefined,
+) {
+ const configs = form_data.table_filter
+ ? getFilterConfigsFromTableChart(form_data)
+ : getFilterConfigsFromFilterBox(form_data);
+
+ // if current chart has preselected filters, update it
+ if (filters) {
Review comment:
this function `getFilterConfigsFromFormdata`, is used when dashboard
mount, and when user apply a filter. By adding this code block, will user
applied filter will always be overwritten by dashboard preselected filters?
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]