"use client"; import { useDisclosure } from "@heroui/use-disclosure"; import { AnimatePresence, motion } from "framer-motion"; import clsx from "clsx"; import { signOut } from "next-auth/react"; import Link from "next/link"; import { Avatar } from "@heroui/avatar"; import { useForm } from "react-hook-form"; import { usePathname, useRouter } from "next/navigation"; import { useCustomToast } from '@/utils/hooks/useToast'; import { useBodyScrollLock } from "@utils/hooks/useBodyScrollLock"; import OpenAuth from "../OpenAuth"; import { isObject } from '@/utils/type-guards'; import { useGuestCartToken } from "@utils/hooks/useGuestCartToken"; import LoadingDots from "@components/common/icons/LoadingDots"; import { logoutAction } from "@utils/actions"; import { useAppDispatch, useAppSelector } from "@/store/hooks"; import { clearUser } from "@/store/slices/user-slice"; import { clearCart } from "@/store/slices/cart-slice"; import { EMAIL, removeFromLocalStorage } from "@/store/local-storage"; export default function CredentialModal({ children, className, onOpen, onClose, isOpen, }: { children?: React.ReactNode; className?: string; onOpen?: () => void; onClose?: () => void; isOpen?: boolean; }) { const { isOpen: internalIsOpen, onOpen: internalOnOpen, onClose: internalOnClose, onOpenChange: _internalOnOpenChange, } = useDisclosure(); const isControlled = isOpen !== undefined; const finalIsOpen = isControlled ? isOpen : internalIsOpen; const finalOnOpen = isControlled ? onOpen : internalOnOpen; const finalOnClose = isControlled ? onClose : internalOnClose; const pathname = usePathname(); const router = useRouter(); const dispatch = useAppDispatch(); const { showToast } = useCustomToast(); const { resetGuestToken } = useGuestCartToken(); useBodyScrollLock(finalIsOpen ); const { handleSubmit, formState: { isSubmitting }, } = useForm(); const { user } = useAppSelector((state) => state.user); const session = { user }; const onSubmit = async () => { try { const res = await logoutAction(); if (!res.success) { showToast(res.message, "danger"); } await signOut({ callbackUrl: "/customer/login", redirect: false, }); await resetGuestToken(); dispatch(clearUser()); dispatch(clearCart()); showToast("You are logged out successfully!", "success"); setTimeout(() => { router.push("/customer/login"); router.refresh(); }, 100); removeFromLocalStorage(EMAIL) } catch (err: unknown) { const message = err instanceof Error ? err.message : "Logout failed"; showToast(message, "danger"); } }; const innerContent = (_onClose?: () => void) => (
{isObject(session?.user) ? ( <>
} size={"lg"} className={clsx( "h-24 w-24 text-large")} />

{session?.user?.name}

{session?.user?.email}

Manage Cart, Orders 🎉

) : ( <>

Welcome Guest

Manage Cart, Orders 🎉

)}
); return ( <> {finalIsOpen && ( <>

Account

{innerContent(finalOnClose)}
)} ); }