@assistant-ui/react
Version:
TypeScript/React library for AI Chat
58 lines • 2.48 kB
JavaScript
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