'use client'; import { ArrowPathRoundedSquareIcon } from '@heroicons/react/24/outline'; import Price from 'components/price'; import SideDialog from 'components/side-dialog'; import { CORE_VARIANT_ID_KEY, CORE_WAIVER } from 'lib/constants'; import { CoreChargeOption, ProductVariant } from 'lib/shopify/types'; import { cn, createUrl } from 'lib/utils'; import { usePathname, useRouter, useSearchParams } from 'next/navigation'; import { ReactNode, useState } from 'react'; type CoreChargeProps = { variants: ProductVariant[]; children: ReactNode; }; const CoreCharge = ({ variants, children }: CoreChargeProps) => { const searchParams = useSearchParams(); const pathname = usePathname(); const router = useRouter(); const [isOpenDialog, setIsOpenDialog] = useState(false); const optionSearchParams = new URLSearchParams(searchParams); const coreVariantIdSearchParam = optionSearchParams.get(CORE_VARIANT_ID_KEY); const variant = variants.find((variant: ProductVariant) => variant.selectedOptions.every( (option) => option.value === optionSearchParams.get(option.name.toLowerCase()) ) ); const { coreCharge, waiverAvailable, coreVariantId } = variant ?? {}; const handleSelectCoreChargeOption = (coreVariantId: string) => { optionSearchParams.set(CORE_VARIANT_ID_KEY, coreVariantId); const newUrl = createUrl(pathname, optionSearchParams); router.replace(newUrl, { scroll: false }); }; const coreChargeOptions = [ waiverAvailable && { label: 'Waive Core', value: CORE_WAIVER, price: { amount: 0, currencyCode: variant?.price.currencyCode } }, coreVariantId && coreCharge && { label: 'Pay Core Upfront', value: coreVariantId, price: coreCharge } ].filter(Boolean) as CoreChargeOption[]; if (!optionSearchParams.has(CORE_VARIANT_ID_KEY) && coreChargeOptions.length > 0) { handleSelectCoreChargeOption((coreChargeOptions[0] as CoreChargeOption).value); } const openDialog = () => setIsOpenDialog(true); const closeDialog = () => setIsOpenDialog(false); return (