Skip to content
Snippets Groups Projects
AuthProvider.tsx 1.26 KiB
Newer Older
import { ReactNode, useEffect, useState } from 'react';
import { AuthContext } from '../contexts/AuthContext';
import Spinner from '../components/Spinner/Spinner';
import { authoriseUser } from '../services/Authorise/Authorise';
export interface IUser {
  id: number;
  email: string;
  username: string;
  type: number;
}

function AuthProvider({ children }: { children: ReactNode }) {
  const [loading, setLoading] = useState(true);
  const [auth, setAuth] = useState(false);
  const [user, setUser] = useState<IUser>();

  useEffect(() => {
    async function authUser() {
      try {
        const result = await authoriseUser();
        giveAuth();
        updateUser(result.data);
        setLoading(false);
      } catch (error) {
        setLoading(false);
      }
    }

    authUser();
  const giveAuth = () => {
    setAuth(true);
  };

  const removeAuth = () => {
  const updateUser = (newUser: IUser) => {
    setUser(newUser);
  }

  if (loading) {
    return (
      <div className='full'>
        <Spinner></Spinner>
      </div>
    );
  }

  return (
    <AuthContext.Provider value={{ isAuth: auth, giveAuth, removeAuth, user, updateUser }}>
      {!loading && children}
    </AuthContext.Provider>
  );
}

export default AuthProvider;