UNPKG

@assistant-ui/react

Version:

TypeScript/React library for AI Chat

58 lines 2.48 kB
import { tapApi } from "../../utils/tap-store/index.js"; import { resource, tapInlineResource, tapMemo } from "@assistant-ui/tap"; import { tapSubscribable } from "../util-hooks/tapSubscribable.js"; import { ThreadListItemClient } from "./ThreadListItemRuntimeClient.js"; import { ThreadClient } from "./ThreadRuntimeClient.js"; import { tapLookupResources } from "../../client/util-hooks/tapLookupResources.js"; const ThreadListItemClientById = resource(({ runtime, id }) => { const threadListItemRuntime = tapMemo(() => runtime.getItemById(id), [runtime, id]); return tapInlineResource(ThreadListItemClient({ runtime: threadListItemRuntime, })); }); export const ThreadListClient = resource(({ runtime, __internal_assistantRuntime, }) => { const runtimeState = tapSubscribable(runtime); const main = tapInlineResource(ThreadClient({ runtime: runtime.main, })); const threadItems = tapLookupResources(Object.keys(runtimeState.threadItems).map((id) => [ id, ThreadListItemClientById({ runtime, id }), ])); const state = tapMemo(() => { return { mainThreadId: runtimeState.mainThreadId, newThreadId: runtimeState.newThread ?? null, isLoading: runtimeState.isLoading, threadIds: runtimeState.threads, archivedThreadIds: runtimeState.archivedThreads, threadItems: threadItems.state, main: main.state, }; }, [runtimeState, threadItems.state, main.state]); return tapApi({ getState: () => state, thread: () => main.api, item: (threadIdOrOptions) => { if (threadIdOrOptions === "main") { return threadItems.api({ key: state.mainThreadId }); } if ("id" in threadIdOrOptions) { return threadItems.api({ key: threadIdOrOptions.id }); } const { index, archived = false } = threadIdOrOptions; const id = archived ? state.archivedThreadIds[index] : state.threadIds[index]; return threadItems.api({ key: id }); }, switchToThread: (threadId) => { runtime.switchToThread(threadId); }, switchToNewThread: () => { runtime.switchToNewThread(); }, __internal_getAssistantRuntime: () => __internal_assistantRuntime, }); }); //# sourceMappingURL=ThreadListRuntimeClient.js.map