'use client'; import { SourcebotLogo } from "@/app/components/sourcebotLogo"; import { useToast } from "@/components/hooks/use-toast"; import { Button } from "@/components/ui/button"; import { useDomain } from "@/hooks/useDomain"; import { useNonEmptyQueryParam } from "@/hooks/useNonEmptyQueryParam"; import { ErrorCode } from "@/lib/errorCodes"; import { isServiceError } from "@/lib/utils"; import { Check, Loader2 } from "lucide-react"; import { useCallback, useEffect, useState } from "react"; import { useRouter } from "next/navigation"; import { OnboardingSteps, TEAM_FEATURES } from "@/lib/constants"; import useCaptureEvent from "@/hooks/useCaptureEvent"; import { createOnboardingSubscription } from "../actions"; export const Checkout = () => { const domain = useDomain(); const { toast } = useToast(); const errorCode = useNonEmptyQueryParam('errorCode'); const errorMessage = useNonEmptyQueryParam('errorMessage'); const [isLoading, setIsLoading] = useState(false); const router = useRouter(); const captureEvent = useCaptureEvent(); useEffect(() => { if (errorCode === ErrorCode.STRIPE_CHECKOUT_ERROR && errorMessage) { toast({ description: `⚠️ Stripe checkout failed with error: ${errorMessage}`, variant: "destructive", }); captureEvent('wa_onboard_checkout_fail', { error: errorMessage, }); } }, [errorCode, errorMessage, toast, captureEvent]); const onCheckout = useCallback(() => { setIsLoading(true); createOnboardingSubscription(domain) .then((response) => { if (isServiceError(response)) { toast({ description: `❌ Stripe checkout failed with error: ${response.message}`, variant: "destructive", }) captureEvent('wa_onboard_checkout_fail', { error: response.errorCode, }); } else { captureEvent('wa_onboard_checkout_success', {}); router.push(`/${domain}/onboard?step=${OnboardingSteps.Complete}`); } }) .finally(() => { setIsLoading(false); }); }, [domain, router, toast, captureEvent]); return (

Start your 14 day free trial

Cancel anytime. No credit card required.

) }