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 af8f8681385aea4e4616b064ea1ed27ba1d4373f Author: Grace <[email protected]> AuthorDate: Sun Nov 10 21:15:18 2019 -0800 fix a few props initial value --- .../components/filterscope/FilterFieldTree.jsx | 4 ++-- .../components/filterscope/FilterScopeSelector.jsx | 22 +++++++++++----------- .../components/filterscope/FilterScopeTree.jsx | 9 +++++++-- .../filterscope/renderFilterFieldTreeNodes.jsx | 11 ++++++----- .../filterscope/renderFilterScopeTreeNodes.jsx | 11 ++++++----- .../src/dashboard/reducers/dashboardFilters.js | 4 ++-- .../stylesheets/filter-scope-selector.less | 4 ++++ .../dashboard/util/buildFilterScopeTreeEntry.js | 2 +- superset/assets/src/dashboard/util/constants.js | 2 +- .../src/dashboard/util/getFilterFieldNodesTree.js | 4 ++-- .../src/dashboard/util/getFilterScopeNodesTree.js | 16 +++++++++++----- .../util/getSelectedChartIdForFilterScopeTree.js | 4 ++-- 12 files changed, 55 insertions(+), 38 deletions(-) diff --git a/superset/assets/src/dashboard/components/filterscope/FilterFieldTree.jsx b/superset/assets/src/dashboard/components/filterscope/FilterFieldTree.jsx index 351f539..7b778ed 100644 --- a/superset/assets/src/dashboard/components/filterscope/FilterFieldTree.jsx +++ b/superset/assets/src/dashboard/components/filterscope/FilterFieldTree.jsx @@ -31,7 +31,7 @@ import renderFilterFieldTreeNodes from './renderFilterFieldTreeNodes'; import { filterScopeSelectorTreeNodePropShape } from '../../util/propShapes'; const propTypes = { - activeKey: PropTypes.string, + activeKey: PropTypes.oneOfType([null, PropTypes.string]), nodes: PropTypes.arrayOf(filterScopeSelectorTreeNodePropShape).isRequired, checked: PropTypes.arrayOf( PropTypes.oneOfType([PropTypes.number, PropTypes.string]), @@ -45,7 +45,7 @@ const propTypes = { }; const defaultProps = { - activeKey: '', + activeKey: null, }; const FILTER_FIELD_CHECKBOX_TREE_ICONS = { diff --git a/superset/assets/src/dashboard/components/filterscope/FilterScopeSelector.jsx b/superset/assets/src/dashboard/components/filterscope/FilterScopeSelector.jsx index f20044e..ae42a57 100644 --- a/superset/assets/src/dashboard/components/filterscope/FilterScopeSelector.jsx +++ b/superset/assets/src/dashboard/components/filterscope/FilterScopeSelector.jsx @@ -36,7 +36,7 @@ import { getChartIdAndColumnFromFilterKey, getDashboardFilterKey, } from '../../util/getDashboardFilterKey'; -import { ALL_FILTERS } from '../../util/constants'; +import { ALL_FILTERS_ROOT } from '../../util/constants'; const propTypes = { dashboardFilters: PropTypes.object.isRequired, @@ -126,7 +126,7 @@ export default class FilterScopeSelector extends React.PureComponent { const checkedFilterFields = []; const activeFilterField = this.defaultFilterKey; // expand defaultFilterKey in filter field tree - const expandedFilterIds = [ALL_FILTERS].concat(chartId); + const expandedFilterIds = [ALL_FILTERS_ROOT].concat(chartId); const filterScopeTreeEntry = buildFilterScopeTreeEntry({ checkedFilterFields, @@ -224,13 +224,13 @@ export default class FilterScopeSelector extends React.PureComponent { const { filterScopeMap } = this.state; const filterScopeTreeEntry = buildFilterScopeTreeEntry({ checkedFilterFields, - activeFilterField: '', + activeFilterField: null, filterScopeMap, layout, }); this.setState(() => ({ - activeFilterField: '', + activeFilterField: null, checkedFilterFields, filterScopeMap: { ...filterScopeMap, @@ -263,13 +263,13 @@ export default class FilterScopeSelector extends React.PureComponent { if (nextActiveFilterField === currentActiveFilterField) { const filterScopeTreeEntry = buildFilterScopeTreeEntry({ checkedFilterFields, - activeFilterField: '', + activeFilterField: null, filterScopeMap, layout, }); this.setState({ - activeFilterField: '', + activeFilterField: null, filterScopeMap: { ...filterScopeMap, ...filterScopeTreeEntry, @@ -315,7 +315,7 @@ export default class FilterScopeSelector extends React.PureComponent { ), ); - // save do not close modal + // save does not close modal } filterTree() { @@ -467,10 +467,10 @@ export default class FilterScopeSelector extends React.PureComponent { return ( <div className="selected-fields multi-edit-mode"> - {currentFilterLabels.length === 0 && t('No filters are selected.')} - {currentFilterLabels.length === 1 && t('Editing 1 filter: ')} + {currentFilterLabels.length === 0 && t('No filter is selected.')} + {currentFilterLabels.length === 1 && t('Editing 1 filter:')} {currentFilterLabels.length > 1 && - t('Batch editing %d filters: ', currentFilterLabels.length)} + t('Batch editing %d filters:', currentFilterLabels.length)} <span className="selected-scopes"> {currentFilterLabels.join(', ')} </span> @@ -490,7 +490,7 @@ export default class FilterScopeSelector extends React.PureComponent { </div> {!showSelector ? ( - <div>{t('There are no filters in this dashboard')}</div> + <div>{t('There are no filters in this dashboard.')}</div> ) : ( <div className="filters-scope-selector"> <div className={cx('filter-field-pane multi-edit-mode')}> diff --git a/superset/assets/src/dashboard/components/filterscope/FilterScopeTree.jsx b/superset/assets/src/dashboard/components/filterscope/FilterScopeTree.jsx index b713362..e433f15 100644 --- a/superset/assets/src/dashboard/components/filterscope/FilterScopeTree.jsx +++ b/superset/assets/src/dashboard/components/filterscope/FilterScopeTree.jsx @@ -40,7 +40,11 @@ const propTypes = { ).isRequired, onCheck: PropTypes.func.isRequired, onExpand: PropTypes.func.isRequired, - selectedChartId: PropTypes.number.isRequired, + selectedChartId: PropTypes.oneOfType([null, PropTypes.number]), +}; + +const defaultProps = { + selectedChartId: null, }; const NOOP = () => {}; @@ -68,7 +72,7 @@ export default function FilterScopeTree({ expanded = [], onCheck, onExpand, - selectedChartId = 0, + selectedChartId, }) { return ( <CheckboxTree @@ -87,3 +91,4 @@ export default function FilterScopeTree({ } FilterScopeTree.propTypes = propTypes; +FilterScopeTree.defaultProps = defaultProps; diff --git a/superset/assets/src/dashboard/components/filterscope/renderFilterFieldTreeNodes.jsx b/superset/assets/src/dashboard/components/filterscope/renderFilterFieldTreeNodes.jsx index 2cfec5a..5ffd49e 100644 --- a/superset/assets/src/dashboard/components/filterscope/renderFilterFieldTreeNodes.jsx +++ b/superset/assets/src/dashboard/components/filterscope/renderFilterFieldTreeNodes.jsx @@ -21,12 +21,13 @@ import React from 'react'; import FilterFieldItem from './FilterFieldItem'; import { getFilterColorMap } from '../../util/dashboardFiltersColorMap'; -export default function renderFilterFieldTreeNodes({ - nodes = [], - activeKey = '', -}) { +export default function renderFilterFieldTreeNodes({ nodes, activeKey }) { + if (!nodes) { + return []; + } + const root = nodes[0]; - const allFilterNodes = nodes[0].children; + const allFilterNodes = root.children; const children = allFilterNodes.map(node => ({ ...node, children: node.children.map(child => { diff --git a/superset/assets/src/dashboard/components/filterscope/renderFilterScopeTreeNodes.jsx b/superset/assets/src/dashboard/components/filterscope/renderFilterScopeTreeNodes.jsx index b08a207..f4a85cf 100644 --- a/superset/assets/src/dashboard/components/filterscope/renderFilterScopeTreeNodes.jsx +++ b/superset/assets/src/dashboard/components/filterscope/renderFilterScopeTreeNodes.jsx @@ -22,7 +22,7 @@ import cx from 'classnames'; import ChartIcon from '../../../components/ChartIcon'; import { CHART_TYPE } from '../../util/componentTypes'; -function traverse({ currentNode, selectedChartId }) { +function traverse({ currentNode = {}, selectedChartId }) { if (!currentNode) { return null; } @@ -65,9 +65,10 @@ function traverse({ currentNode, selectedChartId }) { }; } -export default function renderFilterScopeTreeNodes({ - nodes = [], - selectedChartId = 0, -}) { +export default function renderFilterScopeTreeNodes({ nodes, selectedChartId }) { + if (!nodes) { + return []; + } + return nodes.map(node => traverse({ currentNode: node, selectedChartId })); } diff --git a/superset/assets/src/dashboard/reducers/dashboardFilters.js b/superset/assets/src/dashboard/reducers/dashboardFilters.js index 224b50b..4c1f14d 100644 --- a/superset/assets/src/dashboard/reducers/dashboardFilters.js +++ b/superset/assets/src/dashboard/reducers/dashboardFilters.js @@ -36,8 +36,8 @@ export const DASHBOARD_FILTER_SCOPE_GLOBAL = { export const dashboardFilter = { chartId: 0, - componentId: '', - filterName: '', + componentId: null, + filterName: null, directPathToFilter: [], isDateFilter: false, isInstantFilter: true, diff --git a/superset/assets/src/dashboard/stylesheets/filter-scope-selector.less b/superset/assets/src/dashboard/stylesheets/filter-scope-selector.less index 9f3822b..dd19a66 100644 --- a/superset/assets/src/dashboard/stylesheets/filter-scope-selector.less +++ b/superset/assets/src/dashboard/stylesheets/filter-scope-selector.less @@ -38,6 +38,10 @@ &.multi-edit-mode { visibility: visible; } + + .selected-scopes { + padding-left: 5px; + } } } diff --git a/superset/assets/src/dashboard/util/buildFilterScopeTreeEntry.js b/superset/assets/src/dashboard/util/buildFilterScopeTreeEntry.js index 318a0f6..e91ac51 100644 --- a/superset/assets/src/dashboard/util/buildFilterScopeTreeEntry.js +++ b/superset/assets/src/dashboard/util/buildFilterScopeTreeEntry.js @@ -23,7 +23,7 @@ import getSelectedChartIdForFilterScopeTree from './getSelectedChartIdForFilterS export default function buildFilterScopeTreeEntry({ checkedFilterFields = [], - activeFilterField = '', + activeFilterField, filterScopeMap = {}, layout = {}, }) { diff --git a/superset/assets/src/dashboard/util/constants.js b/superset/assets/src/dashboard/util/constants.js index 25f9474..5eae2a8 100644 --- a/superset/assets/src/dashboard/util/constants.js +++ b/superset/assets/src/dashboard/util/constants.js @@ -78,4 +78,4 @@ export const FILTER_INDICATORS_DISPLAY_LENGTH = 3; export const IN_COMPONENT_ELEMENT_TYPES = ['LABEL']; // filter scope selector filter fields pane root id -export const ALL_FILTERS = 'ALL_FILTERS'; +export const ALL_FILTERS_ROOT = 'ALL_FILTERS_ROOT'; diff --git a/superset/assets/src/dashboard/util/getFilterFieldNodesTree.js b/superset/assets/src/dashboard/util/getFilterFieldNodesTree.js index 4ec9817..b55d28f 100644 --- a/superset/assets/src/dashboard/util/getFilterFieldNodesTree.js +++ b/superset/assets/src/dashboard/util/getFilterFieldNodesTree.js @@ -19,7 +19,7 @@ import { t } from '@superset-ui/translation'; import { getDashboardFilterKey } from './getDashboardFilterKey'; -import { ALL_FILTERS } from './constants'; +import { ALL_FILTERS_ROOT } from './constants'; export default function getFilterFieldNodesTree({ dashboardFilters = {} }) { const allFilters = Object.values(dashboardFilters).map(dashboardFilter => { @@ -38,7 +38,7 @@ export default function getFilterFieldNodesTree({ dashboardFilters = {} }) { return [ { - value: ALL_FILTERS, + value: ALL_FILTERS_ROOT, label: t('Select/deselect all filters'), children: allFilters, }, diff --git a/superset/assets/src/dashboard/util/getFilterScopeNodesTree.js b/superset/assets/src/dashboard/util/getFilterScopeNodesTree.js index 4d4279c..470ac08 100644 --- a/superset/assets/src/dashboard/util/getFilterScopeNodesTree.js +++ b/superset/assets/src/dashboard/util/getFilterScopeNodesTree.js @@ -17,6 +17,7 @@ * under the License. */ import { isEmpty } from 'lodash'; +import { t } from '@superset-ui/translation'; import { DASHBOARD_ROOT_ID } from './constants'; import { @@ -31,14 +32,19 @@ function traverse({ currentNode = {}, components = {}, filterFields = [], - selectedChartId = 0, + selectedChartId, }) { if (!currentNode) { return null; } const type = currentNode.type; - if (CHART_TYPE === type && currentNode.meta.chartId) { + if ( + CHART_TYPE === type && + currentNode && + currentNode.meta && + currentNode.meta.chartId + ) { const chartNode = { value: currentNode.meta.chartId, label: @@ -78,9 +84,9 @@ function traverse({ } if (FILTER_SCOPE_CONTAINER_TYPES.includes(type)) { - let label = ''; + let label = null; if (type === DASHBOARD_ROOT_TYPE) { - label = 'Select/deselect all charts'; + label = t('Select/deselect all charts'); } else { label = currentNode.meta && currentNode.meta.text @@ -102,7 +108,7 @@ function traverse({ export default function getFilterScopeNodesTree({ components = {}, filterFields = [], - selectedChartId = 0, + selectedChartId, }) { if (isEmpty(components)) { return []; diff --git a/superset/assets/src/dashboard/util/getSelectedChartIdForFilterScopeTree.js b/superset/assets/src/dashboard/util/getSelectedChartIdForFilterScopeTree.js index 257ec2e..cde72e3 100644 --- a/superset/assets/src/dashboard/util/getSelectedChartIdForFilterScopeTree.js +++ b/superset/assets/src/dashboard/util/getSelectedChartIdForFilterScopeTree.js @@ -44,10 +44,10 @@ export default function getSelectedChartIdForFilterScopeTree({ getChartIdAndColumnFromFilterKey(filterKey).chartId !== chartId, ) ) { - return 0; + return null; } return chartId; } - return 0; + return null; }
