mirror of
https://github.com/MODSetter/SurfSense.git
synced 2026-04-27 01:36:30 +02:00
53 lines
1.3 KiB
TypeScript
53 lines
1.3 KiB
TypeScript
"use client";
|
|
|
|
import {
|
|
type AppendMessage,
|
|
type ThreadMessageLike,
|
|
useExternalStoreRuntime,
|
|
} from "@assistant-ui/react";
|
|
import { useCallback, useMemo } from "react";
|
|
import type { GetPublicChatResponse, PublicChatMessage } from "@/contracts/types/public-chat.types";
|
|
|
|
interface UsePublicChatRuntimeOptions {
|
|
data: GetPublicChatResponse | undefined;
|
|
}
|
|
|
|
/**
|
|
* Creates a read-only runtime for public chat viewing.
|
|
*/
|
|
export function usePublicChatRuntime({ data }: UsePublicChatRuntimeOptions) {
|
|
const messages = useMemo(() => data?.messages ?? [], [data?.messages]);
|
|
|
|
// No-op - public chat is read-only
|
|
const onNew = useCallback(async (_message: AppendMessage) => {}, []);
|
|
|
|
// Convert PublicChatMessage to ThreadMessageLike
|
|
const convertMessage = useCallback(
|
|
(msg: PublicChatMessage, idx: number): ThreadMessageLike => ({
|
|
id: `public-msg-${idx}`,
|
|
role: msg.role as "user" | "assistant",
|
|
content: msg.content as ThreadMessageLike["content"],
|
|
createdAt: new Date(msg.created_at),
|
|
metadata: msg.author
|
|
? {
|
|
custom: {
|
|
author: {
|
|
displayName: msg.author.display_name,
|
|
avatarUrl: msg.author.avatar_url,
|
|
},
|
|
},
|
|
}
|
|
: undefined,
|
|
}),
|
|
[]
|
|
);
|
|
|
|
const runtime = useExternalStoreRuntime({
|
|
isRunning: false,
|
|
messages,
|
|
onNew,
|
|
convertMessage,
|
|
});
|
|
|
|
return runtime;
|
|
}
|