Auth.tsx 1.6 KB

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