]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-21973 Showcase new icons from Echoes in a few places
authorDavid Cho-Lerat <david.cho-lerat@sonarsource.com>
Wed, 10 Apr 2024 16:37:54 +0000 (18:37 +0200)
committersonartech <sonartech@sonarsource.com>
Fri, 12 Apr 2024 12:49:16 +0000 (12:49 +0000)
server/sonar-web/design-system/src/components/Text.tsx
server/sonar-web/src/main/js/app/components/SonarLintConnection.tsx
server/sonar-web/src/main/js/apps/issues/sidebar/ProjectFacet.tsx
server/sonar-web/src/main/js/apps/issues/sidebar/ScopeFacet.tsx
server/sonar-web/src/main/js/apps/issues/sidebar/TypeFacet.tsx
server/sonar-web/src/main/js/apps/projectBranches/components/BranchLikeTabs.tsx
server/sonar-web/src/main/js/apps/projects/components/ProjectCreationMenu.tsx
server/sonar-web/src/main/js/components/embed-docs-modal/EmbedDocsPopupHelper.tsx
server/sonar-web/src/main/js/components/icon-mappers/BranchLikeIcon.tsx
server/sonar-web/src/main/js/components/icon-mappers/__tests__/__snapshots__/BranchLikeIcon-test.tsx.snap

index 23821db1ad745944e40c580407639e55821e46f8..4147c6cc45f69b185e04a8763c480208c33045ac 100644 (file)
@@ -106,7 +106,7 @@ export const StyledText = styled.span`
   }
 `;
 
-const StyledMutedText = styled(StyledText)`
+export const StyledMutedText = styled(StyledText)`
   ${tw`sw-font-regular`};
   color: ${themeColor('dropdownMenuSubTitle')};
 `;
index 51dd597b733f8847cc86dd580b0f630f660097f8..bf1323bd20901bc7c7ab7c99759d1e806ecd47b3 100644 (file)
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
 
-import { LinkStandalone } from '@sonarsource/echoes-react';
+import { IconCheck, LinkStandalone } from '@sonarsource/echoes-react';
 import {
   ButtonPrimary,
   Card,
   CardSeparator,
-  CheckIcon,
   ClipboardButton,
   InputField,
   ListItem,
@@ -100,7 +99,7 @@ export function SonarLintConnection({ currentUser }: Readonly<Props>) {
           </p>
           <p className="sw-mb-10">{translate('sonarlint-connection.request.description2')}</p>
 
-          <ButtonPrimary icon={<CheckIcon fill="currentColor" />} onClick={authorize}>
+          <ButtonPrimary icon={<IconCheck className="sw-mr-1" />} onClick={authorize}>
             {translate('sonarlint-connection.request.action')}
           </ButtonPrimary>
         </>
index 19371524f0d3cef611f533baff1c961d290bc8a3..52a703f4ef4bf081583e38525dea3fab5e5b4ff1 100644 (file)
@@ -17,7 +17,8 @@
  * along with this program; if not, write to the Free Software Foundation,
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
-import { ProjectIcon, Spinner } from 'design-system';
+
+import { IconProject, Spinner } from '@sonarsource/echoes-react';
 import { omit } from 'lodash';
 import * as React from 'react';
 import { getTree, searchProjects } from '../../../api/components';
@@ -124,7 +125,7 @@ export function ProjectFacet(props: Readonly<Props>) {
 
   const renderSearchResult = (project: Pick<SearchedProject, 'name'>, term: string) => (
     <>
-      <ProjectIcon className="sw-mr-1" />
+      <IconProject className="sw-mr-1" />
 
       {highlightTerm(project.name, term)}
     </>
@@ -169,9 +170,9 @@ function ProjectItem({
 
   return (
     <div className="sw-flex sw-items-center">
-      <ProjectIcon className="sw-mr-1" />
+      <IconProject className="sw-mr-1" />
 
-      <Spinner loading={projectName === undefined && isLoading} />
+      <Spinner isLoading={projectName === undefined && isLoading} />
 
       <span className="sw-min-w-0 sw-truncate" title={label}>
         {label}
index 43a45b0f0bb6aac0d2f6dbba66c6097e8e02d13d..3a830ac4842aaf5ed678da5f7fa48202e4069abd 100644 (file)
@@ -17,7 +17,9 @@
  * along with this program; if not, write to the Free Software Foundation,
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
-import { FacetBox, FacetItem, FileIcon, TestFileIcon } from 'design-system';
+
+import { IconFile, IconFileCode } from '@sonarsource/echoes-react';
+import { FacetBox, FacetItem } from 'design-system';
 import { without } from 'lodash';
 import * as React from 'react';
 import { SOURCE_SCOPES } from '../../../helpers/constants';
@@ -68,7 +70,12 @@ export function ScopeFacet(props: ScopeFacetProps) {
               <FacetItem
                 active={active}
                 className="it__search-navigator-facet"
-                icon={{ MAIN: <FileIcon />, TEST: <TestFileIcon /> }[scope]}
+                icon={
+                  {
+                    MAIN: <IconFile className="sw-mr-1" />,
+                    TEST: <IconFileCode className="sw-mr-1" />,
+                  }[scope]
+                }
                 key={scope}
                 name={translate('issue.scope', scope)}
                 onClick={(itemValue: string, multiple: boolean) => {
index 7d8ad9e2c671da1acebab99974f474af51981b8d..7b886923d856b789a9232687fe42a6d44e28a44b 100644 (file)
@@ -17,7 +17,9 @@
  * along with this program; if not, write to the Free Software Foundation,
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
-import { BugIcon, CodeSmellIcon, FacetBox, FacetItem, VulnerabilityIcon } from 'design-system';
+
+import { IconBug, IconCodeSmell, IconVulnerability } from '@sonarsource/echoes-react';
+import { FacetBox, FacetItem } from 'design-system';
 import { orderBy, without } from 'lodash';
 import * as React from 'react';
 import { ISSUE_TYPES } from '../../../helpers/constants';
@@ -48,10 +50,12 @@ export class TypeFacet extends React.PureComponent<Props> {
 
   handleItemClick = (itemValue: string, multiple: boolean) => {
     const { types } = this.props;
+
     if (multiple) {
       const newValue = orderBy(
         types.includes(itemValue) ? without(types, itemValue) : [...types, itemValue],
       );
+
       this.props.onChange({ [this.property]: newValue });
     } else {
       this.props.onChange({
@@ -89,9 +93,9 @@ export class TypeFacet extends React.PureComponent<Props> {
         className="it__search-navigator-facet"
         icon={
           {
-            BUG: <BugIcon />,
-            CODE_SMELL: <CodeSmellIcon />,
-            VULNERABILITY: <VulnerabilityIcon />,
+            BUG: <IconBug className="sw-mr-1" />,
+            CODE_SMELL: <IconCodeSmell className="sw-mr-1" />,
+            VULNERABILITY: <IconVulnerability className="sw-mr-1" />,
           }[type]
         }
         key={type}
index acd2b984c92e1d669588443704310aacf3208dc2..f7bd9e280615785abb5197cbc7c6d76dd38e13c0 100644 (file)
@@ -17,7 +17,9 @@
  * along with this program; if not, write to the Free Software Foundation,
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
-import { BranchIcon, PullRequestIcon, ToggleButton, getTabId, getTabPanelId } from 'design-system';
+
+import { IconGitBranch, IconPullrequest } from '@sonarsource/echoes-react';
+import { ToggleButton, getTabId, getTabPanelId } from 'design-system';
 import * as React from 'react';
 import { useState } from 'react';
 import {
@@ -52,7 +54,7 @@ const TABS = [
     value: Tabs.Branch,
     label: (
       <>
-        <BranchIcon />
+        <IconGitBranch />
         <span className="sw-ml-2">{translate('project_branch_pull_request.tabs.branches')}</span>
       </>
     ),
@@ -62,7 +64,7 @@ const TABS = [
     value: Tabs.PullRequest,
     label: (
       <>
-        <PullRequestIcon />
+        <IconPullrequest />
         <span className="sw-ml-2">
           {translate('project_branch_pull_request.tabs.pull_requests')}
         </span>
index f89889c50c6b80a7de0189b324c3c9ba891af7d3..3c08f66745f190eea03fe31d617ec469b34ea256 100644 (file)
  * along with this program; if not, write to the Free Software Foundation,
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
+
+import { IconChevronDown } from '@sonarsource/echoes-react';
 import {
   ButtonSecondary,
-  ChevronDownIcon,
   Dropdown,
   ItemDivider,
   ItemLink,
@@ -46,11 +47,11 @@ interface State {
 }
 
 const almSettingsValidators = {
-  [AlmKeys.Azure]: (settings: AlmSettingsInstance) => !!settings.url,
-  [AlmKeys.BitbucketServer]: (_: AlmSettingsInstance) => true,
+  [AlmKeys.Azure]: (settings: AlmSettingsInstance) => Boolean(settings.url),
   [AlmKeys.BitbucketCloud]: (_: AlmSettingsInstance) => true,
+  [AlmKeys.BitbucketServer]: (_: AlmSettingsInstance) => true,
   [AlmKeys.GitHub]: (_: AlmSettingsInstance) => true,
-  [AlmKeys.GitLab]: (settings: AlmSettingsInstance) => !!settings.url,
+  [AlmKeys.GitLab]: (settings: AlmSettingsInstance) => Boolean(settings.url),
 };
 
 export class ProjectCreationMenu extends React.PureComponent<Props, State> {
@@ -84,6 +85,7 @@ export class ProjectCreationMenu extends React.PureComponent<Props, State> {
 
     const boundAlms = IMPORT_COMPATIBLE_ALMS.filter((key) => {
       const currentAlmSettings = almSettings.filter((s) => s.alm === key);
+
       return (
         currentAlmSettings.length > 0 &&
         key === currentAlmSettings[0].alm &&
@@ -111,9 +113,6 @@ export class ProjectCreationMenu extends React.PureComponent<Props, State> {
     return (
       <Dropdown
         id="project-creation-menu"
-        size="auto"
-        placement={PopupPlacement.BottomRight}
-        zLevel={PopupZLevel.Global}
         overlay={
           <>
             {[...boundAlms, 'manual'].map((alm) => (
@@ -122,6 +121,7 @@ export class ProjectCreationMenu extends React.PureComponent<Props, State> {
             {boundAlms.length < IMPORT_COMPATIBLE_ALMS.length && (
               <>
                 <ItemDivider />
+
                 <ItemLink to={{ pathname: '/projects/create' }}>
                   {boundAlms.length === 0
                     ? translate('my_account.add_project.more')
@@ -131,10 +131,14 @@ export class ProjectCreationMenu extends React.PureComponent<Props, State> {
             )}
           </>
         }
+        placement={PopupPlacement.BottomRight}
+        size="auto"
+        zLevel={PopupZLevel.Global}
       >
         <ButtonSecondary>
           {translate('projects.add')}
-          <ChevronDownIcon className="sw-ml-1" />
+
+          <IconChevronDown className="sw-ml-1" />
         </ButtonSecondary>
       </Dropdown>
     );
index c550b088efcbded079a26b25090e8d28f5b05ebc..ff3449523982e8775169e8b846e8ffcf9a9c2099 100644 (file)
  * along with this program; if not, write to the Free Software Foundation,
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
-import {
-  Dropdown,
-  InteractiveIcon,
-  MenuHelpIcon,
-  PopupPlacement,
-  PopupZLevel,
-} from 'design-system';
+
+import { IconQuestionMark } from '@sonarsource/echoes-react';
+import { Dropdown, InteractiveIcon, PopupPlacement, PopupZLevel } from 'design-system';
 import * as React from 'react';
 import { translate } from '../../helpers/l10n';
 import Tooltip from '../controls/Tooltip';
@@ -42,11 +38,9 @@ export default function EmbedDocsPopupHelper() {
         {({ onToggleClick, open }) => (
           <Tooltip mouseLeaveDelay={0.2} overlay={!open ? translate('help') : undefined}>
             <InteractiveIcon
-              Icon={MenuHelpIcon}
+              Icon={IconQuestionMark}
               aria-expanded={open}
-              iconProps={{
-                'data-guiding-id': 'issue-5',
-              }}
+              data-guiding-id="issue-5"
               aria-controls="help-menu-dropdown"
               aria-haspopup
               aria-label={translate('help')}
index 5cea6b31037d92c6f70d291329aac8e6652385c9..118109911fe340739aa32b5a716507e851f5b1f4 100644 (file)
  * along with this program; if not, write to the Free Software Foundation,
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
-import { BranchIcon, IconProps, MainBranchIcon, PullRequestIcon, ThemeColors } from 'design-system';
+
+import { IconBranch, IconGitBranch, IconProps, IconPullrequest } from '@sonarsource/echoes-react';
+import { StyledMutedText } from 'design-system';
 import * as React from 'react';
 import { isMainBranch, isPullRequest } from '../../helpers/branch-like';
 import { BranchLike } from '../../types/branch-like';
 
-export interface BranchLikeIconProps extends Omit<IconProps, 'fill'> {
+export interface BranchLikeIconProps extends IconProps {
   branchLike: BranchLike;
-  fill?: ThemeColors;
 }
 
 export default function BranchLikeIcon({ branchLike, ...props }: Readonly<BranchLikeIconProps>) {
+  let Icon;
+
   if (isPullRequest(branchLike)) {
-    return <PullRequestIcon fill="pageContentLight" {...props} />;
+    Icon = IconPullrequest;
   } else if (isMainBranch(branchLike)) {
-    return <MainBranchIcon fill="pageContentLight" {...props} />;
+    Icon = IconBranch;
+  } else {
+    Icon = IconGitBranch;
   }
-  return <BranchIcon fill="pageContentLight" {...props} />;
+
+  return (
+    <StyledMutedText>
+      <Icon {...props} />
+    </StyledMutedText>
+  );
 }
index 561ef92174d440d438e9a648ad5e8b231a6a2542..3ad53391a36572ae1c586bb4a0316c51b0ff9343 100644 (file)
@@ -1,5 +1,5 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
-exports[`should render branch icon correctly 1`] = `"<div><svg aria-hidden="true" focusable="false" role="img" class="octicon octicon-git-branch" viewBox="0 0 16 16" width="16" height="16" fill="rgb(106,117,144)" style="display: inline-block; user-select: none; vertical-align: middle; overflow: visible;"><path d="M9.5 3.25a2.25 2.25 0 1 1 3 2.122V6A2.5 2.5 0 0 1 10 8.5H6a1 1 0 0 0-1 1v1.128a2.251 2.251 0 1 1-1.5 0V5.372a2.25 2.25 0 1 1 1.5 0v1.836A2.493 2.493 0 0 1 6 7h4a1 1 0 0 0 1-1v-.628A2.25 2.25 0 0 1 9.5 3.25Zm-6 0a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Zm8.25-.75a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5ZM4.25 12a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Z"></path></svg></div>"`;
+exports[`should render branch icon correctly 1`] = `"<div><span class="css-nk2far-StyledText-StyledMutedText en0eo9411"><span aria-hidden="true" class="css-lr6nas" role="img">&amp;</span></span></div>"`;
 
-exports[`should render pull request icon correctly 1`] = `"<div><svg aria-hidden="true" focusable="false" role="img" class="octicon octicon-git-pull-request" viewBox="0 0 16 16" width="16" height="16" fill="rgb(106,117,144)" style="display: inline-block; user-select: none; vertical-align: middle; overflow: visible;"><path d="M1.5 3.25a2.25 2.25 0 1 1 3 2.122v5.256a2.251 2.251 0 1 1-1.5 0V5.372A2.25 2.25 0 0 1 1.5 3.25Zm5.677-.177L9.573.677A.25.25 0 0 1 10 .854V2.5h1A2.5 2.5 0 0 1 13.5 5v5.628a2.251 2.251 0 1 1-1.5 0V5a1 1 0 0 0-1-1h-1v1.646a.25.25 0 0 1-.427.177L7.177 3.427a.25.25 0 0 1 0-.354ZM3.75 2.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm0 9.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm8.25.75a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Z"></path></svg></div>"`;
+exports[`should render pull request icon correctly 1`] = `"<div><span class="css-nk2far-StyledText-StyledMutedText en0eo9411"><span aria-hidden="true" class="css-lr6nas" role="img">)</span></span></div>"`;