UNPKG

@onwave/ui

Version:
89 lines 3.18 kB
import React, { useCallback, useContext, useEffect, useState } from "react"; var AuthContext = React.createContext({ token: undefined, refreshToken: undefined, isLoading: true, isLoggedIn: false, setLoggedIn: function () { }, setLoggedOut: function () { }, }); export var useAuthContext = function () { return useContext(AuthContext); }; export var AuthProvider = function (_a) { var children = _a.children, tokenName = _a.tokenName, tokenData = _a.tokenData, tokenError = _a.tokenError, getToken = _a.getToken; var _b = useState(), token = _b[0], setToken = _b[1]; var _c = useState(), refreshToken = _c[0], setRefreshToken = _c[1]; var _d = useState(true), isLoading = _d[0], setIsLoading = _d[1]; var setLoggedIn = useCallback(function (token, refreshToken) { if (refreshToken) { localStorage.setItem(tokenName, refreshToken); setToken(token); setRefreshToken(refreshToken); } else { localStorage.setItem(tokenName, token); setToken(token); } }, []); var setLoggedOut = useCallback(function () { localStorage.removeItem(tokenName); setToken(undefined); setRefreshToken(undefined); }, []); useEffect(function () { if (getToken) { var localRefreshToken = localStorage.getItem(tokenName); if (localRefreshToken) { setRefreshToken(localRefreshToken); getToken(localRefreshToken); } else { setIsLoading(false); } } else { var localToken = localStorage.getItem(tokenName); if (localToken) { setToken(localToken); } else { setIsLoading(false); } } }, []); useEffect(function () { if (token) { setIsLoading(false); } }, [token, setIsLoading]); useEffect(function () { if (tokenData) { setToken(tokenData); setIsLoading(false); } }, [tokenData]); useEffect(function () { if (tokenError) { setLoggedOut(); } }, [tokenError]); return (React.createElement(AuthContext.Provider, { value: { token: token, refreshToken: refreshToken, isLoading: isLoading, isLoggedIn: Boolean(token), setLoggedOut: setLoggedOut, setLoggedIn: setLoggedIn, } }, children)); }; export var ProtectRoute = function (_a) { var children = _a.children, LoginComponent = _a.LoginComponent, LoadingComponent = _a.LoadingComponent; var _b = useAuthContext(), isLoggedIn = _b.isLoggedIn, isLoading = _b.isLoading; if (isLoading) { return LoadingComponent ? React.createElement(LoadingComponent, null) : React.createElement(React.Fragment, null); } if (!isLoggedIn && window.location.pathname !== "/login") { return React.createElement(LoginComponent, null); } return React.createElement(React.Fragment, null, children); }; //# sourceMappingURL=AuthContext.js.map