From cc361223daf0c462e588a614c9037222c117e679 Mon Sep 17 00:00:00 2001 From: Pascal Mugnier Date: Wed, 10 Oct 2018 10:35:04 +0200 Subject: [PATCH] Apply feedbacks --- .../components/nav/global/GlobalNavPlus.tsx | 24 +++++++++++++-- .../global/__tests__/GlobalNavPlus-test.tsx | 6 +--- .../global/components/AllHoldersList.tsx | 2 ++ .../project/components/AllHoldersList.tsx | 2 ++ .../shared/components/HoldersList.tsx | 30 +++++++++++-------- .../resources/org/sonar/l10n/core.properties | 4 +-- 6 files changed, 46 insertions(+), 22 deletions(-) diff --git a/server/sonar-web/src/main/js/app/components/nav/global/GlobalNavPlus.tsx b/server/sonar-web/src/main/js/app/components/nav/global/GlobalNavPlus.tsx index 1f67682cdc8..47a424a0e54 100644 --- a/server/sonar-web/src/main/js/app/components/nav/global/GlobalNavPlus.tsx +++ b/server/sonar-web/src/main/js/app/components/nav/global/GlobalNavPlus.tsx @@ -23,10 +23,11 @@ import CreateFormShim from '../../../../apps/portfolio/components/CreateFormShim import Dropdown from '../../../../components/controls/Dropdown'; import PlusIcon from '../../../../components/icons-components/PlusIcon'; import { AppState, hasGlobalPermission, CurrentUser } from '../../../types'; -import { getPortfolioAdminUrl } from '../../../../helpers/urls'; +import { getPortfolioAdminUrl, getPortfolioUrl } from '../../../../helpers/urls'; import { getExtensionStart } from '../../extensions/utils'; import { isSonarCloud } from '../../../../helpers/system'; import { translate } from '../../../../helpers/l10n'; +import { getComponentNavigation } from '../../../../api/nav'; interface Props { appState: Pick; @@ -81,8 +82,20 @@ export class GlobalNavPlus extends React.PureComponent { - this.closeCreatePortfolioForm(); - this.props.router.push(getPortfolioAdminUrl(key, qualifier)); + return getComponentNavigation({ componentKey: key }).then(data => { + if ( + data.configuration && + data.configuration.extensions && + data.configuration.extensions.find( + (item: { key: string; name: string }) => item.key === 'governance/console' + ) + ) { + this.props.router.push(getPortfolioAdminUrl(key, qualifier)); + } else { + this.props.router.push(getPortfolioUrl(key)); + } + this.closeCreatePortfolioForm(); + }); }; renderCreateProject() { @@ -132,9 +145,14 @@ export class GlobalNavPlus extends React.PureComponent { }); it('should display create new project link when user has permission only', () => { - expect( - getOverlayWrapper(getWrapper({}, [])) - .find('.js-new-project') - .exists() - ).toBe(false); + expect(getWrapper({}, []).find('Dropdown').length).toEqual(0); }); it('should display create new organization on SonarCloud only', () => { diff --git a/server/sonar-web/src/main/js/apps/permissions/global/components/AllHoldersList.tsx b/server/sonar-web/src/main/js/apps/permissions/global/components/AllHoldersList.tsx index 9adccff9343..0282227203b 100644 --- a/server/sonar-web/src/main/js/apps/permissions/global/components/AllHoldersList.tsx +++ b/server/sonar-web/src/main/js/apps/permissions/global/components/AllHoldersList.tsx @@ -104,11 +104,13 @@ export class AllHoldersList extends React.PureComponent { return ( <> { return ( <> void; onToggleGroup: (group: PermissionGroup, permission: string) => Promise; onToggleUser: (user: PermissionUser, permission: string) => Promise; permissions: PermissionDefinitions; + query?: string; selectedPermission?: string; showPublicProjectsWarning?: boolean; users: PermissionUser[]; } interface State { - permissionsCount: { [key: string]: number }; + initialPermissionsCount: { [key: string]: number }; } - export default class HoldersList extends React.PureComponent { - state: State = { permissionsCount: {} }; + state: State = { initialPermissionsCount: {} }; + componentDidUpdate(prevProps: Props) { + if (this.props.filter !== prevProps.filter || this.props.query !== prevProps.query) { + this.setState({ initialPermissionsCount: {} }); + } + } isPermissionUser(item: PermissionGroup | PermissionUser): item is PermissionUser { return (item as PermissionUser).login !== undefined; @@ -51,10 +57,10 @@ export default class HoldersList extends React.PureComponent { handleGroupToggle = (group: PermissionGroup, permission: string) => { const key = group.id || group.name; - if (this.state.permissionsCount[key] === undefined) { + if (this.state.initialPermissionsCount[key] === undefined) { this.setState(state => ({ - permissionsCount: { - ...state.permissionsCount, + initialPermissionsCount: { + ...state.initialPermissionsCount, [key]: group.permissions.length } })); @@ -63,10 +69,10 @@ export default class HoldersList extends React.PureComponent { }; handleUserToggle = (user: PermissionUser, permission: string) => { - if (this.state.permissionsCount[user.login] === undefined) { + if (this.state.initialPermissionsCount[user.login] === undefined) { this.setState(state => ({ - permissionsCount: { - ...state.permissionsCount, + initialPermissionsCount: { + ...state.initialPermissionsCount, [user.login]: user.permissions.length } })); @@ -76,8 +82,8 @@ export default class HoldersList extends React.PureComponent { getItemInitialPermissionsCount = (item: PermissionGroup | PermissionUser) => { const key = this.isPermissionUser(item) ? item.login : item.id || item.name; - return this.state.permissionsCount[key] !== undefined - ? this.state.permissionsCount[key] + return this.state.initialPermissionsCount[key] !== undefined + ? this.state.initialPermissionsCount[key] : item.permissions.length; }; 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 4004b7f1a28..1ecb09e8b4b 100644 --- a/sonar-core/src/main/resources/org/sonar/l10n/core.properties +++ b/sonar-core/src/main/resources/org/sonar/l10n/core.properties @@ -2120,8 +2120,8 @@ permission_template.edit_permissions=Edit Permissions: {0} permission_template.key_pattern=Project key pattern permission_template.key_pattern.description=Should be a valid regular expression permission_template.default_for=Default for {0} -permission_templates.project_creators=Project Creators -permission_templates.project_creators.explanation=When a new project / portfolio / application is created, the user who creates the project will receive this permission on the project. +permission_templates.project_creators=Project/Portfolio/Application Creators +permission_templates.project_creators.explanation=When a new project / portfolio / application is created, the user who creates the project / portfolio / application will receive this permission on the project / portfolio / application. permission_templates.bulk_apply_permission_template=Bulk Apply Permission Template permission_templates.bulk_apply_permission_template.apply_to_selected=You're about to apply the selected permission template to {0} selected item(s). permission_templates.bulk_apply_permission_template.apply_to_all=You're about to apply the selected permission template to {0} item(s). -- 2.39.5