mirror of
https://github.com/MODSetter/SurfSense.git
synced 2026-04-28 10:26:33 +02:00
feat: improve public chat UI and shared components
This commit is contained in:
parent
37adc54d6a
commit
ee65e1377f
14 changed files with 403 additions and 275 deletions
|
|
@ -1,17 +1,31 @@
|
|||
"use client";
|
||||
|
||||
import {
|
||||
type AppendMessage,
|
||||
type ThreadMessageLike,
|
||||
useExternalStoreRuntime,
|
||||
} from "@assistant-ui/react";
|
||||
import { type AppendMessage, useExternalStoreRuntime } from "@assistant-ui/react";
|
||||
import { useCallback, useMemo } from "react";
|
||||
import type { GetPublicChatResponse, PublicChatMessage } from "@/contracts/types/public-chat.types";
|
||||
import { convertToThreadMessage } from "@/lib/chat/message-utils";
|
||||
import type { MessageRecord } from "@/lib/chat/thread-persistence";
|
||||
|
||||
interface UsePublicChatRuntimeOptions {
|
||||
data: GetPublicChatResponse | undefined;
|
||||
}
|
||||
|
||||
/**
|
||||
* Map PublicChatMessage to MessageRecord shape for reuse of convertToThreadMessage
|
||||
*/
|
||||
function toMessageRecord(msg: PublicChatMessage, idx: number): MessageRecord {
|
||||
return {
|
||||
id: idx,
|
||||
thread_id: 0,
|
||||
role: msg.role as "user" | "assistant" | "system",
|
||||
content: msg.content,
|
||||
created_at: msg.created_at,
|
||||
author_id: msg.author ? "public" : null,
|
||||
author_display_name: msg.author?.display_name ?? null,
|
||||
author_avatar_url: msg.author?.avatar_url ?? null,
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a read-only runtime for public chat viewing.
|
||||
*/
|
||||
|
|
@ -21,24 +35,8 @@ export function usePublicChatRuntime({ data }: UsePublicChatRuntimeOptions) {
|
|||
// 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,
|
||||
}),
|
||||
(msg: PublicChatMessage, idx: number) => convertToThreadMessage(toMessageRecord(msg, idx)),
|
||||
[]
|
||||
);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue