]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-20500 Minor fixes
authorJeremy Davis <jeremy.davis@sonarsource.com>
Wed, 11 Oct 2023 08:38:35 +0000 (10:38 +0200)
committersonartech <sonartech@sonarsource.com>
Wed, 11 Oct 2023 20:02:34 +0000 (20:02 +0000)
server/sonar-web/src/main/js/apps/coding-rules/components/BulkChangeModal.tsx
server/sonar-web/src/main/js/apps/coding-rules/components/FacetsList.tsx
server/sonar-web/src/main/js/apps/coding-rules/components/RuleDetailsMeta.tsx
server/sonar-web/src/main/js/apps/coding-rules/components/RuleListItem.tsx
server/sonar-web/src/main/js/apps/issues/sidebar/LanguageFacet.tsx
server/sonar-web/src/main/js/components/shared/TypeHelper.tsx
sonar-core/src/main/resources/org/sonar/l10n/core.properties

index c7c743591857b63ede81465ea41efbf68bdd92cf..ae6c25ed529755f5ae84afbc2db1162b44e66b4b 100644 (file)
@@ -253,7 +253,10 @@ export class BulkChangeModal extends React.PureComponent<Props, State> {
             <ButtonPrimary
               autoFocus
               type="submit"
-              disabled={this.state.submitting || this.state.selectedProfiles.length === 0}
+              disabled={
+                this.state.submitting ||
+                (this.state.selectedProfiles.length === 0 && profile === undefined)
+              }
               form={FORM_ID}
             >
               {translate('apply')}
index c9afebcc80df390c458973a02c293efe529bf478..1bea9940e627eb1bf90e0800b0b5c7600b2d1cf1 100644 (file)
@@ -49,6 +49,8 @@ export interface FacetsListProps {
   selectedProfile?: Profile;
 }
 
+const MAX_INITIAL_LANGUAGES = 5;
+
 export default function FacetsList(props: FacetsListProps) {
   const languageDisabled = !props.hideProfileFacet && props.query.profile !== undefined;
 
@@ -60,11 +62,12 @@ export default function FacetsList(props: FacetsListProps) {
   return (
     <>
       <LanguageFacet
+        maxInitialItems={MAX_INITIAL_LANGUAGES}
         onChange={props.onFilterChange}
         onToggle={props.onFacetToggle}
         open={!!props.openFacets.languages}
         selectedLanguages={props.query.languages}
-        stats={props.facets && props.facets.languages}
+        stats={props.facets?.languages}
         disabled={languageDisabled}
         disabledHelper={translate('coding_rules.filters.language.inactive')}
       />
index 61f5f0b58f551dfe83f6a164e5e9969a4b9caffa..6a0e92eebb46bf7a9d7505570c92c8d7741f2b18 100644 (file)
@@ -263,7 +263,7 @@ export default class RuleDetailsMeta extends React.PureComponent<Props> {
     return (
       <header className="sw-flex sw-mb-6">
         <div className="sw-mr-8 sw-flex-1">
-          <div className="sw-mb-4">
+          <div className="sw-mb-2">
             {ruleDetails.cleanCodeAttributeCategory !== undefined && (
               <CleanCodeAttributePill
                 cleanCodeAttributeCategory={ruleDetails.cleanCodeAttributeCategory}
@@ -273,8 +273,8 @@ export default class RuleDetailsMeta extends React.PureComponent<Props> {
             )}
           </div>
 
-          <div className="sw-mb-4">
-            <PageContentFontWrapper className="sw-body-md-highlight" as="h1">
+          <div className="sw-mb-2">
+            <PageContentFontWrapper className="sw-heading-md" as="h1">
               <IssueMessageHighlighting message={ruleDetails.name} />
               <ClipboardIconButton
                 Icon={LinkIcon}
@@ -290,11 +290,10 @@ export default class RuleDetailsMeta extends React.PureComponent<Props> {
             {!!ruleDetails.impacts.length && (
               <div className="sw-flex sw-items-center sw-flex-1">
                 <Note>{translate('issue.software_qualities.label')}</Note>
-                <ul className="sw-flex sw-gap-2">
+                <ul className="sw-flex sw-gap-2 sw-ml-1">
                   {ruleDetails.impacts.map(({ severity, softwareQuality }) => (
                     <li key={softwareQuality}>
                       <SoftwareImpactPill
-                        className="sw-ml-2"
                         severity={severity}
                         quality={softwareQuality}
                         type="rule"
@@ -305,7 +304,7 @@ export default class RuleDetailsMeta extends React.PureComponent<Props> {
               </div>
             )}
           </div>
-          <BasicSeparator className="sw-my-3" />
+          <BasicSeparator className="sw-my-4" />
           {hasTypeData && (
             <div className="sw-flex sw-items-center">
               {!ruleDetails.isExternal && (
index 6915112c558bd5f134179e5c951e610b9e724991..f46b5970afa78374bfe24d91bb49aa38c364247f 100644 (file)
@@ -22,18 +22,20 @@ import styled from '@emotion/styled';
 import {
   Badge,
   DangerButtonSecondary,
+  DisabledText,
   InheritanceIcon,
   Link,
-  Note,
   OverridenIcon,
   themeBorder,
 } from 'design-system';
 import * as React from 'react';
 import { Profile, deactivateRule } from '../../../api/quality-profiles';
+import DocumentationTooltip from '../../../components/common/DocumentationTooltip';
 import ConfirmButton from '../../../components/controls/ConfirmButton';
 import Tooltip from '../../../components/controls/Tooltip';
 import { CleanCodeAttributePill } from '../../../components/shared/CleanCodeAttributePill';
 import SoftwareImpactPill from '../../../components/shared/SoftwareImpactPill';
+import TypeHelper from '../../../components/shared/TypeHelper';
 import TagsList from '../../../components/tags/TagsList';
 import { translate, translateWithParameters } from '../../../helpers/l10n';
 import { getRuleUrl } from '../../../helpers/urls';
@@ -99,7 +101,7 @@ export default class RuleListItem extends React.PureComponent<Props> {
 
     return (
       <div className="sw-mr-2 sw-shrink-0">
-        {selectedProfile && selectedProfile.parentName && (
+        {selectedProfile?.parentName && (
           <>
             {activation.inherit === 'OVERRIDES' && (
               <Tooltip
@@ -198,7 +200,7 @@ export default class RuleListItem extends React.PureComponent<Props> {
 
   render() {
     const { rule, selected } = this.props;
-    const allTags = [...(rule.tags || []), ...(rule.sysTags || [])];
+    const allTags = [...(rule.tags ?? []), ...(rule.sysTags ?? [])];
     return (
       <ListItemStyled
         selected={selected}
@@ -208,7 +210,7 @@ export default class RuleListItem extends React.PureComponent<Props> {
         onClick={() => this.props.selectRule(rule.key)}
       >
         <div className="sw-flex sw-flex-col">
-          <div className="sw-mb-4">
+          <div className="sw-mb-2">
             {rule.cleanCodeAttributeCategory !== undefined && (
               <CleanCodeAttributePill
                 cleanCodeAttributeCategory={rule.cleanCodeAttributeCategory}
@@ -242,7 +244,7 @@ export default class RuleListItem extends React.PureComponent<Props> {
               )}
             </div>
             <div className="sw-flex sw-items-center sw-ml-2">
-              <Note>{rule.langName}</Note>
+              <span>{rule.langName}</span>
               {rule.impacts.map(({ severity, softwareQuality }) => (
                 <SoftwareImpactPill
                   className="sw-ml-3"
@@ -252,6 +254,29 @@ export default class RuleListItem extends React.PureComponent<Props> {
                   type="rule"
                 />
               ))}
+
+              <DocumentationTooltip
+                content={
+                  <div>
+                    <p className="sw-mb-2">{translate('coding_rules.type.deprecation.title')}</p>
+                    <p>{translate('coding_rules.type.deprecation.filter_by')}</p>
+                  </div>
+                }
+                links={[
+                  {
+                    href: '/user-guide/clean-code',
+                    label: translate('learn_more'),
+                  },
+                ]}
+              >
+                <DisabledText className="sw-ml-3 sw-whitespace-nowrap">
+                  <TypeHelper
+                    className="sw-flex sw-items-center"
+                    iconFill="iconTypeDisabled"
+                    type={rule.type}
+                  />
+                </DisabledText>
+              </DocumentationTooltip>
               {allTags.length > 0 && (
                 <TagsList allowUpdate={false} className="sw-ml-3" tags={allTags} />
               )}
index df2b682087b079428502de058d9ed1d6079ed95c..0634bac924413090263cc499cd31346e230f52ef 100644 (file)
@@ -32,6 +32,7 @@ import { ListStyleFacet } from './ListStyleFacet';
 interface Props {
   fetching?: boolean;
   languages: Languages;
+  maxInitialItems?: number;
   selectedLanguages: string[];
   loadSearchResultCount?: (property: string, changes: Partial<Query>) => Promise<Facet>;
   onChange: (changes: Partial<Query>) => void;
@@ -99,6 +100,7 @@ class LanguageFacetClass extends React.PureComponent<Props> {
         getSearchResultKey={(language) => language.key}
         getSearchResultText={(language) => language.name}
         loadSearchResultCount={this.loadSearchResultCount}
+        maxInitialItems={this.props.maxInitialItems}
         minSearchLength={1}
         onChange={this.props.onChange}
         onSearch={this.handleSearch}
index 78c9c821f9bccd11e0a9a716cea5f70ed5b0dac5..fc2a4b2bbb4eeab77edefbfbb5fcc12cdc348e02 100644 (file)
@@ -17,6 +17,7 @@
  * along with this program; if not, write to the Free Software Foundation,
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
+import { IconProps } from 'design-system';
 import * as React from 'react';
 import { translate } from '../../helpers/l10n';
 import { IssueType, RuleType } from '../../types/types';
@@ -24,13 +25,14 @@ import IssueTypeIcon from '../icon-mappers/IssueTypeIcon';
 
 interface Props {
   className?: string;
+  iconFill?: IconProps['fill'];
   type: IssueType | RuleType;
 }
 
 export default function TypeHelper(props: Props) {
   return (
     <span className={props.className}>
-      <IssueTypeIcon className="sw-mr-1" type={props.type} />
+      <IssueTypeIcon className="sw-mr-1" type={props.type} fill={props.iconFill} />
       {translate('issue.type', props.type)}
     </span>
   );
index 9567dea56d4e52b1362f1acc86cef2692ddc3770..39e7cbdb5b69390b6a3110e9028431eaf9bbe083 100644 (file)
@@ -2321,10 +2321,6 @@ coding_rules.show_template=Show Template
 coding_rules.skip_to_filters=Skip to rules filters
 coding_rules.to_select_rules=Select rules
 coding_rules.to_navigate=Navigate to rule
-coding_rules.type.tooltip.CODE_SMELL=Code Smell Detection Rule
-coding_rules.type.tooltip.BUG=Bug Detection Rule
-coding_rules.type.tooltip.VULNERABILITY=Vulnerability Detection Rule
-coding_rules.type.tooltip.SECURITY_HOTSPOT=Security Hotspot Detection Rule
 coding_rules.type.deprecation.title=Types of detection rules are deprecated.
 coding_rules.type.deprecation.filter_by=You can now filter rules by Clean Code Attribute and Software Quality.
 coding_rules.severity.deprecation.title=Severities are now directly tied to the software quality impacted. This old severity is deprecated and can no longer be modified.