* add empty conversation model selection Signed-off-by: James <james@jan.ai> * chore: using secondary button instead of sidebar button Signed-off-by: James <james@jan.ai> --------- Signed-off-by: James <james@jan.ai> Co-authored-by: James <james@jan.ai>
67 lines
1.9 KiB
TypeScript
67 lines
1.9 KiB
TypeScript
import SimpleControlNetMessage from "../SimpleControlNetMessage";
|
|
import SimpleImageMessage from "../SimpleImageMessage";
|
|
import SimpleTextMessage from "../SimpleTextMessage";
|
|
import { ChatMessage, MessageType } from "@/_models/ChatMessage";
|
|
import StreamTextMessage from "../StreamTextMessage";
|
|
import { useAtomValue } from "jotai";
|
|
import { currentStreamingMessageAtom } from "@/_helpers/atoms/ChatMessage.atom";
|
|
|
|
export default function renderChatMessage({
|
|
id,
|
|
messageType,
|
|
senderAvatarUrl,
|
|
senderName,
|
|
createdAt,
|
|
imageUrls,
|
|
htmlText,
|
|
text,
|
|
}: ChatMessage): React.ReactNode {
|
|
// eslint-disable-next-line react-hooks/rules-of-hooks
|
|
const message = useAtomValue(currentStreamingMessageAtom);
|
|
switch (messageType) {
|
|
case MessageType.ImageWithText:
|
|
return (
|
|
<SimpleControlNetMessage
|
|
key={id}
|
|
avatarUrl={senderAvatarUrl}
|
|
senderName={senderName}
|
|
createdAt={createdAt}
|
|
imageUrls={imageUrls ?? []}
|
|
text={text ?? ""}
|
|
/>
|
|
);
|
|
case MessageType.Image:
|
|
return (
|
|
<SimpleImageMessage
|
|
key={id}
|
|
avatarUrl={senderAvatarUrl}
|
|
senderName={senderName}
|
|
createdAt={createdAt}
|
|
imageUrls={imageUrls ?? []}
|
|
text={text}
|
|
/>
|
|
);
|
|
case MessageType.Text:
|
|
return id !== message?.id ? (
|
|
<SimpleTextMessage
|
|
key={id}
|
|
avatarUrl={senderAvatarUrl}
|
|
senderName={senderName}
|
|
createdAt={createdAt}
|
|
text={htmlText && htmlText.trim().length > 0 ? htmlText : text}
|
|
/>
|
|
) : (
|
|
<StreamTextMessage
|
|
key={id}
|
|
id={id}
|
|
avatarUrl={senderAvatarUrl}
|
|
senderName={senderName}
|
|
createdAt={createdAt}
|
|
text={htmlText && htmlText.trim().length > 0 ? htmlText : text}
|
|
/>
|
|
);
|
|
default:
|
|
return null;
|
|
}
|
|
}
|