@aslaluroba/help-center-react 2.0.4 → 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 (38) 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 -44
  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 +366 -136
  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
@@ -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,93 +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);
75
89
 
76
- // Reset assistant status after receiving message
77
- setAssistantStatus('idle')
78
- }
90
+ return updatedMessages;
91
+ });
79
92
 
80
- const handleEndChat = async () => {
81
- if (!sessionId || !selectedOption) return
93
+ setAssistantStatus('idle');
94
+ console.log('🔄 Assistant status set to idle');
95
+ };
96
+
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;
93
119
 
94
- setSessionId(null)
95
- setIsChatClosed(true)
120
+ const payload = { rating, comment };
96
121
 
97
- // Clear messages after a delay
98
- setTimeout(() => {
99
- setMessages([])
100
- setSelectedOption(null)
101
- }, 3000)
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');
125
+
126
+ setIsReviewDialogOpen(false);
102
127
  } catch (error) {
103
- console.error('Error ending chat:', error)
104
- setError('Failed to end chat session')
128
+ console.error('Error sending chat review:', error);
129
+ setError('Failed to send chat review');
105
130
  }
106
- }
131
+ };
132
+
133
+ const handleCloseChatReview = () => {
134
+ setIsReviewDialogOpen(false);
135
+ };
107
136
 
108
137
  const handleStartChat = async (option: Option) => {
109
- await startNewChatSession(option)
110
- }
138
+ await startNewChatSession(option);
139
+ };
111
140
 
112
141
  const startNewChatSession = async (option: Option) => {
113
142
  try {
114
- setStatus('loading')
115
- setError('')
116
- setMessages([])
143
+ setStatus('loading');
144
+ setError('');
145
+ setMessages([]);
117
146
 
118
- const tokenResponse = await configService.getToken()
147
+ const tokenResponse = await configService.getToken();
119
148
  const chatSessionCreateDto = {
120
149
  helpScreenId: helpScreenId,
121
150
  optionId: option.id,
@@ -123,20 +152,21 @@ export function HelpCenter({
123
152
  user: {
124
153
  id: user.id,
125
154
  name: user.name,
126
- email: user.email
127
- }
128
- })
129
- }
155
+ email: user.email,
156
+ },
157
+ }),
158
+ };
130
159
 
131
- const response = await apiRequest('Client/ClientChatSession/create-session', 'POST', chatSessionCreateDto)
160
+ const response = await apiRequest('Client/ClientChatSession/create-session', 'POST', chatSessionCreateDto);
132
161
 
133
162
  if (!response.ok) {
134
- throw new Error('Failed to create chat session')
163
+ throw new Error('Failed to create chat session');
135
164
  }
136
165
 
137
- const createdSession = await response.json()
166
+ const createdSession = await response.json();
167
+ console.log('Created session:', createdSession);
138
168
 
139
- setSessionId(createdSession.id)
169
+ setSessionId(createdSession.id);
140
170
 
141
171
  // Add greeting message if available
142
172
  if (option.assistant?.greeting) {
@@ -146,9 +176,9 @@ export function HelpCenter({
146
176
  senderType: 3, // AI
147
177
  messageContent: option.assistant.greeting,
148
178
  sentAt: new Date(),
149
- isSeen: true
150
- }
151
- ])
179
+ isSeen: true,
180
+ },
181
+ ]);
152
182
  } else {
153
183
  // Default greeting if none provided
154
184
  setMessages([
@@ -157,31 +187,31 @@ export function HelpCenter({
157
187
  senderType: 3,
158
188
  messageContent: 'Hello! How can I assist you today?\nمرحباً! كيف يمكنني مساعدتك اليوم؟',
159
189
  sentAt: new Date(),
160
- isSeen: true
161
- }
162
- ])
190
+ isSeen: true,
191
+ },
192
+ ]);
163
193
  }
164
194
 
165
195
  // Connect to SignalR
166
- await ClientSignalRService.startConnection(createdSession.id, tokenResponse, handleReceiveMessage)
196
+ await ClientSignalRService.startConnection(createdSession.id, tokenResponse, handleReceiveMessage);
167
197
 
168
- setIsSignalRConnected(true)
169
- setIsChatClosed(false)
170
- setStatus('succeeded')
198
+ setIsSignalRConnected(true);
199
+ setIsChatClosed(false);
200
+ setStatus('succeeded');
171
201
  } catch (error) {
172
- console.error('Chat start error:', error)
173
- setError(error instanceof Error ? error.message : 'Failed to start chat session')
174
- setStatus('failed')
202
+ console.error('Chat start error:', error);
203
+ setError(error instanceof Error ? error.message : 'Failed to start chat session');
204
+ setStatus('failed');
175
205
  }
176
- }
206
+ };
177
207
 
