You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

SoftwareImpactRatingTooltip.tsx 2.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. /*
  2. * SonarQube
  3. * Copyright (C) 2009-2024 SonarSource SA
  4. * mailto:info AT sonarsource DOT com
  5. *
  6. * This program is free software; you can redistribute it and/or
  7. * modify it under the terms of the GNU Lesser General Public
  8. * License as published by the Free Software Foundation; either
  9. * version 3 of the License, or (at your option) any later version.
  10. *
  11. * This program is distributed in the hope that it will be useful,
  12. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  14. * Lesser General Public License for more details.
  15. *
  16. * You should have received a copy of the GNU Lesser General Public License
  17. * along with this program; if not, write to the Free Software Foundation,
  18. * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  19. */
  20. import { useIntl } from 'react-intl';
  21. import { SoftwareImpactSeverity, SoftwareQuality } from '../../../types/clean-code-taxonomy';
  22. export interface SoftwareImpactRatingTooltipProps {
  23. rating?: string;
  24. softwareQuality: SoftwareQuality;
  25. }
  26. export function SoftwareImpactRatingTooltip(props: Readonly<SoftwareImpactRatingTooltipProps>) {
  27. const { rating, softwareQuality } = props;
  28. const intl = useIntl();
  29. if (rating === undefined) {
  30. return null;
  31. }
  32. function ratingToWorseSeverity(rating: string): SoftwareImpactSeverity {
  33. return (
  34. {
  35. B: SoftwareImpactSeverity.Low,
  36. C: SoftwareImpactSeverity.Medium,
  37. D: SoftwareImpactSeverity.High,
  38. E: SoftwareImpactSeverity.High,
  39. }[rating] ?? SoftwareImpactSeverity.Low
  40. );
  41. }
  42. const maintainabilityMessageId =
  43. softwareQuality === SoftwareQuality.Maintainability
  44. ? `.${SoftwareQuality.Maintainability}`
  45. : '';
  46. const softwareQualityLabel = intl.formatMessage({
  47. id: `software_quality.${softwareQuality}`,
  48. });
  49. const severityLabel = intl.formatMessage({
  50. id: `overview.measures.software_impact.severity.${ratingToWorseSeverity(
  51. rating,
  52. )}.improve_tooltip`,
  53. });
  54. return intl.formatMessage(
  55. {
  56. id:
  57. rating === 'A'
  58. ? `overview.measures.software_impact.improve_rating_tooltip${maintainabilityMessageId}.A`
  59. : `overview.measures.software_impact.improve_rating_tooltip${maintainabilityMessageId}`,
  60. },
  61. {
  62. softwareQuality: softwareQualityLabel,
  63. _softwareQuality: softwareQualityLabel.toLowerCase(),
  64. ratingLabel: rating,
  65. severity: severityLabel,
  66. },
  67. );
  68. }
  69. export default SoftwareImpactRatingTooltip;