2
0

Auth.tsx 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import { createContext, useEffect, useState } from 'react';
  2. import { MILVUS_ADDRESS } from '@/consts';
  3. import { MilvusHttp } from '@/http';
  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. 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. };
  34. check();
  35. }, [setAddress]);
  36. useEffect(() => {
  37. document.title = address ? `${address} - Attu` : 'Attu';
  38. }, [address]);
  39. return (
  40. <Provider
  41. value={{
  42. isAuth,
  43. address,
  44. setAddress,
  45. setIsAuth,
  46. isManaged: address.includes('vectordb.zillizcloud.com'),
  47. }}
  48. >
  49. {props.children}
  50. </Provider>
  51. );
  52. };