@@ -8,11 +8,11 @@ import { useCallback, useState } from "react";
88import type { ThirdwebClient } from "thirdweb" ;
99import { useActiveWalletConnectionStatus } from "thirdweb/react" ;
1010import type { NebulaContext } from "../../api/chat" ;
11- import type { NebulaUserMessage } from "../../api/types" ;
1211import type { ExamplePrompt } from "../../data/examplePrompts" ;
1312import { NebulaIcon } from "../../icons/NebulaIcon" ;
1413import { ChatBar } from "../ChatBar" ;
1514import { type CustomChatMessage , CustomChats } from "./CustomChats" ;
15+ import type { UserMessage , UserMessageContent } from "./CustomChats" ;
1616
1717export default function CustomChatContent ( props : {
1818 authToken : string | undefined ;
@@ -60,13 +60,15 @@ function CustomChatContentLoggedIn(props: {
6060 const connectionStatus = useActiveWalletConnectionStatus ( ) ;
6161
6262 const handleSendMessage = useCallback (
63- async ( userMessage : NebulaUserMessage ) => {
63+ async ( userMessage : UserMessage ) => {
6464 const abortController = new AbortController ( ) ;
6565 setUserHasSubmittedMessage ( true ) ;
6666 setIsChatStreaming ( true ) ;
6767 setEnableAutoScroll ( true ) ;
6868
69- const textMessage = userMessage . content . find ( ( x ) => x . type === "text" ) ;
69+ const textMessage = userMessage . content . find (
70+ ( x : UserMessageContent ) => x . type === "text" ,
71+ ) ;
7072
7173 trackEvent ( {
7274 category : "siwa" ,
@@ -79,7 +81,7 @@ function CustomChatContentLoggedIn(props: {
7981 ...prev ,
8082 {
8183 type : "user" ,
82- content : userMessage . content ,
84+ content : userMessage . content as UserMessageContent [ ] ,
8385 } ,
8486 // instant loading indicator feedback to user
8587 {
@@ -92,7 +94,7 @@ function CustomChatContentLoggedIn(props: {
9294 // deep clone `userMessage` to avoid mutating the original message, its a pretty small object so JSON.parse is fine
9395 const messageToSend = JSON . parse (
9496 JSON . stringify ( userMessage ) ,
95- ) as NebulaUserMessage ;
97+ ) as UserMessage ;
9698
9799 try {
98100 setChatAbortController ( abortController ) ;
@@ -256,7 +258,15 @@ function CustomChatContentLoggedIn(props: {
256258 } }
257259 isChatStreaming = { isChatStreaming }
258260 prefillMessage = { undefined }
259- sendMessage = { handleSendMessage }
261+ sendMessage = { ( input ) => {
262+ // Ensure input is a string
263+ const text = typeof input === "string" ? input : "" ;
264+ const userMessage : UserMessage = {
265+ type : "user" ,
266+ content : [ { type : "text" , text } ] ,
267+ } ;
268+ handleSendMessage ( userMessage ) ;
269+ } }
260270 className = "rounded-none border-x-0 border-b-0"
261271 allowImageUpload = { false }
262272 />
@@ -301,7 +311,7 @@ function LoggedOutStateChatContent() {
301311}
302312
303313function EmptyStateChatPageContent ( props : {
304- sendMessage : ( message : NebulaUserMessage ) => void ;
314+ sendMessage : ( message : UserMessage ) => void ;
305315 examplePrompts : { title : string ; message : string } [ ] ;
306316} ) {
307317 return (
@@ -328,7 +338,7 @@ function EmptyStateChatPageContent(props: {
328338 size = "sm"
329339 onClick = { ( ) =>
330340 props . sendMessage ( {
331- role : "user" ,
341+ type : "user" ,
332342 content : [
333343 {
334344 type : "text" ,
0 commit comments