projectScoreCards.tsx 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. import styled from '@emotion/styled';
  2. import space from 'sentry/styles/space';
  3. import {
  4. Organization,
  5. PageFilters,
  6. Project,
  7. SessionFieldWithOperation,
  8. } from 'sentry/types';
  9. import {ProjectAnrScoreCard} from './projectAnrScoreCard';
  10. import ProjectApdexScoreCard from './projectApdexScoreCard';
  11. import ProjectStabilityScoreCard from './projectStabilityScoreCard';
  12. import ProjectVelocityScoreCard from './projectVelocityScoreCard';
  13. type Props = {
  14. hasSessions: boolean | null;
  15. isProjectStabilized: boolean;
  16. organization: Organization;
  17. selection: PageFilters;
  18. hasTransactions?: boolean;
  19. project?: Project;
  20. query?: string;
  21. };
  22. function ProjectScoreCards({
  23. organization,
  24. selection,
  25. isProjectStabilized,
  26. hasSessions,
  27. hasTransactions,
  28. query,
  29. project,
  30. }: Props) {
  31. return (
  32. <CardWrapper>
  33. <ProjectStabilityScoreCard
  34. organization={organization}
  35. selection={selection}
  36. isProjectStabilized={isProjectStabilized}
  37. hasSessions={hasSessions}
  38. query={query}
  39. field={SessionFieldWithOperation.SESSIONS}
  40. />
  41. <ProjectStabilityScoreCard
  42. organization={organization}
  43. selection={selection}
  44. isProjectStabilized={isProjectStabilized}
  45. hasSessions={hasSessions}
  46. query={query}
  47. field={SessionFieldWithOperation.USERS}
  48. />
  49. <ProjectVelocityScoreCard
  50. organization={organization}
  51. selection={selection}
  52. isProjectStabilized={isProjectStabilized}
  53. query={query}
  54. />
  55. {organization.features.includes('anr-rate') && project?.platform === 'android' ? (
  56. <ProjectAnrScoreCard
  57. organization={organization}
  58. selection={selection}
  59. isProjectStabilized={isProjectStabilized}
  60. query={query}
  61. />
  62. ) : (
  63. <ProjectApdexScoreCard
  64. organization={organization}
  65. selection={selection}
  66. isProjectStabilized={isProjectStabilized}
  67. hasTransactions={hasTransactions}
  68. query={query}
  69. />
  70. )}
  71. </CardWrapper>
  72. );
  73. }
  74. const CardWrapper = styled('div')`
  75. @media (min-width: ${p => p.theme.breakpoints.medium}) {
  76. display: grid;
  77. grid-column-gap: ${space(2)};
  78. grid-template-columns: repeat(2, minmax(0, 1fr));
  79. }
  80. @media (min-width: 1600px) {
  81. grid-template-columns: repeat(4, minmax(0, 1fr));
  82. }
  83. `;
  84. export default ProjectScoreCards;