]> source.dussan.org Git - sonarqube.git/commitdiff
SONARCLOUD-379 Display user sync warning message only if there are other members...
authorGrégoire Aubert <gregoire.aubert@sonarsource.com>
Wed, 27 Feb 2019 09:26:55 +0000 (10:26 +0100)
committersonartech <sonartech@sonarsource.com>
Wed, 6 Mar 2019 10:30:43 +0000 (11:30 +0100)
server/sonar-web/src/main/js/apps/organizationMembers/MembersPageHeader.tsx
server/sonar-web/src/main/js/apps/organizationMembers/SyncMemberForm.tsx
server/sonar-web/src/main/js/apps/organizationMembers/__tests__/SyncMemberForm-test.tsx
server/sonar-web/src/main/js/apps/organizationMembers/__tests__/__snapshots__/MembersPageHeader-test.tsx.snap
server/sonar-web/src/main/js/apps/organizationMembers/__tests__/__snapshots__/SyncMemberForm-test.tsx.snap
sonar-core/src/main/resources/org/sonar/l10n/core.properties

index 5bf10ce8799b51a89a042dcf580a27efdfd2cf01..89fe2e97ce96b14cdc5c297721027fddd40b8c45 100644 (file)
@@ -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>
           )}
index 826f70a4b1ce33acab6570f520d3d313c428b763..5f38c424a8f27d0be15914b71a109e71aa501b4d 100644 (file)
@@ -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>
     );
   }
index 2d959fdb109ed1bfaa4194e1047a6ad8f8de2a97..8d9d9b55d25fd6ad0fa08aebe7490f3fa2beb8af 100644 (file)
@@ -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}
index ca7ac6f19fb482a2d648ef3f6ff20f74fe353c77..9cc1eb93b37ebb886751071110683b82338aa3c1 100644 (file)
@@ -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 {
index c0a6253566e55dad9a6a791c182ca2de769e69d4..66187c5588d032a107a13a053aefcf166806a247 100644 (file)
@@ -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>
index 0aa845d5b527cec63dbf81edead11da7719fbfd3..6b3891f56d31b86236a2bba2f5e2b2739f6c1583 100644 (file)
@@ -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: