@@ -30,14 +30,11 @@ import {
30
30
MessageProps
31
31
} from '@patternfly/chatbot' ;
32
32
import { Model } from '@/types' ;
33
- import { modelFetcher } from '@/components/Chat /modelService' ;
33
+ import { modelFetcher } from '@/services /modelService' ;
34
34
const botAvatar = '/bot-icon-chat-32x32.svg' ;
35
35
36
36
import { EllipsisVIcon , TimesIcon } from '@patternfly/react-icons' ;
37
- import styles from '@/components/Chat/chat.module.css' ;
38
37
import { ModelsContext } from '@/components/Chat/ModelsContext' ;
39
- import { useSession } from 'next-auth/react' ;
40
- import { useEffect , useState } from 'react' ;
41
38
42
39
export const getId = ( ) => {
43
40
const date = Date . now ( ) + Math . random ( ) ;
@@ -46,20 +43,22 @@ export const getId = () => {
46
43
47
44
type ChatbotComponentProps = {
48
45
model : Model ;
46
+ userName : string ;
49
47
messages : MessageProps [ ] ;
50
48
setMessages : React . Dispatch < React . SetStateAction < MessageProps [ ] > > ;
51
49
showCompare : boolean ;
52
50
onCompare : ( ) => void ;
53
51
onChangeModel : ( model : Model ) => void ;
54
52
onClose ?: ( ) => void ;
55
- submittedMessage ?: string ;
53
+ submittedMessage ?: MessageProps ;
56
54
setFetching : ( fetching : boolean ) => void ;
57
55
setStopCallback : ( stopFn : ( ) => void ) => void ;
58
56
setController : ( controller : AbortController ) => void ;
59
57
} ;
60
58
61
59
const ChatBotComponent : React . FunctionComponent < ChatbotComponentProps > = ( {
62
60
model,
61
+ userName,
63
62
messages,
64
63
setMessages,
65
64
showCompare,
@@ -71,7 +70,6 @@ const ChatBotComponent: React.FunctionComponent<ChatbotComponentProps> = ({
71
70
setStopCallback,
72
71
setController
73
72
} ) => {
74
- const { data : session } = useSession ( ) ;
75
73
const { availableModels } = React . useContext ( ModelsContext ) ;
76
74
const [ isLoading , setIsLoading ] = React . useState ( false ) ;
77
75
const [ isSelectOpen , setIsSelectOpen ] = React . useState ( false ) ;
@@ -81,18 +79,7 @@ const ChatBotComponent: React.FunctionComponent<ChatbotComponentProps> = ({
81
79
const [ announcement , setAnnouncement ] = React . useState < string > ( ) ;
82
80
const [ isActionsOpen , setActionsOpen ] = React . useState < boolean > ( false ) ;
83
81
const stopped = React . useRef < boolean > ( false ) ;
84
- const [ userName , setUserName ] = useState < string > ( '' ) ;
85
- const [ userImage , setUserImage ] = useState < string > ( '' ) ;
86
-
87
- useEffect ( ( ) => {
88
- if ( session ?. user ?. name === 'Admin' ) {
89
- setUserName ( session ?. user ?. name ) ;
90
- setUserImage ( '/default-avatar.png' ) ;
91
- } else {
92
- setUserName ( session ?. user ?. name ?? '' ) ;
93
- setUserImage ( session ?. user ?. image || '' ) ;
94
- }
95
- } , [ session ?. user ?. name , session ?. user ?. image ] ) ;
82
+ const lastQuestionRef = React . useRef < string > ( ) ;
96
83
97
84
React . useEffect ( ( ) => {
98
85
setStopCallback ( ( ) => {
@@ -103,32 +90,24 @@ const ChatBotComponent: React.FunctionComponent<ChatbotComponentProps> = ({
103
90
} , [ ] ) ;
104
91
105
92
const handleSubmit = React . useCallback (
106
- async ( input : string ) => {
93
+ async ( message : MessageProps ) => {
107
94
if ( ! model ) {
108
95
setShowNoModelAlert ( true ) ;
109
96
return ;
110
97
}
111
- if ( ! input . trim ( ) ) {
98
+ if ( ! message . content ? .trim ( ) ) {
112
99
setShowNoQuestionAlert ( true ) ;
113
100
return ;
114
101
}
115
102
116
103
const date = new Date ( ) ;
117
104
118
105
setMessages ( ( prevMessages ) => {
119
- const newMessage : MessageProps = {
120
- avatar : userImage ,
121
- id : getId ( ) ,
122
- name : userName ,
123
- role : 'user' ,
124
- content : input ,
125
- timestamp : `${ date . toLocaleDateString ( ) } ${ date . toLocaleTimeString ( ) } `
126
- } ;
127
- return [ ...prevMessages , newMessage ] ;
106
+ return [ ...prevMessages , message ] ;
128
107
} ) ;
129
108
130
109
// make announcement to assistive devices that new messages have been added
131
- setAnnouncement ( `Message from You: ${ input } . Message from Chatbot is loading.` ) ;
110
+ setAnnouncement ( `Message from You: ${ message . content } . Message from Chatbot is loading.` ) ;
132
111
133
112
setIsLoading ( true ) ;
134
113
setFetching ( true ) ;
@@ -154,24 +133,25 @@ const ChatBotComponent: React.FunctionComponent<ChatbotComponentProps> = ({
154
133
155
134
stopped . current = false ;
156
135
try {
157
- await modelFetcher ( model , input , setCurrentMessage , setController ) ;
136
+ await modelFetcher ( model , message . content , setCurrentMessage , setController ) ;
158
137
} catch ( e ) {
159
138
console . error ( `Model fetch failed: ` , e ) ;
160
139
}
161
140
162
141
setIsLoading ( false ) ;
163
142
setFetching ( false ) ;
164
143
} ,
165
- [ model , setController , setFetching , setMessages , userImage , userName ]
144
+ [ model , setController , setFetching , setMessages ]
166
145
) ;
167
146
168
147
React . useEffect ( ( ) => {
169
- if ( submittedMessage ) {
148
+ if ( submittedMessage && submittedMessage . id !== lastQuestionRef . current ) {
149
+ lastQuestionRef . current = submittedMessage . id ;
170
150
handleSubmit ( submittedMessage ) ;
171
151
}
172
152
// Do not update when handleSubmit changes
173
153
// eslint-disable-next-line react-hooks/exhaustive-deps
174
- } , [ submittedMessage ] ) ;
154
+ } , [ submittedMessage , handleSubmit ] ) ;
175
155
176
156
const onToggleClick = ( ) => {
177
157
setIsSelectOpen ( ! isSelectOpen ) ;
@@ -218,7 +198,7 @@ const ChatBotComponent: React.FunctionComponent<ChatbotComponentProps> = ({
218
198
219
199
return (
220
200
< Chatbot displayMode = { ChatbotDisplayMode . embedded } >
221
- < ChatbotHeader className = { styles . chatHeader } >
201
+ < ChatbotHeader >
222
202
< ChatbotHeaderMain >
223
203
< Select
224
204
id = "single-select"
@@ -264,7 +244,7 @@ const ChatBotComponent: React.FunctionComponent<ChatbotComponentProps> = ({
264
244
</ ChatbotHeaderActions >
265
245
</ ChatbotHeader >
266
246
< ChatbotContent >
267
- < MessageBox announcement = { announcement } className = { styles . chatBotMessage } >
247
+ < MessageBox announcement = { announcement } >
268
248
< ChatbotWelcomePrompt title = { `Hello, ${ userName } ` } description = "Go ahead and ask me a question." />
269
249
{ messages . map ( ( message ) => (
270
250
< Message key = { message . id } { ...message } />
0 commit comments