@onwave/ui
Version:
onwave ui library
89 lines • 3.18 kB
JavaScript
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