Files
ttstd-infinite-canvas/web/src/components/auth/auth-session-hydrator.tsx

28 lines
936 B
TypeScript

import type { ReactNode } from "react";
import { useEffect } from "react";
import { applyUserSession } from "@/lib/user-session";
import { getAuthSession } from "@/services/api/auth";
import { FullScreenLoader } from "@/components/ui/aceternity/full-screen-loader";
import { useUserStore } from "@/stores/use-user-store";
export function AuthSessionHydrator({ children }: { children: ReactNode }) {
const hydrated = useUserStore((state) => state.hydrated);
useEffect(() => {
let cancelled = false;
getAuthSession()
.then(async (payload) => {
if (!cancelled) await applyUserSession(payload);
})
.catch(async () => {
if (!cancelled) await applyUserSession({ user: null, systemChannels: [] });
});
return () => {
cancelled = true;
};
}, []);
return hydrated ? children : <FullScreenLoader />;
}