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<AppState, 'qualifiers'>;
};
handleCreatePortfolio = ({ key, qualifier }: { key: string; qualifier: string }) => {
- 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() {
render() {
const { currentUser } = this.props;
+ const canCreateProject = hasGlobalPermission(currentUser, 'provisioning');
const canCreateApplication = hasGlobalPermission(currentUser, 'applicationcreator');
const canCreatePortfolio = hasGlobalPermission(currentUser, 'portfoliocreator');
+ if (!canCreateProject && !canCreateApplication && !canCreatePortfolio) {
+ return null;
+ }
+
let defaultQualifier: string | undefined;
if (!canCreateApplication) {
defaultQualifier = 'VW';
});
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', () => {
return (
<>
<HoldersList
+ filter={this.props.filter}
groups={this.props.groups}
loading={this.props.loading}
onToggleGroup={this.handleToggleGroup}
onToggleUser={this.handleToggleUser}
permissions={permissions}
+ query={this.props.query}
users={this.props.users}>
<SearchForm
filter={this.props.filter}
return (
<>
<HoldersList
+ filter={this.props.filter}
groups={this.props.groups}
onSelectPermission={this.handleSelectPermission}
onToggleGroup={this.handleToggleGroup}
onToggleUser={this.handleToggleUser}
permissions={permissions}
+ query={this.props.query}
selectedPermission={this.props.selectedPermission}
users={this.props.users}>
<SearchForm
import { isPermissionDefinitionGroup } from '../../utils';
interface Props {
- loading?: boolean;
+ filter?: string;
groups: PermissionGroup[];
+ loading?: boolean;
onSelectPermission?: (permission: string) => void;
onToggleGroup: (group: PermissionGroup, permission: string) => Promise<void>;
onToggleUser: (user: PermissionUser, permission: string) => Promise<void>;
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<Props, State> {
- 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;
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
}
}));
};
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
}
}));
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;
};
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).