From: Stas Vilchik Date: Fri, 17 Mar 2017 09:34:33 +0000 (+0100) Subject: SONAR-8959 display portfolios link near projects link (#1802) X-Git-Tag: 6.4-RC1~753 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=64641b01816cbc98fbf74a955106b14f6ac1fd14;p=sonarqube.git SONAR-8959 display portfolios link near projects link (#1802) --- diff --git a/server/sonar-web/src/main/js/app/components/extensions/Extension.js b/server/sonar-web/src/main/js/app/components/extensions/Extension.js index 3889e58612d..7b87579722d 100644 --- a/server/sonar-web/src/main/js/app/components/extensions/Extension.js +++ b/server/sonar-web/src/main/js/app/components/extensions/Extension.js @@ -25,6 +25,7 @@ import { addGlobalErrorMessage } from '../../../store/globalMessages/duck'; import { getCurrentUser } from '../../../store/rootReducer'; import { translate } from '../../../helpers/l10n'; import { getExtensionStart } from './utils'; +import getStore from '../../utils/getStore'; type Props = { currentUser: Object, @@ -58,7 +59,9 @@ class Extension extends React.Component { } handleStart = (start: Function) => { + const store = getStore(); this.stop = start({ + store, el: this.container, currentUser: this.props.currentUser, router: this.props.router, diff --git a/server/sonar-web/src/main/js/app/components/extensions/PortfoliosPage.js b/server/sonar-web/src/main/js/app/components/extensions/PortfoliosPage.js new file mode 100644 index 00000000000..c899d29ad0a --- /dev/null +++ b/server/sonar-web/src/main/js/app/components/extensions/PortfoliosPage.js @@ -0,0 +1,32 @@ +/* + * SonarQube + * Copyright (C) 2009-2017 SonarSource SA + * mailto:info AT sonarsource DOT com + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +// @flow +import React from 'react'; +import GlobalPageExtension from './GlobalPageExtension'; + +export default class PortfoliosPage extends React.Component { + render () { + return ( + + ); + } +} diff --git a/server/sonar-web/src/main/js/app/components/nav/global/GlobalNavMenu.js b/server/sonar-web/src/main/js/app/components/nav/global/GlobalNavMenu.js index b1e556af9d0..7eebc3d0393 100644 --- a/server/sonar-web/src/main/js/app/components/nav/global/GlobalNavMenu.js +++ b/server/sonar-web/src/main/js/app/components/nav/global/GlobalNavMenu.js @@ -47,6 +47,16 @@ export default class GlobalNavMenu extends React.Component { ); } + renderPortfolios() { + return ( +
  • + + {translate('portfolios.page')} + +
  • + ); + } + renderIssuesLink() { const query = this.props.currentUser.isLoggedIn ? '#resolved=false|assigned_to_me=true' @@ -114,7 +124,8 @@ export default class GlobalNavMenu extends React.Component { renderMore() { const { globalPages } = this.props.appState; - if (globalPages.length === 0) { + const withoutPortfolios = globalPages.filter(page => page.key !== 'governance/portfolios'); + if (withoutPortfolios.length === 0) { return null; } return ( @@ -124,16 +135,19 @@ export default class GlobalNavMenu extends React.Component {
      - {globalPages.map(this.renderGlobalPageLink)} + {withoutPortfolios.map(this.renderGlobalPageLink)}
    ); } render() { + const governanceInstalled = this.props.appState.qualifiers.includes('VW'); + return (
      {this.renderProjects()} + {governanceInstalled && this.renderPortfolios()} {this.renderIssuesLink()} {this.renderRulesLink()} {this.renderProfilesLink()} diff --git a/server/sonar-web/src/main/js/app/components/nav/global/__tests__/GlobalNavMenu-test.js b/server/sonar-web/src/main/js/app/components/nav/global/__tests__/GlobalNavMenu-test.js index 8631913e07f..d21f3f609ee 100644 --- a/server/sonar-web/src/main/js/app/components/nav/global/__tests__/GlobalNavMenu-test.js +++ b/server/sonar-web/src/main/js/app/components/nav/global/__tests__/GlobalNavMenu-test.js @@ -23,7 +23,8 @@ import GlobalNavMenu from '../GlobalNavMenu'; it('should work with extensions', () => { const appState = { - globalPages: [{ key: 'foo', name: 'Foo' }] + globalPages: [{ key: 'foo', name: 'Foo' }], + qualifiers: ['TRK'] }; const currentUser = { isLoggedIn: false, diff --git a/server/sonar-web/src/main/js/app/utils/exposeLibraries.js b/server/sonar-web/src/main/js/app/utils/exposeLibraries.js index 6dc1cf76fcd..843319f2341 100644 --- a/server/sonar-web/src/main/js/app/utils/exposeLibraries.js +++ b/server/sonar-web/src/main/js/app/utils/exposeLibraries.js @@ -18,13 +18,21 @@ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ import moment from 'moment'; +import * as ReactRedux from 'react-redux'; import * as measures from '../../helpers/measures'; import * as request from '../../helpers/request'; +import FavoriteContainer from '../../components/controls/FavoriteContainer'; +import ListFooter from '../../components/controls/ListFooter'; const exposeLibraries = () => { window.moment = moment; + window.ReactRedux = ReactRedux; window.SonarMeasures = measures; window.SonarRequest = request; + window.SonarComponents = { + FavoriteContainer, + ListFooter + }; }; export default exposeLibraries; diff --git a/server/sonar-web/src/main/js/app/utils/startReactApp.js b/server/sonar-web/src/main/js/app/utils/startReactApp.js index 71f53ddfe0f..5f92bfa3697 100644 --- a/server/sonar-web/src/main/js/app/utils/startReactApp.js +++ b/server/sonar-web/src/main/js/app/utils/startReactApp.js @@ -32,6 +32,7 @@ import ProjectAdminContainer from '../components/ProjectAdminContainer'; import ProjectPageExtension from '../components/extensions/ProjectPageExtension'; import ProjectAdminPageExtension from '../components/extensions/ProjectAdminPageExtension'; import ViewDashboard from '../components/extensions/ViewDashboard'; +import PortfoliosPage from '../components/extensions/PortfoliosPage'; import AdminContainer from '../components/AdminContainer'; import GlobalPageExtension from '../components/extensions/GlobalPageExtension'; import GlobalAdminPageExtension from '../components/extensions/GlobalAdminPageExtension'; @@ -93,6 +94,8 @@ const startReactApp = () => { }} /> + + @@ -126,6 +129,7 @@ const startReactApp = () => { {organizationsRouters} {projectsRoutes} {qualityGatesRoutes} + {qualityProfilesRoutes} {webAPIRoutes} diff --git a/sonar-core/src/main/resources/org/sonar/l10n/core.properties b/sonar-core/src/main/resources/org/sonar/l10n/core.properties index 5e5ca82eddd..30915d79865 100644 --- a/sonar-core/src/main/resources/org/sonar/l10n/core.properties +++ b/sonar-core/src/main/resources/org/sonar/l10n/core.properties @@ -560,6 +560,7 @@ source.page=Source timemachine.page=Time Machine comparison.page=Compare view_projects.page=Projects +portfolios.page=Portfolios project_activity.page=Activity project_activity.page.description=The page shows the history of project analyses.