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
