diff --git a/components/product/variant-selector.tsx b/components/product/variant-selector.tsx index b87788fc7..4ee9d46bc 100644 --- a/components/product/variant-selector.tsx +++ b/components/product/variant-selector.tsx @@ -1,6 +1,6 @@ 'use client'; -import { Dialog, Transition } from '@headlessui/react'; +import { Dialog, DialogPanel, Transition, TransitionChild } from '@headlessui/react'; import { XMarkIcon } from '@heroicons/react/24/outline'; import clsx from 'clsx'; import Price from 'components/price'; @@ -8,7 +8,7 @@ import { CORE_VARIANT_ID_KEY, CORE_WAIVER } from 'lib/constants'; import { CoreChargeOption, Money, ProductOption, ProductVariant } from 'lib/shopify/types'; import { createUrl } from 'lib/utils'; import { usePathname, useRouter, useSearchParams } from 'next/navigation'; -import { Fragment, MouseEvent, useEffect, useState } from 'react'; +import { Fragment, useEffect, useState } from 'react'; type Combination = { id: string; @@ -74,18 +74,6 @@ export function VariantSelector({ const openModal = () => setIsOpen(true); const closeModal = () => setIsOpen(false); - const handleCoreChargeClick = ( - event: MouseEvent<HTMLButtonElement, globalThis.MouseEvent>, - coreVariantId: string | null - ) => { - event.stopPropagation(); - if (!coreVariantId) return; - const optionSearchParams = new URLSearchParams(searchParams.toString()); - optionSearchParams.set(CORE_VARIANT_ID_KEY, coreVariantId); - const newUrl = createUrl(pathname, optionSearchParams); - router.replace(newUrl, { scroll: false }); - }; - return ( <div className="mb-6 flex flex-row gap-1 text-sm font-medium"> More Remanufactured and Used Options{' '} @@ -99,7 +87,7 @@ export function VariantSelector({ </button> <Transition show={isOpen} as={Fragment}> <Dialog onClose={closeModal} className="relative z-50"> - <Transition.Child + <TransitionChild as={Fragment} enter="transition-all ease-in-out duration-300" enterFrom="opacity-0 backdrop-blur-none" @@ -109,8 +97,8 @@ export function VariantSelector({ leaveTo="opacity-0 backdrop-blur-none" > <div className="fixed inset-0 bg-black/30" aria-hidden="true" /> - </Transition.Child> - <Transition.Child + </TransitionChild> + <TransitionChild as={Fragment} enter="transition-all ease-in-out duration-300" enterFrom="translate-x-full" @@ -119,7 +107,7 @@ export function VariantSelector({ leaveFrom="translate-x-0" leaveTo="translate-x-full" > - <Dialog.Panel className="fixed bottom-0 right-0 top-0 flex h-full w-full flex-col border-l border-neutral-200 bg-white/80 p-6 text-black backdrop-blur-xl md:w-[500px]"> + <DialogPanel className="fixed bottom-0 right-0 top-0 flex h-full w-full flex-col border-l border-neutral-200 bg-white/80 p-6 text-black backdrop-blur-xl md:w-[500px]"> <div className="flex items-center justify-between"> <p className="text-lg font-semibold">Manufactured & Used Options</p> @@ -205,7 +193,10 @@ export function VariantSelector({ <button disabled={!isAvailableForSale} aria-disabled={!isAvailableForSale} - onClick={() => router.replace(optionUrl, { scroll: false })} + onClick={() => { + router.replace(optionUrl, { scroll: false }); + closeModal(); + }} className="flex w-full flex-col gap-2 px-4 py-3" > <div className="flex w-full flex-row items-center justify-between"> @@ -228,27 +219,15 @@ export function VariantSelector({ </div> <div className="mt-1.5 flex flex-row flex-wrap items-center gap-3"> {coreChargeOptions.map((option) => ( - <button + <div key={option.value} - disabled={!isActive} - className={clsx( - 'flex flex-row items-center gap-2 rounded-full border border-neutral-300 px-3 py-1 text-xs', - { - 'bg-gray-200': - isActive && - searchParams.get(CORE_VARIANT_ID_KEY) === option.value, - 'bg-transparent': - searchParams.get(CORE_VARIANT_ID_KEY) !== option.value, - 'cursor-not-allowed opacity-50 hover:bg-transparent': - !isActive, - 'hover:bg-gray-200': isActive - } - )} - onClick={(e) => handleCoreChargeClick(e, option.value)} + className={ + 'flex flex-row items-center gap-2 rounded-full border border-neutral-300 bg-transparent px-3 py-1 text-xs' + } > <span>{option.label}</span> <Price {...option.price} /> - </button> + </div> ))} </div> <div className="mt-2 flex w-full flex-col gap-1 border-t border-gray-300 pl-1 pt-2 text-xs tracking-normal"> @@ -273,8 +252,8 @@ export function VariantSelector({ ); })} </div> - </Dialog.Panel> - </Transition.Child> + </DialogPanel> + </TransitionChild> </Dialog> </Transition> </div>