@aslaluroba/help-center-react 2.0.2 → 2.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/dist/core/api.d.ts +4 -1
  2. package/dist/index.d.ts +3 -2
  3. package/dist/index.esm.js +994 -25294
  4. package/dist/index.esm.js.map +1 -1
  5. package/dist/index.js +995 -25295
  6. package/dist/index.js.map +1 -1
  7. package/dist/lib/config.d.ts +1 -1
  8. package/dist/lib/types.d.ts +4 -0
  9. package/dist/ui/chatbot-popup/chat-window-screen/footer.d.ts +1 -0
  10. package/dist/ui/chatbot-popup/chat-window-screen/index.d.ts +1 -1
  11. package/dist/ui/help-center.d.ts +1 -1
  12. package/dist/ui/help-popup.d.ts +9 -3
  13. package/dist/ui/review-dialog/index.d.ts +8 -0
  14. package/dist/ui/review-dialog/rating.d.ts +12 -0
  15. package/package.json +26 -5
  16. package/src/assets/icons/arrowRight.svg +1 -1
  17. package/src/assets/icons/closeCircle.svg +1 -1
  18. package/src/components/ui/agent-response/agent-response.tsx +36 -34
  19. package/src/components/ui/header.tsx +2 -3
  20. package/src/core/SignalRService.ts +25 -25
  21. package/src/core/api.ts +180 -43
  22. package/src/globals.css +0 -9
  23. package/src/index.ts +3 -2
  24. package/src/lib/config.ts +31 -25
  25. package/src/lib/types.ts +5 -0
  26. package/src/locales/ar.json +18 -1
  27. package/src/locales/en.json +26 -8
  28. package/src/ui/chatbot-popup/chat-window-screen/footer.tsx +31 -34
  29. package/src/ui/chatbot-popup/chat-window-screen/header.tsx +47 -53
  30. package/src/ui/chatbot-popup/chat-window-screen/index.tsx +178 -88
  31. package/src/ui/chatbot-popup/options-list-screen/header.tsx +24 -20
  32. package/src/ui/chatbot-popup/options-list-screen/index.tsx +24 -24
  33. package/src/ui/chatbot-popup/options-list-screen/option-card.tsx +9 -4
  34. package/src/ui/help-center.tsx +367 -141
  35. package/src/ui/help-popup.tsx +239 -165
  36. package/src/ui/review-dialog/index.tsx +106 -0
  37. package/src/ui/review-dialog/rating.tsx +78 -0
  38. package/tsconfig.json +48 -0
  39. package/postcss.config.js +0 -6
  40. package/rollup.config.js +0 -58
  41. package/tailwind.config.js +0 -174
@@ -1,26 +1,27 @@
1
- import React, { useState, useEffect } from 'react'
2
- import { HelpButton } from './help-button'
3
- import { FloatingMessage } from './floating-message'
4
- import { HelpPopup } from './help-popup'
5
- import { apiRequest } from '../core/api'
6
- import { ClientSignalRService } from '../core/SignalRService'
7
- import { Message, HelpScreenData, Option } from '../lib/types'
8
- import { configService } from '../lib/config'
9
- import { useLocalTranslation } from '../useLocalTranslation'
10
- import '../globals.css'
1
+ import ReviewDialog from '@/ui/review-dialog';
2
+ import React, { useEffect, useState } from 'react';
3
+ import { apiRequest } from '../core/api';
4
+ import { ClientSignalRService } from '../core/SignalRService';
5
+ import { configService } from '../lib/config';
6
+ import { useLocalTranslation } from '../useLocalTranslation';
7
+ import '../globals.css';
8
+ import { HelpScreenData, Message, Option, ReviewProps } from '../lib/types';
9
+ import { FloatingMessage } from './floating-message';
10
+ import { HelpButton } from './help-button';
11
+ import { HelpPopup } from './help-popup';
11
12
 
12
13
  interface HelpCenterProps {
13
- helpScreenId: string
14
- language: string
14
+ helpScreenId: string;
15
+ language: string;
15
16
  user?: {
16
- id?: string
17
- name?: string
18
- email?: string
19
- avatar?: string
20
- }
21
- showArrow?: boolean
22
- messageLabel?: string | null
23
- showHelpScreen?: boolean
17
+ id?: string;
18
+ name?: string;
19
+ email?: string;
20
+ avatar?: string;
21
+ };
22
+ showArrow?: boolean;
23
+ messageLabel?: string | null;
24
+ showHelpScreen?: boolean;
24
25
  }
25
26
 
26
27
  export function HelpCenter({
@@ -29,95 +30,121 @@ export function HelpCenter({
29
30
  showArrow = true,
30
31
  language = 'en',
31
32
  messageLabel = null,
32
- showHelpScreen = false
33
+ showHelpScreen = false,
33
34
  }: HelpCenterProps) {
34
- const { t } = useLocalTranslation(language)
35
- const [isOpen, setIsOpen] = useState(false)
36
- const [showArrowAnimation, setShowArrowAnimation] = useState(showArrow)
37
- const [helpScreenData, setHelpScreenData] = useState<HelpScreenData | null>(null)
38
- const [status, setStatus] = useState('idle')
39
- const [error, setError] = useState('')
40
- const [selectedOption, setSelectedOption] = useState<Option | null>(null)
41
-
42
- const [sessionId, setSessionId] = useState<string | null>(null)
43
- const [isSignalRConnected, setIsSignalRConnected] = useState(false)
44
- const [isChatClosed, setIsChatClosed] = useState(false)
45
- const [messages, setMessages] = useState<Message[]>([])
46
- const [needsAgent, setNeedsAgent] = useState(false)
47
- const [assistantStatus, setAssistantStatus] = useState('idle')
35
+ const { t } = useLocalTranslation(language);
36
+ const [isOpen, setIsOpen] = useState(false);
37
+ const [showArrowAnimation, setShowArrowAnimation] = useState(showArrow);
38
+ const [helpScreenData, setHelpScreenData] = useState<HelpScreenData | null>(null);
39
+ const [status, setStatus] = useState('idle');
40
+ const [error, setError] = useState('');
41
+ const [selectedOption, setSelectedOption] = useState<Option | null>(null);
42
+
43
+ const [sessionId, setSessionId] = useState<string | null>(null);
44
+ const [isSignalRConnected, setIsSignalRConnected] = useState(false);
45
+ const [isChatClosed, setIsChatClosed] = useState(false);
46
+ const [messages, setMessages] = useState<Message[]>([]);
47
+ const [needsAgent, setNeedsAgent] = useState(false);
48
+ const [assistantStatus, setAssistantStatus] = useState('idle');
49
+
50
+ const [isReviewDialogOpen, setIsReviewDialogOpen] = useState(false);
48
51
 
49
52
  const handleTogglePopup = () => {
50
- setIsOpen(!isOpen)
51
- setShowArrowAnimation(isOpen)
52
- }
53
+ setIsOpen(!isOpen);
54
+ setShowArrowAnimation(isOpen);
55
+ };
53
56
 
54
57
  const handleCloseArrowAnimation = () => {
55
- setShowArrowAnimation(false)
56
- }
58
+ setShowArrowAnimation(false);
59
+ };
57
60
 
58
61
  const handleReceiveMessage = (message: string, senderType: number, needsAgent: boolean) => {
59
- // Update agent status if needed
62
+ console.log('🎯 Help Center received message:', {
63
+ message,
64
+ senderType,
65
+ needsAgent,
66
+ timestamp: new Date().toISOString(),
67
+ currentSessionId: sessionId,
68
+ isSignalRConnected,
69
+ messagesCount: messages.length,
70
+ });
71
+
60
72
  if (needsAgent) {
61
- setNeedsAgent(true)
73
+ console.log('🚨 Agent needed for this message');
74
+ setNeedsAgent(true);
62
75
  }
63
76
 
64
- // Add the received message to the chat
65
- setMessages((prevMessages) => [
66
- ...prevMessages,
67
- {
77
+ setMessages((prevMessages) => {
78
+ const newMessage = {
68
79
  id: Date.now(),
69
80
  senderType: senderType,
70
81
  messageContent: message,
71
82
  sentAt: new Date(),
72
- isSeen: true
73
- }
74
- ])
83
+ isSeen: true,
84
+ };
85
+
86
+ console.log('✅ Adding message to state:', newMessage);
87
+ const updatedMessages = [...prevMessages, newMessage];
88
+ console.log('📊 Total messages after update:', updatedMessages.length);
89
+
90
+ return updatedMessages;
91
+ });
75
92
 
76
- // Reset assistant status after receiving message
77
- setAssistantStatus('idle')
78
- }
93
+ setAssistantStatus('idle');
94
+ console.log('🔄 Assistant status set to idle');
95
+ };
79
96
 
80
- const handleEndChat = async () => {
81
- if (!sessionId || !selectedOption) return
97
+ const handleEndChat = async (option?: Option) => {
98
+ if (!sessionId || !selectedOption) return;
82
99
 
83
100
  try {
84
- // Disconnect SignalR
85
- await ClientSignalRService.stopConnection()
86
- setIsSignalRConnected(false)
101
+ await ClientSignalRService.stopConnection();
102
+ setIsSignalRConnected(false);
87
103
 
88
- // Close chat session
89
- const response = await apiRequest(`Client/ClientChatSession/${sessionId}/close`, 'POST')
90
- if (!response.ok) {
91
- throw new Error('Failed to close chat session')
104
+ const response = await apiRequest(`Client/ClientChatSession/${sessionId}/close`, 'POST');
105
+ if (!response.ok) throw new Error('Failed to close chat session');
106
+
107
+ setIsReviewDialogOpen(true);
108
+ if (option) {
109
+ handleStartChat(option);
92
110
  }
111
+ } catch (error) {
112
+ console.error('Error ending chat:', error);
113
+ setError('Failed to end chat session');
114
+ }
115
+ };
116
+
117
+ const handleSendChatReview = async ({ comment, rating }: ReviewProps) => {
118
+ if (!sessionId) return;
119
+
120
+ const payload = { rating, comment };
93
121
 
94
- setSessionId(null)
95
- setIsChatClosed(true)
122
+ try {
123
+ const response = await apiRequest(`Client/ClientChatSession/${sessionId}/review`, 'POST', payload);
124
+ if (!response.ok) throw new Error('Failed to send chat review');
96
125
 
97
- // Clear messages after a delay
98
- setTimeout(() => {
99
- setMessages([])
100
- setSelectedOption(null)
101
- }, 3000)
126
+ setIsReviewDialogOpen(false);
102
127
  } catch (error) {
103
- console.error('Error ending chat:', error)
104
- setError('Failed to end chat session')
105
- // If ending chat fails, the chat is not considered closed.
106
- setIsChatClosed(false)
128
+ console.error('Error sending chat review:', error);
129
+ setError('Failed to send chat review');
107
130
  }
108
- }
131
+ };
132
+
133
+ const handleCloseChatReview = () => {
134
+ setIsReviewDialogOpen(false);
135
+ };
109
136
 
110
137
  const handleStartChat = async (option: Option) => {
111
- await startNewChatSession(option)
112
- }
138
+ await startNewChatSession(option);
139
+ };
113
140
 
114
141
  const startNewChatSession = async (option: Option) => {
115
142
  try {
116
- setStatus('loading')
117
- setError('')
118
- setMessages([])
143
+ setStatus('loading');
144
+ setError('');
145
+ setMessages([]);
119
146
 
120
- const tokenResponse = await configService.getToken()
147
+ const tokenResponse = await configService.getToken();
121
148
  const chatSessionCreateDto = {
122
149
  helpScreenId: helpScreenId,
123
150
  optionId: option.id,
@@ -125,19 +152,21 @@ export function HelpCenter({
125
152
  user: {
126
153
  id: user.id,
127
154
  name: user.name,
128
- email: user.email
129
- }
130
- })
131
- }
132
- const response = await apiRequest('Client/ClientChatSession/create-session', 'POST', chatSessionCreateDto)
155
+ email: user.email,
156
+ },
157
+ }),
158
+ };
159
+
160
+ const response = await apiRequest('Client/ClientChatSession/create-session', 'POST', chatSessionCreateDto);
133
161
 
134
162
  if (!response.ok) {
135
- throw new Error('Failed to create chat session')
163
+ throw new Error('Failed to create chat session');
136
164
  }
137
165
 
138
- const createdSession = await response.json()
166
+ const createdSession = await response.json();
167
+ console.log('Created session:', createdSession);
139
168
 
140
- setSessionId(createdSession.id)
169
+ setSessionId(createdSession.id);
141
170
 
142
171
  // Add greeting message if available
143
172
  if (option.assistant?.greeting) {
@@ -147,9 +176,9 @@ export function HelpCenter({
147
176
  senderType: 3, // AI
148
177
  messageContent: option.assistant.greeting,
149
178
  sentAt: new Date(),
150
- isSeen: true
151
- }
152
- ])
179
+ isSeen: true,
180
+ },
181
+ ]);
153
182
  } else {
154
183
  // Default greeting if none provided
155
184
  setMessages([
@@ -158,33 +187,31 @@ export function HelpCenter({
158
187
  senderType: 3,
159
188
  messageContent: 'Hello! How can I assist you today?\nمرحباً! كيف يمكنني مساعدتك اليوم؟',
160
189
  sentAt: new Date(),
161
- isSeen: true
162
- }
163
- ])
190
+ isSeen: true,
191
+ },
192
+ ]);
164
193
  }
165
194
 
166
195
  // Connect to SignalR
167
- ClientSignalRService.startConnection(createdSession.id, tokenResponse, handleReceiveMessage)
196
+ await ClientSignalRService.startConnection(createdSession.id, tokenResponse, handleReceiveMessage);
168
197
 
169
- setIsSignalRConnected(true)
170
- setIsChatClosed(false)
171
- setStatus('succeeded')
198
+ setIsSignalRConnected(true);
199
+ setIsChatClosed(false);
200
+ setStatus('succeeded');
172
201
  } catch (error) {
173
- console.error('Chat start error:', error)
174
- setError(error instanceof Error ? error.message : 'Failed to start chat session')
175
- setStatus('failed')
176
- // If starting chat fails, SignalR is not connected.
177
- setIsSignalRConnected(false)
202
+ console.error('Chat start error:', error);
203
+ setError(error instanceof Error ? error.message : 'Failed to start chat session');
204
+ setStatus('failed');
178
205
  }
179
- }
206
+ };
180
207
 
181
208
  const handleSendMessage = async (message: string) => {
182
- let currentSessionId = sessionId
209
+ let currentSessionId = sessionId;
183
210
 
184
211
  if (message.trim() !== '') {
185
212
  try {
186
213
  // Set loading state
187
- setAssistantStatus('typing')
214
+ setAssistantStatus('typing');
188
215
 
189
216
  // Add user message to the chat immediately
190
217
  setMessages((prevMessages) => [
@@ -194,9 +221,9 @@ export function HelpCenter({
194
221
  senderType: 1, // Customer
195
222
  messageContent: message,
196
223
  sentAt: new Date(),
197
- isSeen: false
198
- }
199
- ])
224
+ isSeen: false,
225
+ },
226
+ ]);
200
227
 
201
228
  // Create a new chat session if not started yet
202
229
  if (!currentSessionId) {
@@ -206,74 +233,270 @@ export function HelpCenter({
206
233
  user: {
207
234
  id: user?.id,
208
235
  name: user?.name,
209
- email: user?.email
210
- }
211
- }
236
+ email: user?.email,
237
+ },
238
+ };
212
239
 
213
- const response = await apiRequest('Client/ClientChatSession/create-session', 'POST', chatSessionCreateDto)
240
+ const response = await apiRequest('Client/ClientChatSession/create-session', 'POST', chatSessionCreateDto);
214
241
 
215
242
  if (!response.ok) {
216
- throw new Error('Failed to create chat session')
243
+ throw new Error('Failed to create chat session');
217
244
  }
218
245
 
219
- const createdSession = await response.json()
220
- setSessionId(createdSession.id)
221
- currentSessionId = createdSession.id
246
+ const createdSession = await response.json();
247
+ setSessionId(createdSession.id);
248
+ currentSessionId = createdSession.id;
222
249
 
223
250
  // Connect to SignalR with the new session
224
- const tokenResponse = await configService.getToken()
225
- await ClientSignalRService.startConnection(createdSession.id, tokenResponse, handleReceiveMessage)
226
-
227
- setIsSignalRConnected(true)
251
+ const tokenResponse = await configService.getToken();
252
+ await ClientSignalRService.startConnection(createdSession.id, tokenResponse, handleReceiveMessage);
253
+ setIsSignalRConnected(true);
228
254
  }
229
255
 
230
256
  // Send the message
231
- const messageDto = { messageContent: message }
232
- const response = await apiRequest(`Client/ClientChatSession/${currentSessionId}/send-message`, 'POST', messageDto)
257
+ const messageDto = { messageContent: message };
258
+ const response = await apiRequest(
259
+ `Client/ClientChatSession/${currentSessionId}/send-message`,
260
+ 'POST',
261
+ messageDto
262
+ );
233
263
 
234
264
  if (!response.ok) {
235
- throw new Error('Failed to send message')
265
+ throw new Error('Failed to send message');
236
266
  }
237
267
 
238
268
  // Update the sent message as seen
239
- setMessages((prevMessages) => prevMessages.map((msg) => (msg.senderType === 1 && !msg.isSeen ? { ...msg, isSeen: true } : msg)))
269
+ setMessages((prevMessages) =>
270
+ prevMessages.map((msg) => (msg.senderType === 1 && !msg.isSeen ? { ...msg, isSeen: true } : msg))
271
+ );
240
272
  } catch (error) {
241
- console.error('Error in message handling:', error)
242
- setAssistantStatus('idle')
273
+ console.error('Error in message handling:', error);
274
+ setAssistantStatus('idle');
243
275
  setMessages((prevMessages) => [
244
276
  ...prevMessages,
245
277
  {
246
278
  id: Date.now(),
247
279
  senderType: 3, // System
248
- messageContent: 'Failed to send the message. Please try again.\n لم يتم إرسال الرسالة. يرجى المحاولة مرة أخرى.',
280
+ messageContent:
281
+ 'Failed to send the message. Please try again.\n لم يتم إرسال الرسالة. يرجى المحاولة مرة أخرى.',
249
282
  sentAt: new Date(),
250
- isSeen: true
251
- }
252
- ])
283
+ isSeen: true,
284
+ },
285
+ ]);
253
286
  }
254
287
  }
255
- }
288
+ };
289
+
290
+ // const startNewChatSession = async (option: Option) => {
291
+ // console.log('🚀 Starting new chat session with option:', option);
292
+
293
+ // if (isSignalRConnected || sessionId) {
294
+ // console.log('⚠️ Existing connection detected, ending current chat');
295
+ // handleEndChat();
296
+ // }
297
+ // try {
298
+ // setStatus('loading');
299
+ // setError('');
300
+ // setMessages([]);
301
+
302
+ // console.log('🔑 Getting token for authentication...');
303
+ // const tokenResponse = await configService.getToken();
304
+ // console.log('✅ Token obtained successfully');
305
+
306
+ // const chatSessionCreateDto = {
307
+ // helpScreenId: helpScreenId,
308
+ // optionId: option.id,
309
+ // ...(user && {
310
+ // user: {
311
+ // id: user.id,
312
+ // name: user.name,
313
+ // email: user.email,
314
+ // },
315
+ // }),
316
+ // };
317
+
318
+ // console.log('📡 Creating chat session with data:', chatSessionCreateDto);
319
+ // const response = await apiRequest('Client/ClientChatSession/create-session', 'POST', chatSessionCreateDto);
320
+
321
+ // if (!response.ok) {
322
+ // throw new Error('Failed to create chat session');
323
+ // }
324
+
325
+ // const createdSession = await response.json();
326
+ // console.log('✅ Chat session created:', createdSession);
327
+
328
+ // setSessionId(createdSession.id);
329
+
330
+ // if (option.assistant?.greeting) {
331
+ // console.log('💬 Adding custom greeting:', option.assistant.greeting);
332
+ // setMessages([
333
+ // {
334
+ // id: Date.now(),
335
+ // senderType: 3,
336
+ // messageContent: option.assistant.greeting,
337
+ // sentAt: new Date(),
338
+ // isSeen: true,
339
+ // },
340
+ // ]);
341
+ // } else {
342
+ // console.log('💬 Adding default greeting');
343
+ // setMessages([
344
+ // {
345
+ // id: Date.now(),
346
+ // senderType: 3,
347
+ // messageContent: 'Hello! How can I assist you today?\nمرحباً! كيف يمكنني مساعدتك اليوم؟',
348
+ // sentAt: new Date(),
349
+ // isSeen: true,
350
+ // },
351
+ // ]);
352
+ // }
353
+
354
+ // console.log('🔌 Starting SignalR connection...');
355
+ // await ClientSignalRService.startConnection(createdSession.id, tokenResponse, handleReceiveMessage);
356
+ // console.log('✅ SignalR connection established');
357
+
358
+ // // Verify the connection is actually active
359
+ // if (!ClientSignalRService.isConnectionActive()) {
360
+ // throw new Error('SignalR connection failed to establish properly');
361
+ // }
362
+
363
+ // setIsSignalRConnected(true);
364
+ // setIsChatClosed(false);
365
+ // setStatus('succeeded');
366
+
367
+ // console.log('🎉 Chat session fully initialized and ready');
368
+ // } catch (error) {
369
+ // console.error('❌ Chat start error:', error);
370
+ // setError(error instanceof Error ? error.message : 'Failed to start chat session');
371
+ // setStatus('failed');
372
+ // }
373
+ // };
374
+
375
+ // const handleSendMessage = async (message: string) => {
376
+ // console.log('📤 Sending message:', message);
377
+ // console.log('📊 Current state:', {
378
+ // sessionId,
379
+ // isSignalRConnected,
380
+ // messagesCount: messages.length,
381
+ // selectedOptionId: selectedOption?.id,
382
+ // });
383
+
384
+ // let currentSessionId = sessionId;
385
+
386
+ // if (message.trim() !== '') {
387
+ // try {
388
+ // setAssistantStatus('typing');
389
+ // console.log('⏳ Assistant status set to typing');
390
+
391
+ // const userMessage = {
392
+ // id: Date.now(),
393
+ // senderType: 1,
394
+ // messageContent: message,
395
+ // sentAt: new Date(),
396
+ // isSeen: false,
397
+ // };
398
+
399
+ // console.log('✅ Adding user message to UI:', userMessage);
400
+ // setMessages((prevMessages) => [...prevMessages, userMessage]);
401
+
402
+ // if (!currentSessionId) {
403
+ // console.log('🆕 No existing session, creating new one...');
404
+ // const chatSessionCreateDto = {
405
+ // helpScreenId: helpScreenId,
406
+ // optionId: selectedOption?.id,
407
+ // user: {
408
+ // id: user?.id,
409
+ // name: user?.name,
410
+ // email: user?.email,
411
+ // },
412
+ // };
413
+
414
+ // console.log('📡 Creating new session with data:', chatSessionCreateDto);
415
+ // const response = await apiRequest('Client/ClientChatSession/create-session', 'POST', chatSessionCreateDto);
416
+
417
+ // if (!response.ok) {
418
+ // throw new Error('Failed to create chat session');
419
+ // }
420
+
421
+ // const createdSession = await response.json();
422
+ // console.log('✅ New session created:', createdSession);
423
+ // setSessionId(createdSession.id);
424
+ // currentSessionId = createdSession.id;
425
+
426
+ // console.log('🔌 Starting SignalR connection for new session...');
427
+ // const tokenResponse = await configService.getToken();
428
+ // await ClientSignalRService.startConnection(createdSession.id, tokenResponse, handleReceiveMessage);
429
+ // setIsSignalRConnected(true);
430
+ // console.log('✅ SignalR connection established for new session');
431
+ // }
432
+
433
+ // const messageDto = { messageContent: message };
434
+ // console.log('📡 Sending message to API:', messageDto);
435
+ // console.log('🎯 Target endpoint:', `Client/ClientChatSession/${currentSessionId}/send-message`);
436
+
437
+ // const response = await apiRequest(
438
+ // `Client/ClientChatSession/${currentSessionId}/send-message`,
439
+ // 'POST',
440
+ // messageDto
441
+ // );
442
+
443
+ // if (!response.ok) {
444
+ // throw new Error('Failed to send message');
445
+ // }
446
+
447
+ // console.log('✅ Message sent successfully to server');
448
+ // console.log('⏳ Waiting for SignalR response...');
449
+
450
+ // setMessages((prevMessages) =>
451
+ // prevMessages.map((msg) => (msg.senderType === 1 && !msg.isSeen ? { ...msg, isSeen: true } : msg))
452
+ // );
453
+
454
+ // console.log('✅ User message marked as seen');
455
+ // } catch (error) {
456
+ // console.error('❌ Error in message handling:', error);
457
+ // setAssistantStatus('idle');
458
+ // const errorMessage = {
459
+ // id: Date.now(),
460
+ // senderType: 3,
461
+ // messageContent:
462
+ // 'Failed to send the message. Please try again.\n لم يتم إرسال الرسالة. يرجى المحاولة مرة أخرى.',
463
+ // sentAt: new Date(),
464
+ // isSeen: true,
465
+ // };
466
+
467
+ // console.log('📨 Adding error message:', errorMessage);
468
+ // setMessages((prevMessages) => [...prevMessages, errorMessage]);
469
+ // }
470
+ // }
471
+ // };
256
472
 
257
473
  useEffect(() => {
258
474
  if (isOpen && helpScreenId) {
259
- setStatus('loading')
475
+ console.log('📊 Loading help screen data for ID:', helpScreenId);
476
+ setStatus('loading');
260
477
 
261
478
  apiRequest(`client/clientHelpScreen/${helpScreenId}`)
262
479
  .then((res) => res.json())
263
480
  .then((data) => {
264
- setHelpScreenData(data)
265
- setStatus('succeeded')
266
- setError('')
481
+ console.log('✅ Help screen data loaded:', data);
482
+ setHelpScreenData(data);
483
+ setStatus('succeeded');
484
+ setError('');
267
485
  })
268
486
  .catch((err) => {
269
- setError(err.message)
270
- setStatus('failed')
271
- })
487
+ console.error('❌ Failed to load help screen data:', err);
488
+ setError(err.message);
489
+ setStatus('failed');
490
+ });
272
491
  }
273
- }, [isOpen, helpScreenId])
492
+ }, [isOpen, helpScreenId]);
493
+
494
+ useEffect(() => {
495
+ console.log('🔄 SignalR connection status', isSignalRConnected);
496
+ }, [isSignalRConnected]);
274
497
 
275
498
  return (
276
- <div className="babylai-help-center-container mb-4">
499
+ <div className='babylai-help-center-container mb-4'>
277
500
  {showArrowAnimation && !isOpen && (
278
501
  <FloatingMessage onClose={handleCloseArrowAnimation} message={messageLabel || t('homeSdk.needAssistance')} />
279
502
  )}
@@ -302,6 +525,9 @@ export function HelpCenter({
302
525
  showHelpScreen={showHelpScreen}
303
526
  />
304
527
  )}
528
+ {isOpen && !!isReviewDialogOpen && (
529
+ <ReviewDialog handleSubmit={handleSendChatReview} onClose={handleCloseChatReview} />
530
+ )}
305
531
  </div>
306
- )
532
+ );
307
533
  }