From 0cd6bce59ac9c7b637474c1e4fd955f02fc0c3dd Mon Sep 17 00:00:00 2001 From: hamid zarghami Date: Tue, 2 Dec 2025 09:49:32 +0330 Subject: [PATCH] fix problem cache uer --- src/components/forms/login-form.tsx | 7 ++++++- src/components/forms/send-code-form.tsx | 9 +++++++-- src/components/ui/dashboard/sidebar-mobile.tsx | 5 ++++- src/components/ui/dashboard/sidebar.tsx | 6 ++++++ src/utility/error-handle.tsx | 4 ++-- src/utility/logout.ts | 10 ++++++++++ 6 files changed, 35 insertions(+), 6 deletions(-) create mode 100644 src/utility/logout.ts diff --git a/src/components/forms/login-form.tsx b/src/components/forms/login-form.tsx index 2a32e28..bdc01bd 100644 --- a/src/components/forms/login-form.tsx +++ b/src/components/forms/login-form.tsx @@ -5,14 +5,17 @@ import { LoginFormInterface } from "../../types" import { loginSchema } from "../../schema" import { ErrorComponent } from "../common/error" import { yupResolver } from '@hookform/resolvers/yup' -import { useMutation } from "@tanstack/react-query" +import { useMutation, useQueryClient } from "@tanstack/react-query" import { loginMutation } from "../../services/api/auth" import { ButtonComponent } from "../common/button" import toast from "react-hot-toast" import { handleError } from "../../utility/error-handle" +import { useUserStore } from "../../store/user" export const LoginForm = () => { const navigate = useNavigate() + const { clearUser } = useUserStore() + const queryClient = useQueryClient() const { mutate, isPending } = useMutation({ mutationFn: loginMutation, @@ -33,6 +36,8 @@ export const LoginForm = () => { remember_me: true }, { onSuccess: async (data: any) => { + clearUser() + queryClient.clear() window.localStorage.setItem("token", data?.data?.token) toast.success("با موفقیت وارد شدین") navigate("/") diff --git a/src/components/forms/send-code-form.tsx b/src/components/forms/send-code-form.tsx index 6dd6a70..b10e8c2 100644 --- a/src/components/forms/send-code-form.tsx +++ b/src/components/forms/send-code-form.tsx @@ -7,13 +7,16 @@ import { yupResolver } from "@hookform/resolvers/yup" import { LoginCodeSchema } from "../../schema" import { useEffect, useState } from "react" import { ButtonComponent } from "../common/button" -import { useMutation } from "@tanstack/react-query" +import { useMutation, useQueryClient } from "@tanstack/react-query" import { loginWithOTP, sendOTPMutation } from "../../services/api/auth" import toast from "react-hot-toast" import { handleError } from "../../utility/error-handle" +import { useUserStore } from "../../store/user" export const SendCodeForm = () => { const navigate = useNavigate() + const { clearUser } = useUserStore() + const queryClient = useQueryClient() const { mutate, isPending } = useMutation({ mutationFn: sendOTPMutation, mutationKey: ["send-otp"] @@ -49,8 +52,10 @@ export const SendCodeForm = () => { }, { onSuccess: (res: any) => { - toast.success("با موفقیت وارد شدید") + clearUser() + queryClient.clear() window.localStorage.setItem("token", res?.data?.token) + toast.success("با موفقیت وارد شدید") navigate("/") setSeconds(30) setIsTimeUp(false) diff --git a/src/components/ui/dashboard/sidebar-mobile.tsx b/src/components/ui/dashboard/sidebar-mobile.tsx index 8c26f59..4a8d591 100644 --- a/src/components/ui/dashboard/sidebar-mobile.tsx +++ b/src/components/ui/dashboard/sidebar-mobile.tsx @@ -5,6 +5,7 @@ import { SidebarItem } from "./sidebar-item"; import { CloseCircle, LogoutCurve } from "iconsax-react"; import { useNavigate } from "react-router-dom"; import { useUserStore } from "../../../store/user"; +import { useQueryClient } from "@tanstack/react-query"; type Props = { setShow: (value: boolean) => void, @@ -14,11 +15,13 @@ type Props = { export const SidebarMobile: FC = ({ setShow, show }) => { const { clearUser } = useUserStore() const navigate = useNavigate() + const queryClient = useQueryClient() const handleCloseSidebar = () => setShow(false); const handleExit = () => { window.localStorage.clear() - navigate("/auth/login") clearUser() + queryClient.clear() + navigate("/auth/login") } return ( <> diff --git a/src/components/ui/dashboard/sidebar.tsx b/src/components/ui/dashboard/sidebar.tsx index 66669cf..f8e9a7b 100644 --- a/src/components/ui/dashboard/sidebar.tsx +++ b/src/components/ui/dashboard/sidebar.tsx @@ -3,11 +3,17 @@ import { SidebarInterface } from "../../../types" import { sidebarItems } from "../../../utility/sidebar" import { SidebarItem } from "./sidebar-item" import { useNavigate } from "react-router-dom" +import { useUserStore } from "../../../store/user" +import { useQueryClient } from "@tanstack/react-query" export const Sidebar = () => { const navigate = useNavigate() + const { clearUser } = useUserStore() + const queryClient = useQueryClient() const handleExit = () => { window.localStorage.clear() + clearUser() + queryClient.clear() navigate("/auth/login") } return ( diff --git a/src/utility/error-handle.tsx b/src/utility/error-handle.tsx index 852dd16..20c1a9f 100644 --- a/src/utility/error-handle.tsx +++ b/src/utility/error-handle.tsx @@ -1,12 +1,12 @@ import toast from "react-hot-toast"; +import { handleLogout } from "./logout"; export const handleError = (err: any) => { if (err) { const errorStatus: number = err?.response?.status; const keys = errorStatus === 422 ? Object.keys(err?.response?.data.validation) : []; const handle401Error = () => { - window.localStorage.clear() - window.location.href = "/auth/login" + handleLogout(); } switch (errorStatus) { case 422: return toast.error(err?.response?.data?.validation[keys[0]]?.msg); diff --git a/src/utility/logout.ts b/src/utility/logout.ts new file mode 100644 index 0000000..04c5bb7 --- /dev/null +++ b/src/utility/logout.ts @@ -0,0 +1,10 @@ +import { QueryClient } from "@tanstack/react-query"; + +export const handleLogout = (queryClient?: QueryClient) => { + window.localStorage.clear(); + if (queryClient) { + queryClient.clear(); + } + window.location.href = "/auth/login"; +}; +