Auth.tsx 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import { createContext, useEffect, useMemo, useState } from 'react';
  2. import { MILVUS_ADDRESS } from '../consts/Localstorage';
  3. import { MilvusHttp } from '../http/Milvus';
  4. import { AuthContextType } from './Types';
  5. export const authContext = createContext<AuthContextType>({
  6. isAuth: false,
  7. address: '',
  8. setAddress: () => {},
  9. });
  10. const { Provider } = authContext;
  11. export const AuthProvider = (props: { children: React.ReactNode }) => {
  12. const [address, setAddress] = useState<string>(
  13. window.localStorage.getItem(MILVUS_ADDRESS) || ''
  14. );
  15. const isAuth = useMemo(() => !!address, [address]);
  16. useEffect(() => {
  17. const check = async () => {
  18. const milvusAddress = window.localStorage.getItem(MILVUS_ADDRESS) || '';
  19. if (!milvusAddress) {
  20. return;
  21. }
  22. try {
  23. const res = await MilvusHttp.check(milvusAddress);
  24. setAddress(res.connected ? milvusAddress : '');
  25. if (!res.connected) {
  26. window.localStorage.removeItem(MILVUS_ADDRESS);
  27. }
  28. } catch (error) {
  29. setAddress('');
  30. window.localStorage.removeItem(MILVUS_ADDRESS);
  31. }
  32. };
  33. check();
  34. }, [setAddress]);
  35. useEffect(() => {
  36. document.title = address
  37. ? `Milvus Insight - ${address} `
  38. : 'Milvus Insight';
  39. }, [address]);
  40. return (
  41. <Provider value={{ isAuth, address, setAddress }}>
  42. {props.children}
  43. </Provider>
  44. );
  45. };