mirror of
https://github.com/MODSetter/SurfSense.git
synced 2026-07-16 23:01:06 +02:00
feat(chat): add useChatStream hook over the stream store
This commit is contained in:
parent
b5cefd25ef
commit
0fb577b71f
1 changed files with 18 additions and 0 deletions
18
surfsense_web/lib/chat/stream-engine/use-chat-stream.ts
Normal file
18
surfsense_web/lib/chat/stream-engine/use-chat-stream.ts
Normal file
|
|
@ -0,0 +1,18 @@
|
||||||
|
"use client";
|
||||||
|
|
||||||
|
import { useCallback, useSyncExternalStore } from "react";
|
||||||
|
import { chatStreamStore, type ThreadStreamState } from "./store";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Subscribe to the durable streaming state for a given thread.
|
||||||
|
*
|
||||||
|
* Returns the live ``ThreadStreamState`` while a turn is streaming (or
|
||||||
|
* pending re-hydration from the DB), or ``null`` when the thread has no
|
||||||
|
* active overlay — in which case the page falls back to its DB-hydrated
|
||||||
|
* messages. State lives in the module-level {@link chatStreamStore}, so it
|
||||||
|
* survives the chat page unmounting during in-app navigation.
|
||||||
|
*/
|
||||||
|
export function useChatStream(threadId: number | null): ThreadStreamState | null {
|
||||||
|
const getSnapshot = useCallback(() => chatStreamStore.getSnapshot(threadId), [threadId]);
|
||||||
|
return useSyncExternalStore(chatStreamStore.subscribe, getSnapshot, () => null);
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue