UNPKG

@coko/client

Version:

Client side common code for coko apps

39 lines (38 loc) 1.32 kB
import { get as e } from "../toolkit/funcs.js"; import { useCurrentUser as t } from "../helpers/useCurrentUser.js"; import { useEffect as n } from "react"; import { useLocation as r, useNavigate as i } from "react-router"; import { useApolloClient as a } from "@apollo/client/react"; //#region src/components/RequireAuth.tsx var o = [ "id", "displayName", "username", "defaultIdentity.id", "defaultIdentity.isVerified" ], s = (t) => !o.some((n) => e(t, n) === void 0), c = ({ notAuthenticatedRedirectTo: e = "/login", children: c, requireIdentityVerification: l = !0, notVerifiedRedirectTo: u = "/ensure-verified-login" }) => { let d = a(), f = r(), p = i(), { currentUser: m, error: h } = t(), g = localStorage.getItem("token"); return n(() => { if (m && !s(m)) throw Error(`Your current user query is missing some required fields! Make sure that the query requests the following fields: ${o.join(", ")}`); }, [m]), n(() => { g || p(`${e}?next=${f.pathname}`, { replace: !0 }); }, [ g, e, f.pathname, p ]), n(() => { !m && h && (d.cache.reset(), localStorage.removeItem("token"), p(`${e}?next=${f.pathname}`, { replace: !0 })), m && l && (m.defaultIdentity?.isVerified || p(u, { replace: !0 })); }, [ m, h, d, e, f.pathname, p, l, u ]), c; }; //#endregion export { c as default };