]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-15120 Ease project creation page comprehension for admin
authorPhilippe Perrin <philippe.perrin@sonarsource.com>
Thu, 1 Jul 2021 08:06:48 +0000 (10:06 +0200)
committersonartech <sonartech@sonarsource.com>
Thu, 1 Jul 2021 20:03:19 +0000 (20:03 +0000)
server/sonar-web/src/main/js/apps/create/project/CreateProjectModeSelection.tsx
server/sonar-web/src/main/js/apps/create/project/__tests__/__snapshots__/CreateProjectModeSelection-test.tsx.snap
sonar-core/src/main/resources/org/sonar/l10n/core.properties

index 980c1c677ebd99e22190ca6028eedff139a3c32e..6d3fc17a105efac35444f9b81e4a86d6668cb542 100644 (file)
@@ -75,6 +75,19 @@ function renderAlmOption(
     );
   };
 
+  let errorMessage = '';
+
+  if (hasTooManyConfig) {
+    errorMessage = translateWithParameters(
+      'onboarding.create_project.too_many_alm_instances_X',
+      translate('alm', alm)
+    );
+  } else if (!hasConfig) {
+    errorMessage = canAdmin
+      ? translate('onboarding.create_project.alm_not_configured.admin')
+      : translate('onboarding.create_project.alm_not_configured');
+  }
+
   return (
     <div className="display-flex-column">
       <button
@@ -101,14 +114,9 @@ function renderAlmOption(
           </span>
         )}
 
