addIntegrationButton.tsx 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. import {Button, ButtonProps} from 'sentry/components/button';
  2. import {Tooltip} from 'sentry/components/tooltip';
  3. import {t} from 'sentry/locale';
  4. import {IntegrationWithConfig} from 'sentry/types';
  5. import AddIntegration from './addIntegration';
  6. interface AddIntegrationButtonProps
  7. extends Omit<ButtonProps, 'children' | 'analyticsParams'>,
  8. Pick<
  9. React.ComponentProps<typeof AddIntegration>,
  10. 'provider' | 'organization' | 'analyticsParams' | 'modalParams'
  11. > {
  12. onAddIntegration: (data: IntegrationWithConfig) => void;
  13. buttonText?: string;
  14. installStatus?: string;
  15. reinstall?: boolean;
  16. }
  17. export function AddIntegrationButton({
  18. provider,
  19. buttonText,
  20. onAddIntegration,
  21. organization,
  22. reinstall,
  23. analyticsParams,
  24. modalParams,
  25. installStatus,
  26. ...buttonProps
  27. }: AddIntegrationButtonProps) {
  28. const label =
  29. buttonText ?? reinstall
  30. ? t('Enable')
  31. : installStatus === 'Disabled'
  32. ? t('Reinstall')
  33. : t('Add %s', provider.metadata.noun);
  34. return (
  35. <Tooltip
  36. disabled={provider.canAdd}
  37. title={`Integration cannot be added on Sentry. Enable this integration via the ${provider.name} instance.`}
  38. >
  39. <AddIntegration
  40. provider={provider}
  41. onInstall={onAddIntegration}
  42. organization={organization}
  43. analyticsParams={analyticsParams}
  44. modalParams={modalParams}
  45. >
  46. {onClick => (
  47. <Button
  48. disabled={!provider.canAdd}
  49. {...buttonProps}
  50. onClick={() => onClick()}
  51. aria-label={t('Add integration')}
  52. >
  53. {label}
  54. </Button>
  55. )}
  56. </AddIntegration>
  57. </Tooltip>
  58. );
  59. }