asenka0301/frontend-bootcamp-project-12

View on GitHub
frontend/src/context/AuthProvider.jsx

Summary

Maintainability
A
0 mins
Test Coverage
import React, { useCallback, useMemo, useState } from 'react';
import { AuthContext } from './context';

const AuthProvider = ({ children }) => {
  const getAuthHeader = () => {
    const userData = JSON.parse(localStorage.getItem('userData'));
    if (userData) {
      return { Authorization: `Bearer ${userData.token}` };
    }
    return {};
  };
  const initialState = Boolean(localStorage.getItem('userData'));

  const [loggedIn, setLoggedIn] = useState(initialState);

  const logIn = useCallback((data) => {
    localStorage.setItem('userData', JSON.stringify(data));
    setLoggedIn(true);
  }, []);

  const logOut = useCallback(() => {
    localStorage.removeItem('userData');
    setLoggedIn(false);
  }, []);

  const data = useMemo(() => ({
    loggedIn,
    logIn,
    logOut,
    getAuthHeader,
  }), [loggedIn, logIn, logOut]);

  return (
    <AuthContext.Provider value={data}>
      {children}
    </AuthContext.Provider>
  );
};

export default AuthProvider;