49 行
1.1 KiB
JavaScript
49 行
1.1 KiB
JavaScript
import { createContext, useState } from "react";
|
|
import { useLocation, useNavigate } from "react-router-dom";
|
|
|
|
export const HeaderContext = createContext({});
|
|
|
|
export const HeaderContextProvider = ({ children }) => {
|
|
|
|
const {pathname} = useLocation();
|
|
const navigator = useNavigate();
|
|
const acc_type = pathname.split('/')[1];
|
|
|
|
const [selected_item_sidebar, SetSelectedItemOfSidebar] = useState('');
|
|
|
|
const handleLogout = () => {
|
|
axios.get(`/${acc_type}/logout`)
|
|
.then(() => {
|
|
localStorage.removeItem(`${acc_type}_token`);
|
|
navigator(`/${acc_type}/login`);
|
|
})
|
|
}
|
|
|
|
const isAuthenticate = () => {
|
|
let token = localStorage.getItem(`${acc_type}_token`);
|
|
if(!token){
|
|
navigator(`/${acc_type}/login`);
|
|
}
|
|
else{
|
|
token = JSON.parse(token);
|
|
expires = token.expires;
|
|
if(new Date().getTime() >= expires){
|
|
handleLogout();
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
return (
|
|
<HeaderContext.Provider
|
|
value={{
|
|
selected_item_sidebar, SetSelectedItemOfSidebar,
|
|
handleLogout,
|
|
isAuthenticate
|
|
}}
|
|
>
|
|
{children}
|
|
</HeaderContext.Provider>
|
|
);
|
|
};
|