aboutsummaryrefslogtreecommitdiffstats
path: root/server/sonar-web/src/main/js/components
diff options
context:
space:
mode:
Diffstat (limited to 'server/sonar-web/src/main/js/components')
-rw-r--r--server/sonar-web/src/main/js/components/facets/FacetHelp.tsx2
-rw-r--r--server/sonar-web/src/main/js/components/shared/AnalysisMissingInfoMessage.tsx61
-rw-r--r--server/sonar-web/src/main/js/components/shared/CleanCodeAttributePill.tsx2
-rw-r--r--server/sonar-web/src/main/js/components/shared/ComponentMissingMqrMetricsMessage.tsx90
-rw-r--r--server/sonar-web/src/main/js/components/shared/SoftwareImpactPill.tsx2
5 files changed, 93 insertions, 64 deletions
diff --git a/server/sonar-web/src/main/js/components/facets/FacetHelp.tsx b/server/sonar-web/src/main/js/components/facets/FacetHelp.tsx
index 836dc84e12a..7c7609700ef 100644
--- a/server/sonar-web/src/main/js/components/facets/FacetHelp.tsx
+++ b/server/sonar-web/src/main/js/components/facets/FacetHelp.tsx
@@ -60,7 +60,7 @@ export function FacetHelp({ property, title, description, noDescription, link, l
: description
}
footer={
- <DocumentationLink standalone to={link}>
+ <DocumentationLink shouldOpenInNewTab standalone to={link}>
{property ? intl.formatMessage({ id: `issues.facet.${property}.help.link` }) : linkText}
</DocumentationLink>
}
diff --git a/server/sonar-web/src/main/js/components/shared/AnalysisMissingInfoMessage.tsx b/server/sonar-web/src/main/js/components/shared/AnalysisMissingInfoMessage.tsx
deleted file mode 100644
index e59f81169be..00000000000
--- a/server/sonar-web/src/main/js/components/shared/AnalysisMissingInfoMessage.tsx
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2024 SonarSource SA
- * mailto:info AT sonarsource DOT com
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-import { FormattedMessage, useIntl } from 'react-intl';
-import { FlagMessage } from '~design-system';
-import { DocLink } from '../../helpers/doc-links';
-import { useStandardExperienceModeQuery } from '../../queries/mode';
-import DocumentationLink from '../common/DocumentationLink';
-
-interface AnalysisMissingInfoMessageProps {
- className?: string;
- hide?: boolean;
- qualifier: string;
-}
-
-export default function AnalysisMissingInfoMessage({
- hide,
- qualifier,
- className,
-}: Readonly<AnalysisMissingInfoMessageProps>) {
- const { data: isStandardMode, isLoading } = useStandardExperienceModeQuery();
- const intl = useIntl();
-
- if (hide || isLoading || isStandardMode) {
- return null;
- }
-
- return (
- <FlagMessage variant="info" className={className}>
- <FormattedMessage
- id="overview.missing_project_data"
- tagName="div"
- values={{
- qualifier,
- learn_more: (
- <DocumentationLink className="sw-whitespace-nowrap" to={DocLink.CodeAnalysis}>
- {intl.formatMessage({ id: 'learn_more' })}
- </DocumentationLink>
- ),
- }}
- />
- </FlagMessage>
- );
-}
diff --git a/server/sonar-web/src/main/js/components/shared/CleanCodeAttributePill.tsx b/server/sonar-web/src/main/js/components/shared/CleanCodeAttributePill.tsx
index b418e39d953..9467dc6fedb 100644
--- a/server/sonar-web/src/main/js/components/shared/CleanCodeAttributePill.tsx
+++ b/server/sonar-web/src/main/js/components/shared/CleanCodeAttributePill.tsx
@@ -50,7 +50,7 @@ export function CleanCodeAttributePill(props: Readonly<Props>) {
'advice',
)}
footer={
- <DocumentationLink to={DocLink.CleanCodeIntroduction}>
+ <DocumentationLink shouldOpenInNewTab standalone to={DocLink.CleanCodeIntroduction}>
{translate('clean_code_attribute.learn_more')}
</DocumentationLink>
}
diff --git a/server/sonar-web/src/main/js/components/shared/ComponentMissingMqrMetricsMessage.tsx b/server/sonar-web/src/main/js/components/shared/ComponentMissingMqrMetricsMessage.tsx
new file mode 100644
index 00000000000..17e30d7638f
--- /dev/null
+++ b/server/sonar-web/src/main/js/components/shared/ComponentMissingMqrMetricsMessage.tsx
@@ -0,0 +1,90 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2024 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+import { LinkHighlight } from '@sonarsource/echoes-react';
+import { FormattedMessage } from 'react-intl';
+import { DocLink } from '../../helpers/doc-links';
+import { useCurrentBranchQuery } from '../../queries/branch';
+import { useMeasureQuery } from '../../queries/measures';
+import { useStandardExperienceModeQuery } from '../../queries/mode';
+import { isPullRequest } from '../../sonar-aligned/helpers/branch-like';
+import { LightComponent } from '../../sonar-aligned/types/component';
+import { MetricKey } from '../../sonar-aligned/types/metrics';
+import DocumentationLink from '../common/DocumentationLink';
+import { DismissableAlert } from '../ui/DismissableAlert';
+
+interface AnalysisMissingInfoMessageProps {
+ component: LightComponent;
+}
+
+const ALERT_KEY = 'sonarqube.dismissed_calculation_change_alert.component';
+
+export function ComponentMissingMqrMetricsMessage({
+ component,
+}: Readonly<AnalysisMissingInfoMessageProps>) {
+ const { key: componentKey, qualifier } = component;
+ const { data: isStandardMode, isLoading } = useStandardExperienceModeQuery();
+ const { data: branchLike, isLoading: loadingBranch } = useCurrentBranchQuery(component);
+ const { data: standardMeasure, isLoading: loadingStandardMeasure } = useMeasureQuery(
+ {
+ componentKey,
+ metricKey: MetricKey.security_rating,
+ branchLike,
+ },
+ { enabled: !isLoading && !isStandardMode && !loadingBranch },
+ );
+ const { data: mqrMeasure, isLoading: loadingMQRMeasure } = useMeasureQuery(
+ {
+ componentKey,
+ metricKey: isPullRequest(branchLike)
+ ? MetricKey.new_software_quality_security_rating
+ : MetricKey.software_quality_security_rating,
+ branchLike,
+ },
+ { enabled: !isLoading && !isStandardMode && !loadingBranch && Boolean(standardMeasure) },
+ );
+ const loading = loadingMQRMeasure || loadingStandardMeasure || isLoading || loadingBranch;
+
+ if (loading || isStandardMode || Boolean(mqrMeasure) || !standardMeasure) {
+ return null;
+ }
+
+ return (
+ <DismissableAlert variant="info" alertKey={`${ALERT_KEY}_${componentKey}`}>
+ <FormattedMessage
+ id="overview.missing_project_data"
+ tagName="div"
+ values={{
+ qualifier,
+ link: (text) => (
+ <DocumentationLink
+ shouldOpenInNewTab
+ highlight={LinkHighlight.CurrentColor}
+ className="sw-whitespace-nowrap"
+ to={DocLink.MetricDefinitions}
+ >
+ {text}
+ </DocumentationLink>
+ ),
+ }}
+ />
+ </DismissableAlert>
+ );
+}
diff --git a/server/sonar-web/src/main/js/components/shared/SoftwareImpactPill.tsx b/server/sonar-web/src/main/js/components/shared/SoftwareImpactPill.tsx
index ec6578de8c3..3c7cb8c6657 100644
--- a/server/sonar-web/src/main/js/components/shared/SoftwareImpactPill.tsx
+++ b/server/sonar-web/src/main/js/components/shared/SoftwareImpactPill.tsx
@@ -144,7 +144,7 @@ export default function SoftwareImpactPill(props: Props) {
</>
}
footer={
- <DocumentationLink shouldOpenInNewTab to={DocLink.MQRSeverity}>
+ <DocumentationLink shouldOpenInNewTab standalone to={DocLink.MQRSeverity}>
{translate('severity_impact.help.link')}
</DocumentationLink>
}