@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.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: (props === null || props === void 0 ? void 0 : props.isLoading) || !props.isAblyConnected, 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' },
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', isAblyConnected }) => {
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 && isAblyConnected) {
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, isAblyConnected]);
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, isAblyConnected: isAblyConnected })));
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() && isAblyConnected) {
11282
+ if (message.trim()) {
11283
11283
  onSendMessage(message.trim());
11284
11284
  }
11285
- }, [onSendMessage, isAblyConnected]);
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
- await startNewChatSession(option);
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
- setSessionId(responseData.chatSession.id);
11494
- if ((_a = responseData.chatSession.assistant) === null || _a === void 0 ? void 0 : _a.greeting) {
11495
- setMessages([
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
- const chatSessionCreateDto = {
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);