firstPartyIntegrationAdditionalCTA.tsx 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. import styled from '@emotion/styled';
  2. import {space} from 'sentry/styles/space';
  3. import type {Integration} from 'sentry/types/integrations';
  4. import UpsellButton from 'getsentry/components/upsellButton';
  5. type Props = {
  6. integrations: Integration[];
  7. };
  8. function FirstPartyIntegrationAdditionalCTA({integrations}: Props) {
  9. // only render this upsell CTA when we have disabled integrations or one on grace perioid
  10. const disabledOrGracePeriodIntegrations = integrations.filter(
  11. i => i.organizationIntegrationStatus === 'disabled' || !!i.gracePeriodEnd
  12. );
  13. if (disabledOrGracePeriodIntegrations.length === 0) {
  14. return null;
  15. }
  16. const integration = disabledOrGracePeriodIntegrations[0]!;
  17. const alertType =
  18. integration.organizationIntegrationStatus === 'disabled'
  19. ? 'disabled-integration'
  20. : 'grace-period';
  21. const provider = integration.provider.key;
  22. return (
  23. <ButtonWrapper>
  24. <UpsellButton
  25. source={`integration-additional-cta-alert-hook-${alertType}-${provider}`}
  26. size="sm"
  27. priority="primary"
  28. extraAnalyticsParams={{
  29. integration: provider,
  30. integration_type: 'first-party',
  31. }}
  32. />
  33. </ButtonWrapper>
  34. );
  35. }
  36. export default FirstPartyIntegrationAdditionalCTA;
  37. const ButtonWrapper = styled('div')`
  38. display: flex;
  39. margin-left: ${space(3)};
  40. align-items: center;
  41. justify-content: center;
  42. `;