@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 +73 -6
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +73 -6
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/ui/help-center.tsx +17 -2
- package/src/ui/help-popup.tsx +44 -4
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
|
-
|
|
1189
|
-
|
|
1190
|
-
|
|
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
|
-
}, [
|
|
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 (!
|
|
1393
|
+
if (!reviewSessionId)
|
|
1334
1394
|
return;
|
|
1335
1395
|
const payload = { rating, comment };
|
|
1336
1396
|
try {
|
|
1337
|
-
const response = await apiRequest(`Client/ClientChatSession/${
|
|
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 }),
|