deployBadge.tsx 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. import React from 'react';
  2. import Link from 'app/components/links/link';
  3. import Tag from 'app/components/tag';
  4. import {IconOpen} from 'app/icons';
  5. import {t} from 'app/locale';
  6. import {Deploy} from 'app/types';
  7. import {QueryResults, stringifyQueryObject} from 'app/utils/tokenizeSearch';
  8. type Props = {
  9. deploy: Deploy;
  10. projectId?: number;
  11. orgSlug?: string;
  12. version?: string;
  13. className?: string;
  14. };
  15. const DeployBadge = ({deploy, orgSlug, projectId, version, className}: Props) => {
  16. const shouldLinkToIssues = !!orgSlug && !!version;
  17. const badge = (
  18. <Tag
  19. className={className}
  20. type="highlight"
  21. icon={shouldLinkToIssues && <IconOpen />}
  22. textMaxWidth={80}
  23. tooltipText={shouldLinkToIssues ? t('Open In Issues') : undefined}
  24. >
  25. {deploy.environment}
  26. </Tag>
  27. );
  28. if (!shouldLinkToIssues) {
  29. return badge;
  30. }
  31. return (
  32. <Link
  33. to={{
  34. pathname: `/organizations/${orgSlug}/issues/`,
  35. query: {
  36. project: projectId ?? null,
  37. environment: deploy.environment,
  38. query: stringifyQueryObject(new QueryResults([`release:${version!}`])),
  39. },
  40. }}
  41. >
  42. {badge}
  43. </Link>
  44. );
  45. };
  46. export default DeployBadge;