sceyt-chat-react-uikit 1.9.0-beta.13 → 1.9.0-beta.14

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/index.js CHANGED
@@ -31515,11 +31515,38 @@ function MembersSaga$1() {
31515
31515
  var isPinnedMessageDeleted = function isPinnedMessageDeleted(message) {
31516
31516
  return (message === null || message === void 0 ? void 0 : message.state) === MESSAGE_STATUS.DELETE;
31517
31517
  };
31518
- var getPinnedMessagePreview = function getPinnedMessagePreview(message) {
31519
- var _message$body, _message$attachments;
31518
+ var getPinnedMessageBody = function getPinnedMessageBody(message, contactsMap, getFromContacts) {
31519
+ var _message$bodyAttribut;
31520
+ if (contactsMap === void 0) {
31521
+ contactsMap = {};
31522
+ }
31523
+ if (getFromContacts === void 0) {
31524
+ getFromContacts = false;
31525
+ }
31526
+ var body = (message === null || message === void 0 ? void 0 : message.body) || '';
31527
+ if (!body || !(message !== null && message !== void 0 && (_message$bodyAttribut = message.bodyAttributes) !== null && _message$bodyAttribut !== void 0 && _message$bodyAttribut.length)) return body;
31528
+ var formattedBody = MessageTextFormat({
31529
+ text: body,
31530
+ message: message,
31531
+ contactsMap: contactsMap,
31532
+ getFromContacts: getFromContacts,
31533
+ asSampleText: true,
31534
+ accentColor: '',
31535
+ textSecondary: ''
31536
+ });
31537
+ return Array.isArray(formattedBody) ? formattedBody.join('') : String(formattedBody);
31538
+ };
31539
+ var getPinnedMessagePreview = function getPinnedMessagePreview(message, contactsMap, getFromContacts) {
31540
+ var _message$attachments;
31541
+ if (contactsMap === void 0) {
31542
+ contactsMap = {};
31543
+ }
31544
+ if (getFromContacts === void 0) {
31545
+ getFromContacts = false;
31546
+ }
31520
31547
  if (!message) return '';
31521
31548
  if (isPinnedMessageDeleted(message)) return 'Deleted message';
31522
- var body = (_message$body = message.body) === null || _message$body === void 0 ? void 0 : _message$body.trim();
31549
+ var body = getPinnedMessageBody(message, contactsMap, getFromContacts).trim();
31523
31550
  if (body) return body;
31524
31551
  if (message.pollDetails) return message.pollDetails.name || 'Poll';
31525
31552
  var attachment = (_message$attachments = message.attachments) === null || _message$attachments === void 0 ? void 0 : _message$attachments[0];
@@ -33918,16 +33945,13 @@ var ChannelMessageText = function ChannelMessageText(_ref2) {
33918
33945
  unsupportedMessage = _ref2.unsupportedMessage;
33919
33946
  var isViewOnce = (lastMessage === null || lastMessage === void 0 ? void 0 : lastMessage.type) === exports.MESSAGE_TYPE.VIEW_ONCE && (lastMessage === null || lastMessage === void 0 ? void 0 : lastMessage.viewOnce);
33920
33947
  var systemMessageActor = lastMessage.user ? lastMessage.user.id === user.id ? 'You' : makeUsername(lastMessage.user && contactsMap && contactsMap[lastMessage.user.id], lastMessage.user, getFromContacts, true) : '';
33921
- var audioRecording = React.useMemo(function () {
33922
- return getAudioRecordingFromMap(channel.id);
33923
- }, [channel.id, draftMessageText]);
33924
33948
  return /*#__PURE__*/React__default.createElement(MessageTextContainer, null, isTypingOrRecording && (/*#__PURE__*/React__default.createElement(TypingIndicator, null, !isDirectChannel && /*#__PURE__*/React__default.createElement(Points, {
33925
33949
  color: textPrimary
33926
33950
  }, ":"), typingOrRecording.isTyping ? 'typing' : 'recording', "...")), !isTypingOrRecording && (draftMessageText ? (/*#__PURE__*/React__default.createElement(DraftMessageText, {
33927
33951
  color: textSecondary
33928
33952
  }, !lastMessage.body && (_lastMessage$attachme = lastMessage.attachments) !== null && _lastMessage$attachme !== void 0 && _lastMessage$attachme.length ? LastMessageAttachments({
33929
33953
  lastMessage: lastMessage
33930
- }) : null, audioRecording && /*#__PURE__*/React__default.createElement(SvgVoiceIcon, null), (!((_lastMessage$attachme2 = lastMessage.attachments) !== null && _lastMessage$attachme2 !== void 0 && _lastMessage$attachme2.length) || lastMessage.body) && MessageTextFormat({
33954
+ }) : null, (!((_lastMessage$attachme2 = lastMessage.attachments) !== null && _lastMessage$attachme2 !== void 0 && _lastMessage$attachme2.length) || lastMessage.body) && MessageTextFormat({
33931
33955
  text: (_lastMessage$attachme3 = lastMessage.attachments) !== null && _lastMessage$attachme3 !== void 0 && _lastMessage$attachme3.length ? lastMessage.body : draftMessageText,
33932
33956
  message: lastMessage,
33933
33957
  contactsMap: contactsMap,
@@ -43172,8 +43196,8 @@ var Message = function Message(_ref) {
43172
43196
  var actorName = message.incoming ? makeUsername(message.user && contactsMap[message.user.id], message.user, getFromContacts) : 'You';
43173
43197
  var parentMessageId = ((_message$parentMessag = message.parentMessage) === null || _message$parentMessag === void 0 ? void 0 : _message$parentMessag.id) || ((_message$parentMessag2 = message.parentMessage) === null || _message$parentMessag2 === void 0 ? void 0 : _message$parentMessag2.tid) || message.parentMessageId || message.parentId;
43174
43198
  var pinnedMessagePreview = React.useMemo(function () {
43175
- return getPinnedMessagePreview(message.parentMessage);
43176
- }, [message.parentMessage]);
43199
+ return getPinnedMessagePreview(message.parentMessage, contactsMap, getFromContacts);
43200
+ }, [contactsMap, getFromContacts, message.parentMessage]);
43177
43201
  var pinnedMessageDeleted = isPinnedMessageDeleted(message.parentMessage);
43178
43202
  var navigateToPinnedMessage = function navigateToPinnedMessage() {
43179
43203
  if (parentMessageId) navigateToMessage(parentMessageId);
@@ -43262,18 +43286,18 @@ var attachmentMetadata = function attachmentMetadata(attachment) {
43262
43286
  return {};
43263
43287
  }
43264
43288
  };
43265
- var preview = function preview(message) {
43289
+ var preview = function preview(message, contactsMap, getFromContacts) {
43266
43290
  var _message$attachments;
43267
43291
  if (isPinnedMessageDeleted(message)) return 'Deleted Message';
43268
43292
  if (message !== null && message !== void 0 && message.pollDetails) return "Poll: " + (message.pollDetails.name || message.body || 'Poll');
43269
43293
  var attachment = message === null || message === void 0 ? void 0 : (_message$attachments = message.attachments) === null || _message$attachments === void 0 ? void 0 : _message$attachments[0];
43270
- if (!attachment) return (message === null || message === void 0 ? void 0 : message.body) || (message !== null && message !== void 0 && message.forwardingDetails ? 'Shared content' : 'Message');
43294
+ if (!attachment) return getPinnedMessageBody(message, contactsMap, getFromContacts) || (message !== null && message !== void 0 && message.forwardingDetails ? 'Shared content' : 'Message');
43271
43295
  var metadata = attachmentMetadata(attachment);
43272
43296
  if (attachment.type === attachmentTypes.voice) {
43273
43297
  var duration = metadata.duration || metadata.dur || attachment.duration;
43274
43298
  return "Voice" + (duration ? ": " + formatDuration(duration) : '');
43275
43299
  }
43276
- if (message !== null && message !== void 0 && message.body) return message.body;
43300
+ if (message !== null && message !== void 0 && message.body) return getPinnedMessageBody(message, contactsMap, getFromContacts);
43277
43301
  if (attachment.type === attachmentTypes.image) return 'Photo';
43278
43302
  if (attachment.type === attachmentTypes.video) {
43279
43303
  return 'Video';
@@ -43309,6 +43333,8 @@ var PinnedMessagesBanner = function PinnedMessagesBanner(_ref) {
43309
43333
  var dispatch = useDispatch();
43310
43334
  var pins = useSelector(pinnedMessagesSelector(channelId));
43311
43335
  var nextToken = useSelector(pinnedMessagesCursorSelector(channelId));
43336
+ var contactsMap = useSelector(contactsMapSelector);
43337
+ var getFromContacts = getShowOnlyContactUsers();
43312
43338
  var _useColor = useColors(),
43313
43339
  surface1 = _useColor[THEME_COLORS.SURFACE_1],
43314
43340
  textPrimary = _useColor[THEME_COLORS.TEXT_PRIMARY],
@@ -43464,7 +43490,7 @@ var PinnedMessagesBanner = function PinnedMessagesBanner(_ref) {
43464
43490
  }, /*#__PURE__*/React__default.createElement("strong", null, "Pinned messages"), /*#__PURE__*/React__default.createElement(PinnedCopyPreview, {
43465
43491
  key: active.id,
43466
43492
  textPrimary: textPrimary
43467
- }, preview(active.message))), /*#__PURE__*/React__default.createElement(Controls$1, {
43493
+ }, preview(active.message, contactsMap, getFromContacts))), /*#__PURE__*/React__default.createElement(Controls$1, {
43468
43494
  onClick: function onClick(event) {
43469
43495
  return event.stopPropagation();
43470
43496
  },
@@ -45735,7 +45761,12 @@ var PinnedMessagesList = function PinnedMessagesList(_ref) {
45735
45761
  var rowBounds = event.currentTarget.getBoundingClientRect();
45736
45762
  var contentBounds = messageContent.getBoundingClientRect();
45737
45763
  var messageItem = event.currentTarget.querySelector('.message_item');
45738
- var bottom = messageItem ? Number.parseFloat(window.getComputedStyle(messageItem).marginBottom) || 0 : 0;
45764
+ var reactionContainerId = message.id + "_reactions_container";
45765
+ var reactionContainer = Array.from(event.currentTarget.querySelectorAll('[id]')).find(function (element) {
45766
+ return element.id === reactionContainerId;
45767
+ });
45768
+ var itemMarginBottom = messageItem ? Number.parseFloat(window.getComputedStyle(messageItem).marginBottom) || 0 : 0;
45769
+ var bottom = itemMarginBottom + ((reactionContainer === null || reactionContainer === void 0 ? void 0 : reactionContainer.getBoundingClientRect().height) || 0);
45739
45770
  var left = message.incoming ? contentBounds.right - rowBounds.left + 8 : contentBounds.left - rowBounds.left - 36 - 8;
45740
45771
  setNavigationOffsets(function (current) {
45741
45772
  var _extends2;
@@ -49330,6 +49361,8 @@ function ReactionsPopup(_ref) {
49330
49361
  reactionTotals = _ref.reactionTotals,
49331
49362
  reactionsDetailsPopupBorderRadius = _ref.reactionsDetailsPopupBorderRadius,
49332
49363
  reactionsDetailsPopupHeaderItemsStyle = _ref.reactionsDetailsPopupHeaderItemsStyle,
49364
+ _ref$popupZIndex = _ref.popupZIndex,
49365
+ popupZIndex = _ref$popupZIndex === void 0 ? 12 : _ref$popupZIndex,
49333
49366
  rtlDirection = _ref.rtlDirection,
49334
49367
  openUserProfile = _ref.openUserProfile;
49335
49368
  var _useColor = useColors(),
@@ -49444,9 +49477,9 @@ function ReactionsPopup(_ref) {
49444
49477
  bottom: bottom,
49445
49478
  left: left,
49446
49479
  right: right,
49447
- zIndex: 12
49480
+ zIndex: popupZIndex
49448
49481
  };
49449
- }, [popupVerticalPosition, anchorTop, anchorBottom, horizontalPositions, rtlDirection]);
49482
+ }, [popupVerticalPosition, anchorTop, anchorBottom, horizontalPositions, popupZIndex, rtlDirection]);
49450
49483
  return /*#__PURE__*/reactDom.createPortal(/*#__PURE__*/React__default.createElement(Container$i, {
49451
49484
  ref: popupRef,
49452
49485
  popupVerticalPosition: popupVerticalPosition,
@@ -49617,6 +49650,7 @@ var MessageReactions = function MessageReactions(_ref) {
49617
49650
  reactionsContainerPadding = _ref.reactionsContainerPadding,
49618
49651
  reactionsDetailsPopupBorderRadius = _ref.reactionsDetailsPopupBorderRadius,
49619
49652
  reactionsDetailsPopupHeaderItemsStyle = _ref.reactionsDetailsPopupHeaderItemsStyle,
49653
+ popupZIndex = _ref.popupZIndex,
49620
49654
  onToggleReactionsPopup = _ref.onToggleReactionsPopup,
49621
49655
  onReactionAddDelete = _ref.onReactionAddDelete,
49622
49656
  onOpenUserProfile = _ref.onOpenUserProfile;
@@ -49638,7 +49672,8 @@ var MessageReactions = function MessageReactions(_ref) {
49638
49672
  rtlDirection: rtlDirection,
49639
49673
  handleAddDeleteEmoji: onReactionAddDelete,
49640
49674
  reactionsDetailsPopupBorderRadius: reactionsDetailsPopupBorderRadius,
49641
- reactionsDetailsPopupHeaderItemsStyle: reactionsDetailsPopupHeaderItemsStyle
49675
+ reactionsDetailsPopupHeaderItemsStyle: reactionsDetailsPopupHeaderItemsStyle,
49676
+ popupZIndex: popupZIndex
49642
49677
  })), /*#__PURE__*/React__default.createElement(ReactionsContainer, {
49643
49678
  ref: enableTransitionRef,
49644
49679
  id: message.id + "_reactions_container",
@@ -51056,17 +51091,10 @@ var Message$1 = function Message(_ref) {
51056
51091
  var selectionIsActive = selectedMessagesMap && selectedMessagesMap.size > 0;
51057
51092
  var isSelectedMessage = selectedMessagesMap && selectedMessagesMap.get(message.id || message.tid);
51058
51093
  var tooManySelected = selectedMessagesMap && selectedMessagesMap.size >= MAX_SELECTED_MESSAGES;
51059
- var openPinnedMessageInConversation = React.useCallback(function () {
51060
- if (!isPinnedMessagesList) return;
51061
- var messageId = message.id || message.tid;
51062
- if (messageId) navigateToMessage(messageId);
51063
- dispatch(requestPinnedMessagesListCloseAC());
51064
- }, [dispatch, isPinnedMessagesList, message.id, message.tid]);
51065
51094
  var toggleEditMode = React.useCallback(function () {
51066
- openPinnedMessageInConversation();
51067
51095
  dispatch(setMessageToEditAC(message));
51068
51096
  setMessageActionsShow(false);
51069
- }, [dispatch, message, openPinnedMessageInConversation]);
51097
+ }, [dispatch, message]);
51070
51098
  var handleRetractVote = React.useCallback(function () {
51071
51099
  var _message$pollDetails;
51072
51100
  if (message !== null && message !== void 0 && (_message$pollDetails = message.pollDetails) !== null && _message$pollDetails !== void 0 && _message$pollDetails.id) {
@@ -51133,12 +51161,11 @@ var Message$1 = function Message(_ref) {
51133
51161
  setMessageActionsShow(false);
51134
51162
  }, [channel.id, dispatch, message, pinnedMessage, setMessageActionsShow]);
51135
51163
  var handleReplyMessage = React.useCallback(function (threadReply) {
51136
- openPinnedMessageInConversation();
51137
51164
  if (threadReply) ; else {
51138
51165
  dispatch(setMessageForReplyAC(message));
51139
51166
  }
51140
51167
  setMessageActionsShow(false);
51141
- }, [dispatch, message, openPinnedMessageInConversation]);
51168
+ }, [dispatch, message]);
51142
51169
  var handleToggleReportPopupOpen = React.useCallback(function () {
51143
51170
  setReportPopupOpen(function (prev) {
51144
51171
  return !prev;
@@ -51383,7 +51410,7 @@ var Message$1 = function Message(_ref) {
51383
51410
  if (!reactionsPopupOpen) {
51384
51411
  return undefined;
51385
51412
  }
51386
- var scrollContainer = document.getElementById('scrollableDiv');
51413
+ var scrollContainer = document.getElementById(isPinnedMessagesList ? 'pinnedScrollableDiv' : 'scrollableDiv');
51387
51414
  if (!scrollContainer) {
51388
51415
  return undefined;
51389
51416
  }
@@ -51396,7 +51423,7 @@ var Message$1 = function Message(_ref) {
51396
51423
  return function () {
51397
51424
  scrollContainer.removeEventListener('scroll', handleChatScroll);
51398
51425
  };
51399
- }, [reactionsPopupOpen]);
51426
+ }, [isPinnedMessagesList, reactionsPopupOpen]);
51400
51427
  React.useEffect(function () {
51401
51428
  document.addEventListener('mousedown', handleClick);
51402
51429
  return function () {
@@ -51489,6 +51516,7 @@ var Message$1 = function Message(_ref) {
51489
51516
  ifLatestAndHasNotPreview: ifLatestAndHasNotPreview,
51490
51517
  channel: channel,
51491
51518
  message: message,
51519
+ isPinnedMessagesList: isPinnedMessagesList,
51492
51520
  prevMessage: prevMessage,
51493
51521
  nextMessage: nextMessage,
51494
51522
  unreadMessageId: unreadMessageId,
@@ -51713,6 +51741,7 @@ var Message$1 = function Message(_ref) {
51713
51741
  reactionsContainerPadding: reactionsContainerPadding,
51714
51742
  reactionsDetailsPopupBorderRadius: reactionsDetailsPopupBorderRadius,
51715
51743
  reactionsDetailsPopupHeaderItemsStyle: reactionsDetailsPopupHeaderItemsStyle,
51744
+ popupZIndex: isPinnedMessagesList ? 30 : undefined,
51716
51745
  onToggleReactionsPopup: handleToggleReactionsPopup,
51717
51746
  onReactionAddDelete: handleReactionAddDelete,
51718
51747
  onOpenUserProfile: handleOpenUserProfile
@@ -52662,13 +52691,13 @@ var MessageList = function MessageList(_ref) {
52662
52691
  MessageActionsMenu: MessageActionsMenu,
52663
52692
  CustomMessageItem: CustomMessageItem,
52664
52693
  messageReaction: messageReaction,
52665
- editMessage: editMessage,
52694
+ editMessage: isPinnedMessagesList ? false : editMessage,
52666
52695
  copyMessage: copyMessage,
52667
- replyMessage: replyMessage,
52668
- replyMessageInThread: replyMessageInThread,
52696
+ replyMessage: isPinnedMessagesList ? false : replyMessage,
52697
+ replyMessageInThread: isPinnedMessagesList ? false : replyMessageInThread,
52669
52698
  deleteMessage: deleteMessage,
52670
52699
  selectMessage: selectMessage,
52671
- showInfoMessage: showInfoMessage,
52700
+ showInfoMessage: isPinnedMessagesList ? false : showInfoMessage,
52672
52701
  allowEditDeleteIncomingMessage: allowEditDeleteIncomingMessage,
52673
52702
  reportMessage: reportMessage,
52674
52703
  reactionIcon: reactionIcon,
@@ -55357,6 +55386,9 @@ var AudioRecord = function AudioRecord(_ref) {
55357
55386
  var recordButtonRef = React.useRef(null);
55358
55387
  var audioElements = React.useRef({});
55359
55388
  var intervalRef = React.useRef({});
55389
+ var isStoppingRef = React.useRef(false);
55390
+ var isStartingRef = React.useRef(false);
55391
+ var isRecordingRef = React.useRef(false);
55360
55392
  var currentRecordedFile = React.useMemo(function () {
55361
55393
  var current = getAudioRecordingFromMap(currentChannelId) || recordedFile;
55362
55394
  return current;
@@ -55434,17 +55466,13 @@ var AudioRecord = function AudioRecord(_ref) {
55434
55466
  setPlayAudio(false);
55435
55467
  clearInterval(intervalRef.current[id]);
55436
55468
  });
55437
- audio.addEventListener('error', function () {
55438
- var _audio$error;
55439
- log.error('Audio playback error:', (_audio$error = audio.error) === null || _audio$error === void 0 ? void 0 : _audio$error.message);
55440
- });
55441
55469
  audio.src = fileData.objectUrl;
55442
55470
  };
55443
55471
  var startRecording = function startRecording(cId) {
55444
55472
  try {
55445
55473
  var id = cId || currentChannelId;
55446
55474
  try {
55447
- if (recording) {
55475
+ if (recording || isRecordingRef.current) {
55448
55476
  stopRecording(true, id, false, recorder);
55449
55477
  } else if (currentRecordedFile) {
55450
55478
  if (!currentRecordedFile.dur) {
@@ -55460,8 +55488,16 @@ var AudioRecord = function AudioRecord(_ref) {
55460
55488
  dispatch(setChannelDraftMessageIsRemovedAC(id));
55461
55489
  sendRecordedFile(currentRecordedFile, id);
55462
55490
  } else {
55463
- if (!recorder) return Promise.resolve();
55491
+ if (!recorder) {
55492
+ return Promise.resolve();
55493
+ }
55494
+ if (isStartingRef.current) {
55495
+ return Promise.resolve();
55496
+ }
55497
+ isStartingRef.current = true;
55464
55498
  recorder.start().then(function () {
55499
+ isStartingRef.current = false;
55500
+ isRecordingRef.current = true;
55465
55501
  handleStartRecording();
55466
55502
  setAudioRecordingToMap(id, {
55467
55503
  file: null,
@@ -55550,17 +55586,19 @@ var AudioRecord = function AudioRecord(_ref) {
55550
55586
  };
55551
55587
  soundAllowed(stream);
55552
55588
  })["catch"](function (e) {
55589
+ isStartingRef.current = false;
55590
+ isRecordingRef.current = false;
55553
55591
  if ((e === null || e === void 0 ? void 0 : e.name) === 'NotAllowedError' || (e === null || e === void 0 ? void 0 : e.name) === 'PermissionDeniedError') {
55554
55592
  setMicrophonePermissionDenied(true);
55555
55593
  }
55556
- log.error(e);
55557
55594
  });
55558
55595
  }
55559
55596
  } catch (e) {
55597
+ isStartingRef.current = false;
55598
+ isRecordingRef.current = false;
55560
55599
  if ((e === null || e === void 0 ? void 0 : e.name) === 'NotAllowedError' || (e === null || e === void 0 ? void 0 : e.name) === 'PermissionDeniedError') {
55561
55600
  setMicrophonePermissionDenied(true);
55562
55601
  }
55563
- log.error(e);
55564
55602
  }
55565
55603
  return Promise.resolve();
55566
55604
  } catch (e) {
@@ -55568,7 +55606,12 @@ var AudioRecord = function AudioRecord(_ref) {
55568
55606
  }
55569
55607
  };
55570
55608
  var cancelRecording = React.useCallback(function () {
55609
+ if (isStoppingRef.current) {
55610
+ return;
55611
+ }
55571
55612
  handleStopRecording();
55613
+ isStartingRef.current = false;
55614
+ isRecordingRef.current = false;
55572
55615
  if (currentRecordedFile) {
55573
55616
  dispatch(setChannelDraftMessageIsRemovedAC(currentChannelId));
55574
55617
  if (currentRecordedFile.objectUrl && currentRecordedFile.objectUrl.startsWith('blob:')) {
@@ -55589,10 +55632,21 @@ var AudioRecord = function AudioRecord(_ref) {
55589
55632
  setShowRecording(false);
55590
55633
  }, [currentRecordedFile, currentChannelId, setShowRecording, setRecordedFile]);
55591
55634
  var stopRecording = React.useCallback(function (send, cId, draft, recorder) {
55635
+ var id = cId || channelId;
55636
+ if (isStoppingRef.current) {
55637
+ return;
55638
+ }
55639
+ if (!recorder) {
55640
+ return;
55641
+ }
55642
+ isStoppingRef.current = true;
55643
+ isStartingRef.current = false;
55644
+ isRecordingRef.current = false;
55592
55645
  handleStopRecording();
55593
55646
  shouldDraw = false;
55594
- var id = cId || channelId;
55595
- recorder === null || recorder === void 0 ? void 0 : recorder.stop().getMp3().then(function (_ref2) {
55647
+ Promise.resolve().then(function () {
55648
+ return recorder.stop().getMp3();
55649
+ }).then(function (_ref2) {
55596
55650
  var buffer = _ref2[0],
55597
55651
  blob = _ref2[1];
55598
55652
  var file = new File(buffer, 'record.mp3', {
@@ -55602,6 +55656,8 @@ var AudioRecord = function AudioRecord(_ref) {
55602
55656
  var audioContext = new (window.AudioContext || window.webkitAudioContext)();
55603
55657
  var reader = new FileReader();
55604
55658
  reader.onload = function (event) {
55659
+ var _event$target;
55660
+ var audioData = (_event$target = event.target) === null || _event$target === void 0 ? void 0 : _event$target.result;
55605
55661
  var closeDecodeContext = function closeDecodeContext() {
55606
55662
  if (audioContext.state !== 'closed') {
55607
55663
  audioContext.close()["catch"](function () {
@@ -55609,76 +55665,100 @@ var AudioRecord = function AudioRecord(_ref) {
55609
55665
  });
55610
55666
  }
55611
55667
  };
55612
- audioContext.decodeAudioData(event.target.result, function (audioBuffer) {
55668
+ var handleDecodeError = function handleDecodeError() {
55613
55669
  closeDecodeContext();
55614
- var numberOfSegments = 50;
55615
- var segmentSize = Math.floor(audioBuffer.length / numberOfSegments);
55616
- var waveform = [];
55617
- for (var i = 0; i < numberOfSegments; i++) {
55618
- var start = i * segmentSize;
55619
- var end = start + segmentSize;
55620
- var segment = audioBuffer.getChannelData(0).slice(start, end);
55621
- var maxAmplitude = 0;
55622
- for (var j = 0; j < segment.length; j++) {
55623
- var val = segment[j];
55624
- var absVal = val < 0 ? -val : val;
55625
- if (absVal > maxAmplitude) {
55626
- maxAmplitude = absVal;
55627
- }
55628
- }
55629
- waveform.push(Math.floor(maxAmplitude * 1000));
55630
- }
55631
55670
  setStartRecording(false);
55632
- var objectUrl = URL.createObjectURL(blob);
55633
- var durationInt = Math.round(audioBuffer.duration);
55634
- if (send) {
55635
- if (!durationInt) {
55636
- if (objectUrl.startsWith('blob:')) {
55637
- URL.revokeObjectURL(objectUrl);
55671
+ setShowRecording(false);
55672
+ removeAudioRecordingFromMap(id);
55673
+ dispatch(setChannelDraftMessageIsRemovedAC(id));
55674
+ isStoppingRef.current = false;
55675
+ };
55676
+ try {
55677
+ var decodeResult = audioContext.decodeAudioData(audioData, function (audioBuffer) {
55678
+ try {
55679
+ closeDecodeContext();
55680
+ var numberOfSegments = 50;
55681
+ var segmentSize = Math.floor(audioBuffer.length / numberOfSegments);
55682
+ var waveform = [];
55683
+ for (var i = 0; i < numberOfSegments; i++) {
55684
+ var start = i * segmentSize;
55685
+ var end = start + segmentSize;
55686
+ var segment = audioBuffer.getChannelData(0).slice(start, end);
55687
+ var maxAmplitude = 0;
55688
+ for (var j = 0; j < segment.length; j++) {
55689
+ var val = segment[j];
55690
+ var absVal = val < 0 ? -val : val;
55691
+ if (absVal > maxAmplitude) {
55692
+ maxAmplitude = absVal;
55693
+ }
55694
+ }
55695
+ waveform.push(Math.floor(maxAmplitude * 1000));
55638
55696
  }
55639
- setShowRecording(false);
55640
- removeAudioRecordingFromMap(id);
55641
- dispatch(setChannelDraftMessageIsRemovedAC(id));
55642
- return;
55643
- }
55644
- sendRecordedFile({
55645
- file: file,
55646
- objectUrl: objectUrl,
55647
- thumb: waveform,
55648
- dur: durationInt
55649
- }, id);
55650
- setShowRecording(false);
55651
- removeAudioRecordingFromMap(id);
55652
- dispatch(setChannelDraftMessageIsRemovedAC(id));
55653
- } else {
55654
- if (!draft) {
55655
- setRecordedFile({
55656
- file: file,
55657
- objectUrl: objectUrl,
55658
- thumb: waveform,
55659
- dur: durationInt
55660
- });
55661
- }
55662
- var audioRecording = {
55663
- file: file,
55664
- objectUrl: objectUrl,
55665
- thumb: waveform,
55666
- dur: durationInt
55667
- };
55668
- setAudioRecordingToMap(id, audioRecording);
55669
- if (draft) {
55670
- initAudioPlayback(draft, id, audioRecording);
55671
- }
55697
+ setStartRecording(false);
55698
+ var objectUrl = URL.createObjectURL(blob);
55699
+ var durationInt = Math.round(audioBuffer.duration);
55700
+ if (send) {
55701
+ if (!durationInt) {
55702
+ if (objectUrl.startsWith('blob:')) {
55703
+ URL.revokeObjectURL(objectUrl);
55704
+ }
55705
+ setShowRecording(false);
55706
+ removeAudioRecordingFromMap(id);
55707
+ dispatch(setChannelDraftMessageIsRemovedAC(id));
55708
+ isStoppingRef.current = false;
55709
+ return;
55710
+ }
55711
+ sendRecordedFile({
55712
+ file: file,
55713
+ objectUrl: objectUrl,
55714
+ thumb: waveform,
55715
+ dur: durationInt
55716
+ }, id);
55717
+ setShowRecording(false);
55718
+ removeAudioRecordingFromMap(id);
55719
+ dispatch(setChannelDraftMessageIsRemovedAC(id));
55720
+ } else {
55721
+ if (!draft) {
55722
+ setRecordedFile({
55723
+ file: file,
55724
+ objectUrl: objectUrl,
55725
+ thumb: waveform,
55726
+ dur: durationInt
55727
+ });
55728
+ }
55729
+ var audioRecording = {
55730
+ file: file,
55731
+ objectUrl: objectUrl,
55732
+ thumb: waveform,
55733
+ dur: durationInt
55734
+ };
55735
+ setAudioRecordingToMap(id, audioRecording);
55736
+ if (draft) {
55737
+ initAudioPlayback(draft, id, audioRecording);
55738
+ }
55739
+ }
55740
+ isStoppingRef.current = false;
55741
+ } catch (_unused) {}
55742
+ }, handleDecodeError);
55743
+ if (decodeResult && typeof decodeResult["catch"] === 'function') {
55744
+ decodeResult["catch"](function () {
55745
+ return undefined;
55746
+ });
55672
55747
  }
55673
- }, function (e) {
55674
- closeDecodeContext();
55675
- log.info('Error decoding audio data: ' + e.err);
55676
- });
55748
+ } catch (_unused2) {}
55749
+ };
55750
+ reader.onerror = function () {
55751
+ if (audioContext.state !== 'closed') {
55752
+ audioContext.close()["catch"](function () {
55753
+ return undefined;
55754
+ });
55755
+ }
55756
+ isStoppingRef.current = false;
55677
55757
  };
55678
55758
  reader.readAsArrayBuffer(blob);
55679
- })["catch"](function (e) {
55759
+ })["catch"](function () {
55760
+ isStoppingRef.current = false;
55680
55761
  handleStopRecording();
55681
- log.error(e);
55682
55762
  });
55683
55763
  }, [sendRecordedFile, setShowRecording, setAudioRecordingToMap, setRecordedFile, handleStopRecording, channelId]);
55684
55764
  var handlePlayPause = function handlePlayPause(cId) {
@@ -55695,8 +55775,7 @@ var AudioRecord = function AudioRecord(_ref) {
55695
55775
  setCurrentTimeSeconds(time);
55696
55776
  }
55697
55777
  }, 10);
55698
- audio.play()["catch"](function (e) {
55699
- log.error('Audio play failed:', e);
55778
+ audio.play()["catch"](function () {
55700
55779
  setPlayAudio(false);
55701
55780
  });
55702
55781
  } else {
@@ -55790,9 +55869,7 @@ var AudioRecord = function AudioRecord(_ref) {
55790
55869
  bitRate: 128
55791
55870
  });
55792
55871
  setRecorder(newRecorder);
55793
- } catch (e) {
55794
- log.error('Failed to init mic-recorder-to-mp3', e);
55795
- }
55872
+ } catch (_unused3) {}
55796
55873
  }
55797
55874
  } catch (e) {
55798
55875
  Promise.reject(e);
@@ -56644,101 +56721,109 @@ var SendMessageInput = function SendMessageInput(_ref3) {
56644
56721
  var _useState = React.useState(false),
56645
56722
  showRecording = _useState[0],
56646
56723
  setShowRecording = _useState[1];
56724
+ var _useState2 = React.useState(0),
56725
+ setAudioRecordingRevision = _useState2[1];
56726
+ var handleShowRecording = React.useCallback(function (start) {
56727
+ setShowRecording(start);
56728
+ setAudioRecordingRevision(function (revision) {
56729
+ return revision + 1;
56730
+ });
56731
+ }, []);
56647
56732
  var _usePermissions = usePermissions(activeChannel.userRole),
56648
56733
  checkActionPermission = _usePermissions[0];
56649
- var _useState2 = React.useState(false),
56650
- listenerIsAdded = _useState2[0],
56651
- setListenerIsAdded = _useState2[1];
56652
- var _useState3 = React.useState(''),
56653
- messageText = _useState3[0],
56654
- setMessageText = _useState3[1];
56734
+ var _useState3 = React.useState(false),
56735
+ listenerIsAdded = _useState3[0],
56736
+ setListenerIsAdded = _useState3[1];
56655
56737
  var _useState4 = React.useState(''),
56656
- editMessageText = _useState4[0],
56657
- setEditMessageText = _useState4[1];
56658
- var _useState5 = React.useState(null),
56659
- restoredEditMessage = _useState5[0],
56660
- setRestoredEditMessage = _useState5[1];
56661
- var _useState6 = React.useState({}),
56662
- readyVideoAttachments = _useState6[0],
56663
- setReadyVideoAttachments = _useState6[1];
56664
- var _useState7 = React.useState(false),
56665
- showChooseAttachmentType = _useState7[0],
56666
- setShowChooseAttachmentType = _useState7[1];
56738
+ messageText = _useState4[0],
56739
+ setMessageText = _useState4[1];
56740
+ var _useState5 = React.useState(''),
56741
+ editMessageText = _useState5[0],
56742
+ setEditMessageText = _useState5[1];
56743
+ var _useState6 = React.useState(null),
56744
+ restoredEditMessage = _useState6[0],
56745
+ setRestoredEditMessage = _useState6[1];
56746
+ var _useState7 = React.useState({}),
56747
+ readyVideoAttachments = _useState7[0],
56748
+ setReadyVideoAttachments = _useState7[1];
56667
56749
  var _useState8 = React.useState(false),
56668
- isEmojisOpened = _useState8[0],
56669
- setIsEmojisOpened = _useState8[1];
56750
+ showChooseAttachmentType = _useState8[0],
56751
+ setShowChooseAttachmentType = _useState8[1];
56670
56752
  var _useState9 = React.useState(false),
56671
- emojisInRightSide = _useState9[0],
56672
- setEmojisInRightSide = _useState9[1];
56673
- var _useState0 = React.useState(0),
56674
- emojisPopupLeftPosition = _useState0[0],
56675
- setEmojisPopupLeftPosition = _useState0[1];
56753
+ isEmojisOpened = _useState9[0],
56754
+ setIsEmojisOpened = _useState9[1];
56755
+ var _useState0 = React.useState(false),
56756
+ emojisInRightSide = _useState0[0],
56757
+ setEmojisInRightSide = _useState0[1];
56676
56758
  var _useState1 = React.useState(0),
56677
- emojisPopupBottomPosition = _useState1[0],
56678
- setEmojisPopupBottomPosition = _useState1[1];
56679
- var _useState10 = React.useState(false),
56680
- addAttachmentsInRightSide = _useState10[0],
56681
- setAddAttachmentsInRightSide = _useState10[1];
56759
+ emojisPopupLeftPosition = _useState1[0],
56760
+ setEmojisPopupLeftPosition = _useState1[1];
56761
+ var _useState10 = React.useState(0),
56762
+ emojisPopupBottomPosition = _useState10[0],
56763
+ setEmojisPopupBottomPosition = _useState10[1];
56682
56764
  var _useState11 = React.useState(false),
56683
- showPoll = _useState11[0],
56684
- setShowPoll = _useState11[1];
56685
- var _useState12 = React.useState({
56765
+ addAttachmentsInRightSide = _useState11[0],
56766
+ setAddAttachmentsInRightSide = _useState11[1];
56767
+ var _useState12 = React.useState(false),
56768
+ showPoll = _useState12[0],
56769
+ setShowPoll = _useState12[1];
56770
+ var _useState13 = React.useState({
56686
56771
  clear: false
56687
56772
  }),
56688
- shouldClearEditor = _useState12[0],
56689
- setShouldClearEditor = _useState12[1];
56690
- var _useState13 = React.useState([]),
56691
- messageBodyAttributes = _useState13[0],
56692
- setMessageBodyAttributes = _useState13[1];
56773
+ shouldClearEditor = _useState13[0],
56774
+ setShouldClearEditor = _useState13[1];
56693
56775
  var _useState14 = React.useState([]),
56694
- mentionedUsers = _useState14[0],
56695
- setMentionedUsers = _useState14[1];
56696
- var _useState15 = React.useState(''),
56697
- browser = _useState15[0],
56698
- setBrowser = _useState15[1];
56699
- var _useState16 = React.useState(false),
56700
- mentionsIsOpen = _useState16[0],
56701
- setMentionsIsOpen = _useState16[1];
56702
- var _useState17 = React.useState(),
56703
- inputContainerHeight = _useState17[0],
56704
- setInputContainerHeight = _useState17[1];
56705
- var selectedText = React.useRef(null);
56776
+ messageBodyAttributes = _useState14[0],
56777
+ setMessageBodyAttributes = _useState14[1];
56778
+ var _useState15 = React.useState([]),
56779
+ mentionedUsers = _useState15[0],
56780
+ setMentionedUsers = _useState15[1];
56781
+ var _useState16 = React.useState(''),
56782
+ browser = _useState16[0],
56783
+ setBrowser = _useState16[1];
56784
+ var _useState17 = React.useState(false),
56785
+ mentionsIsOpen = _useState17[0],
56786
+ setMentionsIsOpen = _useState17[1];
56706
56787
  var _useState18 = React.useState(),
56707
- typingTimout = _useState18[0],
56708
- setTypingTimout = _useState18[1];
56788
+ inputContainerHeight = _useState18[0],
56789
+ setInputContainerHeight = _useState18[1];
56790
+ var selectedText = React.useRef(null);
56709
56791
  var _useState19 = React.useState(),
56710
- inTypingStateTimout = _useState19[0],
56711
- setInTypingStateTimout = _useState19[1];
56712
- var _useState20 = React.useState(false),
56713
- inTypingState = _useState20[0],
56714
- setInTypingState = _useState20[1];
56792
+ typingTimout = _useState19[0],
56793
+ setTypingTimout = _useState19[1];
56794
+ var _useState20 = React.useState(),
56795
+ inTypingStateTimout = _useState20[0],
56796
+ setInTypingStateTimout = _useState20[1];
56715
56797
  var _useState21 = React.useState(false),
56716
- sendMessageIsActive = _useState21[0],
56717
- setSendMessageIsActive = _useState21[1];
56718
- var _useState22 = React.useState([]),
56719
- attachments = _useState22[0],
56720
- setAttachments = _useState22[1];
56721
- var _useState23 = React.useState(false),
56722
- forwardPopupOpen = _useState23[0],
56723
- setForwardPopupOpen = _useState23[1];
56798
+ inTypingState = _useState21[0],
56799
+ setInTypingState = _useState21[1];
56800
+ var _useState22 = React.useState(false),
56801
+ sendMessageIsActive = _useState22[0],
56802
+ setSendMessageIsActive = _useState22[1];
56803
+ var _useState23 = React.useState([]),
56804
+ attachments = _useState23[0],
56805
+ setAttachments = _useState23[1];
56724
56806
  var _useState24 = React.useState(false),
56725
- deletePopupOpen = _useState24[0],
56726
- setDeletePopupOpen = _useState24[1];
56807
+ forwardPopupOpen = _useState24[0],
56808
+ setForwardPopupOpen = _useState24[1];
56727
56809
  var _useState25 = React.useState(false),
56728
- isIncomingMessage = _useState25[0],
56729
- setIsIncomingMessage = _useState25[1];
56730
- var _useState26 = React.useState('.jpg,.jpeg,.png,.gif,.mp4,.mov,.avi,.wmv,.flv,.webm,.jfif'),
56731
- mediaExtensions = _useState26[0],
56732
- setMediaExtensions = _useState26[1];
56733
- var _useState27 = React.useState(''),
56734
- uploadErrorMessage = _useState27[0],
56735
- setUploadErrorMessage = _useState27[1];
56736
- var _useState28 = React.useState(false),
56737
- viewOnce = _useState28[0],
56738
- setViewOnce = _useState28[1];
56739
- var _useState29 = React.useState(areDraftMessagesHydrated()),
56740
- draftsHydrated = _useState29[0],
56741
- setDraftsHydrated = _useState29[1];
56810
+ deletePopupOpen = _useState25[0],
56811
+ setDeletePopupOpen = _useState25[1];
56812
+ var _useState26 = React.useState(false),
56813
+ isIncomingMessage = _useState26[0],
56814
+ setIsIncomingMessage = _useState26[1];
56815
+ var _useState27 = React.useState('.jpg,.jpeg,.png,.gif,.mp4,.mov,.avi,.wmv,.flv,.webm,.jfif'),
56816
+ mediaExtensions = _useState27[0],
56817
+ setMediaExtensions = _useState27[1];
56818
+ var _useState28 = React.useState(''),
56819
+ uploadErrorMessage = _useState28[0],
56820
+ setUploadErrorMessage = _useState28[1];
56821
+ var _useState29 = React.useState(false),
56822
+ viewOnce = _useState29[0],
56823
+ setViewOnce = _useState29[1];
56824
+ var _useState30 = React.useState(areDraftMessagesHydrated()),
56825
+ draftsHydrated = _useState30[0],
56826
+ setDraftsHydrated = _useState30[1];
56742
56827
  var typingOrRecordingIndicator = useSelector(typingOrRecordingIndicatorArraySelector(activeChannel.id));
56743
56828
  var contactsMap = useSelector(contactsMapSelector);
56744
56829
  var connectionStatus = useSelector(connectionStatusSelector, reactRedux.shallowEqual);
@@ -56755,36 +56840,36 @@ var SendMessageInput = function SendMessageInput(_ref3) {
56755
56840
  var restoringDraftRef = React.useRef(false);
56756
56841
  var restoredDraftChannelIdRef = React.useRef(null);
56757
56842
  var isNavigatingChannelRef = React.useRef(false);
56758
- var _useState30 = React.useState(),
56759
- realEditorState = _useState30[0],
56760
- setRealEditorState = _useState30[1];
56761
- var _useState31 = React.useState(null),
56762
- floatingAnchorElem = _useState31[0],
56763
- setFloatingAnchorElem = _useState31[1];
56764
- var _useState32 = React.useState(false),
56765
- isSmallWidthViewport = _useState32[0],
56766
- setIsSmallWidthViewport = _useState32[1];
56843
+ var _useState31 = React.useState(),
56844
+ realEditorState = _useState31[0],
56845
+ setRealEditorState = _useState31[1];
56846
+ var _useState32 = React.useState(null),
56847
+ floatingAnchorElem = _useState32[0],
56848
+ setFloatingAnchorElem = _useState32[1];
56767
56849
  var _useState33 = React.useState(false),
56768
- isScrolling = _useState33[0],
56769
- setIsScrolling = _useState33[1];
56770
- var _useState34 = React.useState(null),
56771
- linkPreview = _useState34[0],
56772
- setLinkPreview = _useState34[1];
56850
+ isSmallWidthViewport = _useState33[0],
56851
+ setIsSmallWidthViewport = _useState33[1];
56852
+ var _useState34 = React.useState(false),
56853
+ isScrolling = _useState34[0],
56854
+ setIsScrolling = _useState34[1];
56773
56855
  var _useState35 = React.useState(null),
56774
- detectedUrl = _useState35[0],
56775
- setDetectedUrl = _useState35[1];
56776
- var _useState36 = React.useState(new Set()),
56777
- dismissedUrls = _useState36[0],
56778
- setDismissedUrls = _useState36[1];
56779
- var _useState37 = React.useState(false),
56780
- isClosingPreview = _useState37[0],
56781
- setIsClosingPreview = _useState37[1];
56856
+ linkPreview = _useState35[0],
56857
+ setLinkPreview = _useState35[1];
56858
+ var _useState36 = React.useState(null),
56859
+ detectedUrl = _useState36[0],
56860
+ setDetectedUrl = _useState36[1];
56861
+ var _useState37 = React.useState(new Set()),
56862
+ dismissedUrls = _useState37[0],
56863
+ setDismissedUrls = _useState37[1];
56782
56864
  var _useState38 = React.useState(false),
56783
- replyLinkPreviewImageFailed = _useState38[0],
56784
- setReplyLinkPreviewImageFailed = _useState38[1];
56865
+ isClosingPreview = _useState38[0],
56866
+ setIsClosingPreview = _useState38[1];
56785
56867
  var _useState39 = React.useState(false),
56786
- linkPreviewImageFailed = _useState39[0],
56787
- setLinkPreviewImageFailed = _useState39[1];
56868
+ replyLinkPreviewImageFailed = _useState39[0],
56869
+ setReplyLinkPreviewImageFailed = _useState39[1];
56870
+ var _useState40 = React.useState(false),
56871
+ linkPreviewImageFailed = _useState40[0],
56872
+ setLinkPreviewImageFailed = _useState40[1];
56788
56873
  var addAttachmentByMenu = showChooseFileAttachment && showChooseMediaAttachment;
56789
56874
  var linkify = new LinkifyIt();
56790
56875
  var oGMetadata = useSelector(function (state) {
@@ -58565,7 +58650,7 @@ var SendMessageInput = function SendMessageInput(_ref3) {
58565
58650
  activeColor: accentColor
58566
58651
  }, /*#__PURE__*/React__default.createElement(AudioRecord$1, {
58567
58652
  sendRecordedFile: sendRecordedFile,
58568
- setShowRecording: setShowRecording,
58653
+ setShowRecording: handleShowRecording,
58569
58654
  showRecording: showRecording,
58570
58655
  channelId: activeChannel.id,
58571
58656
  maxRecordingDuration: audioRecordingMaxDuration,