]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-8953 Isolate scrolling of facets sidebar on projects page
authorStas Vilchik <vilchiks@gmail.com>
Tue, 14 Mar 2017 12:55:47 +0000 (13:55 +0100)
committerStas Vilchik <stas-vilchik@users.noreply.github.com>
Tue, 14 Mar 2017 15:27:51 +0000 (16:27 +0100)
server/sonar-web/src/main/js/apps/projects/components/AllProjects.js
server/sonar-web/src/main/js/apps/projects/components/App.js
server/sonar-web/src/main/js/apps/projects/components/FavoriteFilter.js
server/sonar-web/src/main/js/apps/projects/components/PageHeader.js
server/sonar-web/src/main/js/apps/projects/components/PageSidebar.js
server/sonar-web/src/main/less/components/page.less

index f7fbe17c899300ae12966b01d2f04cb8355bc985..030dbb68e5e8c83f88a8ea27e714929eaae76c34 100644 (file)
@@ -18,6 +18,7 @@
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
 import React from 'react';
+import PageHeaderContainer from './PageHeaderContainer';
 import ProjectsListContainer from './ProjectsListContainer';
 import ProjectsListFooterContainer from './ProjectsListFooterContainer';
 import PageSidebar from './PageSidebar';
@@ -36,6 +37,7 @@ export default class AllProjects extends React.Component {
 
   componentDidMount () {
     this.handleQueryChange();
+    document.getElementById('footer').classList.add('search-navigator-footer');
   }
 
   componentDidUpdate (prevProps) {
@@ -44,6 +46,10 @@ export default class AllProjects extends React.Component {
     }
   }
 
+  componentWillUnmount () {
+    document.getElementById('footer').classList.remove('search-navigator-footer');
+  }
+
   handleQueryChange () {
     const query = parseUrlQuery(this.props.location.query);
     this.setState({ query });
@@ -54,24 +60,27 @@ export default class AllProjects extends React.Component {
     const isFiltered = Object.keys(this.state.query).some(key => this.state.query[key] != null);
 
     return (
-        <div className="page-with-sidebar page-with-left-sidebar projects-page">
-          <aside className="page-sidebar-fixed projects-sidebar">
+      <div className="page-with-sidebar page-with-left-sidebar projects-page">
+        <aside className="page-sidebar-fixed page-sidebar-sticky projects-sidebar">
+          <div className="page-sidebar-sticky-inner">
             <PageSidebar
-                query={this.state.query}
-                isFavorite={this.props.isFavorite}
-                organization={this.props.organization}/>
-          </aside>
-          <div className="page-main">
-            <ProjectsListContainer
-                isFavorite={this.props.isFavorite}
-                isFiltered={isFiltered}
-                organization={this.props.organization}/>
-            <ProjectsListFooterContainer
-                query={this.state.query}
-                isFavorite={this.props.isFavorite}
-                organization={this.props.organization}/>
+              query={this.state.query}
+              isFavorite={this.props.isFavorite}
+              organization={this.props.organization}/>
           </div>
+        </aside>
+        <div className="page-main">
+          <PageHeaderContainer/>
+          <ProjectsListContainer
+            isFavorite={this.props.isFavorite}
+            isFiltered={isFiltered}
+            organization={this.props.organization}/>
+          <ProjectsListFooterContainer
+            query={this.state.query}
+            isFavorite={this.props.isFavorite}
+            organization={this.props.organization}/>
         </div>
+      </div>
     );
   }
 }
index 4a0c0e9cae63705bad0cdc754fb420fdefb5f14d..0cf8a92fbdb3ebd7854f32bd3916a6ef154334ea 100644 (file)
@@ -19,7 +19,6 @@
  */
 import React from 'react';
 import Helmet from 'react-helmet';
-import PageHeaderContainer from './PageHeaderContainer';
 import { translate } from '../../../helpers/l10n';
 import '../styles.css';
 
@@ -36,7 +35,6 @@ export default class App extends React.Component {
     return (
         <div id="projects-page" className="page page-limited">
           <Helmet title={translate('projects.page')} titleTemplate="%s - SonarQube"/>
-          <PageHeaderContainer/>
           {this.props.children}
         </div>
     );
index af20cd02d1ff1620fcc492ccb525a5f9f6c2478b..c554ad6a86e0eaea14ed67993c0895c87e8e181e 100644 (file)
@@ -50,7 +50,7 @@ export default class FavoriteFilter extends React.PureComponent {
       : '/projects';
 
     return (
-      <div className="projects-sidebar pull-left text-center">
+      <header className="page-header text-center">
         <div className="button-group">
           <Link
             id="favorite-projects"
@@ -69,7 +69,7 @@ export default class FavoriteFilter extends React.PureComponent {
             {translate('all')}
           </IndexLink>
         </div>
-      </div>
+      </header>
     );
   }
 }
index 40ce58d1682a4b269f1d9d1efc600b89fdae4a23..f5beb136459d277858a5603129db6bb3bcbb8f86 100644 (file)
@@ -18,7 +18,6 @@
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
 import React from 'react';
-import FavoriteFilterContainer from './FavoriteFilterContainer';
 import { translate } from '../../../helpers/l10n';
 
 export default class PageHeader extends React.Component {
@@ -43,8 +42,6 @@ export default class PageHeader extends React.Component {
               </span>
             )}
           </div>
-
-          <FavoriteFilterContainer organization={this.props.organization}/>
         </header>
     );
   }
index a7e2788bc445b11461888322ea37bab236c9a1a2..f3c3a21b04e79fcfa67bc42712ec823c09b2fce7 100644 (file)
@@ -19,6 +19,7 @@
  */
 import React from 'react';
 import { Link } from 'react-router';
+import FavoriteFilterContainer from './FavoriteFilterContainer';
 import CoverageFilter from '../filters/CoverageFilter';
 import DuplicationsFilter from '../filters/DuplicationsFilter';
 import SizeFilter from '../filters/SizeFilter';
@@ -47,6 +48,8 @@ export default class PageSidebar extends React.PureComponent {
 
     return (
       <div className="search-navigator-facets-list">
+        <FavoriteFilterContainer/>
+
         <div className="projects-facets-header clearfix">
           {isFiltered &&
             <div className="projects-facets-reset">
index 47ef539658dc168176aac29daf3e371f0a9b8b37..04d5344dd8e58d2809bfd7fa05cf9e816f3e3c2e 100644 (file)
   .page-sidebar;
   width: 300px;
 }
+
+.page-sidebar-sticky {
+  padding-right: 0;
+
+  .page-limited & {
+    margin: -20px 0;
+    padding-right: 0 !important;
+
+    .page-sidebar-sticky-inner {
+      padding: 20px 0;
+    }
+  }
+
+  .page-sidebar-sticky-inner {
+    position: fixed;
+    top: 30px;
+    bottom: 0;
+    overflow: auto;
+    width: 290px;
+    border-right: 1px solid #e6e6e6;
+    box-sizing: border-box;
+
+    .search-navigator-facets-list {
+      width: 260px;
+    }
+  }
+}
\ No newline at end of file