@@ -53,7 +53,12 @@ export default function MembersPageHeader(props: Props) { | |||
{almKey && | |||
isGithub(almKey) && | |||
!showSyncNotif && ( | |||
<SyncMemberForm organization={organization} refreshMembers={refreshMembers} /> | |||
<SyncMemberForm | |||
buttonText={translate('organization.members.config_synchro')} | |||
hasOtherMembers={members && members.length > 1} | |||
organization={organization} | |||
refreshMembers={refreshMembers} | |||
/> | |||
)} | |||
{!hasMemberSync && ( | |||
<div className="display-inline-block spacer-left spacer-bottom"> | |||
@@ -91,7 +96,12 @@ export default function MembersPageHeader(props: Props) { | |||
translate('organization', almKey) | |||
)} | |||
<span className="spacer-left"> | |||
<SyncMemberForm organization={organization} refreshMembers={refreshMembers} /> | |||
<SyncMemberForm | |||
buttonText={translate('configure')} | |||
hasOtherMembers={members && members.length > 1} | |||
organization={organization} | |||
refreshMembers={refreshMembers} | |||
/> | |||
</span> | |||
</Alert> | |||
)} |
@@ -30,7 +30,9 @@ import { translate, translateWithParameters } from '../../helpers/l10n'; | |||
import { fetchOrganization } from '../../store/rootActions'; | |||
interface Props { | |||
buttonText: string; | |||
fetchOrganization: (key: string) => void; | |||
hasOtherMembers?: boolean; | |||
organization: T.Organization; | |||
refreshMembers: () => Promise<void>; | |||
} | |||
@@ -91,8 +93,9 @@ export class SyncMemberForm extends React.PureComponent<Props, State> { | |||
renderModalBody = () => { | |||
const { membersSync } = this.state; | |||
const { organization } = this.props; | |||
const { hasOtherMembers, organization } = this.props; | |||
const almKey = organization.alm && sanitizeAlmId(organization.alm.key); | |||
const showWarning = hasOtherMembers && organization.alm && !organization.alm.membersSync; | |||
return ( | |||
<div className="display-flex-stretch big-spacer-top"> | |||
<RadioCard | |||
@@ -136,11 +139,15 @@ export class SyncMemberForm extends React.PureComponent<Props, State> { | |||
<li>{translate('organization.members.management.choose_members_permissions')}</li> | |||
</ul> | |||
</div> | |||
{(!organization.alm || !organization.alm.membersSync) && ( | |||
<Alert className="big-spacer-top" variant="warning"> | |||
{translate('organization.members.management.automatic.warning')} | |||
</Alert> | |||
)} | |||
{almKey && | |||
showWarning && ( | |||
<Alert className="big-spacer-top" variant="warning"> | |||
{translateWithParameters( | |||
'organization.members.management.automatic.warning_x', | |||
translate('organization', almKey) | |||
)} | |||
</Alert> | |||
)} | |||
</RadioCard> | |||
</div> | |||
); | |||
@@ -159,7 +166,7 @@ export class SyncMemberForm extends React.PureComponent<Props, State> { | |||
modalHeaderDescription={this.renderModalDescription()} | |||
onConfirm={this.handleConfirm} | |||
size={'medium'}> | |||
{({ onClick }) => <Button onClick={onClick}>{translate('configure')}</Button>} | |||
{({ onClick }) => <Button onClick={onClick}>{this.props.buttonText}</Button>} | |||
</ConfirmButton> | |||
); | |||
} |
@@ -69,7 +69,9 @@ it('should allow to switch to manual mode', async () => { | |||
function shallowRender(props: Partial<SyncMemberForm['props']> = {}) { | |||
return shallow<SyncMemberForm>( | |||
<SyncMemberForm | |||
buttonText="configure" | |||
fetchOrganization={jest.fn()} | |||
hasOtherMembers={true} | |||
organization={mockOrganizationWithAlm()} | |||
refreshMembers={jest.fn().mockResolvedValue({})} | |||
{...props} |
@@ -174,6 +174,8 @@ exports[`should render for GitHub bound organization without sync 1`] = ` | |||
className="spacer-left" | |||
> | |||
<Connect(SyncMemberForm) | |||
buttonText="configure" | |||
hasOtherMembers={false} | |||
organization={ | |||
Object { | |||
"actions": Object { |
@@ -63,7 +63,7 @@ exports[`should allow to switch to automatic mode 1`] = ` | |||
className="big-spacer-top" | |||
variant="warning" | |||
> | |||
organization.members.management.automatic.warning | |||
organization.members.management.automatic.warning_x.organization.github | |||
</Alert> | |||
</RadioCard> | |||
</div> |
@@ -2689,7 +2689,7 @@ organization.members.management.manual.add_members_manually=Admin add members ma | |||
organization.members.management.automatic=Automatic sync with {0} | |||
organization.members.management.automatic.synchronized_from_x=Members are synchronized automatically from your {0} | |||
organization.members.management.automatic.members_changes_reflected.github=If you add or remove a member on GitHub, SonarCloud immediately reflects the changes | |||
organization.members.management.automatic.warning=This will override your current Members and Permissions configuration | |||
organization.members.management.automatic.warning_x=This will override your current Members, removing those that are not part of your {0}. | |||
organization.members.management.choose_members_permissions=Admin manages permissions for each member in SonarCloud | |||
organization.paid_plan.badge=Paid plan | |||
organization.default_visibility_of_new_projects=Default visibility of new projects: |