@aslaluroba/help-center-react 2.1.0 → 2.1.2

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.
package/dist/index.js CHANGED
@@ -854,6 +854,11 @@ const ChatWindow = React__default["default"].memo(({ onSendMessage, messages, as
854
854
  assistantStatus === 'error' ||
855
855
  inputMessage.trim() === '');
856
856
  }, [assistantStatus, inputMessage]);
857
+ React.useEffect(() => {
858
+ if (isSignalRConnected) {
859
+ console.log('🔄 SignalR connection status #chat-window', isSignalRConnected);
860
+ }
861
+ }, [isSignalRConnected]);
857
862
  return (React__default["default"].createElement(React__default["default"].Fragment, null,
858
863
  React__default["default"].createElement("div", { className: 'babylai-flex-1 babylai-overflow-y-auto babylai-p-4 babylai-h-full' },
859
864
  messagesList,
@@ -1185,11 +1190,50 @@ function HelpPopup({ onClose, helpScreen, status, error, onStartChat, onSendMess
1185
1190
  const handleEndAndStartNewChat = React.useCallback(async () => {
1186
1191
  if (tempSelectedOption) {
1187
1192
  setStartNewChatConfirmation(false);
1188
- setShowChat(true);
1189
- onEndChat(tempSelectedOption);
1190
- setTempSelectedOption(null);
1193
+ try {
1194
+ // First end the current chat and wait for it to complete
1195
+ await onEndChat();
1196
+ // Wait for sessionId to be cleared (indicating the session is fully closed)
1197
+ // We'll use a polling mechanism to wait for the state to update
1198
+ const maxAttempts = 50; // 5 seconds max wait time
1199
+ let attempts = 0;
1200
+ while (sessionId && attempts < maxAttempts) {
1201
+ await new Promise((resolve) => setTimeout(resolve, 100)); // Wait 100ms
1202
+ attempts++;
1203
+ }
1204
+ // Only start new chat after current session is fully closed
1205
+ if (!sessionId) {
1206
+ setShowChat(true);
1207
+ onStartChat(tempSelectedOption);
1208
+ setSelectedOption(tempSelectedOption);
1209
+ }
1210
+ else {
1211
+ console.warn('Session did not close properly, but proceeding with new chat');
1212
+ setShowChat(true);
1213
+ onStartChat(tempSelectedOption);
1214
+ setSelectedOption(tempSelectedOption);
1215
+ }
1216
+ }
1217
+ catch (error) {
1218
+ console.error('Error ending current chat:', error);
1219
+ // Even if ending fails, try to start new chat
1220
+ setShowChat(true);
1221
+ onStartChat(tempSelectedOption);
1222
+ setSelectedOption(tempSelectedOption);
1223
+ }
1224
+ finally {
1225
+ setTempSelectedOption(null);
1226
+ }
1191
1227
  }
1192
- }, [onEndChat, setTempSelectedOption, tempSelectedOption, setStartNewChatConfirmation]);
1228
+ }, [
1229
+ onEndChat,
1230
+ onStartChat,
1231
+ setSelectedOption,
1232
+ setTempSelectedOption,
1233
+ tempSelectedOption,
1234
+ setStartNewChatConfirmation,
1235
+ sessionId,
1236
+ ]);
1193
1237
  const handleEndChat = React.useCallback(() => {
1194
1238
  setEndChatConfirmation(false);
1195
1239
  onEndChat();
@@ -1248,6 +1292,11 @@ function HelpPopup({ onClose, helpScreen, status, error, onStartChat, onSendMess
1248
1292
  scrollToBottom();
1249
1293
  }
1250
1294
  }, [messages, scrollToBottom]);
1295
+ React.useEffect(() => {
1296
+ if (isSignalRConnected) {
1297
+ console.log('🔄 SignalR connection status #help-popup', isSignalRConnected);
1298
+ }
1299
+ }, [isSignalRConnected]);
1251
1300
  // EARLY RETURNS MUST COME AFTER ALL HOOKS
1252
1301
  // Early returns for performance - moved after all hooks
1253
1302
  if (status === 'loading' && !helpScreen) {
@@ -1278,6 +1327,7 @@ function HelpCenter({ helpScreenId, user, showArrow = true, language = 'en', mes
1278
1327
  const [error, setError] = React.useState('');
1279
1328
  const [selectedOption, setSelectedOption] = React.useState(null);
1280
1329
  const [sessionId, setSessionId] = React.useState(null);
1330
+ const [reviewSessionId, setReviewSessionId] = React.useState(null);
1281
1331
  const [isSignalRConnected, setIsSignalRConnected] = React.useState(false);
1282
1332
  const [isChatClosed, setIsChatClosed] = React.useState(false);
1283
1333
  const [messages, setMessages] = React.useState([]);
@@ -1318,6 +1368,12 @@ function HelpCenter({ helpScreenId, user, showArrow = true, language = 'en', mes
1318
1368
  const response = await apiRequest(`Client/ClientChatSession/${sessionId}/close`, 'POST');
1319
1369
  if (!response.ok)
1320
1370
  throw new Error('Failed to close chat session');
1371
+ // Store sessionId for review before clearing the main sessionId
1372
+ setReviewSessionId(sessionId);
1373
+ // Clear the sessionId after successfully closing the session
1374
+ setSessionId(null);
1375
+ setSelectedOption(null);
1376
+ setMessages([]);
1321
1377
  setIsReviewDialogOpen(true);
1322
1378
  if (option) {
1323
1379
  handleStartChat(option);
@@ -1327,17 +1383,22 @@ function HelpCenter({ helpScreenId, user, showArrow = true, language = 'en', mes
1327
1383
  console.error('Error ending chat:', error);
1328
1384
  setError('Failed to end chat session');
1329
1385
  setAssistantStatus('idle');
1386
+ // Even if there's an error, clear the session state to prevent stuck state
1387
+ setReviewSessionId(sessionId); // Store for review even if there's an error
1388
+ setSessionId(null);
1389
+ setSelectedOption(null);
1330
1390
  }
1331
1391
  };
1332
1392
  const handleSendChatReview = async ({ comment, rating }) => {
1333
- if (!sessionId)
1393
+ if (!reviewSessionId)
1334
1394
  return;
1335
1395
  const payload = { rating, comment };
1336
1396
  try {
1337
- const response = await apiRequest(`Client/ClientChatSession/${sessionId}/review`, 'POST', payload);
1397
+ const response = await apiRequest(`Client/ClientChatSession/${reviewSessionId}/review`, 'POST', payload);
1338
1398
  if (!response.ok)
1339
1399
  throw new Error('Failed to send chat review');
1340
1400
  setIsReviewDialogOpen(false);
1401
+ setReviewSessionId(null); // Clear review session ID after review is sent
1341
1402
  }
1342
1403
  catch (error) {
1343
1404
  console.error('Error sending chat review:', error);
@@ -1346,6 +1407,7 @@ function HelpCenter({ helpScreenId, user, showArrow = true, language = 'en', mes
1346
1407
  };
1347
1408
  const handleCloseChatReview = () => {
1348
1409
  setIsReviewDialogOpen(false);
1410
+ setReviewSessionId(null); // Clear review session ID when review is closed
1349
1411
  };
1350
1412
  const handleStartChat = async (option) => {
1351
1413
  await startNewChatSession(option);
@@ -1488,6 +1550,11 @@ function HelpCenter({ helpScreenId, user, showArrow = true, language = 'en', mes
1488
1550
  });
1489
1551
  }
1490
1552
  }, [isOpen, helpScreenId]);
1553
+ React.useEffect(() => {
1554
+ if (isSignalRConnected) {
1555
+ console.log('🔄 SignalR connection status #help-center', isSignalRConnected);
1556
+ }
1557
+ }, [isSignalRConnected]);
1491
1558
  return (React__default["default"].createElement("div", { className: 'babylai-help-center-container mb-4' },
1492
1559
  showArrowAnimation && !isOpen && (React__default["default"].createElement(FloatingMessage, { onClose: handleCloseArrowAnimation, message: messageLabel || t('homeSdk.needAssistance') })),
1493
1560
  React__default["default"].createElement(HelpButton, { onClick: handleTogglePopup }),