AuthProvider.tsx 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. import React, { useState, useEffect, useContext } from 'react';
  2. import { Result } from 'antd';
  3. import { Loading3QuartersOutlined } from '@ant-design/icons';
  4. import type { UserResult } from './users';
  5. import { useGetCurrentUser } from './users';
  6. const AuthContext = React.createContext<{
  7. user?: UserResult;
  8. refresh: () => void;
  9. }>({ refresh: () => console.log('Missing AuthContext.Provider') });
  10. export const AuthProvider: React.FC<{ children: React.ReactNode }> = ({
  11. children,
  12. }) => {
  13. const [initialized, setInitialized] = useState(false);
  14. const { data: user, loading, refresh } = useGetCurrentUser();
  15. useEffect(() => {
  16. if (!loading) {
  17. setInitialized(true);
  18. }
  19. }, [loading]);
  20. return (
  21. <AuthContext.Provider value={{ user, refresh }}>
  22. {initialized ? (
  23. children
  24. ) : (
  25. <Result
  26. icon={<Loading3QuartersOutlined spin />}
  27. subTitle="Loading..."
  28. />
  29. )}
  30. </AuthContext.Provider>
  31. );
  32. };
  33. export const useAuth = () => useContext(AuthContext);