@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.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 +13 -10
- package/src/ui/help-center.tsx +17 -2
- package/src/ui/help-popup.tsx +44 -4
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
|
-
|
|
1159
|
-
|
|
1160
|
-
|
|
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
|
-
}, [
|
|
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 (!
|
|
1363
|
+
if (!reviewSessionId)
|
|
1304
1364
|
return;
|
|
1305
1365
|
const payload = { rating, comment };
|
|
1306
1366
|
try {
|
|
1307
|
-
const response = await apiRequest(`Client/ClientChatSession/${
|
|
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 }),
|