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

graceguo pushed a commit to branch feature--dashboard-scoped-filter
in repository https://gitbox.apache.org/repos/asf/incubator-superset.git


The following commit(s) were added to 
refs/heads/feature--dashboard-scoped-filter by this push:
     new 26e6b6f  [dashboard scoped filter] Improve scrollbar inside modal 
(#8553)
26e6b6f is described below

commit 26e6b6f39f18c7cfc6b183f2164a2dd9cd224a87
Author: Grace Guo <[email protected]>
AuthorDate: Thu Nov 14 17:28:06 2019 -0800

    [dashboard scoped filter] Improve scrollbar inside modal (#8553)
    
    * improve scroll inside modal
    
    * make left pane and right pane scroll separately
    
    * fix review comments
---
 .../components/filterscope/FilterScopeSelector.jsx | 19 +++++----
 .../filterscope/renderFilterFieldTreeNodes.jsx     |  1 +
 .../stylesheets/filter-scope-selector.less         | 48 +++++++++++++++++-----
 .../src/dashboard/util/getFilterFieldNodesTree.js  |  2 +
 4 files changed, 51 insertions(+), 19 deletions(-)

diff --git 
a/superset/assets/src/dashboard/components/filterscope/FilterScopeSelector.jsx 
b/superset/assets/src/dashboard/components/filterscope/FilterScopeSelector.jsx
index 9435d7b..aeab376 100644
--- 
a/superset/assets/src/dashboard/components/filterscope/FilterScopeSelector.jsx
+++ 
b/superset/assets/src/dashboard/components/filterscope/FilterScopeSelector.jsx
@@ -487,15 +487,17 @@ export default class FilterScopeSelector extends 
React.PureComponent {
     const { showSelector } = this.state;
 
     return (
-      <React.Fragment>
-        <div className="filter-scope-container">
-          <div className="filter-scope-header">
-            <h4>{t('Configure filter scopes')}</h4>
-            {showSelector && this.renderEditingFiltersName()}
-          </div>
+      <div className="filter-scope-container">
+        <div className="filter-scope-header">
+          <h4>{t('Configure filter scopes')}</h4>
+          {showSelector && this.renderEditingFiltersName()}
+        </div>
 
+        <div className="filter-scope-body">
           {!showSelector ? (
-            <div>{t('There are no filters in this dashboard.')}</div>
+            <div className="warning-message">
+              {t('There are no filters in this dashboard.')}
+            </div>
           ) : (
             <div className="filters-scope-selector">
               <div className={cx('filter-field-pane multi-edit-mode')}>
@@ -507,6 +509,7 @@ export default class FilterScopeSelector extends 
React.PureComponent {
             </div>
           )}
         </div>
+
         <div className="dashboard-modal-actions-container">
           <Button onClick={this.onClose}>{t('Close')}</Button>
           {showSelector && (
@@ -515,7 +518,7 @@ export default class FilterScopeSelector extends 
React.PureComponent {
             </Button>
           )}
         </div>
-      </React.Fragment>
+      </div>
     );
   }
 }
diff --git 
a/superset/assets/src/dashboard/components/filterscope/renderFilterFieldTreeNodes.jsx
 
b/superset/assets/src/dashboard/components/filterscope/renderFilterFieldTreeNodes.jsx
index 5ffd49e..5a3264c 100644
--- 
a/superset/assets/src/dashboard/components/filterscope/renderFilterFieldTreeNodes.jsx
+++ 
b/superset/assets/src/dashboard/components/filterscope/renderFilterFieldTreeNodes.jsx
@@ -49,6 +49,7 @@ export default function renderFilterFieldTreeNodes({ nodes, 
activeKey }) {
   return [
     {
       ...root,
+      label: <span className="root">{root.label}</span>,
       children,
     },
   ];
diff --git 
a/superset/assets/src/dashboard/stylesheets/filter-scope-selector.less 
b/superset/assets/src/dashboard/stylesheets/filter-scope-selector.less
index 6df2826..0f65c7f 100644
--- a/superset/assets/src/dashboard/stylesheets/filter-scope-selector.less
+++ b/superset/assets/src/dashboard/stylesheets/filter-scope-selector.less
@@ -19,14 +19,44 @@
 @import "../../../stylesheets/less/cosmo/variables.less";
 
 .filter-scope-container {
+  display: flex;
+  flex-direction: column;
+  height: 80%;
+  margin-right: -24px;
   font-size: 14px;
 
   .nav.nav-tabs {
     border: none;
   }
+
+  .filter-scope-body {
+    flex: 1;
+    max-height: calc(100% - 128px);
+
+    .filter-field-pane,
+    .filter-scope-pane {
+      overflow-y: scroll;
+    }
+  }
+
+  .dashboard-modal-actions-container {
+    height: 64px;
+    border-top: 1px solid #ccc;
+    padding: 24px;
+    margin: 0 0 0 -24px;
+  }
+
+  .warning-message {
+    padding: 24px;
+  }
 }
 
 .filter-scope-header {
+  height: 64px;
+  border-bottom: 1px solid #ccc;
+  padding-left: 24px;
+  margin-left: -24px;
+
   h4 {
     margin-top: 0;
   }
@@ -46,13 +76,10 @@
 }
 
 .filters-scope-selector {
-  margin: 10px -24px 20px;
   display: flex;
   flex-direction: row;
   position: relative;
-  border: 1px solid #ccc;
-  border-left: none;
-  border-right: none;
+  height: 100%;
 
   a, a:active, a:hover {
     color: @almost-black;
@@ -81,7 +108,7 @@
   .filter-field-pane {
     position: relative;
     width: 40%;
-    padding: 16px 16px 16px 24px;
+    padding: 16px 16px 16px 0;
     border-right: 1px solid #ccc;
 
     .filter-container {
@@ -108,6 +135,10 @@
     }
 
     .react-checkbox-tree {
+      .rct-title .root {
+        font-weight: bold;
+      }
+
       .rct-text {
         height: 40px;
       }
@@ -159,11 +190,7 @@
       }
 
       &.root {
-        font-weight: 700;
-      }
-
-      &.tab {
-        font-weight: 700;
+        font-weight: bold;
       }
     }
 
@@ -196,7 +223,6 @@
 
     .rct-title {
       display: block;
-      font-weight: bold;
     }
 
     // disable style from react-checkbox-trees.css
diff --git a/superset/assets/src/dashboard/util/getFilterFieldNodesTree.js 
b/superset/assets/src/dashboard/util/getFilterFieldNodesTree.js
index 5d9b59e..b19d28c 100644
--- a/superset/assets/src/dashboard/util/getFilterFieldNodesTree.js
+++ b/superset/assets/src/dashboard/util/getFilterFieldNodesTree.js
@@ -20,6 +20,7 @@ import { t } from '@superset-ui/translation';
 
 import { getDashboardFilterKey } from './getDashboardFilterKey';
 import { ALL_FILTERS_ROOT } from './constants';
+import { DASHBOARD_ROOT_TYPE } from './componentTypes';
 
 export default function getFilterFieldNodesTree({ dashboardFilters = {} }) {
   const allFilters = Object.values(dashboardFilters).map(dashboardFilter => {
@@ -39,6 +40,7 @@ export default function getFilterFieldNodesTree({ 
dashboardFilters = {} }) {
   return [
     {
       value: ALL_FILTERS_ROOT,
+      type: DASHBOARD_ROOT_TYPE,
       label: t('All filters'),
       children: allFilters,
     },

Reply via email to