import {createContext, useContext, useEffect, useState} from 'react'
import {Navigate, useLocation} from "react-router-dom";
import {toast} from "react-toastify";
import axios from "axios";
const AuthContext = createContext(null);
const AuthProvider = props => {
const [loggedUser, setLoggedUser] = useState(null);
const [loggedUserRole, setLoggedUserRole] = useState(null);
useEffect(() => {
let authData = JSON.parse(sessionStorage.getItem("authData"));
if (authData) {
let roleUser = {
roleId: authData.userRoleId,
role: authData.userRole,
activeOwnershipId: authData.activeOwnershipId
}
login(authData.userId, roleUser);
}
}, [])
const login = (id, role) => {
setLoggedUser(id);
setLoggedUserRole(role);
}
const ownershipChanges = (value) => {
let authData = JSON.parse(sessionStorage.getItem("authData"));
authData.activeOwnershipId = value;
sessionStorage.setItem("authData", JSON.stringify(authData));
setLoggedUserRole({...loggedUserRole, value})
}
const logout = () => {
sessionStorage.removeItem("authData");
toast.success('Logged out');
setLoggedUser(null);
setLoggedUserRole(null);
axios.defaults.headers.common['Authorization'] = null;
window.location.reload();
}
const isAuthorized = (id) => {
if (!loggedUserRole) {
return false;
}
return id === loggedUserRole.roleId;
}
return (
{props.children}
)
}
const AuthConsumer = AuthContext.Consumer
const useAuthContext = () => {
const context = useContext(AuthContext)
if (!context) {
throw new Error('authContext must be used within a AuthProvider')
}
return context
}
const RequireAuth = ({children}) => {
let auth = useAuthContext();
let location = useLocation();
if (!auth.user) {
return ;
}
return children;
}
const SkipAuth = ({children}) => {
let auth = useAuthContext();
if (auth.loggedUser) {
return ;
}
return children;
}
export {AuthProvider, useAuthContext, RequireAuth, SkipAuth, AuthConsumer}