import { createContext, useEffect, useMemo, useState } from 'react'; import { MILVUS_ADDRESS } from '../consts/Localstorage'; import { MilvusHttp } from '../http/Milvus'; import { AuthContextType } from './Types'; export const authContext = createContext({ isAuth: false, address: '', setAddress: () => {}, }); const { Provider } = authContext; export const AuthProvider = (props: { children: React.ReactNode }) => { const [address, setAddress] = useState( window.localStorage.getItem(MILVUS_ADDRESS) || '' ); const isAuth = useMemo(() => !!address, [address]); useEffect(() => { const check = async () => { const milvusAddress = window.localStorage.getItem(MILVUS_ADDRESS) || ''; if (!milvusAddress) { return; } try { const res = await MilvusHttp.check(milvusAddress); setAddress(res.connected ? milvusAddress : ''); if (!res.connected) { window.localStorage.removeItem(MILVUS_ADDRESS); } } catch (error) { setAddress(''); window.localStorage.removeItem(MILVUS_ADDRESS); } }; check(); }, [setAddress]); useEffect(() => { document.title = address ? `Milvus Insight - ${address} ` : 'Milvus Insight'; }, [address]); return ( {props.children} ); };