178
208
  const handleSendMessage = async (message: string) => {
179
- let currentSessionId = sessionId
209
+ let currentSessionId = sessionId;
180
210
 
181
211
  if (message.trim() !== '') {
182
212
  try {
183
213
  // Set loading state
184
- setAssistantStatus('typing')
214
+ setAssistantStatus('typing');
185
215
 
186
216
  // Add user message to the chat immediately
187
217
  setMessages((prevMessages) => [
@@ -191,9 +221,9 @@ export function HelpCenter({
191
221
  senderType: 1, // Customer
192
222
  messageContent: message,
193
223
  sentAt: new Date(),
194
- isSeen: false
195
- }
196
- ])
224
+ isSeen: false,
225
+ },
226
+ ]);
197
227
 
198
228
  // Create a new chat session if not started yet
199
229
  if (!currentSessionId) {
@@ -203,73 +233,270 @@ export function HelpCenter({
203
233
  user: {
204
234
  id: user?.id,
205
235
  name: user?.name,
206
- email: user?.email
207
- }
208
- }
236
+ email: user?.email,
237
+ },
238
+ };
209
239
 
210
- const response = await apiRequest('Client/ClientChatSession/create-session', 'POST', chatSessionCreateDto)
240
+ const response = await apiRequest('Client/ClientChatSession/create-session', 'POST', chatSessionCreateDto);
211
241
 
212
242
  if (!response.ok) {
213
- throw new Error('Failed to create chat session')
243
+ throw new Error('Failed to create chat session');
214
244
  }
215
245
 
216
- const createdSession = await response.json()
217
- setSessionId(createdSession.id)
218
- currentSessionId = createdSession.id
246
+ const createdSession = await response.json();
247
+ setSessionId(createdSession.id);
248
+ currentSessionId = createdSession.id;
219
249
 
220
250
  // Connect to SignalR with the new session
221
- const tokenResponse = await configService.getToken()
222
- await ClientSignalRService.startConnection(createdSession.id, tokenResponse, handleReceiveMessage)
223
- setIsSignalRConnected(true)
251
+ const tokenResponse = await configService.getToken();
252
+ await ClientSignalRService.startConnection(createdSession.id, tokenResponse, handleReceiveMessage);
253
+ setIsSignalRConnected(true);
224
254
  }
225
255
 
226
256
  // Send the message
227
- const messageDto = { messageContent: message }
228
- 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
+ );
229
263
 
230
264
  if (!response.ok) {
231
- throw new Error('Failed to send message')
265
+ throw new Error('Failed to send message');
232
266
  }
233
267
 
234
268
  // Update the sent message as seen
235
- 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
+ );
236
272
  } catch (error) {
237
- console.error('Error in message handling:', error)
238
- setAssistantStatus('idle')
273
+ console.error('Error in message handling:', error);
274
+ setAssistantStatus('idle');
239
275
  setMessages((prevMessages) => [
240
276
  ...prevMessages,
241
277
  {
242
278
  id: Date.now(),
243
279
  senderType: 3, // System
244
- messageContent: 'Failed to send the message. Please try again.\n لم يتم إرسال الرسالة. يرجى المحاولة مرة أخرى.',
280
+ messageContent:
281
+ 'Failed to send the message. Please try again.\n لم يتم إرسال الرسالة. يرجى المحاولة مرة أخرى.',
245
282
  sentAt: new Date(),
246
- isSeen: true
247
- }
248
- ])
283
+ isSeen: true,
284
+ },
285
+ ]);
249
286
  }
250
287
  }
251
- }
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
+ // };
252
472
 
253
473
  useEffect(() => {
254
474
  if (isOpen && helpScreenId) {
255
- setStatus('loading')
475
+ console.log('📊 Loading help screen data for ID:', helpScreenId);
476
+ setStatus('loading');
256
477
 
257
478
  apiRequest(`client/clientHelpScreen/${helpScreenId}`)
258
479
  .then((res) => res.json())
259
480
  .then((data) => {
260
- setHelpScreenData(data)
261
- setStatus('succeeded')
262
- setError('')
481
+ console.log('✅ Help screen data loaded:', data);
482
+ setHelpScreenData(data);
483
+ setStatus('succeeded');
484
+ setError('');
263
485
  })
264
486
  .catch((err) => {
265
- setError(err.message)
266
- setStatus('failed')
267
- })
487
+ console.error('❌ Failed to load help screen data:', err);
488
+ setError(err.message);
489
+ setStatus('failed');
490
+ });
268
491
  }
269
- }, [isOpen, helpScreenId])
492
+ }, [isOpen, helpScreenId]);
493
+
494
+ useEffect(() => {
495
+ console.log('🔄 SignalR connection status', isSignalRConnected);
496
+ }, [isSignalRConnected]);
270
497
 
271
498
  return (
272
- <div className="babylai-help-center-container mb-4">
499
+ <div className='babylai-help-center-container mb-4'>
273
500
  {showArrowAnimation && !isOpen && (
274
501
  <FloatingMessage onClose={handleCloseArrowAnimation} message={messageLabel || t('homeSdk.needAssistance')} />
275
502
  )}
@@ -298,6 +525,9 @@ export function HelpCenter({
298
525
  showHelpScreen={showHelpScreen}
299
526
  />
300
527
  )}
528
+ {isOpen && !!isReviewDialogOpen && (
529
+ <ReviewDialog handleSubmit={handleSendChatReview} onClose={handleCloseChatReview} />
530
+ )}
301
531
  </div>
302
- )
532
+ );
303
533
  }