commerce/components/side-dialog.tsx
Chloe 4684d54ac3
fix: create side dialog for content inside PDP
Signed-off-by: Chloe <pinkcloudvnn@gmail.com>
2024-05-21 15:19:00 +07:00

54 lines
1.9 KiB
TypeScript

'use client';
import { Dialog, DialogPanel, Transition, TransitionChild } from '@headlessui/react';
import { XMarkIcon } from '@heroicons/react/24/outline';
import { Fragment } from 'react';
type SideDialogProps = {
title: string;
open: boolean;
onClose: () => void;
children: React.ReactNode;
};
const SideDialog = ({ title, children, open, onClose }: SideDialogProps) => {
return (
<Transition show={open} as={Fragment}>
<Dialog onClose={onClose} className="relative z-50">
<TransitionChild
as={Fragment}
enter="transition-all ease-in-out duration-300"
enterFrom="opacity-0 backdrop-blur-none"
enterTo="opacity-100 backdrop-blur-[.5px]"
leave="transition-all ease-in-out duration-200"
leaveFrom="opacity-100 backdrop-blur-[.5px]"
leaveTo="opacity-0 backdrop-blur-none"
>
<div className="fixed inset-0 bg-black/30" aria-hidden="true" />
</TransitionChild>
<TransitionChild
as={Fragment}
enter="transition-all ease-in-out duration-300"
enterFrom="translate-x-full"
enterTo="translate-x-0"
leave="transition-all ease-in-out duration-200"
leaveFrom="translate-x-0"
leaveTo="translate-x-full"
>
<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">{title}</p>
<button aria-label="Close cart" onClick={onClose} className="text-black">
<XMarkIcon className="h-6" />
</button>
</div>
{children}
</DialogPanel>
</TransitionChild>
</Dialog>
</Transition>
);
};
export default SideDialog;