Files
twenty_crm/packages/twenty-front/src/modules/billing/hooks/useHandleCheckoutSession.ts
Antoine Moreaux 34afd73923 refacto(invite|signin): remove unused code + fix signin on invite page. (#9745)
- Replace `window.location.replace` by `useRedirect` hook.
- Remove unused code: `switchWorkspace, addUserByInviteHash...`
- Refacto `Invite` component.
- Fix signin on invite modal.
2025-01-21 16:33:31 +01:00

54 lines
1.6 KiB
TypeScript

import { SettingsPath } from '@/types/SettingsPath';
import { SnackBarVariant } from '@/ui/feedback/snack-bar-manager/components/SnackBar';
import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar';
import { useState } from 'react';
import {
BillingPlanKey,
SubscriptionInterval,
} from '~/generated-metadata/graphql';
import { useCheckoutSessionMutation } from '~/generated/graphql';
import { getSettingsPath } from '~/utils/navigation/getSettingsPath';
import { useRedirect } from '@/domain-manager/hooks/useRedirect';
export const useHandleCheckoutSession = ({
recurringInterval,
plan,
requirePaymentMethod,
}: {
recurringInterval: SubscriptionInterval;
plan: BillingPlanKey;
requirePaymentMethod: boolean;
}) => {
const { redirect } = useRedirect();
const { enqueueSnackBar } = useSnackBar();
const [checkoutSession] = useCheckoutSessionMutation();
const [isSubmitting, setIsSubmitting] = useState(false);
const handleCheckoutSession = async () => {
setIsSubmitting(true);
const { data } = await checkoutSession({
variables: {
recurringInterval,
successUrlPath: getSettingsPath(SettingsPath.Billing),
plan,
requirePaymentMethod,
},
});
setIsSubmitting(false);
if (!data?.checkoutSession.url) {
enqueueSnackBar(
'Checkout session error. Please retry or contact Twenty team',
{
variant: SnackBarVariant.Error,
},
);
return;
}
redirect(data.checkoutSession.url);
};
return { isSubmitting, handleCheckoutSession };
};