JFIFxxC      C  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr{ gilour

File "checkout-routes-11d490bd.mjs.map"

Full Path: /home/markqprx/iniasli.pro/bootstrap-20260222054357/ssr/assets/checkout-routes-11d490bd.mjs.map
File size: 27.43 KB
MIME-type: text/plain
Charset: utf-8

{"version":3,"file":"checkout-routes-11d490bd.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 <Navigate to=\"/register\" replace />;\n  }\n\n  if (isLoggedIn && isSubscribed) {\n    return <Navigate to=\"/billing\" replace />;\n  }\n\n  return children || <Outlet />;\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    <Fragment>\n      <StaticPageTitle>\n        <Trans message=\"Checkout\" />\n      </StaticPageTitle>\n      <Navbar\n        size=\"sm\"\n        color=\"transparent\"\n        className=\"z-10 mb-20 md:mb-0\"\n        textColor=\"text-main\"\n        logoColor=\"dark\"\n        darkModeColor=\"transparent\"\n        menuPosition=\"checkout-page-navbar\"\n      />\n      <div className=\"md:flex w-full mx-auto justify-between px-20 md:px-0 md:pt-128 md:max-w-950\">\n        <div className=\"hidden md:block fixed right-0 top-0 w-1/2 h-full bg-alt shadow-[15px_0_30px_0_rgb(0_0_0_/_18%)]\" />\n        <div className=\"md:w-400 overflow-hidden\">\n          {left}\n          <CustomMenu\n            menu=\"checkout-page-footer\"\n            className=\"text-xs mt-50 text-muted overflow-x-auto\"\n          />\n          <div className=\"mt-40\">\n            <LocaleSwitcher />\n          </div>\n        </div>\n        <div className=\"hidden md:block w-384\">\n          <div className=\"relative z-10\">{right}</div>\n        </div>\n      </div>\n    </Fragment>\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<FetchProductResponse> {\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    <div>\n      <h2 className=\"text-2xl mb-30\">\n        <Trans message=\"Summary\" />\n      </h2>\n      {status === 'pending' ? (\n        <LoadingSkeleton key=\"loading-skeleton\" />\n      ) : (\n        <ProductSummary\n          product={product!}\n          price={price!}\n          showBillingLine={showBillingLine}\n        />\n      )}\n    </div>\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    <m.div>\n      <div className=\"text-xl font-semibold mb-6\">{product.name}</div>\n      {product.description && (\n        <div className=\"text-sm text-muted\">{product.description}</div>\n      )}\n      <FormattedPrice\n        priceClassName=\"font-bold text-4xl\"\n        periodClassName=\"text-muted text-xs\"\n        variant=\"separateLine\"\n        price={price}\n        className=\"mt-32\"\n      />\n      <ProductFeatureList product={product} />\n      {showBillingLine && (\n        <div className=\"flex items-center justify-between gap-24 border-t pt-24 mt-32 font-medium\">\n          <div>\n            <Trans message=\"Billed today\" />\n          </div>\n          <div>\n            <FormattedCurrency value={price.amount} currency={price.currency} />\n          </div>\n        </div>\n      )}\n    </m.div>\n  );\n}\n\nfunction LoadingSkeleton() {\n  return (\n    <m.div {...opacityAnimation} className=\"max-w-180\">\n      <Skeleton className=\"text-xl mb-6\" />\n      <Skeleton className=\"text-sm\" />\n      <Skeleton className=\"text-4xl mt-32\" />\n    </m.div>\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<boolean>(false);\n  const paypalButtonsRendered = useRef<boolean>(false);\n  const [paypalIsLoaded, setPaypalIsLoaded] = useState(false);\n  const paypalElementRef = useRef<HTMLDivElement>(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 <FullPageLoader screen />;\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 <Navigate to=\"/pricing\" replace />;\n  }\n\n  return (\n    <CheckoutLayout>\n      <Fragment>\n        <h1 className=\"mb-40 text-4xl\">\n          <Trans message=\"Checkout\" />\n        </h1>\n        {stripe.enable ? (\n          <Fragment>\n            <StripeElementsForm\n              productId={productId}\n              priceId={priceId}\n              submitLabel={<Trans message=\"Upgrade\" />}\n              type=\"subscription\"\n              returnUrl={`${base_url}/checkout/${productId}/${priceId}/stripe/done`}\n            />\n            <Separator />\n          </Fragment>\n        ) : null}\n        <div ref={paypalElementRef} />\n        <div className=\"mt-30 text-xs text-muted\">\n          <Trans message=\"You’ll be charged until you cancel your subscription. Previous charges won’t be refunded when you cancel unless it’s legally required. Your payment data is encrypted and secure. By subscribing your agree to our terms of service and privacy policy.\" />\n        </div>\n      </Fragment>\n      <CheckoutProductSummary />\n    </CheckoutLayout>\n  );\n}\n\nfunction Separator() {\n  return (\n    <div className=\"relative my-20 text-center before:absolute before:left-0 before:top-1/2 before:h-1 before:w-full before:-translate-y-1/2 before:bg-divider\">\n      <span className=\"relative z-10 bg px-10 text-sm text-muted\">\n        <Trans message=\"or\" />\n      </span>\n    </div>\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<BillingRedirectMessageConfig>();\n\n  const stripeInitiated = useRef<boolean>();\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    <CheckoutLayout>\n      <BillingRedirectMessage config={messageConfig} />\n      <CheckoutProductSummary showBillingLine={false} />\n    </CheckoutLayout>\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<BillingRedirectMessageConfig>();\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    <CheckoutLayout>\n      <BillingRedirectMessage config={messageConfig} />\n      <CheckoutProductSummary showBillingLine={false} />\n    </CheckoutLayout>\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    <Routes>\n      <Route\n        path=\":productId/:priceId\"\n        element={\n          <NotSubscribedRoute>\n            <Checkout />\n          </NotSubscribedRoute>\n        }\n      />\n      <Route\n        path=\":productId/:priceId/stripe/done\"\n        element={\n          <NotSubscribedRoute>\n            <CheckoutStripeDone />\n          </NotSubscribedRoute>\n        }\n      />\n      <Route\n        path=\":productId/:priceId/paypal/done\"\n        element={\n          <NotSubscribedRoute>\n            <CheckoutPaypalDone />\n          </NotSubscribedRoute>\n        }\n      />\n    </Routes>\n  );\n}\n"],"names":["data","getRedirectMessageConfig","storeSubscriptionDetailsLocally","errorLink"],"mappings":"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"}