@coko/client
Version:
Client side common code for coko apps
39 lines (38 loc) • 1.32 kB
JavaScript
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 };