import { createContext, useState, useEffect } from "react";
import { useRouter } from "next/router";
import axios from "axios";
import { IChildren } from "@/interfaces/IChildren/IChildren";
import { IContext } from "@/interfaces/IContext/IContext";
export const Context = createContext<IContext>({} as IContext);
const Provider = ({ children }: IChildren) => {
const [isMobile, setIsMobile] = useState<boolean>(false);
const [isSideBarVisible, setIsSideBarVisible] = useState<boolean>(false);
const [user, setUser] = useState<any>({});
const [tokenLocal, setTokenLocal] = useState<string>("");
const [statusApi, setStatusApi] = useState<string>("");
const router = useRouter();
const showSideBar = () => setIsSideBarVisible((prevState) => !prevState);
const fetchUserData = async () => {
try {
const storedToken = localStorage.getItem("token");
if (storedToken) {
setTokenLocal(storedToken);
const response = await axios.post(
`${process.env.NEXT_PUBLIC_API}/profile.php`,
{ token: storedToken },
);
if (response.data.results[0].status === 200) {
setUser(response.data.results[0]);
}
}
} catch (error) {
error;
}
};
useEffect(() => {
const handleResize = () => {
setIsMobile(window.innerWidth < 1024);
};
window.addEventListener("resize", handleResize);
handleResize();
return () => window.removeEventListener("resize", handleResize);
}, []);
useEffect(() => {
fetchUserData();
}, [setUser, , setTokenLocal, router]);
return (
<Context.Provider
value={{
router,
tokenLocal,
isMobile,
showSideBar,
isSideBarVisible,
setIsSideBarVisible,
user,
setUser,
setTokenLocal,
statusApi,
setStatusApi,
}}
>
{children}
</Context.Provider>
);
};
export default Provider;
|