Skip to content
Snippets Groups Projects
AuthProvider.tsx 1.02 KiB
Newer Older
import { ReactNode, useEffect, useState } from 'react';
import { AuthContext } from '../contexts/AuthContext';
import Spinner from '../components/Spinner/Spinner';

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(() => {
    setTimeout(() => setLoading(false), 500); // Fake api timer
  }, []);

  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;