@aslaluroba/help-center-react 3.0.3 → 3.0.4
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 +30 -58
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +30 -58
- package/dist/index.js.map +1 -1
- package/dist/ui/chatbot-popup/chat-window-screen/footer.d.ts +0 -1
- package/dist/ui/chatbot-popup/chat-window-screen/index.d.ts +1 -1
- package/package.json +1 -1
- package/src/ui/chatbot-popup/chat-window-screen/footer.tsx +1 -2
- package/src/ui/chatbot-popup/chat-window-screen/index.tsx +96 -99
- package/src/ui/help-center.tsx +28 -66
- package/src/ui/help-popup.tsx +3 -3
package/dist/index.js
CHANGED
|
@@ -10831,7 +10831,7 @@ const ChatWindowFooter = (props) => {
|
|
|
10831
10831
|
const { t, dir } = useLocalTranslation();
|
|
10832
10832
|
return (React__default["default"].createElement("footer", { className: 'babylai-flex babylai-items-center babylai-gap-2 babylai-relative babylai-rounded-full babylai-bg-white dark:!babylai-bg-storm-dust-900 babylai-m-4 md:babylai-m-6 md:babylai-py-3 md:babylai-px-4' },
|
|
10833
10833
|
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 dark:babylai-text-white' }),
|
|
10834
|
-
React__default["default"].createElement(Button, { variant: 'default', size: 'icon', onClick: props.handleSendMessage, disabled:
|
|
10834
|
+
React__default["default"].createElement(Button, { variant: 'default', size: 'icon', onClick: props.handleSendMessage, disabled: props === null || props === void 0 ? void 0 : props.isLoading, 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' },
|
|
10835
10835
|
React__default["default"].createElement(SvgEnvelope, { className: `babylai-w-4 babylai-h-4 ${dir === 'rtl' ? 'babylai-rotate-270' : ''}` }))));
|
|
10836
10836
|
};
|
|
10837
10837
|
|
|
@@ -10895,7 +10895,7 @@ const TypingIndicator = React__default["default"].memo(({ firstHumanAgentIndex }
|
|
|
10895
10895
|
React__default["default"].createElement("p", { className: 'babylai-text-sm babylai-opacity-70 dark:babylai-text-white' }, "..."))));
|
|
10896
10896
|
});
|
|
10897
10897
|
TypingIndicator.displayName = 'TypingIndicator';
|
|
10898
|
-
const ChatWindow = React__default["default"].memo(({ onSendMessage, messages, assistantStatus = 'loading'
|
|
10898
|
+
const ChatWindow = React__default["default"].memo(({ onSendMessage, messages, assistantStatus = 'loading' }) => {
|
|
10899
10899
|
const [inputMessage, setInputMessage] = React.useState('');
|
|
10900
10900
|
const messagesEndRef = React.useRef(null);
|
|
10901
10901
|
const scrollTimeoutRef = React.useRef(null);
|
|
@@ -10935,14 +10935,14 @@ const ChatWindow = React__default["default"].memo(({ onSendMessage, messages, as
|
|
|
10935
10935
|
}
|
|
10936
10936
|
}, [inputMessage, onSendMessage]);
|
|
10937
10937
|
const handleKeyDown = React.useCallback((e) => {
|
|
10938
|
-
if (e.key === 'Enter' && !e.shiftKey
|
|
10938
|
+
if (e.key === 'Enter' && !e.shiftKey) {
|
|
10939
10939
|
e.preventDefault();
|
|
10940
10940
|
if (inputMessage.trim() && assistantStatus !== 'typing') {
|
|
10941
10941
|
onSendMessage(inputMessage);
|
|
10942
10942
|
setInputMessage('');
|
|
10943
10943
|
}
|
|
10944
10944
|
}
|
|
10945
|
-
}, [inputMessage, onSendMessage, assistantStatus
|
|
10945
|
+
}, [inputMessage, onSendMessage, assistantStatus]);
|
|
10946
10946
|
// Memoize the first human agent index calculation
|
|
10947
10947
|
const firstHumanAgentIndex = React.useMemo(() => {
|
|
10948
10948
|
return messages.findIndex((message) => message.senderType === 2);
|
|
@@ -10963,7 +10963,7 @@ const ChatWindow = React__default["default"].memo(({ onSendMessage, messages, as
|
|
|
10963
10963
|
messagesList,
|
|
10964
10964
|
assistantStatus === 'typing' && React__default["default"].createElement(TypingIndicator, { firstHumanAgentIndex: firstHumanAgentIndex }),
|
|
10965
10965
|
React__default["default"].createElement("div", { ref: messagesEndRef })),
|
|
10966
|
-
React__default["default"].createElement(ChatWindowFooter, { inputMessage: inputMessage, handleKeyDown: handleKeyDown, handleSendMessage: handleSendMessage, setInputMessage: setInputMessage, isLoading: isLoading
|
|
10966
|
+
React__default["default"].createElement(ChatWindowFooter, { inputMessage: inputMessage, handleKeyDown: handleKeyDown, handleSendMessage: handleSendMessage, setInputMessage: setInputMessage, isLoading: isLoading })));
|
|
10967
10967
|
});
|
|
10968
10968
|
ChatWindow.displayName = 'ChatWindow';
|
|
10969
10969
|
|
|
@@ -11279,10 +11279,10 @@ function HelpPopup({ onClose, helpScreen, status, error, onStartChat, onSendMess
|
|
|
11279
11279
|
}
|
|
11280
11280
|
}, [onStartChat, setSelectedOption, sessionId, setStartNewChatConfirmation, setTempSelectedOption]);
|
|
11281
11281
|
const handleSendMessage = React.useCallback((message) => {
|
|
11282
|
-
if (message.trim()
|
|
11282
|
+
if (message.trim()) {
|
|
11283
11283
|
onSendMessage(message.trim());
|
|
11284
11284
|
}
|
|
11285
|
-
}, [onSendMessage
|
|
11285
|
+
}, [onSendMessage]);
|
|
11286
11286
|
const hideEndChatConfirmation = React.useCallback(() => {
|
|
11287
11287
|
setEndChatConfirmation(false);
|
|
11288
11288
|
}, []);
|
|
@@ -11466,14 +11466,23 @@ function HelpCenter({ helpScreenId, user, showArrow = true, language = 'en', mes
|
|
|
11466
11466
|
setReviewSessionId(null);
|
|
11467
11467
|
};
|
|
11468
11468
|
const handleStartChat = async (option) => {
|
|
11469
|
-
|
|
11469
|
+
var _a;
|
|
11470
|
+
setMessages([
|
|
11471
|
+
{
|
|
11472
|
+
id: Date.now(),
|
|
11473
|
+
senderType: 3,
|
|
11474
|
+
messageContent: ((_a = option === null || option === void 0 ? void 0 : option.assistant) === null || _a === void 0 ? void 0 : _a.greeting) || 'مرحباً! كيف يمكنني مساعدتك اليوم؟',
|
|
11475
|
+
sentAt: new Date(),
|
|
11476
|
+
isSeen: true,
|
|
11477
|
+
},
|
|
11478
|
+
]);
|
|
11479
|
+
setIsChatClosed(false);
|
|
11480
|
+
setStatus('succeeded');
|
|
11470
11481
|
};
|
|
11471
11482
|
const startNewChatSession = async (option) => {
|
|
11472
|
-
var _a;
|
|
11473
11483
|
try {
|
|
11474
11484
|
setStatus('loading');
|
|
11475
11485
|
setError('');
|
|
11476
|
-
setMessages([]);
|
|
11477
11486
|
const chatSessionCreateDto = {
|
|
11478
11487
|
helpScreenId: helpScreenId,
|
|
11479
11488
|
optionId: option.id,
|
|
@@ -11490,30 +11499,9 @@ function HelpCenter({ helpScreenId, user, showArrow = true, language = 'en', mes
|
|
|
11490
11499
|
throw new Error('Failed to create chat session');
|
|
11491
11500
|
}
|
|
11492
11501
|
const responseData = await response.json();
|
|
11493
|
-
|
|
11494
|
-
|
|
11495
|
-
|
|
11496
|
-
{
|
|
11497
|
-
id: Date.now(),
|
|
11498
|
-
senderType: 3,
|
|
11499
|
-
messageContent: responseData.chatSession.assistant.greeting,
|
|
11500
|
-
sentAt: new Date(),
|
|
11501
|
-
isSeen: true,
|
|
11502
|
-
},
|
|
11503
|
-
]);
|
|
11504
|
-
}
|
|
11505
|
-
else {
|
|
11506
|
-
setMessages([
|
|
11507
|
-
{
|
|
11508
|
-
id: Date.now(),
|
|
11509
|
-
senderType: 3,
|
|
11510
|
-
messageContent: 'Hello! How can I assist you today?\nمرحباً! كيف يمكنني مساعدتك اليوم؟',
|
|
11511
|
-
sentAt: new Date(),
|
|
11512
|
-
isSeen: true,
|
|
11513
|
-
},
|
|
11514
|
-
]);
|
|
11515
|
-
}
|
|
11516
|
-
await ClientAblyService.startConnection(responseData.chatSession.id, responseData.ablyToken, handleReceiveMessage, responseData.chatSession.tenantId);
|
|
11502
|
+
const newSessionId = responseData.chatSession.id;
|
|
11503
|
+
setSessionId(newSessionId);
|
|
11504
|
+
await ClientAblyService.startConnection(newSessionId, responseData.ablyToken, handleReceiveMessage, responseData.chatSession.tenantId);
|
|
11517
11505
|
// Verify the connection is actually active
|
|
11518
11506
|
if (!ClientAblyService.isConnectionActive()) {
|
|
11519
11507
|
throw new Error('Ably connection failed to establish properly');
|
|
@@ -11521,19 +11509,15 @@ function HelpCenter({ helpScreenId, user, showArrow = true, language = 'en', mes
|
|
|
11521
11509
|
setIsAblyConnected(true);
|
|
11522
11510
|
setIsChatClosed(false);
|
|
11523
11511
|
setStatus('succeeded');
|
|
11512
|
+
return newSessionId; // Return the session ID
|
|
11524
11513
|
}
|
|
11525
11514
|
catch (error) {
|
|
11526
11515
|
setError(error instanceof Error ? error.message : 'Failed to start chat session');
|
|
11527
11516
|
setStatus('failed');
|
|
11517
|
+
throw error; // Re-throw to handle in calling function
|
|
11528
11518
|
}
|
|
11529
11519
|
};
|
|
11530
11520
|
const handleSendMessage = async (message) => {
|
|
11531
|
-
// Only send message if Ably is connected
|
|
11532
|
-
if (!isAblyConnected) {
|
|
11533
|
-
setError('Connection lost. Please try again.');
|
|
11534
|
-
return;
|
|
11535
|
-
}
|
|
11536
|
-
let currentSessionId = sessionId;
|
|
11537
11521
|
if (message.trim() !== '') {
|
|
11538
11522
|
try {
|
|
11539
11523
|
setAssistantStatus('typing');
|
|
@@ -11545,25 +11529,13 @@ function HelpCenter({ helpScreenId, user, showArrow = true, language = 'en', mes
|
|
|
11545
11529
|
isSeen: false,
|
|
11546
11530
|
};
|
|
11547
11531
|
setMessages((prevMessages) => [...prevMessages, userMessage]);
|
|
11532
|
+
// Handle session creation if needed
|
|
11533
|
+
let currentSessionId = sessionId;
|
|
11534
|
+
if (!isAblyConnected && selectedOption) {
|
|
11535
|
+
currentSessionId = await startNewChatSession(selectedOption);
|
|
11536
|
+
}
|
|
11548
11537
|
if (!currentSessionId) {
|
|
11549
|
-
|
|
11550
|
-
helpScreenId: helpScreenId,
|
|
11551
|
-
optionId: selectedOption === null || selectedOption === void 0 ? void 0 : selectedOption.id,
|
|
11552
|
-
user: {
|
|
11553
|
-
id: user === null || user === void 0 ? void 0 : user.id,
|
|
11554
|
-
name: user === null || user === void 0 ? void 0 : user.name,
|
|
11555
|
-
email: user === null || user === void 0 ? void 0 : user.email,
|
|
11556
|
-
},
|
|
11557
|
-
};
|
|
11558
|
-
const response = await apiRequest('Client/ClientChatSession/create-session', 'POST', chatSessionCreateDto);
|
|
11559
|
-
if (!response.ok) {
|
|
11560
|
-
throw new Error('Failed to create chat session');
|
|
11561
|
-
}
|
|
11562
|
-
const responseData = await response.json();
|
|
11563
|
-
setSessionId(responseData.chatSession.id);
|
|
11564
|
-
currentSessionId = responseData.chatSession.id;
|
|
11565
|
-
await ClientAblyService.startConnection(responseData.chatSession.id, responseData.ablyToken, handleReceiveMessage, responseData.chatSession.tenantId);
|
|
11566
|
-
setIsAblyConnected(true);
|
|
11538
|
+
throw new Error('No active session available');
|
|
11567
11539
|
}
|
|
11568
11540
|
const messageDto = { messageContent: message };
|
|
11569
11541
|
const response = await apiRequest(`Client/ClientChatSession/${currentSessionId}/send-message`, 'POST', messageDto);
|