mirror of
https://github.com/MODSetter/SurfSense.git
synced 2026-04-25 16:56:22 +02:00
38 lines
1 KiB
TypeScript
38 lines
1 KiB
TypeScript
"use client";
|
|
|
|
import { useQuery } from "@rocicorp/zero/react";
|
|
import { useEffect, useRef } from "react";
|
|
import type { RawMessage } from "@/contracts/types/chat-messages.types";
|
|
import { queries } from "@/zero/queries";
|
|
|
|
/**
|
|
* Syncs chat messages for a thread via Zero.
|
|
* Calls onMessagesUpdate when messages change.
|
|
*/
|
|
export function useMessagesSync(
|
|
threadId: number | null,
|
|
onMessagesUpdate: (messages: RawMessage[]) => void
|
|
) {
|
|
const onMessagesUpdateRef = useRef(onMessagesUpdate);
|
|
|
|
useEffect(() => {
|
|
onMessagesUpdateRef.current = onMessagesUpdate;
|
|
}, [onMessagesUpdate]);
|
|
|
|
const [messages] = useQuery(queries.messages.byThread({ threadId: threadId ?? -1 }));
|
|
|
|
useEffect(() => {
|
|
if (!threadId || !messages) return;
|
|
|
|
const mapped: RawMessage[] = messages.map((msg) => ({
|
|
id: msg.id,
|
|
thread_id: msg.threadId,
|
|
role: msg.role,
|
|
content: msg.content,
|
|
author_id: msg.authorId ?? null,
|
|
created_at: new Date(msg.createdAt).toISOString(),
|
|
}));
|
|
|
|
onMessagesUpdateRef.current(mapped);
|
|
}, [threadId, messages]);
|
|
}
|