@@ -32,14 +32,11 @@ import {
3232 MessageProps
3333} from '@patternfly/chatbot' ;
3434import { Model } from '@/types' ;
35- import { modelFetcher } from '@/components/Chat/modelService' ;
36- const botAvatar = '/bot-icon-chat-32x32.svg' ;
37-
38- import { EllipsisVIcon , OutlinedQuestionCircleIcon , TimesIcon } from '@patternfly/react-icons' ;
39- import styles from '@/components/Chat/chat.module.css' ;
35+ import { modelFetcher } from '@/services/modelService' ;
4036import { ModelsContext } from '@/components/Chat/ModelsContext' ;
41- import { useSession } from 'next-auth/react' ;
42- import { useEffect , useState } from 'react' ;
37+ import { EllipsisVIcon , OutlinedQuestionCircleIcon , TimesIcon } from '@patternfly/react-icons' ;
38+
39+ const botAvatar = '/bot-icon-chat-32x32.svg' ;
4340
4441export const getId = ( ) => {
4542 const date = Date . now ( ) + Math . random ( ) ;
@@ -48,20 +45,22 @@ export const getId = () => {
4845
4946type ChatbotComponentProps = {
5047 model : Model ;
48+ userName : string ;
5149 messages : MessageProps [ ] ;
5250 setMessages : React . Dispatch < React . SetStateAction < MessageProps [ ] > > ;
5351 showCompare : boolean ;
5452 onCompare : ( ) => void ;
5553 onChangeModel : ( model : Model ) => void ;
5654 onClose ?: ( ) => void ;
57- submittedMessage ?: string ;
55+ submittedMessage ?: MessageProps ;
5856 setFetching : ( fetching : boolean ) => void ;
5957 setStopCallback : ( stopFn : ( ) => void ) => void ;
6058 setController : ( controller : AbortController ) => void ;
6159} ;
6260
6361const ChatBotComponent : React . FunctionComponent < ChatbotComponentProps > = ( {
6462 model,
63+ userName,
6564 messages,
6665 setMessages,
6766 showCompare,
@@ -74,7 +73,6 @@ const ChatBotComponent: React.FunctionComponent<ChatbotComponentProps> = ({
7473 setController
7574} ) => {
7675 const router = useRouter ( ) ;
77- const { data : session } = useSession ( ) ;
7876 const { availableModels } = React . useContext ( ModelsContext ) ;
7977 const [ isLoading , setIsLoading ] = React . useState ( false ) ;
8078 const [ isSelectOpen , setIsSelectOpen ] = React . useState ( false ) ;
@@ -84,18 +82,7 @@ const ChatBotComponent: React.FunctionComponent<ChatbotComponentProps> = ({
8482 const [ announcement , setAnnouncement ] = React . useState < string > ( ) ;
8583 const [ isActionsOpen , setActionsOpen ] = React . useState < boolean > ( false ) ;
8684 const stopped = React . useRef < boolean > ( false ) ;
87- const [ userName , setUserName ] = useState < string > ( '' ) ;
88- const [ userImage , setUserImage ] = useState < string > ( '' ) ;
89-
90- useEffect ( ( ) => {
91- if ( session ?. user ?. name === 'Admin' ) {
92- setUserName ( session ?. user ?. name ) ;
93- setUserImage ( '/default-avatar.png' ) ;
94- } else {
95- setUserName ( session ?. user ?. name ?? '' ) ;
96- setUserImage ( session ?. user ?. image || '' ) ;
97- }
98- } , [ session ?. user ?. name , session ?. user ?. image ] ) ;
85+ const lastQuestionRef = React . useRef < string > ( ) ;
9986
10087 React . useEffect ( ( ) => {
10188 setStopCallback ( ( ) => {
@@ -106,32 +93,24 @@ const ChatBotComponent: React.FunctionComponent<ChatbotComponentProps> = ({
10693 } , [ ] ) ;
10794
10895 const handleSubmit = React . useCallback (
109- async ( input : string ) => {
96+ async ( message : MessageProps ) => {
11097 if ( ! model ) {
11198 setShowNoModelAlert ( true ) ;
11299 return ;
113100 }
114- if ( ! input . trim ( ) ) {
101+ if ( ! message . content ? .trim ( ) ) {
115102 setShowNoQuestionAlert ( true ) ;
116103 return ;
117104 }
118105
119106 const date = new Date ( ) ;
120107
121108 setMessages ( ( prevMessages ) => {
122- const newMessage : MessageProps = {
123- avatar : userImage ,
124- id : getId ( ) ,
125- name : userName ,
126- role : 'user' ,
127- content : input ,
128- timestamp : `${ date . toLocaleDateString ( ) } ${ date . toLocaleTimeString ( ) } `
129- } ;
130- return [ ...prevMessages , newMessage ] ;
109+ return [ ...prevMessages , message ] ;
131110 } ) ;
132111
133112 // make announcement to assistive devices that new messages have been added
134- setAnnouncement ( `Message from You: ${ input } . Message from Chatbot is loading.` ) ;
113+ setAnnouncement ( `Message from You: ${ message . content } . Message from Chatbot is loading.` ) ;
135114
136115 setIsLoading ( true ) ;
137116 setFetching ( true ) ;
@@ -157,24 +136,25 @@ const ChatBotComponent: React.FunctionComponent<ChatbotComponentProps> = ({
157136
158137 stopped . current = false ;
159138 try {
160- await modelFetcher ( model , input , setCurrentMessage , setController ) ;
139+ await modelFetcher ( model , message . content , setCurrentMessage , setController ) ;
161140 } catch ( e ) {
162141 console . error ( `Model fetch failed: ` , e ) ;
163142 }
164143
165144 setIsLoading ( false ) ;
166145 setFetching ( false ) ;
167146 } ,
168- [ model , setController , setFetching , setMessages , userImage , userName ]
147+ [ model , setController , setFetching , setMessages ]
169148 ) ;
170149
171150 React . useEffect ( ( ) => {
172- if ( submittedMessage ) {
151+ if ( submittedMessage && submittedMessage . id !== lastQuestionRef . current ) {
152+ lastQuestionRef . current = submittedMessage . id ;
173153 handleSubmit ( submittedMessage ) ;
174154 }
175155 // Do not update when handleSubmit changes
176156 // eslint-disable-next-line react-hooks/exhaustive-deps
177- } , [ submittedMessage ] ) ;
157+ } , [ submittedMessage , handleSubmit ] ) ;
178158
179159 const onToggleClick = ( ) => {
180160 setIsSelectOpen ( ! isSelectOpen ) ;
@@ -221,7 +201,7 @@ const ChatBotComponent: React.FunctionComponent<ChatbotComponentProps> = ({
221201
222202 return (
223203 < Chatbot displayMode = { ChatbotDisplayMode . embedded } >
224- < ChatbotHeader className = { styles . chatHeader } >
204+ < ChatbotHeader >
225205 < ChatbotHeaderMain >
226206 < Select
227207 id = "single-select"
@@ -284,7 +264,7 @@ const ChatBotComponent: React.FunctionComponent<ChatbotComponentProps> = ({
284264 </ ChatbotHeaderActions >
285265 </ ChatbotHeader >
286266 < ChatbotContent >
287- < MessageBox announcement = { announcement } className = { styles . chatBotMessage } >
267+ < MessageBox announcement = { announcement } >
288268 < ChatbotWelcomePrompt title = { `Hello, ${ userName } ` } description = "Go ahead and ask me a question." />
289269 { messages . map ( ( message ) => (
290270 < Message key = { message . id } { ...message } />
0 commit comments