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;
 }

Reply via email to