progressHeader.tsx 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. import {css, useTheme} from '@emotion/react';
  2. import styled from '@emotion/styled';
  3. import ProgressRing from 'sentry/components/progressRing';
  4. import {t} from 'sentry/locale';
  5. import space from 'sentry/styles/space';
  6. import {OnboardingTaskDescriptor, OnboardingTaskStatus} from 'sentry/types';
  7. import {isDemoWalkthrough} from 'sentry/utils/demoMode';
  8. type Props = {
  9. allTasks: OnboardingTaskDescriptor[];
  10. completedTasks: OnboardingTaskStatus[];
  11. };
  12. function ProgressHeader({allTasks, completedTasks}: Props) {
  13. const theme = useTheme();
  14. let title: string, description: string;
  15. if (isDemoWalkthrough()) {
  16. title = t('Guided Tours');
  17. description = t('Take a guided tour to see what Sentry can do for you');
  18. } else {
  19. title = t('Quick Start');
  20. description = t('Walk through this guide to get the most out of Sentry right away.');
  21. }
  22. const filteredTasks = allTasks.filter(task => !task.renderCard);
  23. return (
  24. <Container>
  25. <StyledProgressRing
  26. size={80}
  27. barWidth={8}
  28. text={filteredTasks.length - completedTasks.length}
  29. animateText
  30. value={(completedTasks.length / filteredTasks.length) * 100}
  31. progressEndcaps="round"
  32. backgroundColor={theme.gray100}
  33. textCss={() => css`
  34. font-size: 26px;
  35. color: ${theme.textColor};
  36. `}
  37. />
  38. <HeaderTitle>{title}</HeaderTitle>
  39. <Description>{description}</Description>
  40. </Container>
  41. );
  42. }
  43. export default ProgressHeader;
  44. const Container = styled('div')`
  45. display: grid;
  46. grid-template-columns: min-content 1fr;
  47. grid-template-rows: min-content 1fr;
  48. grid-column-gap: ${space(2)};
  49. margin: 90px ${space(4)} 0 ${space(4)};
  50. `;
  51. const StyledProgressRing = styled(ProgressRing)`
  52. grid-column: 1/2;
  53. grid-row: 1/3;
  54. `;
  55. const HeaderTitle = styled('h3')`
  56. margin: 0;
  57. grid-column: 2/3;
  58. grid-row: 1/2;
  59. `;
  60. const Description = styled('div')`
  61. color: ${p => p.theme.gray300};
  62. grid-column: 2/3;
  63. grid-row: 2/3;
  64. `;