50 lines · 1.6 KB · TypeScript
RawDownload
import { useAtomValue } from "@effect/atom-react";import {  type ArchivedSnapshotEntry,  createArchivedThreadSnapshotsAtomFamily,  makeArchivedThreadsEnvironmentKey,} from "@t3tools/client-runtime/state/threads";import type { EnvironmentId } from "@t3tools/contracts";import { useCallback, useMemo } from "react"; import { orchestrationEnvironment } from "../state/orchestration";import { appAtomRegistry } from "../rpc/atomRegistry"; function archivedSnapshotAtom(environmentId: EnvironmentId) {  return orchestrationEnvironment.archivedShellSnapshot({    environmentId,    input: {},  });} const archivedSnapshotsAtom = createArchivedThreadSnapshotsAtomFamily({  getSnapshotAtom: archivedSnapshotAtom,  labelPrefix: "web:archived-thread-snapshots",}); export function refreshArchivedThreadsForEnvironment(environmentId: EnvironmentId): void {  appAtomRegistry.refresh(archivedSnapshotAtom(environmentId));} export function useArchivedThreadSnapshots(environmentIds: ReadonlyArray<EnvironmentId>): {  readonly snapshots: ReadonlyArray<ArchivedSnapshotEntry>;  readonly error: string | null;  readonly isLoading: boolean;  readonly refresh: () => void;} {  const environmentKey = useMemo(    () => makeArchivedThreadsEnvironmentKey(environmentIds),    [environmentIds],  );  const result = useAtomValue(archivedSnapshotsAtom(environmentKey));  const refresh = useCallback(() => {    for (const environmentId of environmentIds) {      appAtomRegistry.refresh(archivedSnapshotAtom(environmentId));    }  }, [environmentIds]);   return {    ...result,    refresh,  };}