"use client"; import { t } from "@/utils"; import CustomLink from "@/components/Common/CustomLink"; import { usePathname } from "next/navigation"; import { BiChat, BiDollarCircle, BiReceipt, BiTrashAlt } from "react-icons/bi"; import { FiUser } from "react-icons/fi"; import { IoMdNotificationsOutline } from "react-icons/io"; import { LiaAdSolid } from "react-icons/lia"; import { LuHeart } from "react-icons/lu"; import { MdOutlineRateReview, MdWorkOutline } from "react-icons/md"; import { RiLogoutCircleLine } from "react-icons/ri"; import FirebaseData from "@/utils/Firebase"; import { logoutSuccess, userSignUpData } from "@/redux/reducer/authSlice"; import { toast } from "sonner"; import { useState } from "react"; import { deleteUserApi, logoutApi } from "@/utils/api"; import { deleteUser, getAuth } from "firebase/auth"; import ReusableAlertDialog from "../Common/ReusableAlertDialog"; import { CurrentLanguageData } from "@/redux/reducer/languageSlice"; import { useSelector } from "react-redux"; import { useNavigate } from "../Common/useNavigate"; import DeleteAccountVerifyOtpModal from "../Auth/DeleteAccountVerifyOtpModal"; import { getOtpServiceProvider } from "@/redux/reducer/settingSlice"; const ProfileSidebar = () => { const CurrentLanguage = useSelector(CurrentLanguageData); const { navigate } = useNavigate(); const pathname = usePathname(); const userData = useSelector(userSignUpData); const otp_service_provider = useSelector(getOtpServiceProvider); const [IsLogout, setIsLogout] = useState(false); const [IsDeleting, setIsDeleting] = useState(false); const [IsDeleteAccount, setIsDeleteAccount] = useState(false); const [IsLoggingOut, setIsLoggingOut] = useState(false); const [IsVerifyOtpBeforeDelete, setIsVerifyOtpBeforeDelete] = useState(false); const { signOut } = FirebaseData(); const handleLogout = async () => { try { setIsLoggingOut(true); await signOut(); const res = await logoutApi.logoutApi({ ...(userData?.fcm_id && { fcm_token: userData?.fcm_id }), }); if (res?.data?.error === false) { logoutSuccess(); toast.success(t("signOutSuccess")); setIsLogout(false); if (pathname !== "/") { navigate("/"); } } else { toast.error(res?.data?.message); } } catch (error) { console.log("Failed to logout", error); } finally { setIsLoggingOut(false); } }; const handleDeleteAcc = async () => { try { setIsDeleting(true); const auth = getAuth(); const user = auth.currentUser; const isMobileLogin = userData?.type == "phone"; const needsOtpVerification = isMobileLogin && !user && otp_service_provider === "firebase"; if (user) { await deleteUser(user); } else if (needsOtpVerification) { setIsDeleteAccount(false); setIsVerifyOtpBeforeDelete(true); return; } await deleteUserApi.deleteUser(); logoutSuccess(); toast.success(t("userDeleteSuccess")); setIsDeleteAccount(false); if (pathname !== "/") { navigate("/"); } } catch (error) { console.error("Error deleting user:", error.message); const isMobileLogin = userData?.type === "phone"; if (error.code === "auth/requires-recent-login") { if (isMobileLogin) { setIsDeleteAccount(false); setIsVerifyOtpBeforeDelete(true); return; } logoutSuccess(); toast.error(t("deletePop")); setIsDeleteAccount(false); } } finally { setIsDeleting(false); } }; return ( <>