@coursebuilder/commerce-next
Version:
Commerce Functionality for Course Builder with Next.js
28 lines (27 loc) • 1.54 kB
JavaScript
'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] }) }) }));
};