{"version":3,"file":"checkout-routes-70783735.mjs","sources":["../../../common/resources/client/auth/guards/not-subscribed-route.tsx","../../../common/resources/client/billing/checkout/checkout-layout.tsx","../../../common/resources/client/billing/requests/use-checkout-product.ts","../../../common/resources/client/billing/checkout/checkout-product-summary.tsx","../../../common/resources/client/billing/checkout/paypal/use-paypal.ts","../../../common/resources/client/billing/checkout/checkout.tsx","../../../common/resources/client/billing/checkout/stripe/checkout-stripe-done.tsx","../../../common/resources/client/billing/checkout/paypal/checkout-paypal-done.tsx","../../../common/resources/client/billing/checkout/checkout-routes.tsx"],"sourcesContent":["import {useAuth} from '../use-auth';\nimport {ReactElement} from 'react';\nimport {Navigate, Outlet} from 'react-router-dom';\n\ninterface GuestRouteProps {\n children: ReactElement;\n}\nexport function NotSubscribedRoute({children}: GuestRouteProps) {\n const {isLoggedIn, isSubscribed} = useAuth();\n\n if (!isLoggedIn) {\n return ;\n }\n\n if (isLoggedIn && isSubscribed) {\n return ;\n }\n\n return children || ;\n}\n","import {Fragment, ReactElement, useEffect} from 'react';\nimport {Navbar} from '../../ui/navigation/navbar/navbar';\nimport {CustomMenu} from '../../menus/custom-menu';\nimport {LocaleSwitcher} from '../../i18n/locale-switcher';\nimport {removeFromLocalStorage} from '../../utils/hooks/local-storage';\nimport {StaticPageTitle} from '../../seo/static-page-title';\nimport {Trans} from '../../i18n/trans';\n\ninterface CheckoutLayoutProps {\n children: [ReactElement, ReactElement];\n}\nexport function CheckoutLayout({children}: CheckoutLayoutProps) {\n const [left, right] = children;\n\n useEffect(() => {\n removeFromLocalStorage('be.onboarding.selected');\n }, []);\n\n return (\n \n \n \n \n \n
\n
\n
\n {left}\n \n
\n \n
\n
\n
\n
{right}
\n
\n
\n \n );\n}\n","import {keepPreviousData, useQuery} from '@tanstack/react-query';\nimport {apiClient} from '../../http/query-client';\nimport {BackendResponse} from '../../http/backend-response/backend-response';\nimport {Product} from '../product';\nimport {useParams} from 'react-router-dom';\n\nconst endpoint = (productId: string | number) =>\n `billing/products/${productId}`;\n\nexport interface FetchProductResponse extends BackendResponse {\n product: Product;\n}\n\nexport function useCheckoutProduct() {\n const {productId, priceId} = useParams();\n const query = useQuery({\n queryKey: [endpoint(productId!)],\n queryFn: () => fetchProduct(productId!),\n placeholderData: keepPreviousData,\n enabled: productId != null && priceId != null,\n });\n\n const product = query.data?.product;\n const price =\n product?.prices.find(p => p.id === parseInt(priceId!)) ||\n product?.prices[0];\n\n return {status: query.status, product, price};\n}\n\nfunction fetchProduct(\n productId: string | number,\n): Promise {\n return apiClient.get(endpoint(productId)).then(response => response.data);\n}\n","import {Trans} from '../../i18n/trans';\nimport {FormattedPrice} from '../../i18n/formatted-price';\nimport {useCheckoutProduct} from '../requests/use-checkout-product';\nimport {m} from 'framer-motion';\nimport {Skeleton} from '../../ui/skeleton/skeleton';\nimport {Product} from '../product';\nimport {Price} from '../price';\nimport {FormattedCurrency} from '../../i18n/formatted-currency';\nimport {ProductFeatureList} from '../pricing-table/product-feature-list';\nimport {opacityAnimation} from '../../ui/animation/opacity-animation';\n\ninterface CheckoutProductSummaryProps {\n showBillingLine?: boolean;\n}\nexport function CheckoutProductSummary({\n showBillingLine = true,\n}: CheckoutProductSummaryProps) {\n const {status, product, price} = useCheckoutProduct();\n\n if (status === 'error' || (status !== 'pending' && (!product || !price))) {\n return null;\n }\n\n return (\n
\n

\n \n

\n {status === 'pending' ? (\n \n ) : (\n \n )}\n
\n );\n}\n\ninterface ProductSummaryProps {\n product: Product;\n price: Price;\n showBillingLine: boolean;\n}\nfunction ProductSummary({\n product,\n price,\n showBillingLine,\n}: ProductSummaryProps) {\n return (\n \n
{product.name}
\n {product.description && (\n
{product.description}
\n )}\n \n \n {showBillingLine && (\n
\n
\n \n
\n
\n \n
\n
\n )}\n
\n );\n}\n\nfunction LoadingSkeleton() {\n return (\n \n \n \n \n \n );\n}\n","import {useEffect, useRef, useState} from 'react';\nimport {loadScript} from '@paypal/paypal-js';\nimport {useProducts} from '@common/billing/pricing-table/use-products';\nimport {useSettings} from '@common/core/settings/use-settings';\n\ninterface UsePaypalProps {\n productId?: string;\n priceId?: string;\n}\nexport function usePaypal({productId, priceId}: UsePaypalProps) {\n const {data} = useProducts();\n const paypalLoadStarted = useRef(false);\n const paypalButtonsRendered = useRef(false);\n const [paypalIsLoaded, setPaypalIsLoaded] = useState(false);\n const paypalElementRef = useRef(null);\n const {\n base_url,\n billing: {\n stripe: {enable: stripeEnabled},\n paypal: {enable: paypalEnabled, public_key},\n },\n } = useSettings();\n\n useEffect(() => {\n if (!paypalEnabled || !public_key || paypalLoadStarted.current) return;\n loadScript({\n clientId: public_key,\n intent: 'subscription',\n vault: true,\n disableFunding: stripeEnabled ? 'card' : undefined,\n }).then(() => {\n setPaypalIsLoaded(true);\n });\n paypalLoadStarted.current = true;\n }, [public_key, paypalEnabled, stripeEnabled]);\n\n useEffect(() => {\n if (\n !paypalIsLoaded ||\n !window.paypal?.Buttons ||\n !paypalElementRef.current ||\n !data?.products.length ||\n !productId ||\n !priceId ||\n paypalButtonsRendered.current\n )\n return;\n\n const product = data.products.find(p => p.id === parseInt(productId));\n const price = product?.prices.find(p => p.id === parseInt(priceId));\n\n window.paypal\n .Buttons({\n style: {\n label: 'pay',\n },\n createSubscription: (data, actions) => {\n return actions.subscription.create({\n application_context: {\n shipping_preference: 'NO_SHIPPING',\n },\n plan_id: price?.paypal_id!,\n });\n },\n onApprove: (data, actions) => {\n actions.redirect(\n `${base_url}/checkout/${productId}/${priceId}/paypal/done?subscriptionId=${data.subscriptionID}&status=success`\n );\n return Promise.resolve();\n },\n onError: e => {\n location.href = `${base_url}/checkout/${productId}/${priceId}/paypal/done?status=error`;\n },\n })\n .render(paypalElementRef.current)\n .then(() => {\n paypalButtonsRendered.current = true;\n });\n }, [productId, priceId, data, paypalIsLoaded, base_url]);\n\n return {\n paypalElementRef,\n stripeIsEnabled: public_key != null && paypalEnabled,\n };\n}\n","import {Navigate, useParams} from 'react-router-dom';\nimport {Trans} from '../../i18n/trans';\nimport {CheckoutLayout} from './checkout-layout';\nimport {CheckoutProductSummary} from './checkout-product-summary';\nimport {usePaypal} from './paypal/use-paypal';\nimport {StripeElementsForm} from './stripe/stripe-elements-form';\nimport {Fragment} from 'react';\nimport {useProducts} from '../pricing-table/use-products';\nimport {FullPageLoader} from '../../ui/progress/full-page-loader';\nimport {useSettings} from '../../core/settings/use-settings';\n\nexport function Checkout() {\n const {productId, priceId} = useParams();\n const productQuery = useProducts();\n const {paypalElementRef} = usePaypal({\n productId,\n priceId,\n });\n const {\n base_url,\n billing: {stripe},\n } = useSettings();\n\n if (productQuery.isLoading) {\n return ;\n }\n\n const product = productQuery.data?.products.find(\n p => p.id === parseInt(productId!)\n );\n const price = product?.prices.find(p => p.id === parseInt(priceId!));\n\n // make sure product and price exists in backend\n if (!product || !price || productQuery.status === 'error') {\n return ;\n }\n\n return (\n \n \n

\n \n

\n {stripe.enable ? (\n \n }\n type=\"subscription\"\n returnUrl={`${base_url}/checkout/${productId}/${priceId}/stripe/done`}\n />\n \n \n ) : null}\n
\n
\n \n
\n \n \n \n );\n}\n\nfunction Separator() {\n return (\n
\n \n \n \n
\n );\n}\n","import {CheckoutLayout} from '../checkout-layout';\nimport {useParams, useSearchParams} from 'react-router-dom';\nimport {loadStripe, PaymentIntent} from '@stripe/stripe-js';\nimport {useEffect, useRef, useState} from 'react';\nimport {message} from '../../../i18n/message';\nimport {CheckoutProductSummary} from '../checkout-product-summary';\nimport {\n BillingRedirectMessage,\n BillingRedirectMessageConfig,\n} from '../../billing-redirect-message';\nimport {useNavigate} from '../../../utils/hooks/use-navigate';\nimport {apiClient} from '../../../http/query-client';\nimport {useSettings} from '../../../core/settings/use-settings';\nimport {useBootstrapData} from '../../../core/bootstrap-data/bootstrap-data-context';\n\nexport function CheckoutStripeDone() {\n const {invalidateBootstrapData} = useBootstrapData();\n const {productId, priceId} = useParams();\n const navigate = useNavigate();\n const {\n billing: {stripe_public_key},\n } = useSettings();\n\n const [params] = useSearchParams();\n const clientSecret = params.get('payment_intent_client_secret');\n\n const [messageConfig, setMessageConfig] =\n useState();\n\n const stripeInitiated = useRef();\n\n useEffect(() => {\n if (stripeInitiated.current) return;\n loadStripe(stripe_public_key!).then(async stripe => {\n if (!stripe || !clientSecret) {\n setMessageConfig(getRedirectMessageConfig());\n return;\n }\n stripe.retrievePaymentIntent(clientSecret).then(({paymentIntent}) => {\n if (paymentIntent?.status === 'succeeded') {\n storeSubscriptionDetailsLocally(paymentIntent.id).then(() => {\n invalidateBootstrapData();\n });\n }\n setMessageConfig(\n getRedirectMessageConfig(paymentIntent?.status, productId, priceId)\n );\n });\n });\n stripeInitiated.current = true;\n }, [\n stripe_public_key,\n clientSecret,\n priceId,\n productId,\n invalidateBootstrapData,\n ]);\n\n if (!clientSecret) {\n navigate('/');\n return null;\n }\n\n return (\n \n \n \n \n );\n}\n\nfunction getRedirectMessageConfig(\n status?: PaymentIntent.Status,\n productId?: string,\n priceId?: string\n): BillingRedirectMessageConfig {\n switch (status) {\n case 'succeeded':\n return {\n message: message('Subscription successful!'),\n status: 'success',\n buttonLabel: message('Return to site'),\n link: '/billing',\n };\n case 'processing':\n return {\n message: message(\n \"Payment processing. We'll update you when payment is received.\"\n ),\n status: 'success',\n buttonLabel: message('Return to site'),\n link: '/billing',\n };\n case 'requires_payment_method':\n return {\n message: message('Payment failed. Please try another payment method.'),\n status: 'error',\n buttonLabel: message('Go back'),\n link: errorLink(productId, priceId),\n };\n default:\n return {\n message: message('Something went wrong'),\n status: 'error',\n buttonLabel: message('Go back'),\n link: errorLink(productId, priceId),\n };\n }\n}\n\nfunction errorLink(productId?: string, priceId?: string): string {\n return productId && priceId ? `/buy/${productId}/${priceId}` : '/';\n}\n\nfunction storeSubscriptionDetailsLocally(paymentIntentId: string) {\n return apiClient.post('billing/stripe/store-subscription-details-locally', {\n payment_intent_id: paymentIntentId,\n });\n}\n","import {CheckoutLayout} from '../checkout-layout';\nimport {useParams, useSearchParams} from 'react-router-dom';\nimport {useEffect, useState} from 'react';\nimport {message} from '@common/i18n/message';\nimport {CheckoutProductSummary} from '../checkout-product-summary';\nimport {\n BillingRedirectMessage,\n BillingRedirectMessageConfig,\n} from '../../billing-redirect-message';\nimport {apiClient} from '@common/http/query-client';\nimport {useBootstrapData} from '@common/core/bootstrap-data/bootstrap-data-context';\n\nexport function CheckoutPaypalDone() {\n const {invalidateBootstrapData} = useBootstrapData();\n const {productId, priceId} = useParams();\n const [params] = useSearchParams();\n\n const [messageConfig, setMessageConfig] =\n useState();\n\n useEffect(() => {\n const subscriptionId = params.get('subscriptionId');\n const status = params.get('status');\n setMessageConfig(getRedirectMessageConfig(status, productId, priceId));\n if (subscriptionId && status === 'success') {\n storeSubscriptionDetailsLocally(subscriptionId).then(() => {\n invalidateBootstrapData();\n });\n }\n }, [priceId, productId, params, invalidateBootstrapData]);\n\n return (\n \n \n \n \n );\n}\n\nfunction getRedirectMessageConfig(\n status?: 'success' | 'error' | string | null,\n productId?: string,\n priceId?: string\n): BillingRedirectMessageConfig {\n switch (status) {\n case 'success':\n return {\n message: message('Subscription successful!'),\n status: 'success',\n buttonLabel: message('Return to site'),\n link: '/billing',\n };\n default:\n return {\n message: message('Something went wrong. Please try again.'),\n status: 'error',\n buttonLabel: message('Go back'),\n link: errorLink(productId, priceId),\n };\n }\n}\n\nfunction errorLink(productId?: string, priceId?: string): string {\n return productId && priceId ? `/buy/${productId}/${priceId}` : '/';\n}\n\nfunction storeSubscriptionDetailsLocally(subscriptionId: string) {\n return apiClient.post('billing/paypal/store-subscription-details-locally', {\n paypal_subscription_id: subscriptionId,\n });\n}\n","import {Route, Routes} from 'react-router-dom';\nimport {NotSubscribedRoute} from '../../auth/guards/not-subscribed-route';\nimport {Checkout} from './checkout';\nimport React from 'react';\nimport {CheckoutStripeDone} from './stripe/checkout-stripe-done';\nimport {CheckoutPaypalDone} from './paypal/checkout-paypal-done';\n\nexport default function CheckoutRoutes() {\n return (\n \n \n \n \n }\n />\n \n \n \n }\n />\n \n \n \n }\n />\n \n );\n}\n"],"names":["data","getRedirectMessageConfig","storeSubscriptionDetailsLocally","errorLink"],"mappings":"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"}