diff options
Diffstat (limited to 'server/sonar-web/src/main/js/components')
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> } |