This is an automated email from the ASF dual-hosted git repository.

graceguo pushed a commit to branch gg-Test-Scoped-Filters
in repository https://gitbox.apache.org/repos/asf/incubator-superset.git

commit 32d13d6736511ed0dd6fa8832516bbb1ba432eae
Author: Grace <[email protected]>
AuthorDate: Tue Nov 12 15:41:38 2019 -0800

    fix save filter Scopes behavior
---
 superset/assets/src/dashboard/actions/dashboardState.js | 17 +++++++++++++++--
 superset/assets/src/dashboard/components/Header.jsx     | 10 ----------
 .../src/dashboard/components/HeaderActionsDropdown.jsx  |  6 ------
 superset/assets/src/dashboard/components/SaveModal.jsx  |  7 -------
 .../components/filterscope/FilterScopeSelector.jsx      |  5 +++--
 .../assets/src/dashboard/containers/DashboardHeader.jsx | 12 ------------
 .../src/dashboard/util/getFilterFieldNodesTree.js       |  2 +-
 .../src/dashboard/util/getFilterScopeNodesTree.js       |  2 +-
 8 files changed, 20 insertions(+), 41 deletions(-)

diff --git a/superset/assets/src/dashboard/actions/dashboardState.js 
b/superset/assets/src/dashboard/actions/dashboardState.js
index b1d850f..cea6e25 100644
--- a/superset/assets/src/dashboard/actions/dashboardState.js
+++ b/superset/assets/src/dashboard/actions/dashboardState.js
@@ -38,6 +38,10 @@ import {
   addDangerToast,
 } from '../../messageToasts/actions';
 import { UPDATE_COMPONENTS_PARENTS_LIST } from '../actions/dashboardLayout';
+import serializeActiveFilterValues from '../util/serializeActiveFilterValues';
+import serializeFilterScopes from '../util/serializeFilterScopes';
+import { getActiveFilters } from '../util/activeDashboardFilters';
+import { safeStringify } from '../../utils/safeStringify';
 
 export const SET_UNSAVED_CHANGES = 'SET_UNSAVED_CHANGES';
 export function setUnsavedChanges(hasUnsavedChanges) {
@@ -178,10 +182,19 @@ export function saveDashboardRequest(data, id, saveType) {
       directPathToFilter.push(componentId);
       dispatch(updateDirectPathToFilter(chartId, directPathToFilter));
     });
