import { RegistryContext, useAtomValue } from "@effect/atom-react";import type { EnvironmentId } from "@t3tools/contracts";import * as Option from "effect/Option";import { AsyncResult, Atom } from "effect/unstable/reactivity";import { useContext, useMemo } from "react"; import { agentSessionScan } from "../state/agentSessions";import { formatEnvironmentQueryError } from "../state/query"; /** Subscribe to each selected computer without coupling their failures or refreshes. */export function useProjectScans(environmentIds: readonly EnvironmentId[]) { const registry = useContext(RegistryContext); const scansAtom = useMemo( () => Atom.make((get) => environmentIds.map((environmentId) => { const atom = agentSessionScan({ environmentId, input: {} }); const result = get(atom); return { environmentId, data: Option.getOrNull(AsyncResult.value(result)), error: result._tag === "Failure" ? formatEnvironmentQueryError(result.cause) : null, isPending: result.waiting || result._tag === "Initial", refresh: () => registry.refresh(atom), }; }), ), [environmentIds, registry], ); return useAtomValue(scansAtom);}
import { RegistryContext, useAtomValue } from "@effect/atom-react";
import type { EnvironmentId } from "@t3tools/contracts";
import * as Option from "effect/Option";
import { AsyncResult, Atom } from "effect/unstable/reactivity";
import { useContext, useMemo } from "react";
import { agentSessionScan } from "../state/agentSessions";
import { formatEnvironmentQueryError } from "../state/query";
/** Subscribe to each selected computer without coupling their failures or refreshes. */
export function useProjectScans(environmentIds: readonly EnvironmentId[]) {
const registry = useContext(RegistryContext);
const scansAtom = useMemo(
() =>
Atom.make((get) =>
environmentIds.map((environmentId) => {
const atom = agentSessionScan({ environmentId, input: {} });
const result = get(atom);
return {
environmentId,
data: Option.getOrNull(AsyncResult.value(result)),
error: result._tag === "Failure" ? formatEnvironmentQueryError(result.cause) : null,
isPending: result.waiting || result._tag === "Initial",
refresh: () => registry.refresh(atom),
};
}),
),
[environmentIds, registry],
);
return useAtomValue(scansAtom);
}