@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.js
CHANGED
|
@@ -295,7 +295,6 @@ class ConfigService {
|
|
|
295
295
|
return ConfigService.instance;
|
|
296
296
|
}
|
|
297
297
|
initialize(config) {
|
|
298
|
-
console.log('🔧 Initializing config with:', config);
|
|
299
298
|
this.config = {
|
|
300
299
|
baseUrl: config.baseUrl || 'https://babylai.net/api',
|
|
301
300
|
hubUrl: config.hubUrl || config.baseUrl || 'https://babylai.net/api',
|
|
@@ -303,16 +302,13 @@ class ConfigService {
|
|
|
303
302
|
apiKey: config.apiKey,
|
|
304
303
|
getToken: config.getToken,
|
|
305
304
|
};
|
|
306
|
-
console.log('📋 Final config:', this.config);
|
|
307
305
|
// Initialize API with the getToken function directly
|
|
308
306
|
if (!this.config.getToken) {
|
|
309
307
|
throw new Error('getToken function is required in configuration');
|
|
310
308
|
}
|
|
311
|
-
console.log('🌐 Initializing API with baseUrl:', this.config.baseUrl);
|
|
312
309
|
initializeAPI(this.config.baseUrl || 'https://babylai.net/api', this.config.getToken);
|
|
313
310
|
// Initialize SignalR
|
|
314
311
|
const hubUrl = this.config.hubUrl || this.config.baseUrl || 'https://babylai.net/api';
|
|
315
|
-
console.log('🔌 Initializing SignalR with hubUrl:', hubUrl);
|
|
316
312
|
ClientSignalRService.initialize(hubUrl);
|
|
317
313
|
}
|
|
318
314
|
getConfig() {
|
|
@@ -740,9 +736,9 @@ var SvgEnvelope = function SvgEnvelope(props) {
|
|
|
740
736
|
|
|
741
737
|
const ChatWindowFooter = (props) => {
|
|
742
738
|
const { t, dir } = useLocalTranslation();
|
|
743
|
-
return (React__default["default"].createElement("footer", { className:
|
|
744
|
-
React__default["default"].createElement("input", { type:
|
|
745
|
-
React__default["default"].createElement(Button, { variant:
|
|
739
|
+
return (React__default["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' },
|
|
740
|
+
React__default["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' }),
|
|
741
|
+
React__default["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' },
|
|
746
742
|
React__default["default"].createElement(SvgEnvelope, { className: `babylai-w-4 babylai-h-4 ${dir === 'rtl' ? 'babylai-rotate-270' : ''}` }))));
|
|
747
743
|
};
|
|
748
744
|
|
|
@@ -795,7 +791,7 @@ const TypingIndicator = React__default["default"].memo(({ firstHumanAgentIndex }
|
|
|
795
791
|
React__default["default"].createElement("p", { className: 'babylai-text-sm babylai-opacity-70' }, "..."))));
|
|
796
792
|
});
|
|
797
793
|
TypingIndicator.displayName = 'TypingIndicator';
|
|
798
|
-
const ChatWindow = React__default["default"].memo(({ onSendMessage, messages, assistantStatus = 'loading' }) => {
|
|
794
|
+
const ChatWindow = React__default["default"].memo(({ onSendMessage, messages, assistantStatus = 'loading', isSignalRConnected }) => {
|
|
799
795
|
const [inputMessage, setInputMessage] = React.useState('');
|
|
800
796
|
const messagesEndRef = React.useRef(null);
|
|
801
797
|
const scrollTimeoutRef = React.useRef(null);
|
|
@@ -835,14 +831,14 @@ const ChatWindow = React__default["default"].memo(({ onSendMessage, messages, as
|
|
|
835
831
|
}
|
|
836
832
|
}, [inputMessage, onSendMessage]);
|
|
837
833
|
const handleKeyDown = React.useCallback((e) => {
|
|
838
|
-
if (e.key === 'Enter' && !e.shiftKey) {
|
|
834
|
+
if (e.key === 'Enter' && !e.shiftKey && isSignalRConnected) {
|
|
839
835
|
e.preventDefault();
|
|
840
836
|
if (inputMessage.trim() && assistantStatus !== 'typing') {
|
|
841
837
|
onSendMessage(inputMessage);
|
|
842
838
|
setInputMessage('');
|
|
843
839
|
}
|
|
844
840
|
}
|
|
845
|
-
}, [inputMessage, onSendMessage, assistantStatus]);
|
|
841
|
+
}, [inputMessage, onSendMessage, assistantStatus, isSignalRConnected]);
|
|
846
842
|
// Memoize the first human agent index calculation
|
|
847
843
|
const firstHumanAgentIndex = React.useMemo(() => {
|
|
848
844
|
return messages.findIndex((message) => message.senderType === 2);
|
|
@@ -863,7 +859,7 @@ const ChatWindow = React__default["default"].memo(({ onSendMessage, messages, as
|
|
|
863
859
|
messagesList,
|
|
864
860
|
assistantStatus === 'typing' && React__default["default"].createElement(TypingIndicator, { firstHumanAgentIndex: firstHumanAgentIndex }),
|
|
865
861
|
React__default["default"].createElement("div", { ref: messagesEndRef })),
|
|
866
|
-
React__default["default"].createElement(ChatWindowFooter, { inputMessage: inputMessage, handleKeyDown: handleKeyDown, handleSendMessage: handleSendMessage, setInputMessage: setInputMessage, isLoading: isLoading })));
|
|
862
|
+
React__default["default"].createElement(ChatWindowFooter, { inputMessage: inputMessage, handleKeyDown: handleKeyDown, handleSendMessage: handleSendMessage, setInputMessage: setInputMessage, isLoading: isLoading, isSignalRConnected: isSignalRConnected })));
|
|
867
863
|
});
|
|
868
864
|
ChatWindow.displayName = 'ChatWindow';
|
|
869
865
|
|
|
@@ -1126,7 +1122,7 @@ const ConfirmationModal = ({ title, message, onCancel, onConfirm, }) => {
|
|
|
1126
1122
|
React__default["default"].createElement(Button, { variant: 'default', size: 'sm', onClick: onConfirm, className: 'babylai-text-sm babylai-w-full !babylai-font-bold' }, t('homeSdk.ConfirmationModal.confirmation_button')),
|
|
1127
1123
|
React__default["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'))))));
|
|
1128
1124
|
};
|
|
1129
|
-
function HelpPopup({ onClose, helpScreen, status, error, onStartChat, onSendMessage, onEndChat, messages, assistantStatus, needsAgent, sessionId, selectedOption, setSelectedOption, showHelpScreen, }) {
|
|
1125
|
+
function HelpPopup({ onClose, helpScreen, status, error, onStartChat, onSendMessage, onEndChat, messages, assistantStatus, needsAgent, sessionId, selectedOption, setSelectedOption, showHelpScreen, isSignalRConnected, }) {
|
|
1130
1126
|
// ALL HOOKS MUST BE CALLED FIRST - BEFORE ANY EARLY RETURNS
|
|
1131
1127
|
const [showChat, setShowChat] = React.useState(false);
|
|
1132
1128
|
const [isShowList, setIsShowList] = React.useState(!showHelpScreen || false);
|
|
@@ -1179,7 +1175,7 @@ function HelpPopup({ onClose, helpScreen, status, error, onStartChat, onSendMess
|
|
|
1179
1175
|
}
|
|
1180
1176
|
}, [onStartChat, setSelectedOption, sessionId, setStartNewChatConfirmation, setTempSelectedOption]);
|
|
1181
1177
|
const handleSendMessage = React.useCallback((message) => {
|
|
1182
|
-
if (message.trim()) {
|
|
1178
|
+
if (message.trim() && isSignalRConnected) {
|
|
1183
1179
|
onSendMessage(message.trim());
|
|
1184
1180
|
}
|
|
1185
1181
|
}, [onSendMessage]);
|
|
@@ -1208,7 +1204,7 @@ function HelpPopup({ onClose, helpScreen, status, error, onStartChat, onSendMess
|
|
|
1208
1204
|
if (showChat && selectedOption) {
|
|
1209
1205
|
return (React__default["default"].createElement(React__default["default"].Fragment, null,
|
|
1210
1206
|
React__default["default"].createElement(ChatWindowHeader, { handleBack: handleBack, handleEndChat: showEndChatConfirmation, onClose: onClose, isShowList: isShowList, showChat: showChat, setIsShowList: setIsShowList }),
|
|
1211
|
-
React__default["default"].createElement(ChatWindow, { onSendMessage: handleSendMessage, messages: memoizedMessages, assistantStatus: assistantStatus, needsAgent: needsAgent })));
|
|
1207
|
+
React__default["default"].createElement(ChatWindow, { onSendMessage: handleSendMessage, messages: memoizedMessages, assistantStatus: assistantStatus, needsAgent: needsAgent, isSignalRConnected: isSignalRConnected })));
|
|
1212
1208
|
}
|
|
1213
1209
|
if (isShowList) {
|
|
1214
1210
|
return (React__default["default"].createElement(OptionsListScreen, { helpScreen: helpScreen, expandedOption: expandedOption, setExpandedOption: setExpandedOption, handleStartChat: handleStartChat, handleBack: showHelpScreen ? handleBack : onClose, showHelpScreen: showHelpScreen }));
|
|
@@ -1296,17 +1292,7 @@ function HelpCenter({ helpScreenId, user, showArrow = true, language = 'en', mes
|
|
|
1296
1292
|
setShowArrowAnimation(false);
|
|
1297
1293
|
};
|
|
1298
1294
|
const handleReceiveMessage = (message, senderType, needsAgent) => {
|
|
1299
|
-
console.log('🎯 Help Center received message:', {
|
|
1300
|
-
message,
|
|
1301
|
-
senderType,
|
|
1302
|
-
needsAgent,
|
|
1303
|
-
timestamp: new Date().toISOString(),
|
|
1304
|
-
currentSessionId: sessionId,
|
|
1305
|
-
isSignalRConnected,
|
|
1306
|
-
messagesCount: messages.length,
|
|
1307
|
-
});
|
|
1308
1295
|
if (needsAgent) {
|
|
1309
|
-
console.log('🚨 Agent needed for this message');
|
|
1310
1296
|
setNeedsAgent(true);
|
|
1311
1297
|
}
|
|
1312
1298
|
setMessages((prevMessages) => {
|
|
@@ -1317,13 +1303,10 @@ function HelpCenter({ helpScreenId, user, showArrow = true, language = 'en', mes
|
|
|
1317
1303
|
sentAt: new Date(),
|
|
1318
1304
|
isSeen: true,
|
|
1319
1305
|
};
|
|
1320
|
-
console.log('✅ Adding message to state:', newMessage);
|
|
1321
1306
|
const updatedMessages = [...prevMessages, newMessage];
|
|
1322
|
-
console.log('📊 Total messages after update:', updatedMessages.length);
|
|
1323
1307
|
return updatedMessages;
|
|
1324
1308
|
});
|
|
1325
1309
|
setAssistantStatus('idle');
|
|
1326
|
-
console.log('🔄 Assistant status set to idle');
|
|
1327
1310
|
};
|
|
1328
1311
|
const handleEndChat = async (option) => {
|
|
1329
1312
|
if (!sessionId || !selectedOption)
|
|
@@ -1331,6 +1314,7 @@ function HelpCenter({ helpScreenId, user, showArrow = true, language = 'en', mes
|
|
|
1331
1314
|
try {
|
|
1332
1315
|
await ClientSignalRService.stopConnection();
|
|
1333
1316
|
setIsSignalRConnected(false);
|
|
1317
|
+
setAssistantStatus('idle');
|
|
1334
1318
|
const response = await apiRequest(`Client/ClientChatSession/${sessionId}/close`, 'POST');
|
|
1335
1319
|
if (!response.ok)
|
|
1336
1320
|
throw new Error('Failed to close chat session');
|
|
@@ -1342,6 +1326,7 @@ function HelpCenter({ helpScreenId, user, showArrow = true, language = 'en', mes
|
|
|
1342
1326
|
catch (error) {
|
|
1343
1327
|
console.error('Error ending chat:', error);
|
|
1344
1328
|
setError('Failed to end chat session');
|
|
1329
|
+
setAssistantStatus('idle');
|
|
1345
1330
|
}
|
|
1346
1331
|
};
|
|
1347
1332
|
const handleSendChatReview = async ({ comment, rating }) => {
|
|
@@ -1367,6 +1352,9 @@ function HelpCenter({ helpScreenId, user, showArrow = true, language = 'en', mes
|
|
|
1367
1352
|
};
|
|
1368
1353
|
const startNewChatSession = async (option) => {
|
|
1369
1354
|
var _a;
|
|
1355
|
+
if (isSignalRConnected || sessionId) {
|
|
1356
|
+
handleEndChat();
|
|
1357
|
+
}
|
|
1370
1358
|
try {
|
|
1371
1359
|
setStatus('loading');
|
|
1372
1360
|
setError('');
|
|
@@ -1388,14 +1376,12 @@ function HelpCenter({ helpScreenId, user, showArrow = true, language = 'en', mes
|
|
|
1388
1376
|
throw new Error('Failed to create chat session');
|
|
1389
1377
|
}
|
|
1390
1378
|
const createdSession = await response.json();
|
|
1391
|
-
console.log('Created session:', createdSession);
|
|
1392
1379
|
setSessionId(createdSession.id);
|
|
1393
|
-
// Add greeting message if available
|
|
1394
1380
|
if ((_a = option.assistant) === null || _a === void 0 ? void 0 : _a.greeting) {
|
|
1395
1381
|
setMessages([
|
|
1396
1382
|
{
|
|
1397
1383
|
id: Date.now(),
|
|
1398
|
-
senderType: 3,
|
|
1384
|
+
senderType: 3,
|
|
1399
1385
|
messageContent: option.assistant.greeting,
|
|
1400
1386
|
sentAt: new Date(),
|
|
1401
1387
|
isSeen: true,
|
|
@@ -1403,7 +1389,6 @@ function HelpCenter({ helpScreenId, user, showArrow = true, language = 'en', mes
|
|
|
1403
1389
|
]);
|
|
1404
1390
|
}
|
|
1405
1391
|
else {
|
|
1406
|
-
// Default greeting if none provided
|
|
1407
1392
|
setMessages([
|
|
1408
1393
|
{
|
|
1409
1394
|
id: Date.now(),
|
|
@@ -1414,36 +1399,38 @@ function HelpCenter({ helpScreenId, user, showArrow = true, language = 'en', mes
|
|
|
1414
1399
|
},
|
|
1415
1400
|
]);
|
|
1416
1401
|
}
|
|
1417
|
-
// Connect to SignalR
|
|
1418
1402
|
await ClientSignalRService.startConnection(createdSession.id, tokenResponse, handleReceiveMessage);
|
|
1403
|
+
// Verify the connection is actually active
|
|
1404
|
+
if (!ClientSignalRService.isConnectionActive()) {
|
|
1405
|
+
throw new Error('SignalR connection failed to establish properly');
|
|
1406
|
+
}
|
|
1419
1407
|
setIsSignalRConnected(true);
|
|
1420
1408
|
setIsChatClosed(false);
|
|
1421
1409
|
setStatus('succeeded');
|
|
1422
1410
|
}
|
|
1423
1411
|
catch (error) {
|
|
1424
|
-
console.error('Chat start error:', error);
|
|
1425
1412
|
setError(error instanceof Error ? error.message : 'Failed to start chat session');
|
|
1426
1413
|
setStatus('failed');
|
|
1427
1414
|
}
|
|
1428
1415
|
};
|
|
1429
1416
|
const handleSendMessage = async (message) => {
|
|
1417
|
+
// Only send message if SignalR is connected
|
|
1418
|
+
if (!isSignalRConnected) {
|
|
1419
|
+
setError('Connection lost. Please try again.');
|
|
1420
|
+
return;
|
|
1421
|
+
}
|
|
1430
1422
|
let currentSessionId = sessionId;
|
|
1431
1423
|
if (message.trim() !== '') {
|
|
1432
1424
|
try {
|
|
1433
|
-
// Set loading state
|
|
1434
1425
|
setAssistantStatus('typing');
|
|
1435
|
-
|
|
1436
|
-
|
|
1437
|
-
|
|
1438
|
-
|
|
1439
|
-
|
|
1440
|
-
|
|
1441
|
-
|
|
1442
|
-
|
|
1443
|
-
isSeen: false,
|
|
1444
|
-
},
|
|
1445
|
-
]);
|
|
1446
|
-
// Create a new chat session if not started yet
|
|
1426
|
+
const userMessage = {
|
|
1427
|
+
id: Date.now(),
|
|
1428
|
+
senderType: 1,
|
|
1429
|
+
messageContent: message,
|
|
1430
|
+
sentAt: new Date(),
|
|
1431
|
+
isSeen: false,
|
|
1432
|
+
};
|
|
1433
|
+
setMessages((prevMessages) => [...prevMessages, userMessage]);
|
|
1447
1434
|
if (!currentSessionId) {
|
|
1448
1435
|
const chatSessionCreateDto = {
|
|
1449
1436
|
helpScreenId: helpScreenId,
|
|
@@ -1461,211 +1448,46 @@ function HelpCenter({ helpScreenId, user, showArrow = true, language = 'en', mes
|
|
|
1461
1448
|
const createdSession = await response.json();
|
|
1462
1449
|
setSessionId(createdSession.id);
|
|
1463
1450
|
currentSessionId = createdSession.id;
|
|
1464
|
-
// Connect to SignalR with the new session
|
|
1465
1451
|
const tokenResponse = await configService.getToken();
|
|
1466
1452
|
await ClientSignalRService.startConnection(createdSession.id, tokenResponse, handleReceiveMessage);
|
|
1467
1453
|
setIsSignalRConnected(true);
|
|
1468
1454
|
}
|
|
1469
|
-
// Send the message
|
|
1470
1455
|
const messageDto = { messageContent: message };
|
|
1471
1456
|
const response = await apiRequest(`Client/ClientChatSession/${currentSessionId}/send-message`, 'POST', messageDto);
|
|
1472
1457
|
if (!response.ok) {
|
|
1473
1458
|
throw new Error('Failed to send message');
|
|
1474
1459
|
}
|
|
1475
|
-
// Update the sent message as seen
|
|
1476
1460
|
setMessages((prevMessages) => prevMessages.map((msg) => (msg.senderType === 1 && !msg.isSeen ? { ...msg, isSeen: true } : msg)));
|
|
1477
1461
|
}
|
|
1478
1462
|
catch (error) {
|
|
1479
|
-
console.error('Error in message handling:', error);
|
|
1480
1463
|
setAssistantStatus('idle');
|
|
1481
|
-
|
|
1482
|
-
|
|
1483
|
-
|
|
1484
|
-
|
|
1485
|
-
|
|
1486
|
-
|
|
1487
|
-
|
|
1488
|
-
|
|
1489
|
-
},
|
|
1490
|
-
]);
|
|
1464
|
+
const errorMessage = {
|
|
1465
|
+
id: Date.now(),
|
|
1466
|
+
senderType: 3,
|
|
1467
|
+
messageContent: 'Failed to send the message. Please try again.\n لم يتم إرسال الرسالة. يرجى المحاولة مرة أخرى.',
|
|
1468
|
+
sentAt: new Date(),
|
|
1469
|
+
isSeen: true,
|
|
1470
|
+
};
|
|
1471
|
+
setMessages((prevMessages) => [...prevMessages, errorMessage]);
|
|
1491
1472
|
}
|
|
1492
1473
|
}
|
|
1493
1474
|
};
|
|
1494
|
-
// const startNewChatSession = async (option: Option) => {
|
|
1495
|
-
// console.log('🚀 Starting new chat session with option:', option);
|
|
1496
|
-
// if (isSignalRConnected || sessionId) {
|
|
1497
|
-
// console.log('⚠️ Existing connection detected, ending current chat');
|
|
1498
|
-
// handleEndChat();
|
|
1499
|
-
// }
|
|
1500
|
-
// try {
|
|
1501
|
-
// setStatus('loading');
|
|
1502
|
-
// setError('');
|
|
1503
|
-
// setMessages([]);
|
|
1504
|
-
// console.log('🔑 Getting token for authentication...');
|
|
1505
|
-
// const tokenResponse = await configService.getToken();
|
|
1506
|
-
// console.log('✅ Token obtained successfully');
|
|
1507
|
-
// const chatSessionCreateDto = {
|
|
1508
|
-
// helpScreenId: helpScreenId,
|
|
1509
|
-
// optionId: option.id,
|
|
1510
|
-
// ...(user && {
|
|
1511
|
-
// user: {
|
|
1512
|
-
// id: user.id,
|
|
1513
|
-
// name: user.name,
|
|
1514
|
-
// email: user.email,
|
|
1515
|
-
// },
|
|
1516
|
-
// }),
|
|
1517
|
-
// };
|
|
1518
|
-
// console.log('📡 Creating chat session with data:', chatSessionCreateDto);
|
|
1519
|
-
// const response = await apiRequest('Client/ClientChatSession/create-session', 'POST', chatSessionCreateDto);
|
|
1520
|
-
// if (!response.ok) {
|
|
1521
|
-
// throw new Error('Failed to create chat session');
|
|
1522
|
-
// }
|
|
1523
|
-
// const createdSession = await response.json();
|
|
1524
|
-
// console.log('✅ Chat session created:', createdSession);
|
|
1525
|
-
// setSessionId(createdSession.id);
|
|
1526
|
-
// if (option.assistant?.greeting) {
|
|
1527
|
-
// console.log('💬 Adding custom greeting:', option.assistant.greeting);
|
|
1528
|
-
// setMessages([
|
|
1529
|
-
// {
|
|
1530
|
-
// id: Date.now(),
|
|
1531
|
-
// senderType: 3,
|
|
1532
|
-
// messageContent: option.assistant.greeting,
|
|
1533
|
-
// sentAt: new Date(),
|
|
1534
|
-
// isSeen: true,
|
|
1535
|
-
// },
|
|
1536
|
-
// ]);
|
|
1537
|
-
// } else {
|
|
1538
|
-
// console.log('💬 Adding default greeting');
|
|
1539
|
-
// setMessages([
|
|
1540
|
-
// {
|
|
1541
|
-
// id: Date.now(),
|
|
1542
|
-
// senderType: 3,
|
|
1543
|
-
// messageContent: 'Hello! How can I assist you today?\nمرحباً! كيف يمكنني مساعدتك اليوم؟',
|
|
1544
|
-
// sentAt: new Date(),
|
|
1545
|
-
// isSeen: true,
|
|
1546
|
-
// },
|
|
1547
|
-
// ]);
|
|
1548
|
-
// }
|
|
1549
|
-
// console.log('🔌 Starting SignalR connection...');
|
|
1550
|
-
// await ClientSignalRService.startConnection(createdSession.id, tokenResponse, handleReceiveMessage);
|
|
1551
|
-
// console.log('✅ SignalR connection established');
|
|
1552
|
-
// // Verify the connection is actually active
|
|
1553
|
-
// if (!ClientSignalRService.isConnectionActive()) {
|
|
1554
|
-
// throw new Error('SignalR connection failed to establish properly');
|
|
1555
|
-
// }
|
|
1556
|
-
// setIsSignalRConnected(true);
|
|
1557
|
-
// setIsChatClosed(false);
|
|
1558
|
-
// setStatus('succeeded');
|
|
1559
|
-
// console.log('🎉 Chat session fully initialized and ready');
|
|
1560
|
-
// } catch (error) {
|
|
1561
|
-
// console.error('❌ Chat start error:', error);
|
|
1562
|
-
// setError(error instanceof Error ? error.message : 'Failed to start chat session');
|
|
1563
|
-
// setStatus('failed');
|
|
1564
|
-
// }
|
|
1565
|
-
// };
|
|
1566
|
-
// const handleSendMessage = async (message: string) => {
|
|
1567
|
-
// console.log('📤 Sending message:', message);
|
|
1568
|
-
// console.log('📊 Current state:', {
|
|
1569
|
-
// sessionId,
|
|
1570
|
-
// isSignalRConnected,
|
|
1571
|
-
// messagesCount: messages.length,
|
|
1572
|
-
// selectedOptionId: selectedOption?.id,
|
|
1573
|
-
// });
|
|
1574
|
-
// let currentSessionId = sessionId;
|
|
1575
|
-
// if (message.trim() !== '') {
|
|
1576
|
-
// try {
|
|
1577
|
-
// setAssistantStatus('typing');
|
|
1578
|
-
// console.log('⏳ Assistant status set to typing');
|
|
1579
|
-
// const userMessage = {
|
|
1580
|
-
// id: Date.now(),
|
|
1581
|
-
// senderType: 1,
|
|
1582
|
-
// messageContent: message,
|
|
1583
|
-
// sentAt: new Date(),
|
|
1584
|
-
// isSeen: false,
|
|
1585
|
-
// };
|
|
1586
|
-
// console.log('✅ Adding user message to UI:', userMessage);
|
|
1587
|
-
// setMessages((prevMessages) => [...prevMessages, userMessage]);
|
|
1588
|
-
// if (!currentSessionId) {
|
|
1589
|
-
// console.log('🆕 No existing session, creating new one...');
|
|
1590
|
-
// const chatSessionCreateDto = {
|
|
1591
|
-
// helpScreenId: helpScreenId,
|
|
1592
|
-
// optionId: selectedOption?.id,
|
|
1593
|
-
// user: {
|
|
1594
|
-
// id: user?.id,
|
|
1595
|
-
// name: user?.name,
|
|
1596
|
-
// email: user?.email,
|
|
1597
|
-
// },
|
|
1598
|
-
// };
|
|
1599
|
-
// console.log('📡 Creating new session with data:', chatSessionCreateDto);
|
|
1600
|
-
// const response = await apiRequest('Client/ClientChatSession/create-session', 'POST', chatSessionCreateDto);
|
|
1601
|
-
// if (!response.ok) {
|
|
1602
|
-
// throw new Error('Failed to create chat session');
|
|
1603
|
-
// }
|
|
1604
|
-
// const createdSession = await response.json();
|
|
1605
|
-
// console.log('✅ New session created:', createdSession);
|
|
1606
|
-
// setSessionId(createdSession.id);
|
|
1607
|
-
// currentSessionId = createdSession.id;
|
|
1608
|
-
// console.log('🔌 Starting SignalR connection for new session...');
|
|
1609
|
-
// const tokenResponse = await configService.getToken();
|
|
1610
|
-
// await ClientSignalRService.startConnection(createdSession.id, tokenResponse, handleReceiveMessage);
|
|
1611
|
-
// setIsSignalRConnected(true);
|
|
1612
|
-
// console.log('✅ SignalR connection established for new session');
|
|
1613
|
-
// }
|
|
1614
|
-
// const messageDto = { messageContent: message };
|
|
1615
|
-
// console.log('📡 Sending message to API:', messageDto);
|
|
1616
|
-
// console.log('🎯 Target endpoint:', `Client/ClientChatSession/${currentSessionId}/send-message`);
|
|
1617
|
-
// const response = await apiRequest(
|
|
1618
|
-
// `Client/ClientChatSession/${currentSessionId}/send-message`,
|
|
1619
|
-
// 'POST',
|
|
1620
|
-
// messageDto
|
|
1621
|
-
// );
|
|
1622
|
-
// if (!response.ok) {
|
|
1623
|
-
// throw new Error('Failed to send message');
|
|
1624
|
-
// }
|
|
1625
|
-
// console.log('✅ Message sent successfully to server');
|
|
1626
|
-
// console.log('⏳ Waiting for SignalR response...');
|
|
1627
|
-
// setMessages((prevMessages) =>
|
|
1628
|
-
// prevMessages.map((msg) => (msg.senderType === 1 && !msg.isSeen ? { ...msg, isSeen: true } : msg))
|
|
1629
|
-
// );
|
|
1630
|
-
// console.log('✅ User message marked as seen');
|
|
1631
|
-
// } catch (error) {
|
|
1632
|
-
// console.error('❌ Error in message handling:', error);
|
|
1633
|
-
// setAssistantStatus('idle');
|
|
1634
|
-
// const errorMessage = {
|
|
1635
|
-
// id: Date.now(),
|
|
1636
|
-
// senderType: 3,
|
|
1637
|
-
// messageContent:
|
|
1638
|
-
// 'Failed to send the message. Please try again.\n لم يتم إرسال الرسالة. يرجى المحاولة مرة أخرى.',
|
|
1639
|
-
// sentAt: new Date(),
|
|
1640
|
-
// isSeen: true,
|
|
1641
|
-
// };
|
|
1642
|
-
// console.log('📨 Adding error message:', errorMessage);
|
|
1643
|
-
// setMessages((prevMessages) => [...prevMessages, errorMessage]);
|
|
1644
|
-
// }
|
|
1645
|
-
// }
|
|
1646
|
-
// };
|
|
1647
1475
|
React.useEffect(() => {
|
|
1648
1476
|
if (isOpen && helpScreenId) {
|
|
1649
|
-
console.log('📊 Loading help screen data for ID:', helpScreenId);
|
|
1650
1477
|
setStatus('loading');
|
|
1651
1478
|
apiRequest(`client/clientHelpScreen/${helpScreenId}`)
|
|
1652
1479
|
.then((res) => res.json())
|
|
1653
1480
|
.then((data) => {
|
|
1654
|
-
console.log('✅ Help screen data loaded:', data);
|
|
1655
1481
|
setHelpScreenData(data);
|
|
1656
1482
|
setStatus('succeeded');
|
|
1657
1483
|
setError('');
|
|
1658
1484
|
})
|
|
1659
1485
|
.catch((err) => {
|
|
1660
|
-
console.error('❌ Failed to load help screen data:', err);
|
|
1661
1486
|
setError(err.message);
|
|
1662
1487
|
setStatus('failed');
|
|
1663
1488
|
});
|
|
1664
1489
|
}
|
|
1665
1490
|
}, [isOpen, helpScreenId]);
|
|
1666
|
-
React.useEffect(() => {
|
|
1667
|
-
console.log('🔄 SignalR connection status', isSignalRConnected);
|
|
1668
|
-
}, [isSignalRConnected]);
|
|
1669
1491
|
return (React__default["default"].createElement("div", { className: 'babylai-help-center-container mb-4' },
|
|
1670
1492
|
showArrowAnimation && !isOpen && (React__default["default"].createElement(FloatingMessage, { onClose: handleCloseArrowAnimation, message: messageLabel || t('homeSdk.needAssistance') })),
|
|
1671
1493
|
React__default["default"].createElement(HelpButton, { onClick: handleTogglePopup }),
|