-        {!loadingBindings && disabled && (
+        {!loadingBindings && errorMessage && (
           <p className="text-muted small spacer-top" style={{ lineHeight: 1.5 }}>
-            {!hasConfig && translate('onboarding.create_project.alm_not_configured')}
-            {hasTooManyConfig &&
-              translateWithParameters(
-                'onboarding.create_project.too_many_alm_instances_X',
-                translate('alm', alm)
-              )}
+            {errorMessage}
           </p>
         )}
       </button>
@@ -139,30 +147,29 @@ export function CreateProjectModeSelection(props: CreateProjectModeSelectionProp
         </div>
       </header>
 
-      <div className="create-project-modes huge-spacer-top display-flex-justify-center">
-        <button
-          className="button button-huge big-spacer-right display-flex-column create-project-mode-type-manual"
-          onClick={() => props.onSelectMode(CreateProjectModes.Manual)}
-          type="button">
-          <ChevronsIcon size={DEFAULT_ICON_SIZE} />
-          <div className="medium big-spacer-top">
-            {translate('onboarding.create_project.select_method.manual')}
-          </div>
-        </button>
-
+      <div className="create-project-modes huge-spacer-top display-flex-end display-flex-justify-center">
         <div className="display-flex-column">
+          {almTotalCount === 0 && canAdmin && (
+            <Alert variant="info" className="big-spacer-bottom">
+              {translate('onboarding.create_project.select_method.no_alm_yet.admin')}
+            </Alert>
+          )}
           <div className="display-flex-center display-flex-space-between">
             {renderAlmOption(props, AlmKeys.Azure, CreateProjectModes.AzureDevOps)}
             {renderAlmOption(props, AlmKeys.BitbucketServer, CreateProjectModes.BitbucketServer)}
             {renderAlmOption(props, AlmKeys.GitHub, CreateProjectModes.GitHub)}
             {renderAlmOption(props, AlmKeys.GitLab, CreateProjectModes.GitLab, true)}
           </div>
-          {almTotalCount === 0 && canAdmin && (
-            <Alert variant="info" className="big-spacer-top">
-              {translate('onboarding.create_project.select_method.no_alm_yet.admin')}
-            </Alert>
-          )}
         </div>
+        <button
+          className="button button-huge big-spacer-left display-flex-column create-project-mode-type-manual"
+          onClick={() => props.onSelectMode(CreateProjectModes.Manual)}
+          type="button">
+          <ChevronsIcon size={DEFAULT_ICON_SIZE} />
+          <div className="medium big-spacer-top">
+            {translate('onboarding.create_project.select_method.manual')}
+          </div>
+        </button>
       </div>
     </>
   );
index e7a39f01fcdb8412ff1d48b0e87b530b3fada84c..5e8b5ef245ad3f9b6989111032208c5f4e0db7c1 100644 (file)
@@ -26,22 +26,8 @@ exports[`should render correctly: default 1`] = `
     </div>
   </header>
   <div
-    className="create-project-modes huge-spacer-top display-flex-justify-center"
+    className="create-project-modes huge-spacer-top display-flex-end display-flex-justify-center"
   >
-    <button
-      className="button button-huge big-spacer-right display-flex-column create-project-mode-type-manual"
-      onClick={[Function]}
-      type="button"
-    >
-      <ChevronsIcon
-        size={80}
-      />
-      <div
-        className="medium big-spacer-top"
-      >
-        onboarding.create_project.select_method.manual
-      </div>
-    </button>
     <div
       className="display-flex-column"
     >
@@ -134,6 +120,20 @@ exports[`should render correctly: default 1`] = `
         </div>
       </div>
     </div>
+    <button
+      className="button button-huge big-spacer-left display-flex-column create-project-mode-type-manual"
+      onClick={[Function]}
+      type="button"
+    >
+      <ChevronsIcon
+        size={80}
+      />
+      <div
+        className="medium big-spacer-top"
+      >
+        onboarding.create_project.select_method.manual
+      </div>
+    </button>
   </div>
 </Fragment>
 `;
@@ -164,22 +164,8 @@ exports[`should render correctly: invalid configs, admin 1`] = `
     </div>
   </header>
   <div
-    className="create-project-modes huge-spacer-top display-flex-justify-center"
+    className="create-project-modes huge-spacer-top display-flex-end display-flex-justify-center"
   >
-    <button
-      className="button button-huge big-spacer-right display-flex-column create-project-mode-type-manual"
-      onClick={[Function]}
-      type="button"
-    >
-      <ChevronsIcon
-        size={80}
-      />
-      <div
-        className="medium big-spacer-top"
-      >
-        onboarding.create_project.select_method.manual
-      </div>
-    </button>
     <div
       className="display-flex-column"
     >
@@ -226,6 +212,16 @@ exports[`should render correctly: invalid configs, admin 1`] = `
             >
               onboarding.create_project.select_method.bitbucket
             </div>
+            <p
+              className="text-muted small spacer-top"
+              style={
+                Object {
+                  "lineHeight": 1.5,
+                }
+              }
+            >
+              onboarding.create_project.alm_not_configured.admin
+            </p>
           </button>
         </div>
         <div
@@ -282,6 +278,20 @@ exports[`should render correctly: invalid configs, admin 1`] = `
         </div>
       </div>
     </div>
+    <button
+      className="button button-huge big-spacer-left display-flex-column create-project-mode-type-manual"
+      onClick={[Function]}
+      type="button"
+    >
+      <ChevronsIcon
+        size={80}
+      />
+      <div
+        className="medium big-spacer-top"
+      >
+        onboarding.create_project.select_method.manual
+      </div>
+    </button>
   </div>
 </Fragment>
 `;
@@ -312,22 +322,8 @@ exports[`should render correctly: invalid configs, admin 2`] = `
     </div>
   </header>
   <div
-    className="create-project-modes huge-spacer-top display-flex-justify-center"
+    className="create-project-modes huge-spacer-top display-flex-end display-flex-justify-center"
   >
-    <button
-      className="button button-huge big-spacer-right display-flex-column create-project-mode-type-manual"
-      onClick={[Function]}
-      type="button"
-    >
-      <ChevronsIcon
-        size={80}
-      />
-      <div
-        className="medium big-spacer-top"
-      >
-        onboarding.create_project.select_method.manual
-      </div>
-    </button>
     <div
       className="display-flex-column"
     >
@@ -374,6 +370,16 @@ exports[`should render correctly: invalid configs, admin 2`] = `
             >
               onboarding.create_project.select_method.bitbucket
             </div>
+            <p
+              className="text-muted small spacer-top"
+              style={
+                Object {
+                  "lineHeight": 1.5,
+                }
+              }
+            >
+              onboarding.create_project.alm_not_configured.admin
+            </p>
           </button>
         </div>
         <div
@@ -430,6 +436,20 @@ exports[`should render correctly: invalid configs, admin 2`] = `
         </div>
       </div>
     </div>
+    <button
+      className="button button-huge big-spacer-left display-flex-column create-project-mode-type-manual"
+      onClick={[Function]}
+      type="button"
+    >
+      <ChevronsIcon
+        size={80}
+      />
+      <div
+        className="medium big-spacer-top"
+      >
+        onboarding.create_project.select_method.manual
+      </div>
+    </button>
   </div>
 </Fragment>
 `;
@@ -460,22 +480,8 @@ exports[`should render correctly: invalid configs, not admin 1`] = `
     </div>
   </header>
   <div
-    className="create-project-modes huge-spacer-top display-flex-justify-center"
+    className="create-project-modes huge-spacer-top display-flex-end display-flex-justify-center"
   >
-    <button
-      className="button button-huge big-spacer-right display-flex-column create-project-mode-type-manual"
-      onClick={[Function]}
-      type="button"
-    >
-      <ChevronsIcon
-        size={80}
-      />
-      <div
-        className="medium big-spacer-top"
-      >
-        onboarding.create_project.select_method.manual
-      </div>
-    </button>
     <div
       className="display-flex-column"
     >
@@ -588,6 +594,20 @@ exports[`should render correctly: invalid configs, not admin 1`] = `
         </div>
       </div>
     </div>
+    <button
+      className="button button-huge big-spacer-left display-flex-column create-project-mode-type-manual"
+      onClick={[Function]}
+      type="button"
+    >
+      <ChevronsIcon
+        size={80}
+      />
+      <div
+        className="medium big-spacer-top"
+      >
+        onboarding.create_project.select_method.manual
+      </div>
+    </button>
   </div>
 </Fragment>
 `;
@@ -618,22 +638,8 @@ exports[`should render correctly: loading instances 1`] = `
     </div>
   </header>
   <div
-    className="create-project-modes huge-spacer-top display-flex-justify-center"
+    className="create-project-modes huge-spacer-top display-flex-end display-flex-justify-center"
   >
-    <button
-      className="button button-huge big-spacer-right display-flex-column create-project-mode-type-manual"
-      onClick={[Function]}
-      type="button"
-    >
-      <ChevronsIcon
-        size={80}
-      />
-      <div
-        className="medium big-spacer-top"
-      >
-        onboarding.create_project.select_method.manual
-      </div>
-    </button>
     <div
       className="display-flex-column"
     >
@@ -750,6 +756,20 @@ exports[`should render correctly: loading instances 1`] = `
         </div>
       </div>
     </div>
+    <button
+      className="button button-huge big-spacer-left display-flex-column create-project-mode-type-manual"
+      onClick={[Function]}
+      type="button"
+    >
+      <ChevronsIcon
+        size={80}
+      />
+      <div
+        className="medium big-spacer-top"
+      >
+        onboarding.create_project.select_method.manual
+      </div>
+    </button>
   </div>
 </Fragment>
 `;
@@ -780,25 +800,17 @@ exports[`should render correctly: no alm conf yet, admin 1`] = `
     </div>
   </header>
   <div
-    className="create-project-modes huge-spacer-top display-flex-justify-center"
+    className="create-project-modes huge-spacer-top display-flex-end display-flex-justify-center"
   >
-    <button
-      className="button button-huge big-spacer-right display-flex-column create-project-mode-type-manual"
-      onClick={[Function]}
-      type="button"
-    >
-      <ChevronsIcon
-        size={80}
-      />
-      <div
-        className="medium big-spacer-top"
-      >
-        onboarding.create_project.select_method.manual
-      </div>
-    </button>
     <div
       className="display-flex-column"
     >
+      <Alert
+        className="big-spacer-bottom"
+        variant="info"
+      >
+        onboarding.create_project.select_method.no_alm_yet.admin
+      </Alert>
       <div
         className="display-flex-center display-flex-space-between"
       >
@@ -821,6 +833,16 @@ exports[`should render correctly: no alm conf yet, admin 1`] = `
             >
               onboarding.create_project.select_method.azure
             </div>
+            <p
+              className="text-muted small spacer-top"
+              style={
+                Object {
+                  "lineHeight": 1.5,
+                }
+              }
+            >
+              onboarding.create_project.alm_not_configured.admin
+            </p>
           </button>
         </div>
         <div
@@ -842,6 +864,16 @@ exports[`should render correctly: no alm conf yet, admin 1`] = `
             >
               onboarding.create_project.select_method.bitbucket
             </div>
+            <p
+              className="text-muted small spacer-top"
+              style={
+                Object {
+                  "lineHeight": 1.5,
+                }
+              }
+            >
+              onboarding.create_project.alm_not_configured.admin
+            </p>
           </button>
         </div>
         <div
@@ -863,6 +895,16 @@ exports[`should render correctly: no alm conf yet, admin 1`] = `
             >
               onboarding.create_project.select_method.github
             </div>
+            <p
+              className="text-muted small spacer-top"
+              style={
+                Object {
+                  "lineHeight": 1.5,
+                }
+              }
+            >
+              onboarding.create_project.alm_not_configured.admin
+            </p>
           </button>
         </div>
         <div
@@ -884,16 +926,34 @@ exports[`should render correctly: no alm conf yet, admin 1`] = `
             >
               onboarding.create_project.select_method.gitlab
             </div>
+            <p
+              className="text-muted small spacer-top"
+              style={
+                Object {
+                  "lineHeight": 1.5,
+                }
+              }
+            >
+              onboarding.create_project.alm_not_configured.admin
+            </p>
           </button>
         </div>
       </div>
-      <Alert
-        className="big-spacer-top"
-        variant="info"
-      >
-        onboarding.create_project.select_method.no_alm_yet.admin
-      </Alert>
     </div>
+    <button
+      className="button button-huge big-spacer-left display-flex-column create-project-mode-type-manual"
+      onClick={[Function]}
+      type="button"
+    >
+      <ChevronsIcon
+        size={80}
+      />
+      <div
+        className="medium big-spacer-top"
+      >
+        onboarding.create_project.select_method.manual
+      </div>
+    </button>
   </div>
 </Fragment>
 `;
index 3df3617e8de1bf1d018884932ece822065ed4beb..6d458f812f1325a1a7e86058349a41af24af1298 100644 (file)
@@ -3253,6 +3253,7 @@ onboarding.create_project.select_method.bitbucket=From Bitbucket
 onboarding.create_project.select_method.github=From GitHub
 onboarding.create_project.select_method.gitlab=From GitLab
 onboarding.create_project.alm_not_configured=Contact admin for global configuration
+onboarding.create_project.alm_not_configured.admin=Global configuration not set
 onboarding.create_project.check_alm_supported=Checking if available
 onboarding.create_project.project_key=Project key
 onboarding.create_project.project_key.description=Up to 400 characters. Allowed characters are alphanumeric, '-' (dash), '_' (underscore), '.' (period) and ':' (colon), with at least one non-digit.