authcontext.tsx 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. import { createContext, Dispatch, SetStateAction, useEffect, useState } from 'react';
  2. import { useNavigate } from 'react-router-dom';
  3. import { Auth } from '../services';
  4. import { IAuthState } from '../types';
  5. const InitialAuthState: IAuthState = {
  6. valid: false,
  7. user: {
  8. vatsimId: '',
  9. fullName: '',
  10. radarScopeKey: '',
  11. administrator: false,
  12. airportConfigurationAccess: [],
  13. },
  14. };
  15. const AuthContext = createContext<{
  16. auth: IAuthState;
  17. setAuth: Dispatch<SetStateAction<IAuthState>>;
  18. resetAuth: () => void;
  19. }>({ auth: InitialAuthState, setAuth: () => {}, resetAuth: () => {} });
  20. export const AuthProvider = ({ children }: { children: any }) => {
  21. const [auth, setAuth] = useState<IAuthState>(InitialAuthState);
  22. const navigate = useNavigate();
  23. const resetAuth = () => setAuth(InitialAuthState);
  24. useEffect(() => {
  25. Auth.user().then((user) => {
  26. if (user !== undefined) {
  27. setAuth({ valid: true, user });
  28. } else {
  29. setAuth(InitialAuthState);
  30. }
  31. }).catch(() => {
  32. setAuth(InitialAuthState);
  33. navigate('/');
  34. });
  35. // eslint-disable-next-line react-hooks/exhaustive-deps
  36. }, []);
  37. return (
  38. <>
  39. <AuthContext.Provider value={{ auth, setAuth, resetAuth }}>
  40. {children}
  41. </AuthContext.Provider>
  42. </>
  43. );
  44. };
  45. export default AuthContext;