@aslaluroba/help-center-react 2.0.5 → 2.0.7
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 +41 -219
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +41 -219
- package/dist/index.js.map +1 -1
- package/dist/ui/chatbot-popup/chat-window-screen/footer.d.ts +1 -0
- package/dist/ui/chatbot-popup/chat-window-screen/index.d.ts +2 -1
- package/dist/ui/help-popup.d.ts +1 -1
- package/package.json +1 -1
- package/src/lib/config.ts +0 -6
- package/src/ui/chatbot-popup/chat-window-screen/footer.tsx +21 -20
- package/src/ui/chatbot-popup/chat-window-screen/index.tsx +100 -96
- package/src/ui/help-center.tsx +38 -238
- package/src/ui/help-popup.tsx +3 -1
package/dist/index.esm.js
CHANGED
|
@@ -265,7 +265,6 @@ class ConfigService {
|
|
|
265
265
|
return ConfigService.instance;
|
|
266
266
|
}
|
|
267
267
|
initialize(config) {
|
|
268
|
-
console.log('🔧 Initializing config with:', config);
|
|
269
268
|
this.config = {
|
|
270
269
|
baseUrl: config.baseUrl || 'https://babylai.net/api',
|
|
271
270
|
hubUrl: config.hubUrl || config.baseUrl || 'https://babylai.net/api',
|
|
@@ -273,16 +272,13 @@ class ConfigService {
|
|
|
273
272
|
apiKey: config.apiKey,
|
|
274
273
|
getToken: config.getToken,
|
|
275
274
|
};
|
|
276
|
-
console.log('📋 Final config:', this.config);
|
|
277
275
|
// Initialize API with the getToken function directly
|
|
278
276
|
if (!this.config.getToken) {
|
|
279
277
|
throw new Error('getToken function is required in configuration');
|
|
280
278
|
}
|
|
281
|
-
console.log('🌐 Initializing API with baseUrl:', this.config.baseUrl);
|
|
282
279
|
initializeAPI(this.config.baseUrl || 'https://babylai.net/api', this.config.getToken);
|
|
283
280
|
// Initialize SignalR
|
|
284
281
|
const hubUrl = this.config.hubUrl || this.config.baseUrl || 'https://babylai.net/api';
|
|
285
|
-
console.log('🔌 Initializing SignalR with hubUrl:', hubUrl);
|
|
286
282
|
ClientSignalRService.initialize(hubUrl);
|
|
287
283
|
}
|
|
288
284
|
getConfig() {
|
|
@@ -710,9 +706,9 @@ var SvgEnvelope = function SvgEnvelope(props) {
|
|
|
710
706
|
|
|
711
707
|
const ChatWindowFooter = (props) => {
|
|
712
708
|
const { t, dir } = useLocalTranslation();
|
|
713
|
-
return (React__default.createElement("footer", { className:
|
|
714
|
-
React__default.createElement("input", { type:
|
|
715
|
-
React__default.createElement(Button, { variant:
|
|
709
|
+
return (React__default.createElement("footer", { className: 'babylai-flex babylai-items-center babylai-gap-2 babylai-relative babylai-rounded-full babylai-bg-white babylai-m-4 md:babylai-m-6 md:babylai-py-3 md:babylai-px-4' },
|
|
710
|
+
React__default.createElement("input", { type: 'text', value: props.inputMessage, onChange: (e) => props.setInputMessage(e.target.value), onKeyDown: props.handleKeyDown, placeholder: t('homeSdk.placeholder'), className: 'babylai-flex-1 babylai-py-2 babylai-px-4 babylai-bg-transparent babylai-outline-none babylai-text-sm' }),
|
|
711
|
+
React__default.createElement(Button, { variant: 'default', size: 'icon', onClick: props.handleSendMessage, disabled: (props === null || props === void 0 ? void 0 : props.isLoading) || !props.isSignalRConnected, className: 'babylai-rounded-full babylai-bg-purple-500 babylai-hover:babylai-bg-purple-600 babylai-w-8 babylai-h-8 babylai-disabled:babylai-opacity-50' },
|
|
716
712
|
React__default.createElement(SvgEnvelope, { className: `babylai-w-4 babylai-h-4 ${dir === 'rtl' ? 'babylai-rotate-270' : ''}` }))));
|
|
717
713
|
};
|
|
718
714
|
|
|
@@ -765,7 +761,7 @@ const TypingIndicator = React__default.memo(({ firstHumanAgentIndex }) => {
|
|
|
765
761
|
React__default.createElement("p", { className: 'babylai-text-sm babylai-opacity-70' }, "..."))));
|
|
766
762
|
});
|
|
767
763
|
TypingIndicator.displayName = 'TypingIndicator';
|
|
768
|
-
const ChatWindow = React__default.memo(({ onSendMessage, messages, assistantStatus = 'loading' }) => {
|
|
764
|
+
const ChatWindow = React__default.memo(({ onSendMessage, messages, assistantStatus = 'loading', isSignalRConnected }) => {
|
|
769
765
|
const [inputMessage, setInputMessage] = useState('');
|
|
770
766
|
const messagesEndRef = useRef(null);
|
|
771
767
|
const scrollTimeoutRef = useRef(null);
|
|
@@ -805,14 +801,14 @@ const ChatWindow = React__default.memo(({ onSendMessage, messages, assistantStat
|
|
|
805
801
|
}
|
|
806
802
|
}, [inputMessage, onSendMessage]);
|
|
807
803
|
const handleKeyDown = useCallback((e) => {
|
|
808
|
-
if (e.key === 'Enter' && !e.shiftKey) {
|
|
804
|
+
if (e.key === 'Enter' && !e.shiftKey && isSignalRConnected) {
|
|
809
805
|
e.preventDefault();
|
|
810
806
|
if (inputMessage.trim() && assistantStatus !== 'typing') {
|
|
811
807
|
onSendMessage(inputMessage);
|
|
812
808
|
setInputMessage('');
|
|
813
809
|
}
|
|
814
810
|
}
|
|
815
|
-
}, [inputMessage, onSendMessage, assistantStatus]);
|
|
811
|
+
}, [inputMessage, onSendMessage, assistantStatus, isSignalRConnected]);
|
|
816
812
|
// Memoize the first human agent index calculation
|
|
817
813
|
const firstHumanAgentIndex = useMemo(() => {
|
|
818
814
|
return messages.findIndex((message) => message.senderType === 2);
|
|
@@ -833,7 +829,7 @@ const ChatWindow = React__default.memo(({ onSendMessage, messages, assistantStat
|
|
|
833
829
|
messagesList,
|
|
834
830
|
assistantStatus === 'typing' && React__default.createElement(TypingIndicator, { firstHumanAgentIndex: firstHumanAgentIndex }),
|
|
835
831
|
React__default.createElement("div", { ref: messagesEndRef })),
|
|
836
|
-
React__default.createElement(ChatWindowFooter, { inputMessage: inputMessage, handleKeyDown: handleKeyDown, handleSendMessage: handleSendMessage, setInputMessage: setInputMessage, isLoading: isLoading })));
|
|
832
|
+
React__default.createElement(ChatWindowFooter, { inputMessage: inputMessage, handleKeyDown: handleKeyDown, handleSendMessage: handleSendMessage, setInputMessage: setInputMessage, isLoading: isLoading, isSignalRConnected: isSignalRConnected })));
|
|
837
833
|
});
|
|
838
834
|
ChatWindow.displayName = 'ChatWindow';
|
|
839
835
|
|
|
@@ -1096,7 +1092,7 @@ const ConfirmationModal = ({ title, message, onCancel, onConfirm, }) => {
|
|
|
1096
1092
|
React__default.createElement(Button, { variant: 'default', size: 'sm', onClick: onConfirm, className: 'babylai-text-sm babylai-w-full !babylai-font-bold' }, t('homeSdk.ConfirmationModal.confirmation_button')),
|
|
1097
1093
|
React__default.createElement(Button, { variant: 'outline', size: 'sm', onClick: onCancel, className: 'babylai-text-sm babylai-w-full babylai-text-primary-500 !babylai-font-bold' }, t('homeSdk.ConfirmationModal.cancel_button'))))));
|
|
1098
1094
|
};
|
|
1099
|
-
function HelpPopup({ onClose, helpScreen, status, error, onStartChat, onSendMessage, onEndChat, messages, assistantStatus, needsAgent, sessionId, selectedOption, setSelectedOption, showHelpScreen, }) {
|
|
1095
|
+
function HelpPopup({ onClose, helpScreen, status, error, onStartChat, onSendMessage, onEndChat, messages, assistantStatus, needsAgent, sessionId, selectedOption, setSelectedOption, showHelpScreen, isSignalRConnected, }) {
|
|
1100
1096
|
// ALL HOOKS MUST BE CALLED FIRST - BEFORE ANY EARLY RETURNS
|
|
1101
1097
|
const [showChat, setShowChat] = useState(false);
|
|
1102
1098
|
const [isShowList, setIsShowList] = useState(!showHelpScreen || false);
|
|
@@ -1149,7 +1145,7 @@ function HelpPopup({ onClose, helpScreen, status, error, onStartChat, onSendMess
|
|
|
1149
1145
|
}
|
|
1150
1146
|
}, [onStartChat, setSelectedOption, sessionId, setStartNewChatConfirmation, setTempSelectedOption]);
|
|
1151
1147
|
const handleSendMessage = useCallback((message) => {
|
|
1152
|
-
if (message.trim()) {
|
|
1148
|
+
if (message.trim() && isSignalRConnected) {
|
|
1153
1149
|
onSendMessage(message.trim());
|
|
1154
1150
|
}
|
|
1155
1151
|
}, [onSendMessage]);
|
|
@@ -1178,7 +1174,7 @@ function HelpPopup({ onClose, helpScreen, status, error, onStartChat, onSendMess
|
|
|
1178
1174
|
if (showChat && selectedOption) {
|
|
1179
1175
|
return (React__default.createElement(React__default.Fragment, null,
|
|
1180
1176
|
React__default.createElement(ChatWindowHeader, { handleBack: handleBack, handleEndChat: showEndChatConfirmation, onClose: onClose, isShowList: isShowList, showChat: showChat, setIsShowList: setIsShowList }),
|
|
1181
|
-
React__default.createElement(ChatWindow, { onSendMessage: handleSendMessage, messages: memoizedMessages, assistantStatus: assistantStatus, needsAgent: needsAgent })));
|
|
1177
|
+
React__default.createElement(ChatWindow, { onSendMessage: handleSendMessage, messages: memoizedMessages, assistantStatus: assistantStatus, needsAgent: needsAgent, isSignalRConnected: isSignalRConnected })));
|
|
1182
1178
|
}
|
|
1183
1179
|
if (isShowList) {
|
|
1184
1180
|
return (React__default.createElement(OptionsListScreen, { helpScreen: helpScreen, expandedOption: expandedOption, setExpandedOption: setExpandedOption, handleStartChat: handleStartChat, handleBack: showHelpScreen ? handleBack : onClose, showHelpScreen: showHelpScreen }));
|
|
@@ -1266,17 +1262,7 @@ function HelpCenter({ helpScreenId, user, showArrow = true, language = 'en', mes
|
|
|
1266
1262
|
setShowArrowAnimation(false);
|
|
1267
1263
|
};
|
|
1268
1264
|
const handleReceiveMessage = (message, senderType, needsAgent) => {
|
|
1269
|
-
console.log('🎯 Help Center received message:', {
|
|
1270
|
-
message,
|
|
1271
|
-
senderType,
|
|
1272
|
-
needsAgent,
|
|
1273
|
-
timestamp: new Date().toISOString(),
|
|
1274
|
-
currentSessionId: sessionId,
|
|
1275
|
-
isSignalRConnected,
|
|
1276
|
-
messagesCount: messages.length,
|
|
1277
|
-
});
|
|
1278
1265
|
if (needsAgent) {
|
|
1279
|
-
console.log('🚨 Agent needed for this message');
|
|
1280
1266
|
setNeedsAgent(true);
|
|
1281
1267
|
}
|
|
1282
1268
|
setMessages((prevMessages) => {
|
|
@@ -1287,13 +1273,10 @@ function HelpCenter({ helpScreenId, user, showArrow = true, language = 'en', mes
|
|
|
1287
1273
|
sentAt: new Date(),
|
|
1288
1274
|
isSeen: true,
|
|
1289
1275
|
};
|
|
1290
|
-
console.log('✅ Adding message to state:', newMessage);
|
|
1291
1276
|
const updatedMessages = [...prevMessages, newMessage];
|
|
1292
|
-
console.log('📊 Total messages after update:', updatedMessages.length);
|
|
1293
1277
|
return updatedMessages;
|
|
1294
1278
|
});
|
|
1295
1279
|
setAssistantStatus('idle');
|
|
1296
|
-
console.log('🔄 Assistant status set to idle');
|
|
1297
1280
|
};
|
|
1298
1281
|
const handleEndChat = async (option) => {
|
|
1299
1282
|
if (!sessionId || !selectedOption)
|
|
@@ -1301,6 +1284,7 @@ function HelpCenter({ helpScreenId, user, showArrow = true, language = 'en', mes
|
|
|
1301
1284
|
try {
|
|
1302
1285
|
await ClientSignalRService.stopConnection();
|
|
1303
1286
|
setIsSignalRConnected(false);
|
|
1287
|
+
setAssistantStatus('idle');
|
|
1304
1288
|
const response = await apiRequest(`Client/ClientChatSession/${sessionId}/close`, 'POST');
|
|
1305
1289
|
if (!response.ok)
|
|
1306
1290
|
throw new Error('Failed to close chat session');
|
|
@@ -1312,6 +1296,7 @@ function HelpCenter({ helpScreenId, user, showArrow = true, language = 'en', mes
|
|
|
1312
1296
|
catch (error) {
|
|
1313
1297
|
console.error('Error ending chat:', error);
|
|
1314
1298
|
setError('Failed to end chat session');
|
|
1299
|
+
setAssistantStatus('idle');
|
|
1315
1300
|
}
|
|
1316
1301
|
};
|
|
1317
1302
|
const handleSendChatReview = async ({ comment, rating }) => {
|
|
@@ -1337,6 +1322,9 @@ function HelpCenter({ helpScreenId, user, showArrow = true, language = 'en', mes
|
|
|
1337
1322
|
};
|
|
1338
1323
|
const startNewChatSession = async (option) => {
|
|
1339
1324
|
var _a;
|
|
1325
|
+
if (isSignalRConnected || sessionId) {
|
|
1326
|
+
handleEndChat();
|
|
1327
|
+
}
|
|
1340
1328
|
try {
|
|
1341
1329
|
setStatus('loading');
|
|
1342
1330
|
setError('');
|
|
@@ -1358,14 +1346,12 @@ function HelpCenter({ helpScreenId, user, showArrow = true, language = 'en', mes
|
|
|
1358
1346
|
throw new Error('Failed to create chat session');
|
|
1359
1347
|
}
|
|
1360
1348
|
const createdSession = await response.json();
|
|
1361
|
-
console.log('Created session:', createdSession);
|
|
1362
1349
|
setSessionId(createdSession.id);
|
|
1363
|
-
// Add greeting message if available
|
|
1364
1350
|
if ((_a = option.assistant) === null || _a === void 0 ? void 0 : _a.greeting) {
|
|
1365
1351
|
setMessages([
|
|
1366
1352
|
{
|
|
1367
1353
|
id: Date.now(),
|
|
1368
|
-
senderType: 3,
|
|
1354
|
+
senderType: 3,
|
|
1369
1355
|
messageContent: option.assistant.greeting,
|
|
1370
1356
|
sentAt: new Date(),
|
|
1371
1357
|
isSeen: true,
|
|
@@ -1373,7 +1359,6 @@ function HelpCenter({ helpScreenId, user, showArrow = true, language = 'en', mes
|
|
|
1373
1359
|
]);
|
|
1374
1360
|
}
|
|
1375
1361
|
else {
|
|
1376
|
-
// Default greeting if none provided
|
|
1377
1362
|
setMessages([
|
|
1378
1363
|
{
|
|
1379
1364
|
id: Date.now(),
|
|
@@ -1384,36 +1369,38 @@ function HelpCenter({ helpScreenId, user, showArrow = true, language = 'en', mes
|
|
|
1384
1369
|
},
|
|
1385
1370
|
]);
|
|
1386
1371
|
}
|
|
1387
|
-
// Connect to SignalR
|
|
1388
1372
|
await ClientSignalRService.startConnection(createdSession.id, tokenResponse, handleReceiveMessage);
|
|
1373
|
+
// Verify the connection is actually active
|
|
1374
|
+
if (!ClientSignalRService.isConnectionActive()) {
|
|
1375
|
+
throw new Error('SignalR connection failed to establish properly');
|
|
1376
|
+
}
|
|
1389
1377
|
setIsSignalRConnected(true);
|
|
1390
1378
|
setIsChatClosed(false);
|
|
1391
1379
|
setStatus('succeeded');
|
|
1392
1380
|
}
|
|
1393
1381
|
catch (error) {
|
|
1394
|
-
console.error('Chat start error:', error);
|
|
1395
1382
|
setError(error instanceof Error ? error.message : 'Failed to start chat session');
|
|
1396
1383
|
setStatus('failed');
|
|
1397
1384
|
}
|
|
1398
1385
|
};
|
|
1399
1386
|
const handleSendMessage = async (message) => {
|
|
1387
|
+
// Only send message if SignalR is connected
|
|
1388
|
+
if (!isSignalRConnected) {
|
|
1389
|
+
setError('Connection lost. Please try again.');
|
|
1390
|
+
return;
|
|
1391
|
+
}
|
|
1400
1392
|
let currentSessionId = sessionId;
|
|
1401
1393
|
if (message.trim() !== '') {
|
|
1402
1394
|
try {
|
|
1403
|
-
// Set loading state
|
|
1404
1395
|
setAssistantStatus('typing');
|
|
1405
|
-
|
|
1406
|
-
|
|
1407
|
-
|
|
1408
|
-
|
|
1409
|
-
|
|
1410
|
-
|
|
1411
|
-
|
|
1412
|
-
|
|
1413
|
-
isSeen: false,
|
|
1414
|
-
},
|
|
1415
|
-
]);
|
|
1416
|
-
// Create a new chat session if not started yet
|
|
1396
|
+
const userMessage = {
|
|
1397
|
+
id: Date.now(),
|
|
1398
|
+
senderType: 1,
|
|
1399
|
+
messageContent: message,
|
|
1400
|
+
sentAt: new Date(),
|
|
1401
|
+
isSeen: false,
|
|
1402
|
+
};
|
|
1403
|
+
setMessages((prevMessages) => [...prevMessages, userMessage]);
|
|
1417
1404
|
if (!currentSessionId) {
|
|
1418
1405
|
const chatSessionCreateDto = {
|
|
1419
1406
|
helpScreenId: helpScreenId,
|
|
@@ -1431,211 +1418,46 @@ function HelpCenter({ helpScreenId, user, showArrow = true, language = 'en', mes
|
|
|
1431
1418
|
const createdSession = await response.json();
|
|
1432
1419
|
setSessionId(createdSession.id);
|
|
1433
1420
|
currentSessionId = createdSession.id;
|
|
1434
|
-
// Connect to SignalR with the new session
|
|
1435
1421
|
const tokenResponse = await configService.getToken();
|
|
1436
1422
|
await ClientSignalRService.startConnection(createdSession.id, tokenResponse, handleReceiveMessage);
|
|
1437
1423
|
setIsSignalRConnected(true);
|
|
1438
1424
|
}
|
|
1439
|
-
// Send the message
|
|
1440
1425
|
const messageDto = { messageContent: message };
|
|
1441
1426
|
const response = await apiRequest(`Client/ClientChatSession/${currentSessionId}/send-message`, 'POST', messageDto);
|
|
1442
1427
|
if (!response.ok) {
|
|
1443
1428
|
throw new Error('Failed to send message');
|
|
1444
1429
|
}
|
|
1445
|
-
// Update the sent message as seen
|
|
1446
1430
|
setMessages((prevMessages) => prevMessages.map((msg) => (msg.senderType === 1 && !msg.isSeen ? { ...msg, isSeen: true } : msg)));
|
|
1447
1431
|
}
|
|
1448
1432
|
catch (error) {
|
|
1449
|
-
console.error('Error in message handling:', error);
|
|
1450
1433
|
setAssistantStatus('idle');
|
|
1451
|
-
|
|
1452
|
-
|
|
1453
|
-
|
|
1454
|
-
|
|
1455
|
-
|
|
1456
|
-
|
|
1457
|
-
|
|
1458
|
-
|
|
1459
|
-
},
|
|
1460
|
-
]);
|
|
1434
|
+
const errorMessage = {
|
|
1435
|
+
id: Date.now(),
|
|
1436
|
+
senderType: 3,
|
|
1437
|
+
messageContent: 'Failed to send the message. Please try again.\n لم يتم إرسال الرسالة. يرجى المحاولة مرة أخرى.',
|
|
1438
|
+
sentAt: new Date(),
|
|
1439
|
+
isSeen: true,
|
|
1440
|
+
};
|
|
1441
|
+
setMessages((prevMessages) => [...prevMessages, errorMessage]);
|
|
1461
1442
|
}
|
|
1462
1443
|
}
|
|
1463
1444
|
};
|
|
1464
|
-
// const startNewChatSession = async (option: Option) => {
|
|
1465
|
-
// console.log('🚀 Starting new chat session with option:', option);
|
|
1466
|
-
// if (isSignalRConnected || sessionId) {
|
|
1467
|
-
// console.log('⚠️ Existing connection detected, ending current chat');
|
|
1468
|
-
// handleEndChat();
|
|
1469
|
-
// }
|
|
1470
|
-
// try {
|
|
1471
|
-
// setStatus('loading');
|
|
1472
|
-
// setError('');
|
|
1473
|
-
// setMessages([]);
|
|
1474
|
-
// console.log('🔑 Getting token for authentication...');
|
|
1475
|
-
// const tokenResponse = await configService.getToken();
|
|
1476
|
-
// console.log('✅ Token obtained successfully');
|
|
1477
|
-
// const chatSessionCreateDto = {
|
|
1478
|
-
// helpScreenId: helpScreenId,
|
|
1479
|
-
// optionId: option.id,
|
|
1480
|
-
// ...(user && {
|
|
1481
|
-
// user: {
|
|
1482
|
-
// id: user.id,
|
|
1483
|
-
// name: user.name,
|
|
1484
|
-
// email: user.email,
|
|
1485
|
-
// },
|
|
1486
|
-
// }),
|
|
1487
|
-
// };
|
|
1488
|
-
// console.log('📡 Creating chat session with data:', chatSessionCreateDto);
|
|
1489
|
-
// const response = await apiRequest('Client/ClientChatSession/create-session', 'POST', chatSessionCreateDto);
|
|
1490
|
-
// if (!response.ok) {
|
|
1491
|
-
// throw new Error('Failed to create chat session');
|
|
1492
|
-
// }
|
|
1493
|
-
// const createdSession = await response.json();
|
|
1494
|
-
// console.log('✅ Chat session created:', createdSession);
|
|
1495
|
-
// setSessionId(createdSession.id);
|
|
1496
|
-
// if (option.assistant?.greeting) {
|
|
1497
|
-
// console.log('💬 Adding custom greeting:', option.assistant.greeting);
|
|
1498
|
-
// setMessages([
|
|
1499
|
-
// {
|
|
1500
|
-
// id: Date.now(),
|
|
1501
|
-
// senderType: 3,
|
|
1502
|
-
// messageContent: option.assistant.greeting,
|
|
1503
|
-
// sentAt: new Date(),
|
|
1504
|
-
// isSeen: true,
|
|
1505
|
-
// },
|
|
1506
|
-
// ]);
|
|
1507
|
-
// } else {
|
|
1508
|
-
// console.log('💬 Adding default greeting');
|
|
1509
|
-
// setMessages([
|
|
1510
|
-
// {
|
|
1511
|
-
// id: Date.now(),
|
|
1512
|
-
// senderType: 3,
|
|
1513
|
-
// messageContent: 'Hello! How can I assist you today?\nمرحباً! كيف يمكنني مساعدتك اليوم؟',
|
|
1514
|
-
// sentAt: new Date(),
|
|
1515
|
-
// isSeen: true,
|
|
1516
|
-
// },
|
|
1517
|
-
// ]);
|
|
1518
|
-
// }
|
|
1519
|
-
// console.log('🔌 Starting SignalR connection...');
|
|
1520
|
-
// await ClientSignalRService.startConnection(createdSession.id, tokenResponse, handleReceiveMessage);
|
|
1521
|
-
// console.log('✅ SignalR connection established');
|
|
1522
|
-
// // Verify the connection is actually active
|
|
1523
|
-
// if (!ClientSignalRService.isConnectionActive()) {
|
|
1524
|
-
// throw new Error('SignalR connection failed to establish properly');
|
|
1525
|
-
// }
|
|
1526
|
-
// setIsSignalRConnected(true);
|
|
1527
|
-
// setIsChatClosed(false);
|
|
1528
|
-
// setStatus('succeeded');
|
|
1529
|
-
// console.log('🎉 Chat session fully initialized and ready');
|
|
1530
|
-
// } catch (error) {
|
|
1531
|
-
// console.error('❌ Chat start error:', error);
|
|
1532
|
-
// setError(error instanceof Error ? error.message : 'Failed to start chat session');
|
|
1533
|
-
// setStatus('failed');
|
|
1534
|
-
// }
|
|
1535
|
-
// };
|
|
1536
|
-
// const handleSendMessage = async (message: string) => {
|
|
1537
|
-
// console.log('📤 Sending message:', message);
|
|
1538
|
-
// console.log('📊 Current state:', {
|
|
1539
|
-
// sessionId,
|
|
1540
|
-
// isSignalRConnected,
|
|
1541
|
-
// messagesCount: messages.length,
|
|
1542
|
-
// selectedOptionId: selectedOption?.id,
|
|
1543
|
-
// });
|
|
1544
|
-
// let currentSessionId = sessionId;
|
|
1545
|
-
// if (message.trim() !== '') {
|
|
1546
|
-
// try {
|
|
1547
|
-
// setAssistantStatus('typing');
|
|
1548
|
-
// console.log('⏳ Assistant status set to typing');
|
|
1549
|
-
// const userMessage = {
|
|
1550
|
-
// id: Date.now(),
|
|
1551
|
-
// senderType: 1,
|
|
1552
|
-
// messageContent: message,
|
|
1553
|
-
// sentAt: new Date(),
|
|
1554
|
-
// isSeen: false,
|
|
1555
|
-
// };
|
|
1556
|
-
// console.log('✅ Adding user message to UI:', userMessage);
|
|
1557
|
-
// setMessages((prevMessages) => [...prevMessages, userMessage]);
|
|
1558
|
-
// if (!currentSessionId) {
|
|
1559
|
-
// console.log('🆕 No existing session, creating new one...');
|
|
1560
|
-
// const chatSessionCreateDto = {
|
|
1561
|
-
// helpScreenId: helpScreenId,
|
|
1562
|
-
// optionId: selectedOption?.id,
|
|
1563
|
-
// user: {
|
|
1564
|
-
// id: user?.id,
|
|
1565
|
-
// name: user?.name,
|
|
1566
|
-
// email: user?.email,
|
|
1567
|
-
// },
|
|
1568
|
-
// };
|
|
1569
|
-
// console.log('📡 Creating new session with data:', chatSessionCreateDto);
|
|
1570
|
-
// const response = await apiRequest('Client/ClientChatSession/create-session', 'POST', chatSessionCreateDto);
|
|
1571
|
-
// if (!response.ok) {
|
|
1572
|
-
// throw new Error('Failed to create chat session');
|
|
1573
|
-
// }
|
|
1574
|
-
// const createdSession = await response.json();
|
|
1575
|
-
// console.log('✅ New session created:', createdSession);
|
|
1576
|
-
// setSessionId(createdSession.id);
|
|
1577
|
-
// currentSessionId = createdSession.id;
|
|
1578
|
-
// console.log('🔌 Starting SignalR connection for new session...');
|
|
1579
|
-
// const tokenResponse = await configService.getToken();
|
|
1580
|
-
// await ClientSignalRService.startConnection(createdSession.id, tokenResponse, handleReceiveMessage);
|
|
1581
|
-
// setIsSignalRConnected(true);
|
|
1582
|
-
// console.log('✅ SignalR connection established for new session');
|
|
1583
|
-
// }
|
|
1584
|
-
// const messageDto = { messageContent: message };
|
|
1585
|
-
// console.log('📡 Sending message to API:', messageDto);
|
|
1586
|
-
// console.log('🎯 Target endpoint:', `Client/ClientChatSession/${currentSessionId}/send-message`);
|
|
1587
|
-
// const response = await apiRequest(
|
|
1588
|
-
// `Client/ClientChatSession/${currentSessionId}/send-message`,
|
|
1589
|
-
// 'POST',
|
|
1590
|
-
// messageDto
|
|
1591
|
-
// );
|
|
1592
|
-
// if (!response.ok) {
|
|
1593
|
-
// throw new Error('Failed to send message');
|
|
1594
|
-
// }
|
|
1595
|
-
// console.log('✅ Message sent successfully to server');
|
|
1596
|
-
// console.log('⏳ Waiting for SignalR response...');
|
|
1597
|
-
// setMessages((prevMessages) =>
|
|
1598
|
-
// prevMessages.map((msg) => (msg.senderType === 1 && !msg.isSeen ? { ...msg, isSeen: true } : msg))
|
|
1599
|
-
// );
|
|
1600
|
-
// console.log('✅ User message marked as seen');
|
|
1601
|
-
// } catch (error) {
|
|
1602
|
-
// console.error('❌ Error in message handling:', error);
|
|
1603
|
-
// setAssistantStatus('idle');
|
|
1604
|
-
// const errorMessage = {
|
|
1605
|
-
// id: Date.now(),
|
|
1606
|
-
// senderType: 3,
|
|
1607
|
-
// messageContent:
|
|
1608
|
-
// 'Failed to send the message. Please try again.\n لم يتم إرسال الرسالة. يرجى المحاولة مرة أخرى.',
|
|
1609
|
-
// sentAt: new Date(),
|
|
1610
|
-
// isSeen: true,
|
|
1611
|
-
// };
|
|
1612
|
-
// console.log('📨 Adding error message:', errorMessage);
|
|
1613
|
-
// setMessages((prevMessages) => [...prevMessages, errorMessage]);
|
|
1614
|
-
// }
|
|
1615
|
-
// }
|
|
1616
|
-
// };
|
|
1617
1445
|
useEffect(() => {
|
|
1618
1446
|
if (isOpen && helpScreenId) {
|
|
1619
|
-
console.log('📊 Loading help screen data for ID:', helpScreenId);
|
|
1620
1447
|
setStatus('loading');
|
|
1621
1448
|
apiRequest(`client/clientHelpScreen/${helpScreenId}`)
|
|
1622
1449
|
.then((res) => res.json())
|
|
1623
1450
|
.then((data) => {
|
|
1624
|
-
console.log('✅ Help screen data loaded:', data);
|
|
1625
1451
|
setHelpScreenData(data);
|
|
1626
1452
|
setStatus('succeeded');
|
|
1627
1453
|
setError('');
|
|
1628
1454
|
})
|
|
1629
1455
|
.catch((err) => {
|
|
1630
|
-
console.error('❌ Failed to load help screen data:', err);
|
|
1631
1456
|
setError(err.message);
|
|
1632
1457
|
setStatus('failed');
|
|
1633
1458
|
});
|
|
1634
1459
|
}
|
|
1635
1460
|
}, [isOpen, helpScreenId]);
|
|
1636
|
-
useEffect(() => {
|
|
1637
|
-
console.log('🔄 SignalR connection status', isSignalRConnected);
|
|
1638
|
-
}, [isSignalRConnected]);
|
|
1639
1461
|
return (React__default.createElement("div", { className: 'babylai-help-center-container mb-4' },
|
|
1640
1462
|
showArrowAnimation && !isOpen && (React__default.createElement(FloatingMessage, { onClose: handleCloseArrowAnimation, message: messageLabel || t('homeSdk.needAssistance') })),
|
|
1641
1463
|
React__default.createElement(HelpButton, { onClick: handleTogglePopup }),
|