@aslaluroba/help-center-react 2.1.1 → 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.esm.js CHANGED
@@ -824,6 +824,11 @@ const ChatWindow = React__default.memo(({ onSendMessage, messages, assistantStat
824
824
  assistantStatus === 'error' ||
825
825
  inputMessage.trim() === '');
826
826
  }, [assistantStatus, inputMessage]);
827
+ useEffect(() => {
828
+ if (isSignalRConnected) {
829
+ console.log('🔄 SignalR connection status #chat-window', isSignalRConnected);
830
+ }
831
+ }, [isSignalRConnected]);
827
832
  return (React__default.createElement(React__default.Fragment, null,
828
833
  React__default.createElement("div", { className: 'babylai-flex-1 babylai-overflow-y-auto babylai-p-4 babylai-h-full' },
829
834
  messagesList,
@@ -1155,11 +1160,50 @@ function HelpPopup({ onClose, helpScreen, status, error, onStartChat, onSendMess
1155
1160
  const handleEndAndStartNewChat = useCallback(async () => {
1156
1161
  if (tempSelectedOption) {
1157
1162
  setStartNewChatConfirmation(false);
1158
- setShowChat(true);
1159
- onEndChat(tempSelectedOption);
1160
- setTempSelectedOption(null);
1163
+ try {
1164
+ // First end the current chat and wait for it to complete
1165
+ await onEndChat();
1166
+ // Wait for sessionId to be cleared (indicating the session is fully closed)
1167
+ // We'll use a polling mechanism to wait for the state to update
1168
+ const maxAttempts = 50; // 5 seconds max wait time
1169
+ let attempts = 0;
1170
+ while (sessionId && attempts < maxAttempts) {
1171
+ await new Promise((resolve) => setTimeout(resolve, 100)); // Wait 100ms
1172
+ attempts++;
1173
+ }
1174
+ // Only start new chat after current session is fully closed
1175
+ if (!sessionId) {
1176
+ setShowChat(true);
1177
+ onStartChat(tempSelectedOption);
1178
+ setSelectedOption(tempSelectedOption);
1179
+ }
1180
+ else {
1181
+ console.warn('Session did not close properly, but proceeding with new chat');
1182
+ setShowChat(true);
1183
+ onStartChat(tempSelectedOption);
1184
+ setSelectedOption(tempSelectedOption);
1185
+ }
1186
+ }
1187
+ catch (error) {
1188
+ console.error('Error ending current chat:', error);
1189
+ // Even if ending fails, try to start new chat
1190
+ setShowChat(true);
1191
+ onStartChat(tempSelectedOption);
1192
+ setSelectedOption(tempSelectedOption);
1193
+ }
1194
+ finally {
1195
+ setTempSelectedOption(null);
1196
+ }
1161
1197
  }
1162
- }, [onEndChat, setTempSelectedOption, tempSelectedOption, setStartNewChatConfirmation]);
1198
+ }, [
1199
+ onEndChat,
1200
+ onStartChat,
1201
+ setSelectedOption,
1202
+ setTempSelectedOption,
1203
+ tempSelectedOption,
1204
+ setStartNewChatConfirmation,
1205
+ sessionId,
1206
+ ]);
1163
1207
  const handleEndChat = useCallback(() => {
1164
1208
  setEndChatConfirmation(false);
1165
1209
  onEndChat();
@@ -1218,6 +1262,11 @@ function HelpPopup({ onClose, helpScreen, status, error, onStartChat, onSendMess
1218
1262
  scrollToBottom();
1219
1263
  }
1220
1264
  }, [messages, scrollToBottom]);
1265
+ useEffect(() => {
1266
+ if (isSignalRConnected) {
1267
+ console.log('🔄 SignalR connection status #help-popup', isSignalRConnected);
1268
+ }
1269
+ }, [isSignalRConnected]);
1221
1270
  // EARLY RETURNS MUST COME AFTER ALL HOOKS
1222
1271
  // Early returns for performance - moved after all hooks
1223
1272
  if (status === 'loading' && !helpScreen) {
@@ -1248,6 +1297,7 @@ function HelpCenter({ helpScreenId, user, showArrow = true, language = 'en', mes
1248
1297
  const [error, setError] = useState('');
1249
1298
  const [selectedOption, setSelectedOption] = useState(null);
1250
1299
  const [sessionId, setSessionId] = useState(null);
1300
+ const [reviewSessionId, setReviewSessionId] = useState(null);
1251
1301
  const [isSignalRConnected, setIsSignalRConnected] = useState(false);
1252
1302
  const [isChatClosed, setIsChatClosed] = useState(false);
1253
1303
  const [messages, setMessages] = useState([]);
@@ -1288,6 +1338,12 @@ function HelpCenter({ helpScreenId, user, showArrow = true, language = 'en', mes
1288
1338
  const response = await apiRequest(`Client/ClientChatSession/${sessionId}/close`, 'POST');
1289
1339
  if (!response.ok)
1290
1340
  throw new Error('Failed to close chat session');
1341
+ // Store sessionId for review before clearing the main sessionId
1342
+ setReviewSessionId(sessionId);
1343
+ // Clear the sessionId after successfully closing the session
1344
+ setSessionId(null);
1345
+ setSelectedOption(null);
1346
+ setMessages([]);
1291
1347
  setIsReviewDialogOpen(true);
1292
1348
  if (option) {
1293
1349
  handleStartChat(option);
@@ -1297,17 +1353,22 @@ function HelpCenter({ helpScreenId, user, showArrow = true, language = 'en', mes
1297
1353
  console.error('Error ending chat:', error);
1298
1354
  setError('Failed to end chat session');
1299
1355
  setAssistantStatus('idle');
1356
+ // Even if there's an error, clear the session state to prevent stuck state
1357
+ setReviewSessionId(sessionId); // Store for review even if there's an error
1358
+ setSessionId(null);
1359
+ setSelectedOption(null);
1300
1360
  }
1301
1361
  };
1302
1362
  const handleSendChatReview = async ({ comment, rating }) => {
1303
- if (!sessionId)
1363
+ if (!reviewSessionId)
1304
1364
  return;
1305
1365
  const payload = { rating, comment };
1306
1366
  try {
1307
- const response = await apiRequest(`Client/ClientChatSession/${sessionId}/review`, 'POST', payload);
1367
+ const response = await apiRequest(`Client/ClientChatSession/${reviewSessionId}/review`, 'POST', payload);
1308
1368
  if (!response.ok)
1309
1369
  throw new Error('Failed to send chat review');
1310
1370
  setIsReviewDialogOpen(false);
1371
+ setReviewSessionId(null); // Clear review session ID after review is sent
1311
1372
  }
1312
1373
  catch (error) {
1313
1374
  console.error('Error sending chat review:', error);
@@ -1316,6 +1377,7 @@ function HelpCenter({ helpScreenId, user, showArrow = true, language = 'en', mes
1316
1377
  };
1317
1378
  const handleCloseChatReview = () => {
1318
1379
  setIsReviewDialogOpen(false);
1380
+ setReviewSessionId(null); // Clear review session ID when review is closed
1319
1381
  };
1320
1382
  const handleStartChat = async (option) => {
1321
1383
  await startNewChatSession(option);
@@ -1458,6 +1520,11 @@ function HelpCenter({ helpScreenId, user, showArrow = true, language = 'en', mes
1458
1520
  });
1459
1521
  }
1460
1522
  }, [isOpen, helpScreenId]);
1523
+ useEffect(() => {
1524
+ if (isSignalRConnected) {
1525
+ console.log('🔄 SignalR connection status #help-center', isSignalRConnected);
1526
+ }
1527
+ }, [isSignalRConnected]);
1461
1528
  return (React__default.createElement("div", { className: 'babylai-help-center-container mb-4' },
1462
1529
  showArrowAnimation && !isOpen && (React__default.createElement(FloatingMessage, { onClose: handleCloseArrowAnimation, message: messageLabel || t('homeSdk.needAssistance') })),
1463
1530
  React__default.createElement(HelpButton, { onClick: handleTogglePopup }),