-
+    // serialize selected values for each filter field, grouped by filter id
+    const serializedFilters = serializeActiveFilterValues(getActiveFilters());
+    // serialize filter scope for each filter field, grouped by filter id
+    const serializedFilterScopes = serializeFilterScopes(dashboardFilters);
     return SupersetClient.post({
       endpoint: `/superset/${path}/${id}/`,
-      postPayload: { data },
+      postPayload: {
+        data: {
+          ...data,
+          default_filters: safeStringify(serializedFilters),
+          filter_scopes: safeStringify(serializedFilterScopes),
+        },
+      },
     })
       .then(response => {
         dispatch(saveDashboardRequestSuccess());
diff --git a/superset/assets/src/dashboard/components/Header.jsx 
b/superset/assets/src/dashboard/components/Header.jsx
index c740c8e..843eeb5 100644
--- a/superset/assets/src/dashboard/components/Header.jsx
+++ b/superset/assets/src/dashboard/components/Header.jsx
@@ -53,8 +53,6 @@ const propTypes = {
   dashboardTitle: PropTypes.string.isRequired,
   charts: PropTypes.objectOf(chartPropShape).isRequired,
   layout: PropTypes.object.isRequired,
-  serializedFilters: PropTypes.object.isRequired,
-  serializedFilterScopes: PropTypes.object.isRequired,
   expandedSlices: PropTypes.object.isRequired,
   css: PropTypes.string.isRequired,
   colorNamespace: PropTypes.string,
@@ -218,8 +216,6 @@ class Header extends React.PureComponent {
       css,
       colorNamespace,
       colorScheme,
-      serializedFilters,
-      serializedFilterScopes,
       dashboardInfo,
       refreshFrequency,
     } = this.props;
@@ -237,8 +233,6 @@ class Header extends React.PureComponent {
       color_scheme: colorScheme,
       label_colors: labelColors,
       dashboard_title: dashboardTitle,
-      default_filters: safeStringify(serializedFilters),
-      filter_scopes: safeStringify(serializedFilterScopes),
       refresh_frequency: refreshFrequency,
     };
 
@@ -266,8 +260,6 @@ class Header extends React.PureComponent {
     const {
       dashboardTitle,
       layout,
-      serializedFilters,
-      serializedFilterScopes,
       expandedSlices,
       css,
       colorNamespace,
@@ -419,8 +411,6 @@ class Header extends React.PureComponent {
             dashboardId={dashboardInfo.id}
             dashboardTitle={dashboardTitle}
             layout={layout}
-            serializedFilters={serializedFilters}
-            serializedFilterScopes={serializedFilterScopes}
             expandedSlices={expandedSlices}
             css={css}
             colorNamespace={colorNamespace}
diff --git a/superset/assets/src/dashboard/components/HeaderActionsDropdown.jsx 
b/superset/assets/src/dashboard/components/HeaderActionsDropdown.jsx
index 40a82eb..cf89e5e 100644
--- a/superset/assets/src/dashboard/components/HeaderActionsDropdown.jsx
+++ b/superset/assets/src/dashboard/components/HeaderActionsDropdown.jsx
@@ -51,8 +51,6 @@ const propTypes = {
   userCanSave: PropTypes.bool.isRequired,
   isLoading: PropTypes.bool.isRequired,
   layout: PropTypes.object.isRequired,
-  serializedFilters: PropTypes.object.isRequired,
-  serializedFilterScopes: PropTypes.object.isRequired,
   expandedSlices: PropTypes.object.isRequired,
   onSave: PropTypes.func.isRequired,
 };
@@ -122,8 +120,6 @@ class HeaderActionsDropdown extends React.PureComponent {
       colorScheme,
       hasUnsavedChanges,
       layout,
-      serializedFilters,
-      serializedFilterScopes,
       expandedSlices,
       onSave,
       userCanEdit,
@@ -151,8 +147,6 @@ class HeaderActionsDropdown extends React.PureComponent {
             dashboardTitle={dashboardTitle}
             saveType={SAVE_TYPE_NEWDASHBOARD}
             layout={layout}
-            serializedFilters={serializedFilters}
-            serializedFilterScopes={serializedFilterScopes}
             expandedSlices={expandedSlices}
             refreshFrequency={refreshFrequency}
             css={css}
diff --git a/superset/assets/src/dashboard/components/SaveModal.jsx 
b/superset/assets/src/dashboard/components/SaveModal.jsx
index a41dbd2..2f53c8a 100644
--- a/superset/assets/src/dashboard/components/SaveModal.jsx
+++ b/superset/assets/src/dashboard/components/SaveModal.jsx
@@ -26,7 +26,6 @@ import { t } from '@superset-ui/translation';
 import ModalTrigger from '../../components/ModalTrigger';
 import Checkbox from '../../components/Checkbox';
 import { SAVE_TYPE_OVERWRITE, SAVE_TYPE_NEWDASHBOARD } from 
'../util/constants';
-import { safeStringify } from '../../utils/safeStringify';
 
 const propTypes = {
   addSuccessToast: PropTypes.func.isRequired,
@@ -37,8 +36,6 @@ const propTypes = {
   layout: PropTypes.object.isRequired,
   saveType: PropTypes.oneOf([SAVE_TYPE_OVERWRITE, SAVE_TYPE_NEWDASHBOARD]),
   triggerNode: PropTypes.node.isRequired,
-  serializedFilters: PropTypes.object.isRequired,
-  serializedFilterScopes: PropTypes.object.isRequired,
   css: PropTypes.string.isRequired,
   colorNamespace: PropTypes.string,
   colorScheme: PropTypes.string,
@@ -102,8 +99,6 @@ class SaveModal extends React.PureComponent {
       colorNamespace,
       colorScheme,
       expandedSlices,
-      serializedFilters,
-      serializedFilterScopes,
       dashboardId,
       refreshFrequency,
     } = this.props;
@@ -122,8 +117,6 @@ class SaveModal extends React.PureComponent {
       expanded_slices: expandedSlices,
       dashboard_title:
         saveType === SAVE_TYPE_NEWDASHBOARD ? newDashName : dashboardTitle,
-      default_filters: safeStringify(serializedFilters),
-      filter_scopes: safeStringify(serializedFilterScopes),
       duplicate_slices: this.state.duplicateSlices,
       refresh_frequency: refreshFrequency,
     };
diff --git 
a/superset/assets/src/dashboard/components/filterscope/FilterScopeSelector.jsx 
b/superset/assets/src/dashboard/components/filterscope/FilterScopeSelector.jsx
index 59375e1..9435d7b 100644
--- 
a/superset/assets/src/dashboard/components/filterscope/FilterScopeSelector.jsx
+++ 
b/superset/assets/src/dashboard/components/filterscope/FilterScopeSelector.jsx
@@ -316,10 +316,11 @@ export default class FilterScopeSelector extends 
React.PureComponent {
       {},
     );
 
-    // save does not close modal
     this.props.updateDashboardFiltersScope(allFilterFieldScopes);
     this.props.setUnsavedChanges(true);
-    // save does not close modal
+
+    // click Save button will do save and close modal
+    this.props.onCloseModal();
   }
 
   filterTree() {
diff --git a/superset/assets/src/dashboard/containers/DashboardHeader.jsx 
b/superset/assets/src/dashboard/containers/DashboardHeader.jsx
index 7c0d8eb..88e54ac 100644
--- a/superset/assets/src/dashboard/containers/DashboardHeader.jsx
+++ b/superset/assets/src/dashboard/containers/DashboardHeader.jsx
@@ -50,32 +50,20 @@ import {
   addWarningToast,
 } from '../../messageToasts/actions';
 
-import serializeFilterScopes from '../util/serializeFilterScopes';
-import serializeActiveFilterValues from '../util/serializeActiveFilterValues';
 import { logEvent } from '../../logger/actions';
 import { DASHBOARD_HEADER_ID } from '../util/constants';
-import { getActiveFilters } from '../util/activeDashboardFilters';
 
 function mapStateToProps({
   dashboardLayout: undoableLayout,
   dashboardState,
   dashboardInfo,
-  dashboardFilters,
   charts,
 }) {
-  // serialize selected values for each filter field, grouped by filter id,
-  // this is data structure that backend expects
-  const serializedFilters = serializeActiveFilterValues(getActiveFilters());
-  // serialize filter scope for each filter field, grouped by filter id,
-  // this is data structure that backend expects
-  const serializedFilterScopes = serializeFilterScopes(dashboardFilters);
   return {
     dashboardInfo,
     undoLength: undoableLayout.past.length,
     redoLength: undoableLayout.future.length,
     layout: undoableLayout.present,
-    serializedFilters,
-    serializedFilterScopes,
     dashboardTitle: (
       (undoableLayout.present[DASHBOARD_HEADER_ID] || {}).meta || {}
     ).text,
diff --git a/superset/assets/src/dashboard/util/getFilterFieldNodesTree.js 
b/superset/assets/src/dashboard/util/getFilterFieldNodesTree.js
index b55d28f..5d9b59e 100644
--- a/superset/assets/src/dashboard/util/getFilterFieldNodesTree.js
+++ b/superset/assets/src/dashboard/util/getFilterFieldNodesTree.js
@@ -39,7 +39,7 @@ export default function getFilterFieldNodesTree({ 
dashboardFilters = {} }) {
   return [
     {
       value: ALL_FILTERS_ROOT,
-      label: t('Select/deselect all filters'),
+      label: t('All filters'),
       children: allFilters,
     },
   ];
diff --git a/superset/assets/src/dashboard/util/getFilterScopeNodesTree.js 
b/superset/assets/src/dashboard/util/getFilterScopeNodesTree.js
index 470ac08..60669bd 100644
--- a/superset/assets/src/dashboard/util/getFilterScopeNodesTree.js
+++ b/superset/assets/src/dashboard/util/getFilterScopeNodesTree.js
@@ -86,7 +86,7 @@ function traverse({
   if (FILTER_SCOPE_CONTAINER_TYPES.includes(type)) {
     let label = null;
     if (type === DASHBOARD_ROOT_TYPE) {
-      label = t('Select/deselect all charts');
+      label = t('All charts');
     } else {
       label =
         currentNode.meta && currentNode.meta.text

Reply via email to