import { useAtomValue } from "@effect/atom-react";import * as Cause from "effect/Cause";import * as Effect from "effect/Effect";import * as Option from "effect/Option";import { AsyncResult, Atom } from "effect/unstable/reactivity";import { useCallback } from "react"; import { appAtomRegistry } from "../../rpc/atomRegistry";import { fetchSessionState } from "./auth"; const primarySessionStateAtom = Atom.make(Effect.promise(fetchSessionState)).pipe( Atom.swr({ staleTime: 5_000, revalidateOnMount: true }), Atom.setIdleTTL(5 * 60_000), Atom.withLabel("primary-environment:session"),); function refreshPrimarySessionState(): void { appAtomRegistry.refresh(primarySessionStateAtom);} export function usePrimarySessionState() { const result = useAtomValue(primarySessionStateAtom); const refresh = useCallback(() => { refreshPrimarySessionState(); }, []); let error: string | null = null; if (result._tag === "Failure") { const cause = Cause.squash(result.cause); error = cause instanceof Error ? cause.message : "Could not read environment session."; } return { data: Option.getOrNull(AsyncResult.value(result)), error, isPending: result.waiting, refresh, };}
import { useAtomValue } from "@effect/atom-react";
import * as Cause from "effect/Cause";
import * as Effect from "effect/Effect";
import * as Option from "effect/Option";
import { AsyncResult, Atom } from "effect/unstable/reactivity";
import { useCallback } from "react";
import { appAtomRegistry } from "../../rpc/atomRegistry";
import { fetchSessionState } from "./auth";
const primarySessionStateAtom = Atom.make(Effect.promise(fetchSessionState)).pipe(
Atom.swr({ staleTime: 5_000, revalidateOnMount: true }),
Atom.setIdleTTL(5 * 60_000),
Atom.withLabel("primary-environment:session"),
);
function refreshPrimarySessionState(): void {
appAtomRegistry.refresh(primarySessionStateAtom);
}
export function usePrimarySessionState() {
const result = useAtomValue(primarySessionStateAtom);
const refresh = useCallback(() => {
refreshPrimarySessionState();
}, []);
let error: string | null = null;
if (result._tag === "Failure") {
const cause = Cause.squash(result.cause);
error = cause instanceof Error ? cause.message : "Could not read environment session.";
}
return {
data: Option.getOrNull(AsyncResult.value(result)),
error,
isPending: result.waiting,
refresh,
};
}