packageStatus.tsx 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import styled from '@emotion/styled';
  2. import Tooltip from 'sentry/components/tooltip';
  3. import {IconCheckmark, IconCircle, IconFlag} from 'sentry/icons';
  4. import space from 'sentry/styles/space';
  5. type Props = {
  6. status: 'error' | 'success' | 'empty';
  7. tooltip?: string;
  8. };
  9. function PackageStatus({status, tooltip}: Props) {
  10. const getIcon = () => {
  11. switch (status) {
  12. case 'success':
  13. return <IconCheckmark isCircled color="green300" size="xs" />;
  14. case 'empty':
  15. return <IconCircle size="xs" />;
  16. case 'error':
  17. default:
  18. return <IconFlag color="red300" size="xs" />;
  19. }
  20. };
  21. const icon = getIcon();
  22. if (status === 'empty') {
  23. return null;
  24. }
  25. return (
  26. <StyledTooltip
  27. title={tooltip}
  28. disabled={!(tooltip && tooltip.length)}
  29. containerDisplayMode="inline-flex"
  30. >
  31. <PackageStatusIcon>{icon}</PackageStatusIcon>
  32. </StyledTooltip>
  33. );
  34. }
  35. const StyledTooltip = styled(Tooltip)`
  36. margin-left: ${space(0.75)};
  37. `;
  38. export const PackageStatusIcon = styled('span')`
  39. height: 12px;
  40. align-items: center;
  41. cursor: pointer;
  42. visibility: hidden;
  43. display: none;
  44. @media (min-width: ${p => p.theme.breakpoints.small}) {
  45. display: block;
  46. }
  47. `;
  48. export default PackageStatus;