useAM2UpsellModal.tsx 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import {useCallback} from 'react';
  2. import useOrganization from 'sentry/utils/useOrganization';
  3. import type {UpsellModalSamePriceProps} from 'getsentry/actionCreators/modal';
  4. import {
  5. openAM2UpsellModal,
  6. openAM2UpsellModalSamePrice,
  7. } from 'getsentry/actionCreators/modal';
  8. import usePreviewData from 'getsentry/components/upgradeNowModal/usePreviewData';
  9. import type {Subscription} from 'getsentry/types';
  10. import type {AM2UpdateSurfaces} from 'getsentry/utils/trackGetsentryAnalytics';
  11. export function useAM2UpsellModal({
  12. subscription,
  13. surface,
  14. onComplete,
  15. enabled = true,
  16. }: {
  17. subscription: Subscription;
  18. surface: AM2UpdateSurfaces;
  19. enabled?: boolean;
  20. onComplete?: UpsellModalSamePriceProps['onComplete'];
  21. }) {
  22. const organization = useOrganization();
  23. const previewData = usePreviewData({organization, subscription, enabled});
  24. const handleShowModal = useCallback(() => {
  25. if (previewData.loading || !enabled) {
  26. return;
  27. }
  28. if (previewData.error) {
  29. return;
  30. }
  31. if (previewData.previewData?.billedAmount === 0) {
  32. openAM2UpsellModalSamePrice({
  33. organization,
  34. subscription,
  35. surface,
  36. onComplete,
  37. ...previewData,
  38. });
  39. return;
  40. }
  41. openAM2UpsellModal({
  42. organization,
  43. subscription,
  44. surface,
  45. ...previewData,
  46. });
  47. }, [organization, subscription, previewData, onComplete, surface, enabled]);
  48. return {
  49. showModal: handleShowModal,
  50. };
  51. }