Auth.tsx 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  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. // get milvus address from local storage
  13. const [address, setAddress] = useState<string>(
  14. window.localStorage.getItem(MILVUS_ADDRESS) || ''
  15. );
  16. const isAuth = useMemo(() => !!address, [address]);
  17. useEffect(() => {
  18. // check if the milvus is still available
  19. const check = async () => {
  20. const milvusAddress = window.localStorage.getItem(MILVUS_ADDRESS) || '';
  21. if (!milvusAddress) {
  22. return;
  23. }
  24. try {
  25. const res = await MilvusHttp.check(milvusAddress);
  26. setAddress(res.connected ? milvusAddress : '');
  27. if (!res.connected) {
  28. window.localStorage.removeItem(MILVUS_ADDRESS);
  29. }
  30. } catch (error) {
  31. setAddress('');
  32. window.localStorage.removeItem(MILVUS_ADDRESS);
  33. }
  34. };
  35. check();
  36. }, [setAddress]);
  37. useEffect(() => {
  38. document.title = address
  39. ? `${address} - Milvus Insight`
  40. : 'Milvus Insight';
  41. }, [address]);
  42. return (
  43. <Provider value={{ isAuth, address, setAddress }}>
  44. {props.children}
  45. </Provider>
  46. );
  47. };