Auth.tsx 1.7 KB

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