62 lines · 1.9 KB · TypeScript
RawDownload
import { useAtomValue } from "@effect/atom-react";import {  EMPTY_V2_ITEM_SUPPORT,  resolveV2ItemSupport,  v2ItemSupportEqual,  type V2ItemSupport,} from "@t3tools/client-runtime/state/item-support";import type { EnvironmentId, ThreadId, TurnItemId } from "@t3tools/contracts";import { scopeThreadRef } from "@t3tools/client-runtime/environment";import { Atom } from "effect/unstable/reactivity"; import { environmentThreadDetails } from "./threads"; function supportKey(input: {  readonly environmentId: EnvironmentId;  readonly threadId: ThreadId;  readonly itemId: TurnItemId;}): string {  return JSON.stringify(input);} function parseSupportKey(key: string): {  readonly environmentId: EnvironmentId;  readonly threadId: ThreadId;  readonly itemId: TurnItemId;} {  return JSON.parse(key) as {    readonly environmentId: EnvironmentId;    readonly threadId: ThreadId;    readonly itemId: TurnItemId;  };} const itemSupportAtomFamily = Atom.family((key: string) => {  const target = parseSupportKey(key);  const ref = scopeThreadRef(target.environmentId, target.threadId);  let previous = EMPTY_V2_ITEM_SUPPORT;  return Atom.make((get): V2ItemSupport => {    const scoped = get(environmentThreadDetails.threadAtom(ref));    if (scoped === null) return EMPTY_V2_ITEM_SUPPORT;    const next = resolveV2ItemSupport(scoped.projection, target.itemId);    if (v2ItemSupportEqual(previous, next)) return previous;    previous = next;    return next;  }).pipe(Atom.withLabel(`web-v2-item-support:${key}`));}); export function useV2ItemSupport(input: {  readonly environmentId: EnvironmentId;  readonly sourceThreadId: ThreadId;  readonly sourceItemId: TurnItemId;}): V2ItemSupport {  return useAtomValue(    itemSupportAtomFamily(      supportKey({        environmentId: input.environmentId,        threadId: input.sourceThreadId,        itemId: input.sourceItemId,      }),    ),  );}

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t