UNPKG

@coursebuilder/commerce-next

Version:

Commerce Functionality for Course Builder with Next.js

28 lines (27 loc) 1.54 kB
'use client'; import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime"; import * as React from 'react'; import { use } from 'react'; import { SessionProvider } from 'next-auth/react'; import RedeemDialog from '../pricing/redeem-dialog'; export const CouponContext = React.createContext({}); export const CouponProvider = ({ children, getProduct, getCouponForCode, }) => { const [couponLoader, setCouponLoader] = React.useState(); const [productLoader, setProductLoader] = React.useState(); React.useEffect(() => { const searchParams = new URLSearchParams(window.location.search); const codeParam = searchParams.get('code'); const couponParam = searchParams.get('coupon'); setCouponLoader(getCouponForCode(codeParam || couponParam)); }, []); const coupon = couponLoader ? use(couponLoader) : undefined; const validCoupon = Boolean(coupon && coupon.isValid); React.useEffect(() => { if (coupon?.isValid) { setProductLoader(getProduct(coupon.restrictedToProductId)); } }, [coupon?.restrictedToProductId, coupon?.isValid]); const product = productLoader ? use(productLoader) : undefined; const isRedeemable = validCoupon && product && coupon?.isRedeemable; return (_jsx(SessionProvider, { children: _jsx(CouponContext.Provider, { value: { coupon }, children: _jsxs(_Fragment, { children: [isRedeemable && (_jsx(RedeemDialog, { open: validCoupon, couponId: coupon?.id, product: product })), children] }) }) })); };