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

function AuthProvider({ children }: { children: ReactNode }) {
  const [loading, setLoading] = useState(true);
  const [token, setToken] = useState(localStorage.getItem('token') ?? '');

  useEffect(() => {
    if (token) {
      // validate token
    }

    setTimeout(() => setLoading(false), 500); // Fake api timer
  }, []);

  const giveAuth = (token: string) => {
    setToken(token);
    localStorage.setItem('token', token);
  };

  const removeAuth = () => {
    setToken('');
    localStorage.removeItem('token');
  };

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

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

export default AuthProvider;