sceyt-chat-react-uikit 1.7.1-beta.9 → 1.7.2-beta.1

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
@@ -9091,7 +9091,7 @@ function updateChannelLastMessageOnAllChannels(channelId, message) {
9091
9091
  var updateChannel = allChannels.find(function (chan) {
9092
9092
  return chan.id === channelId;
9093
9093
  });
9094
- if (message.state === 'Deleted' || message.state === 'Edited') {
9094
+ if ((message === null || message === void 0 ? void 0 : message.state) === 'Deleted' || (message === null || message === void 0 ? void 0 : message.state) === 'Edited') {
9095
9095
  var _updateChannel;
9096
9096
  if (((_updateChannel = updateChannel) === null || _updateChannel === void 0 ? void 0 : _updateChannel.lastMessage.id) === message.id) {
9097
9097
  allChannels = allChannels.map(function (chan) {
@@ -10340,6 +10340,7 @@ var initialState$1 = {
10340
10340
  attachmentsUploadingState: {},
10341
10341
  scrollToMessage: null,
10342
10342
  scrollToMessageHighlight: true,
10343
+ scrollToMessageBehavior: 'smooth',
10343
10344
  scrollToMentionedMessage: false,
10344
10345
  reactionsList: [],
10345
10346
  reactionsHasNext: true,
@@ -10366,6 +10367,7 @@ var messageSlice = createSlice({
10366
10367
  setScrollToMessage: function setScrollToMessage(state, action) {
10367
10368
  state.scrollToMessage = action.payload.messageId;
10368
10369
  state.scrollToMessageHighlight = action.payload.highlight;
10370
+ state.scrollToMessageBehavior = action.payload.behavior || 'smooth';
10369
10371
  },
10370
10372
  setScrollToMentionedMessage: function setScrollToMentionedMessage(state, action) {
10371
10373
  state.scrollToMentionedMessage = action.payload.isScrollToMentionedMessage;
@@ -10395,7 +10397,7 @@ var messageSlice = createSlice({
10395
10397
  return msg.tid === message.tid || msg.id === message.id;
10396
10398
  });
10397
10399
  });
10398
- if (direction === MESSAGE_LOAD_DIRECTION.PREV) {
10400
+ if (direction === MESSAGE_LOAD_DIRECTION.PREV && newMessagesLength > 0) {
10399
10401
  if (currentMessagesLength + newMessagesLength >= MESSAGES_MAX_LENGTH) {
10400
10402
  var _state$activeChannelM;
10401
10403
  setHasNextCached(true);
@@ -10417,7 +10419,7 @@ var messageSlice = createSlice({
10417
10419
  var _state$activeChannelM3;
10418
10420
  (_state$activeChannelM3 = state.activeChannelMessages).splice.apply(_state$activeChannelM3, [0, 0].concat(messagesIsNotIncludeInActiveChannelMessages));
10419
10421
  }
10420
- } else if (direction === 'next') {
10422
+ } else if (direction === 'next' && newMessagesLength > 0) {
10421
10423
  if (currentMessagesLength >= MESSAGES_MAX_LENGTH) {
10422
10424
  var _state$activeChannelM4;
10423
10425
  setHasPrevCached(true);
@@ -10606,8 +10608,8 @@ var messageSlice = createSlice({
10606
10608
  var _action$payload8 = action.payload,
10607
10609
  uploaded = _action$payload8.uploaded,
10608
10610
  total = _action$payload8.total,
10609
- attachmentId = _action$payload8.attachmentId,
10610
- progress = _action$payload8.progress;
10611
+ attachmentId = _action$payload8.attachmentId;
10612
+ var progress = uploaded / total;
10611
10613
  var updateData = {
10612
10614
  uploaded: uploaded,
10613
10615
  total: total,
@@ -11617,7 +11619,7 @@ function setMessageToEditAC(message) {
11617
11619
  message: message
11618
11620
  });
11619
11621
  }
11620
- function getMessagesAC(channel, loadWithLastMessage, messageId, limit, withDeliveredMessages, highlight) {
11622
+ function getMessagesAC(channel, loadWithLastMessage, messageId, limit, withDeliveredMessages, highlight, behavior) {
11621
11623
  if (highlight === void 0) {
11622
11624
  highlight = true;
11623
11625
  }
@@ -11629,7 +11631,8 @@ function getMessagesAC(channel, loadWithLastMessage, messageId, limit, withDeliv
11629
11631
  messageId: messageId,
11630
11632
  limit: limit,
11631
11633
  withDeliveredMessages: withDeliveredMessages,
11632
- highlight: highlight
11634
+ highlight: highlight,
11635
+ behavior: behavior
11633
11636
  }
11634
11637
  };
11635
11638
  }
@@ -11643,13 +11646,14 @@ function getMessageAC(channelId, messageId, limit) {
11643
11646
  }
11644
11647
  };
11645
11648
  }
11646
- function setScrollToMessagesAC(messageId, highlight) {
11649
+ function setScrollToMessagesAC(messageId, highlight, behavior) {
11647
11650
  if (highlight === void 0) {
11648
11651
  highlight = true;
11649
11652
  }
11650
11653
  return setScrollToMessage({
11651
11654
  messageId: messageId || '',
11652
- highlight: highlight
11655
+ highlight: highlight,
11656
+ behavior: behavior
11653
11657
  });
11654
11658
  }
11655
11659
  function setScrollToMentionedMessageAC(isScrollToMentionedMessage) {
@@ -17110,6 +17114,9 @@ var scrollToMessageSelector = function scrollToMessageSelector(store) {
17110
17114
  var scrollToMessageHighlightSelector = function scrollToMessageHighlightSelector(store) {
17111
17115
  return store.MessageReducer.scrollToMessageHighlight;
17112
17116
  };
17117
+ var scrollToMessageBehaviorSelector = function scrollToMessageBehaviorSelector(store) {
17118
+ return store.MessageReducer.scrollToMessageBehavior;
17119
+ };
17113
17120
  var reactionsListSelector = function reactionsListSelector(store) {
17114
17121
  return store.MessageReducer.reactionsList;
17115
17122
  };
@@ -18503,7 +18510,7 @@ function editMessage(action) {
18503
18510
  }, _marked6$1, null, [[0, 5]]);
18504
18511
  }
18505
18512
  function getMessagesQuery(action) {
18506
- var _action$payload, channel, loadWithLastMessage, messageId, limit, withDeliveredMessages, highlight, SceytChatClient, messageQueryBuilder, messageQuery, cachedMessages, result, allMessages, havLastMessage, secondResult, sentMessages, messagesMap, filteredSentMessages, _allMessages, messageIndex, maxLengthPart, _secondResult, thirdResult, _secondResult2, _thirdResult, _secondResult3, _secondResult4, updatedMessages, pendingMessages, _messagesMap, filteredPendingMessages, _t9;
18513
+ var _action$payload, channel, loadWithLastMessage, messageId, limit, withDeliveredMessages, highlight, behavior, SceytChatClient, messageQueryBuilder, messageQuery, cachedMessages, result, allMessages, havLastMessage, secondResult, sentMessages, messagesMap, filteredSentMessages, _allMessages, messageIndex, maxLengthPart, _secondResult, thirdResult, _secondResult2, _thirdResult, _secondResult3, _secondResult4, updatedMessages, pendingMessages, _messagesMap, filteredPendingMessages, _t9;
18507
18514
  return _regenerator().w(function (_context9) {
18508
18515
  while (1) switch (_context9.p = _context9.n) {
18509
18516
  case 0:
@@ -18511,9 +18518,9 @@ function getMessagesQuery(action) {
18511
18518
  _context9.n = 1;
18512
18519
  return effects.put(setMessagesLoadingStateAC(LOADING_STATE.LOADING));
18513
18520
  case 1:
18514
- _action$payload = action.payload, channel = _action$payload.channel, loadWithLastMessage = _action$payload.loadWithLastMessage, messageId = _action$payload.messageId, limit = _action$payload.limit, withDeliveredMessages = _action$payload.withDeliveredMessages, highlight = _action$payload.highlight;
18521
+ _action$payload = action.payload, channel = _action$payload.channel, loadWithLastMessage = _action$payload.loadWithLastMessage, messageId = _action$payload.messageId, limit = _action$payload.limit, withDeliveredMessages = _action$payload.withDeliveredMessages, highlight = _action$payload.highlight, behavior = _action$payload.behavior;
18515
18522
  if (!(channel.id && !channel.isMockChannel)) {
18516
- _context9.n = 47;
18523
+ _context9.n = 48;
18517
18524
  break;
18518
18525
  }
18519
18526
  SceytChatClient = getClient();
@@ -18541,6 +18548,7 @@ function getMessagesQuery(action) {
18541
18548
  break;
18542
18549
  }
18543
18550
  setHasPrevCached(false);
18551
+ setMessagesToMap(channel.id, []);
18544
18552
  setAllMessages([]);
18545
18553
  _context9.n = 3;
18546
18554
  return effects.call(messageQuery.loadPreviousMessageId, '0');
@@ -18597,13 +18605,13 @@ function getMessagesQuery(action) {
18597
18605
  break;
18598
18606
  }
18599
18607
  _context9.n = 12;
18600
- return effects.put(setScrollToMessagesAC(messageId, highlight));
18608
+ return effects.put(setScrollToMessagesAC(messageId, highlight, behavior));
18601
18609
  case 12:
18602
- _context9.n = 45;
18610
+ _context9.n = 46;
18603
18611
  break;
18604
18612
  case 13:
18605
18613
  if (!messageId) {
18606
- _context9.n = 25;
18614
+ _context9.n = 26;
18607
18615
  break;
18608
18616
  }
18609
18617
  _allMessages = getAllMessages();
@@ -18612,7 +18620,7 @@ function getMessagesQuery(action) {
18612
18620
  });
18613
18621
  maxLengthPart = MESSAGES_MAX_LENGTH / 2;
18614
18622
  if (!(messageIndex >= maxLengthPart)) {
18615
- _context9.n = 15;
18623
+ _context9.n = 16;
18616
18624
  break;
18617
18625
  }
18618
18626
  result.messages = _allMessages.slice(messageIndex - maxLengthPart, messageIndex + maxLengthPart);
@@ -18621,151 +18629,160 @@ function getMessagesQuery(action) {
18621
18629
  case 14:
18622
18630
  setHasPrevCached(messageIndex > maxLengthPart);
18623
18631
  setHasNextCached(_allMessages.length > maxLengthPart);
18632
+ _context9.n = 15;
18633
+ return effects.put(setMessagesHasPrevAC(true));
18634
+ case 15:
18624
18635
  _context9.n = 22;
18625
18636
  break;
18626
- case 15:
18637
+ case 16:
18627
18638
  messageQuery.limit = MESSAGES_MAX_LENGTH;
18628
18639
  log.info('load by message id from server ...............', messageId);
18629
- _context9.n = 16;
18640
+ _context9.n = 17;
18630
18641
  return effects.call(messageQuery.loadNearMessageId, messageId);
18631
- case 16:
18642
+ case 17:
18632
18643
  result = _context9.v;
18633
18644
  if (!(result.messages.length === 50)) {
18634
- _context9.n = 19;
18645
+ _context9.n = 20;
18635
18646
  break;
18636
18647
  }
18637
- messageQuery.limit = (MESSAGES_MAX_LENGTH - 50) / 2;
18638
- _context9.n = 17;
18648
+ messageQuery.limit = MESSAGES_MAX_LENGTH - 50;
18649
+ _context9.n = 18;
18639
18650
  return effects.call(messageQuery.loadPreviousMessageId, result.messages[0].id);
18640
- case 17:
18651
+ case 18:
18641
18652
  _secondResult = _context9.v;
18642
18653
  messageQuery.reverse = false;
18643
- _context9.n = 18;
18654
+ _context9.n = 19;
18644
18655
  return effects.call(messageQuery.loadNextMessageId, result.messages[result.messages.length - 1].id);
18645
- case 18:
18656
+ case 19:
18646
18657
  thirdResult = _context9.v;
18647
18658
  result.messages = [].concat(_secondResult.messages, result.messages, thirdResult.messages);
18648
18659
  result.hasNext = _secondResult.hasNext;
18649
18660
  messageQuery.reverse = true;
18650
- case 19:
18651
- log.info('result from server ....... ', result);
18652
18661
  _context9.n = 20;
18653
- return effects.put(setMessagesHasNextAC(true));
18662
+ return effects.put(setMessagesHasPrevAC(_secondResult.hasNext));
18654
18663
  case 20:
18664
+ log.info('result from server ....... ', result);
18655
18665
  _context9.n = 21;
18656
18666
  return effects.put(setMessagesAC(JSON.parse(JSON.stringify(result.messages))));
18657
18667
  case 21:
18668
+ setMessagesToMap(channel.id, result.messages);
18658
18669
  setAllMessages([].concat(result.messages));
18659
18670
  setHasPrevCached(false);
18660
18671
  setHasNextCached(false);
18661
18672
  case 22:
18662
18673
  _context9.n = 23;
18663
- return effects.put(setScrollToMessagesAC(messageId));
18674
+ return effects.put(setMessagesHasNextAC(true));
18664
18675
  case 23:
18665
18676
  _context9.n = 24;
18666
- return effects.put(setMessagesLoadingStateAC(LOADING_STATE.LOADED));
18677
+ return effects.put(setScrollToMessagesAC(messageId, true, behavior));
18667
18678
  case 24:
18668
- _context9.n = 45;
18669
- break;
18679
+ _context9.n = 25;
18680
+ return effects.put(setMessagesLoadingStateAC(LOADING_STATE.LOADED));
18670
18681
  case 25:
18682
+ _context9.n = 46;
18683
+ break;
18684
+ case 26:
18671
18685
  if (!(channel.newMessageCount && channel.lastDisplayedMessageId)) {
18672
- _context9.n = 38;
18686
+ _context9.n = 39;
18673
18687
  break;
18674
18688
  }
18689
+ setMessagesToMap(channel.id, []);
18675
18690
  setAllMessages([]);
18676
18691
  messageQuery.limit = MESSAGES_MAX_LENGTH;
18677
18692
  if (!Number(channel.lastDisplayedMessageId)) {
18678
- _context9.n = 31;
18693
+ _context9.n = 32;
18679
18694
  break;
18680
18695
  }
18681
- _context9.n = 26;
18696
+ _context9.n = 27;
18682
18697
  return effects.call(messageQuery.loadNearMessageId, channel.lastDisplayedMessageId);
18683
- case 26:
18698
+ case 27:
18684
18699
  result = _context9.v;
18685
18700
  if (!(result.messages.length === 50)) {
18686
- _context9.n = 30;
18701
+ _context9.n = 31;
18687
18702
  break;
18688
18703
  }
18689
18704
  messageQuery.limit = channel.newMessageCount > 25 ? (MESSAGES_MAX_LENGTH - 50) / 2 : MESSAGES_MAX_LENGTH - 50;
18690
- _context9.n = 27;
18705
+ _context9.n = 28;
18691
18706
  return effects.call(messageQuery.loadPreviousMessageId, result.messages[0].id);
18692
- case 27:
18707
+ case 28:
18693
18708
  _secondResult2 = _context9.v;
18694
18709
  if (!(channel.newMessageCount > 25)) {
18695
- _context9.n = 29;
18710
+ _context9.n = 30;
18696
18711
  break;
18697
18712
  }
18698
18713
  messageQuery.reverse = false;
18699
- _context9.n = 28;
18714
+ _context9.n = 29;
18700
18715
  return effects.call(messageQuery.loadNextMessageId, result.messages[result.messages.length - 1].id);
18701
- case 28:
18716
+ case 29:
18702
18717
  _thirdResult = _context9.v;
18703
18718
  result.messages = [].concat(_secondResult2.messages, result.messages, _thirdResult.messages);
18704
18719
  messageQuery.reverse = true;
18705
- _context9.n = 30;
18720
+ _context9.n = 31;
18706
18721
  break;
18707
- case 29:
18708
- result.messages = [].concat(_secondResult2.messages, result.messages);
18709
18722
  case 30:
18710
- _context9.n = 34;
18711
- break;
18723
+ result.messages = [].concat(_secondResult2.messages, result.messages);
18712
18724
  case 31:
18713
- _context9.n = 32;
18714
- return effects.call(messageQuery.loadPrevious);
18725
+ _context9.n = 35;
18726
+ break;
18715
18727
  case 32:
18728
+ _context9.n = 33;
18729
+ return effects.call(messageQuery.loadPrevious);
18730
+ case 33:
18716
18731
  result = _context9.v;
18717
18732
  if (!(result.messages.length === 50)) {
18718
- _context9.n = 34;
18733
+ _context9.n = 35;
18719
18734
  break;
18720
18735
  }
18721
18736
  messageQuery.limit = MESSAGES_MAX_LENGTH - 50;
18722
- _context9.n = 33;
18737
+ _context9.n = 34;
18723
18738
  return effects.call(messageQuery.loadPreviousMessageId, result.messages[0].id);
18724
- case 33:
18739
+ case 34:
18725
18740
  _secondResult3 = _context9.v;
18726
18741
  result.messages = [].concat(_secondResult3.messages, result.messages);
18727
18742
  result.hasNext = _secondResult3.hasNext;
18728
- case 34:
18729
- setMessagesToMap(channel.id, result.messages);
18730
- _context9.n = 35;
18731
- return effects.put(setMessagesHasPrevAC(true));
18732
18743
  case 35:
18733
18744
  _context9.n = 36;
18734
- return effects.put(setMessagesHasNextAC(channel.lastMessage && result.messages.length > 0 && channel.lastMessage.id !== result.messages[result.messages.length - 1].id));
18745
+ return effects.put(setMessagesHasPrevAC(true));
18735
18746
  case 36:
18736
- setAllMessages([].concat(result.messages));
18737
18747
  _context9.n = 37;
18738
- return effects.put(setMessagesAC(JSON.parse(JSON.stringify(result.messages))));
18748
+ return effects.put(setMessagesHasNextAC(channel.lastMessage && result.messages.length > 0 && channel.lastMessage.id !== result.messages[result.messages.length - 1].id));
18739
18749
  case 37:
18740
- _context9.n = 45;
18741
- break;
18750
+ setMessagesToMap(channel.id, result.messages);
18751
+ setAllMessages([].concat(result.messages));
18752
+ _context9.n = 38;
18753
+ return effects.put(setMessagesAC(JSON.parse(JSON.stringify(result.messages))));
18742
18754
  case 38:
18755
+ _context9.n = 46;
18756
+ break;
18757
+ case 39:
18758
+ setMessagesToMap(channel.id, []);
18743
18759
  setAllMessages([]);
18744
18760
  if (!(cachedMessages && cachedMessages.length)) {
18745
- _context9.n = 39;
18761
+ _context9.n = 40;
18746
18762
  break;
18747
18763
  }
18764
+ setMessagesToMap(channel.id, []);
18748
18765
  setAllMessages([].concat(cachedMessages));
18749
- _context9.n = 39;
18766
+ _context9.n = 40;
18750
18767
  return effects.put(setMessagesAC(JSON.parse(JSON.stringify(cachedMessages))));
18751
- case 39:
18768
+ case 40:
18752
18769
  log.info('load message from server');
18753
- _context9.n = 40;
18770
+ _context9.n = 41;
18754
18771
  return effects.call(messageQuery.loadPrevious);
18755
- case 40:
18772
+ case 41:
18756
18773
  result = _context9.v;
18757
18774
  if (!(result.messages.length === 50)) {
18758
- _context9.n = 42;
18775
+ _context9.n = 43;
18759
18776
  break;
18760
18777
  }
18761
18778
  messageQuery.limit = MESSAGES_MAX_LENGTH - 50;
18762
- _context9.n = 41;
18779
+ _context9.n = 42;
18763
18780
  return effects.call(messageQuery.loadPreviousMessageId, result.messages[0].id);
18764
- case 41:
18781
+ case 42:
18765
18782
  _secondResult4 = _context9.v;
18766
18783
  result.messages = [].concat(_secondResult4.messages, result.messages);
18767
18784
  result.hasNext = _secondResult4.hasNext;
18768
- case 42:
18785
+ case 43:
18769
18786
  updatedMessages = [];
18770
18787
  result.messages.forEach(function (msg) {
18771
18788
  var updatedMessage = updateMessageOnMap(channel.id, {
@@ -18777,18 +18794,18 @@ function getMessagesQuery(action) {
18777
18794
  });
18778
18795
  setMessagesToMap(channel.id, updatedMessages);
18779
18796
  setAllMessages([].concat(updatedMessages));
18780
- _context9.n = 43;
18781
- return effects.put(setMessagesAC(JSON.parse(JSON.stringify(updatedMessages))));
18782
- case 43:
18783
18797
  _context9.n = 44;
18784
- return effects.put(setMessagesHasPrevAC(result.hasNext));
18798
+ return effects.put(setMessagesAC(JSON.parse(JSON.stringify(updatedMessages))));
18785
18799
  case 44:
18786
18800
  _context9.n = 45;
18787
- return effects.put(setMessagesHasNextAC(false));
18801
+ return effects.put(setMessagesHasPrevAC(result.hasNext));
18788
18802
  case 45:
18803
+ _context9.n = 46;
18804
+ return effects.put(setMessagesHasNextAC(false));
18805
+ case 46:
18789
18806
  pendingMessages = getPendingMessages(channel.id);
18790
18807
  if (!(pendingMessages && pendingMessages.length)) {
18791
- _context9.n = 46;
18808
+ _context9.n = 47;
18792
18809
  break;
18793
18810
  }
18794
18811
  _messagesMap = {};
@@ -18798,38 +18815,38 @@ function getMessagesQuery(action) {
18798
18815
  filteredPendingMessages = pendingMessages.filter(function (msg) {
18799
18816
  return !_messagesMap[msg.tid || ''];
18800
18817
  });
18801
- _context9.n = 46;
18818
+ _context9.n = 47;
18802
18819
  return effects.put(addMessagesAC(filteredPendingMessages, MESSAGE_LOAD_DIRECTION.NEXT));
18803
- case 46:
18804
- _context9.n = 48;
18805
- break;
18806
18820
  case 47:
18821
+ _context9.n = 49;
18822
+ break;
18823
+ case 48:
18807
18824
  if (!channel.isMockChannel) {
18808
- _context9.n = 48;
18825
+ _context9.n = 49;
18809
18826
  break;
18810
18827
  }
18811
- _context9.n = 48;
18828
+ _context9.n = 49;
18812
18829
  return effects.put(setMessagesAC([]));
18813
- case 48:
18814
- _context9.n = 50;
18815
- break;
18816
18830
  case 49:
18817
- _context9.p = 49;
18818
- _t9 = _context9.v;
18819
- log.error('error in message query', _t9);
18831
+ _context9.n = 51;
18832
+ break;
18820
18833
  case 50:
18821
18834
  _context9.p = 50;
18822
- _context9.n = 51;
18823
- return effects.put(setMessagesLoadingStateAC(LOADING_STATE.LOADED));
18835
+ _t9 = _context9.v;
18836
+ log.error('error in message query', _t9);
18824
18837
  case 51:
18825
- return _context9.f(50);
18838
+ _context9.p = 51;
18839
+ _context9.n = 52;
18840
+ return effects.put(setMessagesLoadingStateAC(LOADING_STATE.LOADED));
18826
18841
  case 52:
18842
+ return _context9.f(51);
18843
+ case 53:
18827
18844
  return _context9.a(2);
18828
18845
  }
18829
- }, _marked7$1, null, [[0, 49, 50, 52]]);
18846
+ }, _marked7$1, null, [[0, 50, 51, 53]]);
18830
18847
  }
18831
18848
  function getMessageQuery(action) {
18832
- var payload, channelId, messageId, channel, messages, _t0;
18849
+ var payload, channelId, messageId, channel, messages, fetchedMessage, _t0;
18833
18850
  return _regenerator().w(function (_context0) {
18834
18851
  while (1) switch (_context0.p = _context0.n) {
18835
18852
  case 0:
@@ -18837,34 +18854,53 @@ function getMessageQuery(action) {
18837
18854
  payload = action.payload;
18838
18855
  channelId = payload.channelId, messageId = payload.messageId;
18839
18856
  _context0.n = 1;
18840
- return effects.call(getChannelFromMap, channelId);
18857
+ return effects.call(getChannelFromAllChannels, channelId);
18841
18858
  case 1:
18842
18859
  channel = _context0.v;
18843
- _context0.n = 2;
18844
- return effects.call(channel.getMessagesById, [messageId]);
18860
+ if (channel) {
18861
+ _context0.n = 2;
18862
+ break;
18863
+ }
18864
+ return _context0.a(2);
18845
18865
  case 2:
18846
- messages = _context0.v;
18847
18866
  _context0.n = 3;
18848
- return effects.put(updateMessageAC(messageId, messages[0]));
18867
+ return effects.call(channel.getMessagesById, [messageId]);
18849
18868
  case 3:
18869
+ messages = _context0.v;
18870
+ fetchedMessage = messages && messages[0] ? JSON.parse(JSON.stringify(messages[0])) : null;
18871
+ if (!fetchedMessage) {
18872
+ _context0.n = 6;
18873
+ break;
18874
+ }
18875
+ _context0.n = 4;
18876
+ return effects.put(updateMessageAC(messageId, fetchedMessage));
18877
+ case 4:
18850
18878
  updateMessageOnMap(channel.id, {
18851
18879
  messageId: messageId,
18852
- params: messages[0]
18880
+ params: fetchedMessage
18853
18881
  });
18854
- updateMessageOnAllMessages(messageId, messages[0]);
18855
- _context0.n = 4;
18882
+ updateMessageOnAllMessages(messageId, fetchedMessage);
18883
+ _context0.n = 5;
18856
18884
  return effects.put(setScrollToMessagesAC(messageId, false));
18857
- case 4:
18885
+ case 5:
18886
+ if (!(channel.lastMessage && channel.lastMessage.id === messageId)) {
18887
+ _context0.n = 6;
18888
+ break;
18889
+ }
18890
+ updateChannelLastMessageOnAllChannels(channel.id, fetchedMessage);
18858
18891
  _context0.n = 6;
18892
+ return effects.put(updateChannelLastMessageAC(fetchedMessage, channel));
18893
+ case 6:
18894
+ _context0.n = 8;
18859
18895
  break;
18860
- case 5:
18861
- _context0.p = 5;
18896
+ case 7:
18897
+ _context0.p = 7;
18862
18898
  _t0 = _context0.v;
18863
18899
  log.error('error in message query', _t0);
18864
- case 6:
18900
+ case 8:
18865
18901
  return _context0.a(2);
18866
18902
  }
18867
- }, _marked8$1, null, [[0, 5]]);
18903
+ }, _marked8$1, null, [[0, 7]]);
18868
18904
  }
18869
18905
  function loadMoreMessages(action) {
18870
18906
  var payload, limit, direction, channelId, messageId, hasNext, SceytChatClient, messageQueryBuilder, messageQuery, result, _t1;
@@ -18953,25 +18989,38 @@ function loadMoreMessages(action) {
18953
18989
  _context1.n = 11;
18954
18990
  return effects.put(addMessagesAC(JSON.parse(JSON.stringify(result.messages)), direction));
18955
18991
  case 11:
18956
- _context1.n = 13;
18992
+ _context1.n = 16;
18957
18993
  break;
18958
18994
  case 12:
18959
18995
  _context1.n = 13;
18960
18996
  return effects.put(addMessagesAC([], direction));
18961
18997
  case 13:
18998
+ if (!(direction === MESSAGE_LOAD_DIRECTION.NEXT)) {
18999
+ _context1.n = 15;
19000
+ break;
19001
+ }
18962
19002
  _context1.n = 14;
18963
- return effects.put(setMessagesLoadingStateAC(LOADING_STATE.LOADED));
19003
+ return effects.put(setMessagesHasNextAC(false));
18964
19004
  case 14:
18965
19005
  _context1.n = 16;
18966
19006
  break;
18967
19007
  case 15:
18968
- _context1.p = 15;
19008
+ _context1.n = 16;
19009
+ return effects.put(setMessagesHasPrevAC(false));
19010
+ case 16:
19011
+ _context1.n = 17;
19012
+ return effects.put(setMessagesLoadingStateAC(LOADING_STATE.LOADED));
19013
+ case 17:
19014
+ _context1.n = 19;
19015
+ break;
19016
+ case 18:
19017
+ _context1.p = 18;
18969
19018
  _t1 = _context1.v;
18970
19019
  log.error('error in load more messages', _t1);
18971
- case 16:
19020
+ case 19:
18972
19021
  return _context1.a(2);
18973
19022
  }
18974
- }, _marked9$1, null, [[0, 15]]);
19023
+ }, _marked9$1, null, [[0, 18]]);
18975
19024
  }
18976
19025
  function addReaction(action) {
18977
19026
  var payload, channelId, messageId, key, score, reason, enforceUnique, user, channel, _yield$call, _message2, reaction, channelUpdateParam, _t10;
@@ -19395,7 +19444,7 @@ function MessageSaga() {
19395
19444
  return effects.takeLatest(GET_MESSAGES, getMessagesQuery);
19396
19445
  case 7:
19397
19446
  _context18.n = 8;
19398
- return effects.takeLatest(GET_MESSAGE, getMessageQuery);
19447
+ return effects.takeEvery(GET_MESSAGE, getMessageQuery);
19399
19448
  case 8:
19400
19449
  _context18.n = 9;
19401
19450
  return effects.takeLatest(GET_MESSAGES_ATTACHMENTS, getMessageAttachments);
@@ -21000,6 +21049,50 @@ function SvgAvatar(props) {
21000
21049
  })));
21001
21050
  }
21002
21051
 
21052
+ var ATTACHMENTS_CACHE = 'attachments-cache';
21053
+ var isBrowser = typeof window !== 'undefined';
21054
+ var cacheAvailable;
21055
+ if (isBrowser) {
21056
+ cacheAvailable = 'caches' in window;
21057
+ } else {
21058
+ cacheAvailable = 'caches' in global;
21059
+ }
21060
+ var setAttachmentToCache = function setAttachmentToCache(attachmentUrl, attachmentResponse) {
21061
+ if (cacheAvailable) {
21062
+ caches.open(ATTACHMENTS_CACHE).then(function (cache) {
21063
+ try {
21064
+ cache.put(attachmentUrl, attachmentResponse).then(function () {
21065
+ log.info('Cache success');
21066
+ })["catch"](function (e) {
21067
+ log.info('Error on cache attachment ... ', e);
21068
+ caches["delete"](attachmentUrl);
21069
+ });
21070
+ return Promise.resolve();
21071
+ } catch (e) {
21072
+ return Promise.reject(e);
21073
+ }
21074
+ });
21075
+ }
21076
+ };
21077
+ var getAttachmentUrlFromCache = function getAttachmentUrlFromCache(attachmentUrl) {
21078
+ try {
21079
+ if (!cacheAvailable) {
21080
+ log.error('Cache is not available');
21081
+ return Promise.reject(new Error('Cache not available'));
21082
+ }
21083
+ return Promise.resolve(caches.match(attachmentUrl)).then(function (response) {
21084
+ if (response) {
21085
+ return Promise.resolve(response.blob()).then(URL.createObjectURL);
21086
+ } else {
21087
+ log.info('The image or video is not cached', attachmentUrl);
21088
+ return false;
21089
+ }
21090
+ });
21091
+ } catch (e) {
21092
+ return Promise.reject(e);
21093
+ }
21094
+ };
21095
+
21003
21096
  var _templateObject$3, _templateObject2$3, _templateObject3$2, _templateObject4$2;
21004
21097
  var Avatar = function Avatar(_ref) {
21005
21098
  var image = _ref.image,
@@ -21016,6 +21109,9 @@ var Avatar = function Avatar(_ref) {
21016
21109
  var theme = useSelector(themeSelector);
21017
21110
  var _useColor = useColors(),
21018
21111
  iconInactive = _useColor[THEME_COLORS.ICON_INACTIVE];
21112
+ var _useState = React.useState(image || null),
21113
+ resolvedImageSrc = _useState[0],
21114
+ setResolvedImageSrc = _useState[1];
21019
21115
  var isDeletedUserAvatar = !image && !name;
21020
21116
  var avatarText = '';
21021
21117
  if (!image && name) {
@@ -21032,11 +21128,68 @@ var Avatar = function Avatar(_ref) {
21032
21128
  avatarText = _firstCharOfFirstWord ? String.fromCodePoint(_firstCharOfFirstWord) : '';
21033
21129
  }
21034
21130
  }
21131
+ React.useEffect(function () {
21132
+ var isCancelled = false;
21133
+ if (!image) {
21134
+ setResolvedImageSrc(null);
21135
+ return;
21136
+ }
21137
+ var isHttpUrl = /^https?:\/\//i.test(image);
21138
+ if (!isHttpUrl) {
21139
+ setResolvedImageSrc(image);
21140
+ return;
21141
+ }
21142
+ getAttachmentUrlFromCache(image).then(function (cachedUrl) {
21143
+ try {
21144
+ if (isCancelled) return Promise.resolve();
21145
+ var _temp2 = function () {
21146
+ if (cachedUrl) {
21147
+ setResolvedImageSrc(cachedUrl);
21148
+ } else {
21149
+ var _temp = _catch(function () {
21150
+ return Promise.resolve(fetch(image, {
21151
+ credentials: 'same-origin'
21152
+ })).then(function (response) {
21153
+ setAttachmentToCache(image, response.clone());
21154
+ setResolvedImageSrc(image);
21155
+ });
21156
+ }, function () {
21157
+ setResolvedImageSrc(image);
21158
+ });
21159
+ if (_temp && _temp.then) return _temp.then(function () {});
21160
+ }
21161
+ }();
21162
+ return Promise.resolve(_temp2 && _temp2.then ? _temp2.then(function () {}) : void 0);
21163
+ } catch (e) {
21164
+ return Promise.reject(e);
21165
+ }
21166
+ })["catch"](function () {
21167
+ try {
21168
+ if (isCancelled) return Promise.resolve();
21169
+ var _temp3 = _catch(function () {
21170
+ return Promise.resolve(fetch(image, {
21171
+ credentials: 'same-origin'
21172
+ })).then(function (response) {
21173
+ setAttachmentToCache(image, response.clone());
21174
+ setResolvedImageSrc(image);
21175
+ });
21176
+ }, function () {
21177
+ setResolvedImageSrc(image);
21178
+ });
21179
+ return Promise.resolve(_temp3 && _temp3.then ? _temp3.then(function () {}) : void 0);
21180
+ } catch (e) {
21181
+ return Promise.reject(e);
21182
+ }
21183
+ });
21184
+ return function () {
21185
+ isCancelled = true;
21186
+ };
21187
+ }, [image]);
21035
21188
  return /*#__PURE__*/React__default.createElement(Container$1, {
21036
21189
  border: border,
21037
21190
  marginAuto: marginAuto,
21038
21191
  size: size,
21039
- isImage: !!(image || setDefaultAvatar),
21192
+ isImage: !!(resolvedImageSrc || setDefaultAvatar),
21040
21193
  avatarName: name,
21041
21194
  textSize: textSize,
21042
21195
  onClick: handleAvatarClick,
@@ -21050,7 +21203,7 @@ var Avatar = function Avatar(_ref) {
21050
21203
  }) : (/*#__PURE__*/React__default.createElement("span", null, avatarText)) : (/*#__PURE__*/React__default.createElement(AvatarImage, {
21051
21204
  draggable: false,
21052
21205
  showImage: true,
21053
- src: image,
21206
+ src: resolvedImageSrc || image,
21054
21207
  size: size,
21055
21208
  alt: ''
21056
21209
  })));
@@ -21164,7 +21317,10 @@ var Channel = function Channel(_ref3) {
21164
21317
  channelLastMessageTimeFontSize = _ref3.channelLastMessageTimeFontSize,
21165
21318
  channelLastMessageHeight = _ref3.channelLastMessageHeight,
21166
21319
  channelAvatarSize = _ref3.channelAvatarSize,
21167
- channelAvatarTextSize = _ref3.channelAvatarTextSize;
21320
+ channelAvatarTextSize = _ref3.channelAvatarTextSize,
21321
+ setSelectedChannel = _ref3.setSelectedChannel,
21322
+ getCustomLatestMessage = _ref3.getCustomLatestMessage,
21323
+ doNotShowMessageDeliveryTypes = _ref3.doNotShowMessageDeliveryTypes;
21168
21324
  var _useColor = useColors(),
21169
21325
  accentColor = _useColor[THEME_COLORS.ACCENT],
21170
21326
  textPrimary = _useColor[THEME_COLORS.TEXT_PRIMARY],
@@ -21202,13 +21358,6 @@ var Channel = function Channel(_ref3) {
21202
21358
  statusWidth = _useState3[0],
21203
21359
  setStatusWidth = _useState3[1];
21204
21360
  var avatarName = channel.subject || (isDirectChannel && directChannelUser ? directChannelUser.firstName || directChannelUser.id : isSelfChannel ? 'Me' : '');
21205
- var handleChangeActiveChannel = function handleChangeActiveChannel(chan) {
21206
- if (activeChannel.id !== chan.id) {
21207
- dispatch(sendTypingAC(false));
21208
- dispatch(clearMessagesAC());
21209
- dispatch(switchChannelActionAC(chan));
21210
- }
21211
- };
21212
21361
  var messageAuthorRef = React.useRef(null);
21213
21362
  var messageTimeAndStatusRef = React.useRef(null);
21214
21363
  useUpdatePresence(channel, true);
@@ -21293,6 +21442,43 @@ var Channel = function Channel(_ref3) {
21293
21442
  isDirectChannel: isDirectChannel
21294
21443
  });
21295
21444
  }, [typingOrRecording === null || typingOrRecording === void 0 ? void 0 : typingOrRecording.isTyping, typingOrRecording === null || typingOrRecording === void 0 ? void 0 : typingOrRecording.isRecording, draftMessageText, lastMessage, user, contactsMap, getFromContacts, lastMessageMetas, accentColor, typingOrRecording, channel, isDirectChannel]);
21445
+ var getCustomLatestMessageComponent = React.useCallback(function (_ref4) {
21446
+ var lastMessage = _ref4.lastMessage,
21447
+ typingOrRecording = _ref4.typingOrRecording,
21448
+ draftMessageText = _ref4.draftMessageText,
21449
+ textSecondary = _ref4.textSecondary,
21450
+ channel = _ref4.channel,
21451
+ channelLastMessageFontSize = _ref4.channelLastMessageFontSize,
21452
+ channelLastMessageHeight = _ref4.channelLastMessageHeight,
21453
+ isDirectChannel = _ref4.isDirectChannel,
21454
+ textPrimary = _ref4.textPrimary,
21455
+ messageAuthorRef = _ref4.messageAuthorRef,
21456
+ contactsMap = _ref4.contactsMap,
21457
+ getFromContacts = _ref4.getFromContacts,
21458
+ warningColor = _ref4.warningColor,
21459
+ user = _ref4.user,
21460
+ MessageText = _ref4.MessageText;
21461
+ return getCustomLatestMessage && getCustomLatestMessage({
21462
+ lastMessage: lastMessage,
21463
+ typingOrRecording: typingOrRecording,
21464
+ draftMessageText: draftMessageText,
21465
+ textSecondary: textSecondary,
21466
+ channel: channel,
21467
+ channelLastMessageFontSize: channelLastMessageFontSize,
21468
+ channelLastMessageHeight: channelLastMessageHeight,
21469
+ isDirectChannel: isDirectChannel,
21470
+ textPrimary: textPrimary,
21471
+ messageAuthorRef: messageAuthorRef,
21472
+ contactsMap: contactsMap,
21473
+ getFromContacts: getFromContacts,
21474
+ warningColor: warningColor,
21475
+ user: user,
21476
+ MessageText: MessageText
21477
+ });
21478
+ }, [getCustomLatestMessage, lastMessage, typingOrRecording, draftMessageText, textSecondary, channel, channelLastMessageFontSize, channelLastMessageHeight, isDirectChannel, textPrimary, messageAuthorRef, contactsMap, getFromContacts, warningColor, user, MessageText]);
21479
+ var isTypeValid = React.useCallback(function (type) {
21480
+ return !doNotShowMessageDeliveryTypes.includes(type);
21481
+ }, [doNotShowMessageDeliveryTypes]);
21296
21482
  return /*#__PURE__*/React__default.createElement(Container$2, {
21297
21483
  theme: theme,
21298
21484
  selectedChannel: channel.id === activeChannel.id,
@@ -21303,7 +21489,7 @@ var Channel = function Channel(_ref3) {
21303
21489
  selectedChannelBorderRadius: selectedChannelBorderRadius,
21304
21490
  channelsMargin: channelsMargin,
21305
21491
  onClick: function onClick() {
21306
- return handleChangeActiveChannel(channel);
21492
+ return setSelectedChannel(channel);
21307
21493
  },
21308
21494
  hoverBackground: channelHoverBackground || backgroundHovered
21309
21495
  }, showAvatar && (/*#__PURE__*/React__default.createElement(AvatarWrapper, null, /*#__PURE__*/React__default.createElement(Avatar, {
@@ -21329,7 +21515,23 @@ var Channel = function Channel(_ref3) {
21329
21515
  avatarSize: channelAvatarSize
21330
21516
  }, /*#__PURE__*/React__default.createElement("h3", null, channel.subject || (isDirectChannel && directChannelUser ? makeUsername(contactsMap && contactsMap[directChannelUser.id], directChannelUser, getFromContacts) : isSelfChannel ? 'Me' : '')), channel.muted && (/*#__PURE__*/React__default.createElement(MutedIcon, {
21331
21517
  color: notificationsIsMutedIconColor || iconInactive
21332
- }, notificationsIsMutedIcon || /*#__PURE__*/React__default.createElement(SvgUnmuteNotifications, null))), (lastMessage || typingOrRecording.items.length > 0 || draftMessageText) && (/*#__PURE__*/React__default.createElement(LastMessage, {
21518
+ }, notificationsIsMutedIcon || /*#__PURE__*/React__default.createElement(SvgUnmuteNotifications, null))), getCustomLatestMessage ? getCustomLatestMessageComponent({
21519
+ lastMessage: lastMessage,
21520
+ typingOrRecording: typingOrRecording,
21521
+ draftMessageText: draftMessageText,
21522
+ textSecondary: textSecondary,
21523
+ channel: channel,
21524
+ channelLastMessageFontSize: channelLastMessageFontSize || '14px',
21525
+ channelLastMessageHeight: channelLastMessageHeight || '20px',
21526
+ isDirectChannel: isDirectChannel,
21527
+ textPrimary: textPrimary,
21528
+ messageAuthorRef: messageAuthorRef,
21529
+ contactsMap: contactsMap || {},
21530
+ getFromContacts: getFromContacts,
21531
+ warningColor: warningColor,
21532
+ user: user,
21533
+ MessageText: MessageText
21534
+ }) : (lastMessage || typingOrRecording.items.length > 0 || draftMessageText) && (/*#__PURE__*/React__default.createElement(LastMessage, {
21333
21535
  color: textSecondary,
21334
21536
  markedAsUnread: !!(channel.unread || channel.newMessageCount && channel.newMessageCount > 0),
21335
21537
  unreadMentions: !!(channel.newMentionCount && channel.newMentionCount > 0),
@@ -21365,7 +21567,7 @@ var Channel = function Channel(_ref3) {
21365
21567
  }, MessageText)))), /*#__PURE__*/React__default.createElement(ChannelStatus, {
21366
21568
  color: iconInactive,
21367
21569
  ref: messageTimeAndStatusRef
21368
- }, lastMessage && lastMessage.state !== MESSAGE_STATUS.DELETE && (/*#__PURE__*/React__default.createElement(DeliveryIconCont, null, lastMessage && lastMessage.user && lastMessage.user.id === user.id && lastMessage.type !== 'system' && MessageStatusIcon({
21570
+ }, lastMessage && lastMessage.state !== MESSAGE_STATUS.DELETE && (/*#__PURE__*/React__default.createElement(DeliveryIconCont, null, lastMessage && lastMessage.user && lastMessage.user.id === user.id && isTypeValid(lastMessage.type) && MessageStatusIcon({
21369
21571
  messageStatus: lastMessage.deliveryStatus,
21370
21572
  messageStatusDisplayingType: 'ticks',
21371
21573
  readIconColor: accentColor,
@@ -21432,9 +21634,9 @@ var Container$2 = styled__default.div(_templateObject6$1 || (_templateObject6$1
21432
21634
  return props.channelsMargin || '0 8px';
21433
21635
  }, function (props) {
21434
21636
  return props.selectedChannelBorderRadius || '12px';
21435
- }, function (_ref4) {
21436
- var selectedChannel = _ref4.selectedChannel,
21437
- hoverBackground = _ref4.hoverBackground;
21637
+ }, function (_ref5) {
21638
+ var selectedChannel = _ref5.selectedChannel,
21639
+ hoverBackground = _ref5.hoverBackground;
21438
21640
  return !selectedChannel && "\n background-color: " + hoverBackground + ";\n ";
21439
21641
  }, UserStatus, function (props) {
21440
21642
  return props.selectedChannel ? props.selectedBackgroundColor : props.hoverBackground;
@@ -21449,9 +21651,9 @@ var DraftMessageText = styled__default.span(_templateObject8$1 || (_templateObje
21449
21651
  });
21450
21652
  var LastMessageAuthor = styled__default.div(_templateObject9$1 || (_templateObject9$1 = _taggedTemplateLiteralLoose(["\n max-width: 120px;\n font-weight: 500;\n color: ", ";\n\n ", "\n & > span {\n display: block;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n max-width: 100%;\n }\n"])), function (props) {
21451
21653
  return props.color;
21452
- }, function (_ref5) {
21453
- var typing = _ref5.typing,
21454
- recording = _ref5.recording;
21654
+ }, function (_ref6) {
21655
+ var typing = _ref6.typing,
21656
+ recording = _ref6.recording;
21455
21657
  return (typing || recording) && "\n font-weight: 500;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n max-width: calc(100% - " + (typing ? 62 : 76) + "px);\n ";
21456
21658
  });
21457
21659
  var Points = styled__default.span(_templateObject0$1 || (_templateObject0$1 = _taggedTemplateLiteralLoose(["\n margin-right: 4px;\n color: ", ";\n font-style: normal;\n"])), function (props) {
@@ -21508,7 +21710,7 @@ var MessageTextContainer = styled__default.div(_templateObject20$1 || (_template
21508
21710
 
21509
21711
  var _templateObject$5, _templateObject2$5;
21510
21712
  var SearchInputContainer = styled__default.div(_templateObject$5 || (_templateObject$5 = _taggedTemplateLiteralLoose(["\n position: relative;\n width: 100%;\n max-width: ", ";\n box-sizing: border-box;\n padding: ", ";\n\n & ", " {\n ", ";\n }\n"])), function (props) {
21511
- return props.inline && 'calc(100% - 24px)';
21713
+ return props.width || props.inline && 'calc(100% - 24px)';
21512
21714
  }, function (props) {
21513
21715
  return !props.inline && '0 12px 16px';
21514
21716
  }, ClearTypedText, function (props) {
@@ -21535,14 +21737,16 @@ var ChannelSearch = function ChannelSearch(_ref) {
21535
21737
  borderRadius = _ref.borderRadius,
21536
21738
  searchInputBackgroundColor = _ref.searchInputBackgroundColor,
21537
21739
  searchInputTextColor = _ref.searchInputTextColor,
21538
- fontSize = _ref.fontSize;
21740
+ fontSize = _ref.fontSize,
21741
+ width = _ref.width;
21539
21742
  var _useColor = useColors(),
21540
21743
  textPrimary = _useColor[THEME_COLORS.TEXT_PRIMARY],
21541
21744
  surface1 = _useColor[THEME_COLORS.SURFACE_1],
21542
21745
  iconInactive = _useColor[THEME_COLORS.ICON_INACTIVE],
21543
21746
  footnoteColor = _useColor[THEME_COLORS.TEXT_FOOTNOTE];
21544
21747
  return /*#__PURE__*/React__default.createElement(SearchInputContainer, {
21545
- inline: inline
21748
+ inline: inline,
21749
+ width: width
21546
21750
  }, /*#__PURE__*/React__default.createElement(StyledSearchSvg, {
21547
21751
  left: !inline ? '22px' : '',
21548
21752
  color: iconInactive
@@ -23323,6 +23527,7 @@ var ChannelList = function ChannelList(_ref) {
23323
23527
  searchInputTextColor = _ref.searchInputTextColor,
23324
23528
  _ref$searchChannelsPo = _ref.searchChannelsPosition,
23325
23529
  searchChannelsPosition = _ref$searchChannelsPo === void 0 ? 'bottom' : _ref$searchChannelsPo,
23530
+ channelSearchWidth = _ref.channelSearchWidth,
23326
23531
  searchInputBorderRadius = _ref.searchInputBorderRadius,
23327
23532
  selectedChannelBorderRadius = _ref.selectedChannelBorderRadius,
23328
23533
  selectedChannelPaddings = _ref.selectedChannelPaddings,
@@ -23369,7 +23574,10 @@ var ChannelList = function ChannelList(_ref) {
23369
23574
  channelAvatarTextSize = _ref.channelAvatarTextSize,
23370
23575
  searchChannelInputFontSize = _ref.searchChannelInputFontSize,
23371
23576
  searchedChannelsTitleFontSize = _ref.searchedChannelsTitleFontSize,
23372
- searchChannelsPadding = _ref.searchChannelsPadding;
23577
+ searchChannelsPadding = _ref.searchChannelsPadding,
23578
+ getCustomLatestMessage = _ref.getCustomLatestMessage,
23579
+ _ref$doNotShowMessage = _ref.doNotShowMessageDeliveryTypes,
23580
+ doNotShowMessageDeliveryTypes = _ref$doNotShowMessage === void 0 ? ['system'] : _ref$doNotShowMessage;
23373
23581
  var _useColor = useColors(),
23374
23582
  background = _useColor[THEME_COLORS.BACKGROUND],
23375
23583
  textPrimary = _useColor[THEME_COLORS.TEXT_PRIMARY],
@@ -23437,11 +23645,6 @@ var ChannelList = function ChannelList(_ref) {
23437
23645
  handleLoadMoreChannels();
23438
23646
  }
23439
23647
  };
23440
- var handleChangeActiveChannel = function handleChangeActiveChannel(chan) {
23441
- if (activeChannel.id !== chan.id) {
23442
- dispatch(switchChannelActionAC(chan));
23443
- }
23444
- };
23445
23648
  var handleCrateChatWithContact = function handleCrateChatWithContact(contact) {
23446
23649
  if (contact) {
23447
23650
  var channelData = {
@@ -23597,6 +23800,13 @@ var ChannelList = function ChannelList(_ref) {
23597
23800
  setListWidthIsSet(false);
23598
23801
  }
23599
23802
  }, [channels]);
23803
+ var setSelectedChannel = function setSelectedChannel(channel) {
23804
+ if (activeChannel.id !== channel.id) {
23805
+ dispatch(sendTypingAC(false));
23806
+ dispatch(clearMessagesAC());
23807
+ dispatch(switchChannelActionAC(channel));
23808
+ }
23809
+ };
23600
23810
  return /*#__PURE__*/React__default.createElement(Container$7, {
23601
23811
  className: className,
23602
23812
  withCustomList: !!List,
@@ -23610,6 +23820,7 @@ var ChannelList = function ChannelList(_ref) {
23610
23820
  padding: searchChannelsPadding
23611
23821
  }, Profile, showSearch && searchChannelsPosition === 'inline' ? (/*#__PURE__*/React__default.createElement(ChannelSearch, {
23612
23822
  inline: true,
23823
+ width: channelSearchWidth,
23613
23824
  borderRadius: searchInputBorderRadius,
23614
23825
  searchValue: searchValue,
23615
23826
  handleSearchValueChange: handleSearchValueChange,
@@ -23631,6 +23842,7 @@ var ChannelList = function ChannelList(_ref) {
23631
23842
  })))), showSearch && searchChannelsPosition === 'bottom' && (/*#__PURE__*/React__default.createElement(ChannelSearch, {
23632
23843
  searchValue: searchValue,
23633
23844
  theme: theme,
23845
+ width: channelSearchWidth,
23634
23846
  borderRadius: searchInputBorderRadius,
23635
23847
  handleSearchValueChange: handleSearchValueChange,
23636
23848
  getMyChannels: getMyChannels,
@@ -23641,13 +23853,13 @@ var ChannelList = function ChannelList(_ref) {
23641
23853
  channels: channels,
23642
23854
  searchedChannels: searchedChannels,
23643
23855
  selectedChannel: activeChannel,
23644
- setSelectedChannel: handleChangeActiveChannel,
23856
+ setSelectedChannel: setSelectedChannel,
23645
23857
  loadMoreChannels: handleLoadMoreChannels,
23646
23858
  searchValue: searchValue
23647
23859
  }, !searchValue ? (/*#__PURE__*/React__default.createElement(React__default.Fragment, null, channels.map(function (channel) {
23648
23860
  return ListItem ? (/*#__PURE__*/React__default.createElement(ListItem, {
23649
23861
  channel: channel,
23650
- setSelectedChannel: handleChangeActiveChannel,
23862
+ setSelectedChannel: setSelectedChannel,
23651
23863
  key: channel.id
23652
23864
  })) : (/*#__PURE__*/React__default.createElement(Channel, {
23653
23865
  theme: theme,
@@ -23673,7 +23885,10 @@ var ChannelList = function ChannelList(_ref) {
23673
23885
  avatarBorderRadius: avatarBorderRadius,
23674
23886
  channel: channel,
23675
23887
  key: channel.id,
23676
- contactsMap: contactsMap
23888
+ contactsMap: contactsMap,
23889
+ setSelectedChannel: setSelectedChannel,
23890
+ getCustomLatestMessage: getCustomLatestMessage,
23891
+ doNotShowMessageDeliveryTypes: doNotShowMessageDeliveryTypes
23677
23892
  }));
23678
23893
  }))) : channelsLoading === LOADING_STATE.LOADED && searchValue ? (/*#__PURE__*/React__default.createElement(React__default.Fragment, null, searchedChannels !== null && searchedChannels !== void 0 && (_searchedChannels$cha = searchedChannels.chats_groups) !== null && _searchedChannels$cha !== void 0 && _searchedChannels$cha.length || searchedChannels !== null && searchedChannels !== void 0 && (_searchedChannels$cha2 = searchedChannels.channels) !== null && _searchedChannels$cha2 !== void 0 && _searchedChannels$cha2.length || searchedChannels !== null && searchedChannels !== void 0 && (_searchedChannels$con = searchedChannels.contacts) !== null && _searchedChannels$con !== void 0 && _searchedChannels$con.length ? (/*#__PURE__*/React__default.createElement(React__default.Fragment, null, !!(searchedChannels.chats_groups && searchedChannels.chats_groups.length) && (/*#__PURE__*/React__default.createElement(DirectChannels, null, /*#__PURE__*/React__default.createElement(SearchedChannelsHeader, {
23679
23894
  color: textSecondary,
@@ -23681,7 +23896,7 @@ var ChannelList = function ChannelList(_ref) {
23681
23896
  }, "Chats & Groups"), searchedChannels.chats_groups.map(function (channel) {
23682
23897
  return ListItem ? (/*#__PURE__*/React__default.createElement(ListItem, {
23683
23898
  channel: channel,
23684
- setSelectedChannel: handleChangeActiveChannel,
23899
+ setSelectedChannel: setSelectedChannel,
23685
23900
  key: channel.id
23686
23901
  })) : (/*#__PURE__*/React__default.createElement(Channel, {
23687
23902
  theme: theme,
@@ -23707,7 +23922,10 @@ var ChannelList = function ChannelList(_ref) {
23707
23922
  avatarBorderRadius: avatarBorderRadius,
23708
23923
  channel: channel,
23709
23924
  key: channel.id,
23710
- contactsMap: contactsMap
23925
+ contactsMap: contactsMap,
23926
+ setSelectedChannel: setSelectedChannel,
23927
+ getCustomLatestMessage: getCustomLatestMessage,
23928
+ doNotShowMessageDeliveryTypes: doNotShowMessageDeliveryTypes
23711
23929
  }));
23712
23930
  }))), !!(searchedChannels.contacts && searchedChannels.contacts.length) && (/*#__PURE__*/React__default.createElement(GroupChannels, null, /*#__PURE__*/React__default.createElement(SearchedChannelsHeader, {
23713
23931
  color: textSecondary,
@@ -23716,7 +23934,7 @@ var ChannelList = function ChannelList(_ref) {
23716
23934
  return ListItem ? (/*#__PURE__*/React__default.createElement(ListItem, {
23717
23935
  contact: contact,
23718
23936
  createChatWithContact: handleCrateChatWithContact,
23719
- setSelectedChannel: handleChangeActiveChannel,
23937
+ setSelectedChannel: setSelectedChannel,
23720
23938
  key: contact.id
23721
23939
  })) : (/*#__PURE__*/React__default.createElement(ContactItem, {
23722
23940
  theme: theme,
@@ -23747,7 +23965,7 @@ var ChannelList = function ChannelList(_ref) {
23747
23965
  }, "Channels"), searchedChannels.channels.map(function (channel) {
23748
23966
  return ListItem ? (/*#__PURE__*/React__default.createElement(ListItem, {
23749
23967
  channel: channel,
23750
- setSelectedChannel: handleChangeActiveChannel,
23968
+ setSelectedChannel: setSelectedChannel,
23751
23969
  key: channel.id
23752
23970
  })) : (/*#__PURE__*/React__default.createElement(Channel, {
23753
23971
  theme: theme,
@@ -23773,7 +23991,10 @@ var ChannelList = function ChannelList(_ref) {
23773
23991
  avatarBorderRadius: avatarBorderRadius,
23774
23992
  channel: channel,
23775
23993
  key: channel.id,
23776
- contactsMap: contactsMap
23994
+ contactsMap: contactsMap,
23995
+ setSelectedChannel: setSelectedChannel,
23996
+ getCustomLatestMessage: getCustomLatestMessage,
23997
+ doNotShowMessageDeliveryTypes: doNotShowMessageDeliveryTypes
23777
23998
  }));
23778
23999
  }))))) : (/*#__PURE__*/React__default.createElement(NoData, {
23779
24000
  color: textSecondary,
@@ -23794,7 +24015,7 @@ var ChannelList = function ChannelList(_ref) {
23794
24015
  }, channels.map(function (channel) {
23795
24016
  return ListItem ? (/*#__PURE__*/React__default.createElement(ListItem, {
23796
24017
  channel: channel,
23797
- setSelectedChannel: handleChangeActiveChannel,
24018
+ setSelectedChannel: setSelectedChannel,
23798
24019
  key: channel.id
23799
24020
  })) : (/*#__PURE__*/React__default.createElement(Channel, {
23800
24021
  theme: theme,
@@ -23820,7 +24041,10 @@ var ChannelList = function ChannelList(_ref) {
23820
24041
  avatarBorderRadius: avatarBorderRadius,
23821
24042
  channel: channel,
23822
24043
  key: channel.id,
23823
- contactsMap: contactsMap
24044
+ contactsMap: contactsMap,
24045
+ setSelectedChannel: setSelectedChannel,
24046
+ getCustomLatestMessage: getCustomLatestMessage,
24047
+ doNotShowMessageDeliveryTypes: doNotShowMessageDeliveryTypes
23824
24048
  }));
23825
24049
  }))), !!searchValue && (channelsLoading === LOADING_STATE.LOADED ? !((_searchedChannels$cha4 = searchedChannels.chats_groups) !== null && _searchedChannels$cha4 !== void 0 && _searchedChannels$cha4.length) && !((_searchedChannels$cha5 = searchedChannels.chats_groups) !== null && _searchedChannels$cha5 !== void 0 && _searchedChannels$cha5.length) && !((_searchedChannels$cha6 = searchedChannels.channels) !== null && _searchedChannels$cha6 !== void 0 && _searchedChannels$cha6.length) ? (/*#__PURE__*/React__default.createElement(NoData, {
23826
24050
  color: textSecondary,
@@ -23831,7 +24055,7 @@ var ChannelList = function ChannelList(_ref) {
23831
24055
  }, "Chats & Groups"), searchedChannels.chats_groups.map(function (channel) {
23832
24056
  return ListItem ? (/*#__PURE__*/React__default.createElement(ListItem, {
23833
24057
  channel: channel,
23834
- setSelectedChannel: handleChangeActiveChannel,
24058
+ setSelectedChannel: setSelectedChannel,
23835
24059
  key: channel.id
23836
24060
  })) : (/*#__PURE__*/React__default.createElement(Channel, {
23837
24061
  theme: theme,
@@ -23857,7 +24081,10 @@ var ChannelList = function ChannelList(_ref) {
23857
24081
  avatarBorderRadius: avatarBorderRadius,
23858
24082
  channel: channel,
23859
24083
  contactsMap: contactsMap,
23860
- key: channel.id
24084
+ key: channel.id,
24085
+ setSelectedChannel: setSelectedChannel,
24086
+ getCustomLatestMessage: getCustomLatestMessage,
24087
+ doNotShowMessageDeliveryTypes: doNotShowMessageDeliveryTypes
23861
24088
  }));
23862
24089
  }))), !!searchedChannels.channels.length && (/*#__PURE__*/React__default.createElement(GroupChannels, null, /*#__PURE__*/React__default.createElement(SearchedChannelsHeader, {
23863
24090
  color: textSecondary,
@@ -23865,7 +24092,7 @@ var ChannelList = function ChannelList(_ref) {
23865
24092
  }, "Channels"), searchedChannels.channels.map(function (channel) {
23866
24093
  return ListItem ? (/*#__PURE__*/React__default.createElement(ListItem, {
23867
24094
  channel: channel,
23868
- setSelectedChannel: handleChangeActiveChannel,
24095
+ setSelectedChannel: setSelectedChannel,
23869
24096
  key: channel.id
23870
24097
  })) : (/*#__PURE__*/React__default.createElement(Channel, {
23871
24098
  theme: theme,
@@ -23891,7 +24118,10 @@ var ChannelList = function ChannelList(_ref) {
23891
24118
  avatarBorderRadius: avatarBorderRadius,
23892
24119
  channel: channel,
23893
24120
  key: channel.id,
23894
- contactsMap: contactsMap
24121
+ contactsMap: contactsMap,
24122
+ setSelectedChannel: setSelectedChannel,
24123
+ getCustomLatestMessage: getCustomLatestMessage,
24124
+ doNotShowMessageDeliveryTypes: doNotShowMessageDeliveryTypes
23895
24125
  }));
23896
24126
  }))))) : (/*#__PURE__*/React__default.createElement(LoadingWrapper, null, /*#__PURE__*/React__default.createElement(UploadingIcon, {
23897
24127
  color: textFootnote
@@ -23930,7 +24160,7 @@ var NoData = styled__default.div(_templateObject8$4 || (_templateObject8$4 = _ta
23930
24160
  return props.color;
23931
24161
  });
23932
24162
  var LoadingWrapper = styled__default.div(_templateObject9$4 || (_templateObject9$4 = _taggedTemplateLiteralLoose(["\n position: absolute;\n left: calc(50% - 20px);\n top: calc(50% - 20px);\n"])));
23933
- var ChannelListHeader = styled__default.div(_templateObject0$3 || (_templateObject0$3 = _taggedTemplateLiteralLoose(["\n display: flex;\n align-items: center;\n flex-direction: row;\n justify-content: space-between;\n max-width: ", ";\n padding: ", ";\n padding-left: 22px;\n box-sizing: border-box;\n padding-left: ", ";\n border-right: ", ";\n"])), function (props) {
24163
+ var ChannelListHeader = styled__default.div(_templateObject0$3 || (_templateObject0$3 = _taggedTemplateLiteralLoose(["\n display: flex;\n align-items: center;\n flex-direction: row;\n justify-content: space-between;\n max-width: ", ";\n padding: ", ";\n box-sizing: border-box;\n padding-left: ", ";\n border-right: ", ";\n"])), function (props) {
23934
24164
  return props.maxWidth ? props.maxWidth + "px" : 'inherit';
23935
24165
  }, function (props) {
23936
24166
  return props.padding || '12px';
@@ -24544,50 +24774,6 @@ function SvgDeleteChannel(props) {
24544
24774
  })));
24545
24775
  }
24546
24776
 
24547
- var ATTACHMENTS_CACHE = 'attachments-cache';
24548
- var isBrowser = typeof window !== 'undefined';
24549
- var cacheAvailable;
24550
- if (isBrowser) {
24551
- cacheAvailable = 'caches' in window;
24552
- } else {
24553
- cacheAvailable = 'caches' in global;
24554
- }
24555
- var setAttachmentToCache = function setAttachmentToCache(attachmentUrl, attachmentResponse) {
24556
- if (cacheAvailable) {
24557
- caches.open(ATTACHMENTS_CACHE).then(function (cache) {
24558
- try {
24559
- cache.put(attachmentUrl, attachmentResponse).then(function () {
24560
- log.info('Cache success');
24561
- })["catch"](function (e) {
24562
- log.info('Error on cache attachment ... ', e);
24563
- caches["delete"](attachmentUrl);
24564
- });
24565
- return Promise.resolve();
24566
- } catch (e) {
24567
- return Promise.reject(e);
24568
- }
24569
- });
24570
- }
24571
- };
24572
- var getAttachmentUrlFromCache = function getAttachmentUrlFromCache(attachmentUrl) {
24573
- try {
24574
- if (!cacheAvailable) {
24575
- log.error('Cache is not available');
24576
- return Promise.reject(new Error('Cache not available'));
24577
- }
24578
- return Promise.resolve(caches.match(attachmentUrl)).then(function (response) {
24579
- if (response) {
24580
- return Promise.resolve(response.blob()).then(URL.createObjectURL);
24581
- } else {
24582
- log.info('The image or video is not cached', attachmentUrl);
24583
- return false;
24584
- }
24585
- });
24586
- } catch (e) {
24587
- return Promise.reject(e);
24588
- }
24589
- };
24590
-
24591
24777
  var _path$A;
24592
24778
  function _extends$B() {
24593
24779
  return _extends$B = Object.assign ? Object.assign.bind() : function (n) {
@@ -26051,6 +26237,7 @@ var Message = function Message(_ref) {
26051
26237
  var _useColor = useColors(),
26052
26238
  textOnPrimary = _useColor[THEME_COLORS.TEXT_ON_PRIMARY],
26053
26239
  overlayBackground = _useColor[THEME_COLORS.OVERLAY_BACKGROUND];
26240
+ var scrollToNewMessage = useSelector(scrollToNewMessageSelector);
26054
26241
  var dispatch = useDispatch();
26055
26242
  var ChatClient = getClient();
26056
26243
  var user = ChatClient.user;
@@ -26069,7 +26256,19 @@ var Message = function Message(_ref) {
26069
26256
  };
26070
26257
  React.useEffect(function () {
26071
26258
  if (isVisible) {
26259
+ var _channel$lastMessage;
26072
26260
  handleSendReadMarker();
26261
+ if (!channel.isLinkedChannel) {
26262
+ setMessageToVisibleMessagesMap(message);
26263
+ }
26264
+ if (scrollToNewMessage.scrollToBottom && ((message === null || message === void 0 ? void 0 : message.id) === ((_channel$lastMessage = channel.lastMessage) === null || _channel$lastMessage === void 0 ? void 0 : _channel$lastMessage.id) || !(message !== null && message !== void 0 && message.id))) {
26265
+ dispatch(scrollToNewMessageAC(false, false, false));
26266
+ dispatch(setMessagesLoadingStateAC(LOADING_STATE.LOADED));
26267
+ }
26268
+ } else {
26269
+ if (!channel.isLinkedChannel) {
26270
+ removeMessageFromVisibleMessagesMap(message);
26271
+ }
26073
26272
  }
26074
26273
  }, [isVisible]);
26075
26274
  useDidUpdate(function () {
@@ -31185,7 +31384,7 @@ var validateUrl = function validateUrl(url) {
31185
31384
  }
31186
31385
  };
31187
31386
  var OGMetadata = function OGMetadata(_ref) {
31188
- var _metadata$og4, _metadata$og4$image, _metadata$og4$image$, _metadata$og5, _metadata$og5$image, _metadata$og5$image$, _metadata$og6, _metadata$og7, _metadata$og7$favicon, _metadata$og8, _metadata$og8$favicon, _metadata$og9, _metadata$og0, _metadata$og1;
31387
+ var _metadata$og6, _metadata$og6$image, _metadata$og6$image$, _metadata$og7, _metadata$og7$image, _metadata$og7$image$, _metadata$og8, _metadata$og8$image, _metadata$og8$image$, _metadata$og9, _metadata$og0, _metadata$og0$favicon, _metadata$og1, _metadata$og1$favicon, _metadata$og10, _metadata$og11, _metadata$og12;
31189
31388
  var attachments = _ref.attachments,
31190
31389
  state = _ref.state;
31191
31390
  var _useState = React.useState(null),
@@ -31197,6 +31396,15 @@ var OGMetadata = function OGMetadata(_ref) {
31197
31396
  var _useState3 = React.useState(true),
31198
31397
  faviconLoadError = _useState3[0],
31199
31398
  setFaviconLoadError = _useState3[1];
31399
+ var _useState4 = React.useState(false),
31400
+ imageLoaded = _useState4[0],
31401
+ setImageLoaded = _useState4[1];
31402
+ var _useState5 = React.useState(0),
31403
+ imageWidth = _useState5[0],
31404
+ setImageWidth = _useState5[1];
31405
+ var _useState6 = React.useState(0),
31406
+ imageHeight = _useState6[0],
31407
+ setImageHeight = _useState6[1];
31200
31408
  var attachment = React.useMemo(function () {
31201
31409
  return attachments.find(function (attachment) {
31202
31410
  return attachment.type === attachmentTypes.link;
@@ -31211,7 +31419,7 @@ var OGMetadata = function OGMetadata(_ref) {
31211
31419
  var queryBuilder = new client.MessageLinkOGQueryBuilder(url);
31212
31420
  return Promise.resolve(queryBuilder.build()).then(function (query) {
31213
31421
  return Promise.resolve(query.loadOGData()).then(function (metadata) {
31214
- return Promise.resolve(storeMetadata(url.replace('https://', '').replace('http://', ''), metadata)).then(function () {
31422
+ return Promise.resolve(storeMetadata(url, metadata)).then(function () {
31215
31423
  setMetadata(metadata);
31216
31424
  });
31217
31425
  });
@@ -31234,7 +31442,7 @@ var OGMetadata = function OGMetadata(_ref) {
31234
31442
  if (attachment !== null && attachment !== void 0 && attachment.id && attachment !== null && attachment !== void 0 && attachment.url) {
31235
31443
  var url = attachment === null || attachment === void 0 ? void 0 : attachment.url;
31236
31444
  if (url) {
31237
- getMetadata(url.replace('https://', '').replace('http://', '')).then(function (cachedMetadata) {
31445
+ getMetadata(url).then(function (cachedMetadata) {
31238
31446
  try {
31239
31447
  if (cachedMetadata) {
31240
31448
  setMetadata(cachedMetadata);
@@ -31263,6 +31471,29 @@ var OGMetadata = function OGMetadata(_ref) {
31263
31471
  var _metadata$og, _metadata$og2, _metadata$og2$image, _metadata$og2$image$, _metadata$og3;
31264
31472
  return state !== 'deleted' && (metadata === null || metadata === void 0 ? void 0 : (_metadata$og = metadata.og) === null || _metadata$og === void 0 ? void 0 : _metadata$og.title) && (metadata === null || metadata === void 0 ? void 0 : (_metadata$og2 = metadata.og) === null || _metadata$og2 === void 0 ? void 0 : (_metadata$og2$image = _metadata$og2.image) === null || _metadata$og2$image === void 0 ? void 0 : (_metadata$og2$image$ = _metadata$og2$image[0]) === null || _metadata$og2$image$ === void 0 ? void 0 : _metadata$og2$image$.url) && (metadata === null || metadata === void 0 ? void 0 : (_metadata$og3 = metadata.og) === null || _metadata$og3 === void 0 ? void 0 : _metadata$og3.description) && metadata;
31265
31473
  }, [state, metadata]);
31474
+ React.useEffect(function () {
31475
+ var _metadata$og4, _metadata$og4$image, _metadata$og4$image$;
31476
+ if (metadata !== null && metadata !== void 0 && (_metadata$og4 = metadata.og) !== null && _metadata$og4 !== void 0 && (_metadata$og4$image = _metadata$og4.image) !== null && _metadata$og4$image !== void 0 && (_metadata$og4$image$ = _metadata$og4$image[0]) !== null && _metadata$og4$image$ !== void 0 && _metadata$og4$image$.url) {
31477
+ var _metadata$og5, _metadata$og5$image, _metadata$og5$image$;
31478
+ var image = new Image();
31479
+ image.src = metadata === null || metadata === void 0 ? void 0 : (_metadata$og5 = metadata.og) === null || _metadata$og5 === void 0 ? void 0 : (_metadata$og5$image = _metadata$og5.image) === null || _metadata$og5$image === void 0 ? void 0 : (_metadata$og5$image$ = _metadata$og5$image[0]) === null || _metadata$og5$image$ === void 0 ? void 0 : _metadata$og5$image$.url;
31480
+ image.onload = function () {
31481
+ var imageWidth = image.width;
31482
+ var imageHeight = image.height;
31483
+ setImageWidth(imageWidth);
31484
+ setImageHeight(imageHeight);
31485
+ setImageLoadError(false);
31486
+ setImageLoaded(true);
31487
+ };
31488
+ image.onerror = function () {
31489
+ setImageLoadError(true);
31490
+ setImageLoaded(true);
31491
+ };
31492
+ }
31493
+ }, [metadata === null || metadata === void 0 ? void 0 : (_metadata$og6 = metadata.og) === null || _metadata$og6 === void 0 ? void 0 : (_metadata$og6$image = _metadata$og6.image) === null || _metadata$og6$image === void 0 ? void 0 : (_metadata$og6$image$ = _metadata$og6$image[0]) === null || _metadata$og6$image$ === void 0 ? void 0 : _metadata$og6$image$.url]);
31494
+ var calculatedImageHeight = React.useMemo(function () {
31495
+ return imageHeight / (imageWidth / 400);
31496
+ }, [imageWidth, imageHeight]);
31266
31497
  return /*#__PURE__*/React__default.createElement(OGMetadataContainer, {
31267
31498
  showOGMetadata: !!showOGMetadata
31268
31499
  }, /*#__PURE__*/React__default.createElement("div", {
@@ -31270,43 +31501,69 @@ var OGMetadata = function OGMetadata(_ref) {
31270
31501
  window.open(attachment === null || attachment === void 0 ? void 0 : attachment.url, '_blank');
31271
31502
  }
31272
31503
  }, /*#__PURE__*/React__default.createElement(ImageContainer, {
31273
- showOGMetadata: !!showOGMetadata && !imageLoadError
31274
- }, metadata !== null && metadata !== void 0 && (_metadata$og4 = metadata.og) !== null && _metadata$og4 !== void 0 && (_metadata$og4$image = _metadata$og4.image) !== null && _metadata$og4$image !== void 0 && (_metadata$og4$image$ = _metadata$og4$image[0]) !== null && _metadata$og4$image$ !== void 0 && _metadata$og4$image$.url ? (/*#__PURE__*/React__default.createElement(Img, {
31275
- src: metadata === null || metadata === void 0 ? void 0 : (_metadata$og5 = metadata.og) === null || _metadata$og5 === void 0 ? void 0 : (_metadata$og5$image = _metadata$og5.image) === null || _metadata$og5$image === void 0 ? void 0 : (_metadata$og5$image$ = _metadata$og5$image[0]) === null || _metadata$og5$image$ === void 0 ? void 0 : _metadata$og5$image$.url,
31504
+ showOGMetadata: !!showOGMetadata && !imageLoadError && imageLoaded,
31505
+ width: 400,
31506
+ height: calculatedImageHeight
31507
+ }, metadata !== null && metadata !== void 0 && (_metadata$og7 = metadata.og) !== null && _metadata$og7 !== void 0 && (_metadata$og7$image = _metadata$og7.image) !== null && _metadata$og7$image !== void 0 && (_metadata$og7$image$ = _metadata$og7$image[0]) !== null && _metadata$og7$image$ !== void 0 && _metadata$og7$image$.url && !imageLoadError ? (/*#__PURE__*/React__default.createElement(Img, {
31508
+ src: metadata === null || metadata === void 0 ? void 0 : (_metadata$og8 = metadata.og) === null || _metadata$og8 === void 0 ? void 0 : (_metadata$og8$image = _metadata$og8.image) === null || _metadata$og8$image === void 0 ? void 0 : (_metadata$og8$image$ = _metadata$og8$image[0]) === null || _metadata$og8$image$ === void 0 ? void 0 : _metadata$og8$image$.url,
31276
31509
  alt: 'OG metadata image',
31277
- onLoad: function onLoad() {
31278
- return setImageLoadError(false);
31279
- },
31280
- onError: function onError() {
31281
- return setImageLoadError(true);
31282
- }
31283
- })) : null), showOGMetadata ? (/*#__PURE__*/React__default.createElement(OGText, null, /*#__PURE__*/React__default.createElement(Url, null, ogUrl), metadata !== null && metadata !== void 0 && (_metadata$og6 = metadata.og) !== null && _metadata$og6 !== void 0 && _metadata$og6.title ? (/*#__PURE__*/React__default.createElement(Title, null, metadata !== null && metadata !== void 0 && (_metadata$og7 = metadata.og) !== null && _metadata$og7 !== void 0 && (_metadata$og7$favicon = _metadata$og7.favicon) !== null && _metadata$og7$favicon !== void 0 && _metadata$og7$favicon.url && !faviconLoadError ? (/*#__PURE__*/React__default.createElement(Favicon, {
31284
- src: metadata === null || metadata === void 0 ? void 0 : (_metadata$og8 = metadata.og) === null || _metadata$og8 === void 0 ? void 0 : (_metadata$og8$favicon = _metadata$og8.favicon) === null || _metadata$og8$favicon === void 0 ? void 0 : _metadata$og8$favicon.url,
31510
+ width: 400,
31511
+ height: calculatedImageHeight
31512
+ })) : null), showOGMetadata && imageLoaded ? (/*#__PURE__*/React__default.createElement(OGText, null, /*#__PURE__*/React__default.createElement(Url, {
31513
+ maxWidth: 400
31514
+ }, ogUrl), metadata !== null && metadata !== void 0 && (_metadata$og9 = metadata.og) !== null && _metadata$og9 !== void 0 && _metadata$og9.title ? (/*#__PURE__*/React__default.createElement(Title, {
31515
+ maxWidth: 400
31516
+ }, metadata !== null && metadata !== void 0 && (_metadata$og0 = metadata.og) !== null && _metadata$og0 !== void 0 && (_metadata$og0$favicon = _metadata$og0.favicon) !== null && _metadata$og0$favicon !== void 0 && _metadata$og0$favicon.url && !faviconLoadError ? (/*#__PURE__*/React__default.createElement(Favicon, {
31517
+ src: metadata === null || metadata === void 0 ? void 0 : (_metadata$og1 = metadata.og) === null || _metadata$og1 === void 0 ? void 0 : (_metadata$og1$favicon = _metadata$og1.favicon) === null || _metadata$og1$favicon === void 0 ? void 0 : _metadata$og1$favicon.url,
31285
31518
  onLoad: function onLoad() {
31286
31519
  return setFaviconLoadError(false);
31287
31520
  },
31288
31521
  onError: function onError() {
31289
31522
  return setFaviconLoadError(true);
31290
31523
  }
31291
- })) : null, /*#__PURE__*/React__default.createElement("span", null, metadata === null || metadata === void 0 ? void 0 : (_metadata$og9 = metadata.og) === null || _metadata$og9 === void 0 ? void 0 : _metadata$og9.title))) : null, metadata !== null && metadata !== void 0 && (_metadata$og0 = metadata.og) !== null && _metadata$og0 !== void 0 && _metadata$og0.description ? /*#__PURE__*/React__default.createElement(Desc, null, metadata === null || metadata === void 0 ? void 0 : (_metadata$og1 = metadata.og) === null || _metadata$og1 === void 0 ? void 0 : _metadata$og1.description) : null)) : null));
31524
+ })) : null, /*#__PURE__*/React__default.createElement("span", null, metadata === null || metadata === void 0 ? void 0 : (_metadata$og10 = metadata.og) === null || _metadata$og10 === void 0 ? void 0 : _metadata$og10.title))) : null, metadata !== null && metadata !== void 0 && (_metadata$og11 = metadata.og) !== null && _metadata$og11 !== void 0 && _metadata$og11.description ? /*#__PURE__*/React__default.createElement(Desc, {
31525
+ maxWidth: 400
31526
+ }, metadata === null || metadata === void 0 ? void 0 : (_metadata$og12 = metadata.og) === null || _metadata$og12 === void 0 ? void 0 : _metadata$og12.description) : null)) : null));
31292
31527
  };
31293
31528
  var OGMetadataContainer = styled__default.div(_templateObject$A || (_templateObject$A = _taggedTemplateLiteralLoose(["\n min-width: inherit;\n max-width: inherit;\n display: grid;\n grid-template-columns: 1fr;\n background-color: rgba(0, 0, 0, 0.034);\n border-radius: 6px;\n margin-bottom: 0.4rem;\n margin: 0 auto;\n margin-bottom: ", ";\n &:hover {\n background-color: rgba(0, 0, 0, 0.1);\n cursor: pointer;\n }\n"])), function (_ref2) {
31294
31529
  var showOGMetadata = _ref2.showOGMetadata;
31295
31530
  return showOGMetadata ? '0.8rem' : '0';
31296
31531
  });
31297
- var ImageContainer = styled__default.div(_templateObject2$v || (_templateObject2$v = _taggedTemplateLiteralLoose(["\n max-width: 100%;\n max-height: 200px;\n width: 100%;\n margin: 0 auto;\n padding: ", ";\n height: ", ";\n transition: height 0.2s ease;\n"])), function (_ref3) {
31298
- var showOGMetadata = _ref3.showOGMetadata;
31299
- return showOGMetadata ? '0.3rem' : '0';
31532
+ var ImageContainer = styled__default.div(_templateObject2$v || (_templateObject2$v = _taggedTemplateLiteralLoose(["\n ", "\n\n ", "\n\n opacity: ", ";\n overflow: hidden;\n margin: 0 auto;\n padding: ", ";\n transition: height 0.2s ease;\n"])), function (_ref3) {
31533
+ var width = _ref3.width;
31534
+ return width ? "\n max-width: " + (width + "px") + ";\n " : "\n max-width: 100%;\n width: 100%;\n ";
31300
31535
  }, function (_ref4) {
31301
- var showOGMetadata = _ref4.showOGMetadata;
31302
- return showOGMetadata ? '200px' : '0';
31536
+ var height = _ref4.height,
31537
+ showOGMetadata = _ref4.showOGMetadata;
31538
+ return height ? "\n max-height: " + (height + "px") + ";\n height: " + (showOGMetadata ? height + "px" : '0') + ";\n " : "\n max-height: 200px;\n height: " + (showOGMetadata ? '200px' : '0') + ";\n ";
31539
+ }, function (_ref5) {
31540
+ var showOGMetadata = _ref5.showOGMetadata;
31541
+ return showOGMetadata ? 1 : 0;
31542
+ }, function (_ref6) {
31543
+ var showOGMetadata = _ref6.showOGMetadata;
31544
+ return showOGMetadata ? '0.3rem' : '0';
31545
+ });
31546
+ var OGText = styled__default.div(_templateObject3$p || (_templateObject3$p = _taggedTemplateLiteralLoose(["\n padding: 0.5rem;\n margin: 0;\n transition: all 0.2s ease;\n"])));
31547
+ var Url = styled__default.p(_templateObject4$l || (_templateObject4$l = _taggedTemplateLiteralLoose(["\n font-weight: normal;\n font-size: 13px;\n padding: 0;\n margin: 0 0 12px 0;\n color: gray;\n ", "\n transition: all 0.2s ease;\n"])), function (_ref7) {
31548
+ var maxWidth = _ref7.maxWidth;
31549
+ return maxWidth && "\n max-width: " + (maxWidth + "px") + ";\n ";
31550
+ });
31551
+ var Title = styled__default.p(_templateObject5$h || (_templateObject5$h = _taggedTemplateLiteralLoose(["\n font-weight: bold;\n font-size: 13px;\n padding: 0;\n display: flex;\n align-items: center;\n ", "\n transition: all 0.2s ease;\n"])), function (_ref8) {
31552
+ var maxWidth = _ref8.maxWidth;
31553
+ return maxWidth && "\n max-width: " + (maxWidth + "px") + ";\n ";
31303
31554
  });
31304
- var OGText = styled__default.div(_templateObject3$p || (_templateObject3$p = _taggedTemplateLiteralLoose(["\n width: 80%;\n padding: 0.5rem;\n margin: 0;\n"])));
31305
- var Url = styled__default.p(_templateObject4$l || (_templateObject4$l = _taggedTemplateLiteralLoose(["\n font-weight: normal;\n font-size: 13px;\n padding: 0;\n margin: 0 0 12px 0;\n color: gray;\n"])));
31306
- var Title = styled__default.p(_templateObject5$h || (_templateObject5$h = _taggedTemplateLiteralLoose(["\n font-weight: bold;\n font-size: 13px;\n padding: 0;\n display: flex;\n align-items: center;\n"])));
31307
- var Desc = styled__default.p(_templateObject6$f || (_templateObject6$f = _taggedTemplateLiteralLoose(["\n font-weight: normal;\n font-size: 13px;\n padding: 0;\n"])));
31308
- var Img = styled__default.img(_templateObject7$d || (_templateObject7$d = _taggedTemplateLiteralLoose(["\n max-width: 100%;\n max-height: 100%;\n width: 100%;\n height: 200px;\n object-fit: cover;\n transition: height 0.2s ease;\n"])));
31309
- var Favicon = styled__default.img(_templateObject8$c || (_templateObject8$c = _taggedTemplateLiteralLoose(["\n width: 24px;\n height: 24px;\n object-fit: contain;\n margin-right: 4px;\n"])));
31555
+ var Desc = styled__default.p(_templateObject6$f || (_templateObject6$f = _taggedTemplateLiteralLoose(["\n font-weight: normal;\n font-size: 13px;\n padding: 0;\n ", "\n transition: all 0.2s ease;\n"])), function (_ref9) {
31556
+ var maxWidth = _ref9.maxWidth;
31557
+ return maxWidth && "\n max-width: " + (maxWidth + "px") + ";\n ";
31558
+ });
31559
+ var Img = styled__default.img(_templateObject7$d || (_templateObject7$d = _taggedTemplateLiteralLoose(["\n ", "\n ", "\n object-fit: cover;\n transition: height 0.2s ease;\n"])), function (_ref0) {
31560
+ var width = _ref0.width;
31561
+ return width && "\n max-width: " + (width + "px") + ";\n min-width: " + (width + "px") + ";\n width: " + (width + "px") + ";\n ";
31562
+ }, function (_ref1) {
31563
+ var height = _ref1.height;
31564
+ return height && "\n max-height: " + (height + "px") + ";\n min-height: " + (height + "px") + ";\n height: " + (height + "px") + ";\n ";
31565
+ });
31566
+ var Favicon = styled__default.img(_templateObject8$c || (_templateObject8$c = _taggedTemplateLiteralLoose(["\n transition: all 0.2s ease;\n width: 24px;\n height: 24px;\n object-fit: contain;\n margin-right: 4px;\n"])));
31310
31567
 
31311
31568
  var _templateObject$B, _templateObject2$w, _templateObject3$q, _templateObject4$m, _templateObject5$i;
31312
31569
  var MessageBody = function MessageBody(_ref) {
@@ -32646,14 +32903,6 @@ var HiddenMessageProperty;
32646
32903
  })(HiddenMessageProperty || (HiddenMessageProperty = {}));
32647
32904
 
32648
32905
  var _templateObject$D, _templateObject2$y, _templateObject3$s, _templateObject4$o, _templateObject5$k, _templateObject6$h, _templateObject7$f, _templateObject8$e, _templateObject9$c, _templateObject0$b, _templateObject1$8;
32649
- var loadFromServer = false;
32650
- var loadDirection = '';
32651
- var nextDisable = false;
32652
- var prevDisable = false;
32653
- var scrollToBottom = false;
32654
- var shouldLoadMessages;
32655
- var loading = false;
32656
- var messagesIndexMap = {};
32657
32906
  var CreateMessageDateDivider = function CreateMessageDateDivider(_ref) {
32658
32907
  var lastIndex = _ref.lastIndex,
32659
32908
  currentMessageDate = _ref.currentMessageDate,
@@ -32863,6 +33112,7 @@ var MessageList = function MessageList(_ref2) {
32863
33112
  var scrollToMentionedMessage = useSelector(scrollToMentionedMessageSelector, reactRedux.shallowEqual);
32864
33113
  var scrollToRepliedMessage = useSelector(scrollToMessageSelector, reactRedux.shallowEqual);
32865
33114
  var scrollToMessageHighlight = useSelector(scrollToMessageHighlightSelector, reactRedux.shallowEqual);
33115
+ var scrollToMessageBehavior = useSelector(scrollToMessageBehaviorSelector, reactRedux.shallowEqual);
32866
33116
  var browserTabIsActive = useSelector(browserTabIsActiveSelector, reactRedux.shallowEqual);
32867
33117
  var hasNextMessages = useSelector(messagesHasNextSelector, reactRedux.shallowEqual);
32868
33118
  var hasPrevMessages = useSelector(messagesHasPrevSelector, reactRedux.shallowEqual);
@@ -32903,35 +33153,41 @@ var MessageList = function MessageList(_ref2) {
32903
33153
  setShouldPreserveScroll = _useState0[1];
32904
33154
  var messageForReply = {};
32905
33155
  var attachmentsSelected = false;
32906
- var messageTopDateRef = React.useRef(null);
33156
+ var _useState1 = React.useState(''),
33157
+ topDateLabel = _useState1[0],
33158
+ setTopDateLabel = _useState1[1];
32907
33159
  var scrollRef = React.useRef(null);
33160
+ var loadFromServerRef = React.useRef(false);
33161
+ var loadDirectionRef = React.useRef('');
33162
+ var nextDisableRef = React.useRef(false);
33163
+ var prevDisableRef = React.useRef(false);
33164
+ var scrollToBottomRef = React.useRef(false);
33165
+ var shouldLoadMessagesRef = React.useRef('');
33166
+ var loadingRef = React.useRef(false);
33167
+ var messagesIndexMapRef = React.useRef({});
33168
+ var scrollRafRef = React.useRef(null);
33169
+ var loadingMessagesTimeoutRef = React.useRef(null);
32908
33170
  var renderTopDate = function renderTopDate() {
32909
- var dateLabels = document.querySelectorAll('.divider');
32910
- var messageTopDate = messageTopDateRef.current;
33171
+ var container = scrollRef.current;
33172
+ if (!container) return;
33173
+ var dateLabels = container.querySelectorAll('.divider');
32911
33174
  var text = '';
32912
33175
  for (var i = dateLabels.length - 1; i >= 0; i--) {
32913
- var _dateLabel$firstChild;
32914
33176
  var dateLabel = dateLabels[i];
32915
- var span = dateLabel === null || dateLabel === void 0 ? void 0 : (_dateLabel$firstChild = dateLabel.firstChild) === null || _dateLabel$firstChild === void 0 ? void 0 : _dateLabel$firstChild.firstChild;
32916
- if (!text && scrollRef.current.scrollTop > dateLabel.offsetTop) {
32917
- text = span && span.innerText;
32918
- span.style.display = 'none';
32919
- } else {
32920
- span.style.display = 'block';
33177
+ if (!text && container.scrollTop > dateLabel.offsetTop - 28) {
33178
+ var span = (dateLabel === null || dateLabel === void 0 ? void 0 : dateLabel.firstChild) && dateLabel.firstChild.firstChild;
33179
+ text = span ? span.innerText || '' : '';
33180
+ setTopDateLabel(text);
33181
+ break;
32921
33182
  }
32922
33183
  }
32923
- if (text) {
32924
- messageTopDate.innerText = text;
32925
- messageTopDate.style.display = 'inline';
32926
- } else {
32927
- messageTopDate.style.display = 'none';
32928
- }
32929
33184
  };
32930
- var handleMessagesListScroll = React.useCallback(function (event) {
33185
+ var handleMessagesListScroll = React.useCallback(function () {
32931
33186
  try {
33187
+ var target = scrollRef.current;
33188
+ if (!target) return Promise.resolve();
32932
33189
  if (scrollToMentionedMessage) {
32933
- var _target = event.target;
32934
- if (_target.scrollTop <= -50 || channel.lastMessage.id !== messages[messages.length - 1].id) {
33190
+ if (target.scrollTop <= -50 || channel.lastMessage.id !== messages[messages.length - 1].id) {
32935
33191
  dispatch(showScrollToNewMessageButtonAC(true));
32936
33192
  } else {
32937
33193
  dispatch(showScrollToNewMessageButtonAC(false));
@@ -32944,7 +33200,6 @@ var MessageList = function MessageList(_ref2) {
32944
33200
  setShowTopDate(false);
32945
33201
  }, 1000);
32946
33202
  renderTopDate();
32947
- var target = event.target;
32948
33203
  var forceLoadPrevMessages = false;
32949
33204
  if (-target.scrollTop + target.offsetHeight + 30 > target.scrollHeight) {
32950
33205
  forceLoadPrevMessages = true;
@@ -32959,51 +33214,68 @@ var MessageList = function MessageList(_ref2) {
32959
33214
  }
32960
33215
  if (scrollToReply) {
32961
33216
  target.scrollTop = scrollToReply;
32962
- } else {
32963
- if (messagesIndexMap[lastVisibleMessageId] < 15 || forceLoadPrevMessages) {
32964
- if (connectionStatus === CONNECTION_STATUS.CONNECTED && !scrollToNewMessage.scrollToBottom && hasPrevMessages) {
32965
- if (loading || messagesLoading === LOADING_STATE.LOADING || prevDisable) {
32966
- shouldLoadMessages = 'prev';
32967
- } else {
32968
- if (shouldLoadMessages === 'prev') {
32969
- shouldLoadMessages = '';
32970
- }
32971
- loadDirection = 'prev';
32972
- handleLoadMoreMessages(MESSAGE_LOAD_DIRECTION.PREV, LOAD_MAX_MESSAGE_COUNT);
32973
- if (!getHasPrevCached()) {
32974
- loadFromServer = true;
32975
- }
32976
- nextDisable = true;
33217
+ return Promise.resolve();
33218
+ }
33219
+ var currentIndex = messagesIndexMapRef.current[lastVisibleMessageId];
33220
+ var hasIndex = typeof currentIndex === 'number';
33221
+ if (hasIndex && currentIndex < 15 || forceLoadPrevMessages) {
33222
+ if (connectionStatus === CONNECTION_STATUS.CONNECTED && !scrollToNewMessage.scrollToBottom && hasPrevMessages) {
33223
+ if (loadingRef.current || messagesLoading === LOADING_STATE.LOADING || prevDisableRef.current) {
33224
+ shouldLoadMessagesRef.current = 'prev';
33225
+ } else {
33226
+ if (shouldLoadMessagesRef.current === 'prev') {
33227
+ shouldLoadMessagesRef.current = '';
33228
+ }
33229
+ loadDirectionRef.current = 'prev';
33230
+ handleLoadMoreMessages(MESSAGE_LOAD_DIRECTION.PREV, LOAD_MAX_MESSAGE_COUNT);
33231
+ if (!getHasPrevCached()) {
33232
+ loadFromServerRef.current = true;
32977
33233
  }
33234
+ nextDisableRef.current = true;
32978
33235
  }
32979
33236
  }
32980
- if (messagesIndexMap[lastVisibleMessageId] >= messages.length - 15 || target.scrollTop === 0) {
32981
- if (connectionStatus === CONNECTION_STATUS.CONNECTED && !scrollToNewMessage.scrollToBottom && (hasNextMessages || getHasNextCached())) {
32982
- if (loading || messagesLoading === LOADING_STATE.LOADING || nextDisable) {
32983
- shouldLoadMessages = 'next';
32984
- } else {
32985
- if (shouldLoadMessages === 'next') {
32986
- shouldLoadMessages = '';
32987
- }
32988
- loadDirection = 'next';
32989
- prevDisable = true;
32990
- handleLoadMoreMessages(MESSAGE_LOAD_DIRECTION.NEXT, LOAD_MAX_MESSAGE_COUNT);
33237
+ }
33238
+ if (hasIndex && currentIndex >= messages.length - 15 || target.scrollTop === 0) {
33239
+ if (connectionStatus === CONNECTION_STATUS.CONNECTED && !scrollToNewMessage.scrollToBottom && (hasNextMessages || getHasNextCached())) {
33240
+ if (loadingRef.current || messagesLoading === LOADING_STATE.LOADING || nextDisableRef.current) {
33241
+ shouldLoadMessagesRef.current = 'next';
33242
+ } else {
33243
+ if (shouldLoadMessagesRef.current === 'next') {
33244
+ shouldLoadMessagesRef.current = '';
32991
33245
  }
33246
+ loadDirectionRef.current = 'next';
33247
+ prevDisableRef.current = true;
33248
+ handleLoadMoreMessages(MESSAGE_LOAD_DIRECTION.NEXT, LOAD_MAX_MESSAGE_COUNT);
32992
33249
  }
32993
33250
  }
32994
- if (messagesIndexMap[lastVisibleMessageId] > messages.length - 10) {
32995
- nextDisable = false;
32996
- }
33251
+ }
33252
+ if (hasIndex && currentIndex > messages.length - 10) {
33253
+ nextDisableRef.current = false;
32997
33254
  }
32998
33255
  return Promise.resolve();
32999
33256
  } catch (e) {
33000
33257
  return Promise.reject(e);
33001
33258
  }
33002
- }, [channel === null || channel === void 0 ? void 0 : (_channel$lastMessage = channel.lastMessage) === null || _channel$lastMessage === void 0 ? void 0 : _channel$lastMessage.id, messages, scrollToMentionedMessage, scrollToNewMessage, messagesLoading, hasPrevMessages, hasNextMessages, messagesIndexMap, lastVisibleMessageId, connectionStatus, shouldLoadMessages, loadDirection, getHasPrevCached, getHasNextCached, scrollToReply, loading, prevDisable, nextDisable]);
33259
+ }, [channel === null || channel === void 0 ? void 0 : (_channel$lastMessage = channel.lastMessage) === null || _channel$lastMessage === void 0 ? void 0 : _channel$lastMessage.id, messages, scrollToMentionedMessage, scrollToNewMessage, messagesLoading, hasPrevMessages, hasNextMessages, lastVisibleMessageId, connectionStatus, getHasPrevCached, getHasNextCached, scrollToReply]);
33260
+ var onScroll = React.useCallback(function () {
33261
+ if (scrollRafRef.current !== null) return;
33262
+ scrollRafRef.current = window.requestAnimationFrame(function () {
33263
+ scrollRafRef.current = null;
33264
+ handleMessagesListScroll();
33265
+ });
33266
+ }, [handleMessagesListScroll]);
33267
+ React.useEffect(function () {
33268
+ return function () {
33269
+ if (scrollRafRef.current !== null) {
33270
+ cancelAnimationFrame(scrollRafRef.current);
33271
+ scrollRafRef.current = null;
33272
+ }
33273
+ };
33274
+ }, []);
33003
33275
  var handleScrollToRepliedMessage = function handleScrollToRepliedMessage(messageId) {
33004
33276
  try {
33005
- prevDisable = true;
33006
- nextDisable = true;
33277
+ prevDisableRef.current = true;
33278
+ nextDisableRef.current = true;
33007
33279
  if (messages.findIndex(function (msg) {
33008
33280
  return msg.id === messageId;
33009
33281
  }) >= 10) {
@@ -33017,8 +33289,8 @@ var MessageList = function MessageList(_ref2) {
33017
33289
  var positiveValue = repliedMessage.offsetTop - scrollRef.current.offsetHeight / 2 < 0 ? repliedMessage.offsetTop - scrollRef.current.offsetHeight * -1 : repliedMessage.offsetTop - scrollRef.current.offsetHeight / 2;
33018
33290
  setTimeout(function () {
33019
33291
  repliedMessage.classList.remove('highlight');
33020
- prevDisable = false;
33021
- nextDisable = false;
33292
+ prevDisableRef.current = false;
33293
+ nextDisableRef.current = false;
33022
33294
  }, 1000 + positiveValue * 0.1);
33023
33295
  }
33024
33296
  } else {
@@ -33039,10 +33311,10 @@ var MessageList = function MessageList(_ref2) {
33039
33311
  var hasNextCached = getHasNextCached();
33040
33312
  if (messagesLoading === LOADING_STATE.LOADED && connectionStatus === CONNECTION_STATUS.CONNECTED) {
33041
33313
  if (direction === MESSAGE_LOAD_DIRECTION.PREV && firstMessageId && (hasPrevMessages || hasPrevCached)) {
33042
- loading = true;
33314
+ loadingRef.current = true;
33043
33315
  dispatch(loadMoreMessagesAC(channel.id, limit, direction, firstMessageId, hasPrevMessages));
33044
33316
  } else if (direction === MESSAGE_LOAD_DIRECTION.NEXT && lastMessageId && (hasNextMessages || hasNextCached)) {
33045
- loading = true;
33317
+ loadingRef.current = true;
33046
33318
  dispatch(loadMoreMessagesAC(channel.id, limit, direction, lastMessageId, hasNextMessages));
33047
33319
  }
33048
33320
  }
@@ -33073,39 +33345,42 @@ var MessageList = function MessageList(_ref2) {
33073
33345
  setIsDragging(false);
33074
33346
  }
33075
33347
  };
33348
+ var readDroppedFiles = function readDroppedFiles(e) {
33349
+ return new Promise(function (resolve) {
33350
+ var fileList = Object.values(e.dataTransfer.files);
33351
+ var attachmentsFiles = [];
33352
+ var readFiles = 0;
33353
+ var errorCount = 0;
33354
+ fileList.forEach(function (attachment) {
33355
+ var fileReader = new FileReader();
33356
+ fileReader.onload = function (event) {
33357
+ var file = event.target.result;
33358
+ attachmentsFiles.push({
33359
+ name: attachment.name,
33360
+ data: file,
33361
+ type: attachment.type
33362
+ });
33363
+ readFiles++;
33364
+ if (readFiles + errorCount === fileList.length) {
33365
+ resolve(attachmentsFiles);
33366
+ }
33367
+ };
33368
+ fileReader.onerror = function () {
33369
+ errorCount++;
33370
+ if (readFiles + errorCount === fileList.length) {
33371
+ resolve(attachmentsFiles);
33372
+ }
33373
+ };
33374
+ fileReader.readAsDataURL(attachment);
33375
+ });
33376
+ });
33377
+ };
33076
33378
  var handleDropFile = function handleDropFile(e) {
33077
33379
  e.preventDefault();
33078
33380
  e.stopPropagation();
33079
33381
  setIsDragging(false);
33080
33382
  if (e.dataTransfer.files && e.dataTransfer.files.length > 0) {
33081
- var fileList = Object.values(e.dataTransfer.files);
33082
- new Promise(function (resolve) {
33083
- var attachmentsFiles = [];
33084
- var readFiles = 0;
33085
- var errorCount = 0;
33086
- fileList.forEach(function (attachment) {
33087
- var fileReader = new FileReader();
33088
- fileReader.onload = function (event) {
33089
- var file = event.target.result;
33090
- attachmentsFiles.push({
33091
- name: attachment.name,
33092
- data: file,
33093
- type: attachment.type
33094
- });
33095
- readFiles++;
33096
- if (readFiles + errorCount === fileList.length) {
33097
- resolve(attachmentsFiles);
33098
- }
33099
- };
33100
- fileReader.onerror = function () {
33101
- errorCount++;
33102
- if (readFiles + errorCount === fileList.length) {
33103
- resolve(attachmentsFiles);
33104
- }
33105
- };
33106
- fileReader.readAsDataURL(attachment);
33107
- });
33108
- }).then(function (result) {
33383
+ readDroppedFiles(e).then(function (result) {
33109
33384
  dispatch(setDraggedAttachmentsAC(result, 'file'));
33110
33385
  })["catch"](function (error) {
33111
33386
  console.error('Error in handleDropFile:', error);
@@ -33118,34 +33393,7 @@ var MessageList = function MessageList(_ref2) {
33118
33393
  e.stopPropagation();
33119
33394
  setIsDragging(false);
33120
33395
  if (e.dataTransfer.files && e.dataTransfer.files.length > 0) {
33121
- var fileList = Object.values(e.dataTransfer.files);
33122
- new Promise(function (resolve) {
33123
- var attachmentsFiles = [];
33124
- var readFiles = 0;
33125
- var errorCount = 0;
33126
- fileList.forEach(function (attachment) {
33127
- var fileReader = new FileReader();
33128
- fileReader.onload = function (event) {
33129
- var file = event.target.result;
33130
- attachmentsFiles.push({
33131
- name: attachment.name,
33132
- data: file,
33133
- type: attachment.type
33134
- });
33135
- readFiles++;
33136
- if (readFiles + errorCount === fileList.length) {
33137
- resolve(attachmentsFiles);
33138
- }
33139
- };
33140
- fileReader.onerror = function () {
33141
- errorCount++;
33142
- if (readFiles + errorCount === fileList.length) {
33143
- resolve(attachmentsFiles);
33144
- }
33145
- };
33146
- fileReader.readAsDataURL(attachment);
33147
- });
33148
- }).then(function (result) {
33396
+ readDroppedFiles(e).then(function (result) {
33149
33397
  dispatch(setDraggedAttachmentsAC(result, 'media'));
33150
33398
  })["catch"](function (error) {
33151
33399
  console.error('Error in handleDropMedia:', error);
@@ -33157,21 +33405,21 @@ var MessageList = function MessageList(_ref2) {
33157
33405
  var _messages, _channel$lastMessage2;
33158
33406
  if (messages.length > 0 && ((_messages = messages[messages.length - 1]) === null || _messages === void 0 ? void 0 : _messages.id) === ((_channel$lastMessage2 = channel.lastMessage) === null || _channel$lastMessage2 === void 0 ? void 0 : _channel$lastMessage2.id) && scrollRef.current && scrollRef.current.scrollTop > -50 && !showScrollToNewMessageButton) {
33159
33407
  dispatch(showScrollToNewMessageButtonAC(false));
33160
- prevDisable = false;
33408
+ prevDisableRef.current = false;
33161
33409
  }
33162
33410
  }, [messages, channel === null || channel === void 0 ? void 0 : (_channel$lastMessage3 = channel.lastMessage) === null || _channel$lastMessage3 === void 0 ? void 0 : _channel$lastMessage3.id, scrollRef === null || scrollRef === void 0 ? void 0 : (_scrollRef$current = scrollRef.current) === null || _scrollRef$current === void 0 ? void 0 : _scrollRef$current.scrollTop, showScrollToNewMessageButton]);
33163
33411
  React.useEffect(function () {
33164
33412
  if (scrollToRepliedMessage) {
33165
- loading = false;
33413
+ loadingRef.current = false;
33166
33414
  scrollRef.current.style.scrollBehavior = 'inherit';
33167
33415
  var repliedMessage = document.getElementById(scrollToRepliedMessage);
33168
33416
  if (repliedMessage) {
33169
33417
  setScrollToReply(repliedMessage && repliedMessage.offsetTop - (channel.backToLinkedChannel ? 0 : 200));
33170
33418
  scrollRef.current.scrollTo({
33171
33419
  top: repliedMessage && repliedMessage.offsetTop - (channel.backToLinkedChannel ? 0 : 200),
33172
- behavior: 'smooth'
33420
+ behavior: scrollToMessageBehavior
33173
33421
  });
33174
- scrollRef.current.style.scrollBehavior = 'smooth';
33422
+ scrollRef.current.style.scrollBehavior = scrollToMessageBehavior;
33175
33423
  if (!channel.backToLinkedChannel && scrollToMessageHighlight) {
33176
33424
  repliedMessage && repliedMessage.classList.add('highlight');
33177
33425
  }
@@ -33181,9 +33429,9 @@ var MessageList = function MessageList(_ref2) {
33181
33429
  var _repliedMessage = document.getElementById(scrollToRepliedMessage);
33182
33430
  _repliedMessage && _repliedMessage.classList.remove('highlight');
33183
33431
  }
33184
- prevDisable = false;
33432
+ prevDisableRef.current = false;
33185
33433
  setScrollToReply(null);
33186
- scrollRef.current.style.scrollBehavior = 'smooth';
33434
+ scrollRef.current.style.scrollBehavior = 'instant';
33187
33435
  }, 1000 + positiveValue * 0.1);
33188
33436
  }
33189
33437
  dispatch(setScrollToMessagesAC(null));
@@ -33199,15 +33447,15 @@ var MessageList = function MessageList(_ref2) {
33199
33447
  });
33200
33448
  }
33201
33449
  } else {
33202
- nextDisable = true;
33203
- prevDisable = true;
33450
+ nextDisableRef.current = true;
33451
+ prevDisableRef.current = true;
33204
33452
  scrollRef.current.scrollTo({
33205
33453
  top: 0,
33206
33454
  behavior: 'smooth'
33207
33455
  });
33208
33456
  dispatch(showScrollToNewMessageButtonAC(false));
33209
33457
  setTimeout(function () {
33210
- prevDisable = false;
33458
+ prevDisableRef.current = false;
33211
33459
  }, 800);
33212
33460
  }
33213
33461
  }
@@ -33225,11 +33473,18 @@ var MessageList = function MessageList(_ref2) {
33225
33473
  React.useEffect(function () {
33226
33474
  setHasNextCached(false);
33227
33475
  setHasPrevCached(false);
33476
+ messagesIndexMapRef.current = {};
33477
+ loadFromServerRef.current = false;
33478
+ loadDirectionRef.current = '';
33479
+ nextDisableRef.current = false;
33480
+ prevDisableRef.current = false;
33481
+ shouldLoadMessagesRef.current = '';
33482
+ loadingRef.current = false;
33228
33483
  if (channel.backToLinkedChannel) {
33229
33484
  var visibleMessages = getVisibleMessagesMap();
33230
33485
  var visibleMessagesIds = Object.keys(visibleMessages);
33231
33486
  var messageId = visibleMessagesIds[visibleMessagesIds.length - 1];
33232
- dispatch(getMessagesAC(channel, undefined, messageId));
33487
+ dispatch(getMessagesAC(channel, undefined, messageId, undefined, undefined, undefined, 'instant'));
33233
33488
  setUnreadMessageId(messageId);
33234
33489
  } else {
33235
33490
  if (!channel.isLinkedChannel) {
@@ -33252,9 +33507,9 @@ var MessageList = function MessageList(_ref2) {
33252
33507
  }
33253
33508
  setPreviousScrollTop(0);
33254
33509
  setShouldPreserveScroll(false);
33255
- nextDisable = false;
33256
- prevDisable = false;
33257
- scrollToBottom = true;
33510
+ nextDisableRef.current = false;
33511
+ prevDisableRef.current = false;
33512
+ scrollToBottomRef.current = true;
33258
33513
  setAllowEditDeleteIncomingMessage(allowEditDeleteIncomingMessage);
33259
33514
  }, [channel.id]);
33260
33515
  React.useEffect(function () {
@@ -33269,7 +33524,7 @@ var MessageList = function MessageList(_ref2) {
33269
33524
  setUnreadMessageId('');
33270
33525
  }
33271
33526
  }
33272
- }, [messages]);
33527
+ }, [messages, hiddenMessagesProperties, user === null || user === void 0 ? void 0 : user.id]);
33273
33528
  React.useEffect(function () {
33274
33529
  if (scrollRef.current) {
33275
33530
  var isAtBottom = scrollRef.current.scrollTop > -50;
@@ -33278,35 +33533,40 @@ var MessageList = function MessageList(_ref2) {
33278
33533
  setShouldPreserveScroll(true);
33279
33534
  }
33280
33535
  }
33281
- if (loading) {
33282
- if (loadDirection !== 'next') {
33536
+ if (loadingRef.current) {
33537
+ if (loadDirectionRef.current !== 'next') {
33283
33538
  var lastVisibleMessage = document.getElementById(lastVisibleMessageId);
33284
33539
  if (lastVisibleMessage) {
33285
33540
  scrollRef.current.style.scrollBehavior = 'inherit';
33286
33541
  scrollRef.current.scrollTop = lastVisibleMessage.offsetTop;
33287
33542
  scrollRef.current.style.scrollBehavior = 'smooth';
33288
33543
  }
33289
- if (loadFromServer) {
33290
- setTimeout(function () {
33291
- loading = false;
33292
- loadFromServer = false;
33293
- nextDisable = false;
33294
- if (shouldLoadMessages === 'prev' && messagesIndexMap[lastVisibleMessageId] < 15) {
33544
+ if (loadFromServerRef.current) {
33545
+ var timeout = setTimeout(function () {
33546
+ loadingRef.current = false;
33547
+ loadFromServerRef.current = false;
33548
+ nextDisableRef.current = false;
33549
+ var currentIndex = messagesIndexMapRef.current[lastVisibleMessageId];
33550
+ if (shouldLoadMessagesRef.current === 'prev' && typeof currentIndex === 'number' && currentIndex < 15) {
33295
33551
  handleLoadMoreMessages(MESSAGE_LOAD_DIRECTION.PREV, LOAD_MAX_MESSAGE_COUNT);
33296
33552
  }
33297
- if (shouldLoadMessages === 'next' && messagesIndexMap[lastVisibleMessageId] > messages.length - 15) {
33553
+ if (shouldLoadMessagesRef.current === 'next' && typeof currentIndex === 'number' && currentIndex > messages.length - 15) {
33298
33554
  handleLoadMoreMessages(MESSAGE_LOAD_DIRECTION.NEXT, LOAD_MAX_MESSAGE_COUNT);
33299
33555
  }
33300
33556
  }, 50);
33557
+ if (loadingMessagesTimeoutRef.current) {
33558
+ clearTimeout(loadingMessagesTimeoutRef.current);
33559
+ }
33560
+ loadingMessagesTimeoutRef.current = timeout;
33301
33561
  } else {
33302
- loading = false;
33303
- if (shouldLoadMessages === 'prev') {
33562
+ loadingRef.current = false;
33563
+ if (shouldLoadMessagesRef.current === 'prev') {
33304
33564
  handleLoadMoreMessages(MESSAGE_LOAD_DIRECTION.PREV, LOAD_MAX_MESSAGE_COUNT);
33305
- shouldLoadMessages = '';
33565
+ shouldLoadMessagesRef.current = '';
33306
33566
  }
33307
- if (shouldLoadMessages === 'next') {
33567
+ if (shouldLoadMessagesRef.current === 'next') {
33308
33568
  handleLoadMoreMessages(MESSAGE_LOAD_DIRECTION.NEXT, LOAD_MAX_MESSAGE_COUNT);
33309
- shouldLoadMessages = '';
33569
+ shouldLoadMessagesRef.current = '';
33310
33570
  }
33311
33571
  }
33312
33572
  } else {
@@ -33316,22 +33576,26 @@ var MessageList = function MessageList(_ref2) {
33316
33576
  scrollRef.current.scrollTop = _lastVisibleMessage.offsetTop - scrollRef.current.offsetHeight + _lastVisibleMessage.offsetHeight;
33317
33577
  scrollRef.current.style.scrollBehavior = 'smooth';
33318
33578
  }
33319
- loading = false;
33320
- prevDisable = false;
33321
- if (shouldLoadMessages === 'prev') {
33579
+ loadingRef.current = false;
33580
+ prevDisableRef.current = false;
33581
+ if (shouldLoadMessagesRef.current === 'prev') {
33322
33582
  handleLoadMoreMessages(MESSAGE_LOAD_DIRECTION.PREV, LOAD_MAX_MESSAGE_COUNT);
33323
- shouldLoadMessages = '';
33583
+ shouldLoadMessagesRef.current = '';
33324
33584
  }
33325
- if (shouldLoadMessages === 'next') {
33585
+ if (shouldLoadMessagesRef.current === 'next') {
33326
33586
  handleLoadMoreMessages(MESSAGE_LOAD_DIRECTION.NEXT, LOAD_MAX_MESSAGE_COUNT);
33327
- shouldLoadMessages = '';
33587
+ shouldLoadMessagesRef.current = '';
33328
33588
  }
33329
33589
  }
33330
33590
  }
33331
33591
  renderTopDate();
33332
- if (scrollToBottom) {
33333
- dispatch(scrollToNewMessageAC(true));
33334
- scrollToBottom = false;
33592
+ if (scrollToBottomRef.current) {
33593
+ if (channel.backToLinkedChannel) {
33594
+ dispatch(scrollToNewMessageAC(false));
33595
+ } else {
33596
+ dispatch(scrollToNewMessageAC(true));
33597
+ }
33598
+ scrollToBottomRef.current = false;
33335
33599
  }
33336
33600
  if (shouldPreserveScroll && scrollRef.current && previousScrollTop > 0) {
33337
33601
  requestAnimationFrame(function () {
@@ -33344,13 +33608,43 @@ var MessageList = function MessageList(_ref2) {
33344
33608
  setPreviousScrollTop(0);
33345
33609
  });
33346
33610
  }
33611
+ return function () {
33612
+ if (loadingMessagesTimeoutRef.current) {
33613
+ clearTimeout(loadingMessagesTimeoutRef.current);
33614
+ }
33615
+ };
33347
33616
  }, [messages]);
33617
+ React.useEffect(function () {
33618
+ if (messagesLoading === LOADING_STATE.LOADED) {
33619
+ var timeout = setTimeout(function () {
33620
+ loadingRef.current = false;
33621
+ loadFromServerRef.current = false;
33622
+ nextDisableRef.current = false;
33623
+ var currentIndex = messagesIndexMapRef.current[lastVisibleMessageId];
33624
+ if (shouldLoadMessagesRef.current === 'prev' && typeof currentIndex === 'number' && currentIndex < 15) {
33625
+ handleLoadMoreMessages(MESSAGE_LOAD_DIRECTION.PREV, LOAD_MAX_MESSAGE_COUNT);
33626
+ }
33627
+ if (shouldLoadMessagesRef.current === 'next' && typeof currentIndex === 'number' && currentIndex > messages.length - 15) {
33628
+ handleLoadMoreMessages(MESSAGE_LOAD_DIRECTION.NEXT, LOAD_MAX_MESSAGE_COUNT);
33629
+ }
33630
+ }, 50);
33631
+ if (loadingMessagesTimeoutRef.current) {
33632
+ clearTimeout(loadingMessagesTimeoutRef.current);
33633
+ }
33634
+ loadingMessagesTimeoutRef.current = timeout;
33635
+ }
33636
+ return function () {
33637
+ if (loadingMessagesTimeoutRef.current) {
33638
+ clearTimeout(loadingMessagesTimeoutRef.current);
33639
+ }
33640
+ };
33641
+ }, [messagesLoading, messages, lastVisibleMessageId]);
33348
33642
  React.useEffect(function () {
33349
33643
  log.info('connection status is changed.. .... ', connectionStatus, 'channel ... ', channel);
33350
33644
  if (connectionStatus === CONNECTION_STATUS.CONNECTED) {
33351
- loading = false;
33352
- prevDisable = false;
33353
- nextDisable = false;
33645
+ loadingRef.current = false;
33646
+ prevDisableRef.current = false;
33647
+ nextDisableRef.current = false;
33354
33648
  clearMessagesMap();
33355
33649
  removeAllMessages();
33356
33650
  if (channel.id) {
@@ -33359,7 +33653,8 @@ var MessageList = function MessageList(_ref2) {
33359
33653
  }
33360
33654
  }, [connectionStatus]);
33361
33655
  React.useEffect(function () {
33362
- if (channel.newMessageCount && channel.newMessageCount > 0 && getUnreadScrollTo()) {
33656
+ var unreadScrollTo = getUnreadScrollTo();
33657
+ if (channel.newMessageCount && channel.newMessageCount > 0 && unreadScrollTo) {
33363
33658
  if (scrollRef.current) {
33364
33659
  scrollRef.current.style.scrollBehavior = 'inherit';
33365
33660
  }
@@ -33372,7 +33667,14 @@ var MessageList = function MessageList(_ref2) {
33372
33667
  setUnreadScrollTo(false);
33373
33668
  }
33374
33669
  }
33375
- });
33670
+ }, [channel.id, channel.newMessageCount, channel.lastDisplayedMessageId]);
33671
+ React.useEffect(function () {
33672
+ return function () {
33673
+ if (hideTopDateTimeout.current) {
33674
+ clearTimeout(hideTopDateTimeout.current);
33675
+ }
33676
+ };
33677
+ }, []);
33376
33678
  return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, isDragging && !(attachmentsPreview !== null && attachmentsPreview !== void 0 && attachmentsPreview.show && mediaFile) && (/*#__PURE__*/React__default.createElement(DragAndDropContainer, {
33377
33679
  id: 'draggingContainer',
33378
33680
  draggable: true,
@@ -33407,7 +33709,7 @@ var MessageList = function MessageList(_ref2) {
33407
33709
  backgroundColor: surface1,
33408
33710
  draggable: true,
33409
33711
  iconColor: accentColor
33410
- }, /*#__PURE__*/React__default.createElement(SvgChoseMedia, null)), "Drag & drop to send as media")))), /*#__PURE__*/React__default.createElement(React__default.Fragment, null, showTopFixedDate && (/*#__PURE__*/React__default.createElement(MessageTopDate, {
33712
+ }, /*#__PURE__*/React__default.createElement(SvgChoseMedia, null)), "Drag & drop to send as media")))), /*#__PURE__*/React__default.createElement(React__default.Fragment, null, showTopFixedDate && topDateLabel && (/*#__PURE__*/React__default.createElement(MessageTopDate, {
33411
33713
  visible: showTopDate,
33412
33714
  dateDividerFontSize: dateDividerFontSize,
33413
33715
  dateDividerTextColor: dateDividerTextColor || textOnPrimary,
@@ -33415,14 +33717,12 @@ var MessageList = function MessageList(_ref2) {
33415
33717
  dateDividerBackgroundColor: dateDividerBackgroundColor || overlayBackground,
33416
33718
  dateDividerBorderRadius: dateDividerBorderRadius,
33417
33719
  topOffset: scrollRef && scrollRef.current && scrollRef.current.offsetTop
33418
- }, /*#__PURE__*/React__default.createElement("span", {
33419
- ref: messageTopDateRef
33420
- }))), /*#__PURE__*/React__default.createElement(Container$h, {
33720
+ }, /*#__PURE__*/React__default.createElement("span", null, topDateLabel))), /*#__PURE__*/React__default.createElement(Container$h, {
33421
33721
  id: 'scrollableDiv',
33422
33722
  className: isScrolling ? 'show-scrollbar' : '',
33423
33723
  ref: scrollRef,
33424
33724
  stopScrolling: stopScrolling,
33425
- onScroll: handleMessagesListScroll,
33725
+ onScroll: onScroll,
33426
33726
  onMouseEnter: function onMouseEnter() {
33427
33727
  return setIsScrolling(true);
33428
33728
  },
@@ -33441,8 +33741,10 @@ var MessageList = function MessageList(_ref2) {
33441
33741
  var prevMessage = messages[index - 1];
33442
33742
  var nextMessage = messages[index + 1];
33443
33743
  var isUnreadMessage = !!(unreadMessageId && unreadMessageId === message.id && nextMessage) && !channel.backToLinkedChannel;
33444
- messagesIndexMap[message.id] = index;
33445
- return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(CreateMessageDateDivider, {
33744
+ messagesIndexMapRef.current[message.id] = index;
33745
+ return /*#__PURE__*/React__default.createElement(React__default.Fragment, {
33746
+ key: message.id || message.tid
33747
+ }, /*#__PURE__*/React__default.createElement(CreateMessageDateDivider, {
33446
33748
  noMargin: !isUnreadMessage && prevMessage && prevMessage.type === 'system' && message.type !== 'system',
33447
33749
  theme: theme,
33448
33750
  lastIndex: false,
@@ -37381,7 +37683,7 @@ var SendMessageInput = function SendMessageInput(_ref3) {
37381
37683
  if (attachments.length) {
37382
37684
  var videoAttachment = false;
37383
37685
  attachments.forEach(function (att) {
37384
- if (att.type === 'video' || att.data.type.split('/')[0] === 'video') {
37686
+ if ((att.type === 'video' || att.data.type.split('/')[0] === 'video') && att.type !== 'file') {
37385
37687
  videoAttachment = true;
37386
37688
  if (!readyVideoAttachments[att.tid]) {
37387
37689
  setSendMessageIsActive(false);
@@ -40518,7 +40820,7 @@ var Details = function Details(_ref) {
40518
40820
  color: textSecondary,
40519
40821
  fontSize: channelMembersFontSize,
40520
40822
  lineHeight: channelMembersLineHeight
40521
- }, showPhoneNumber ? "+" + (directChannelUser === null || directChannelUser === void 0 ? void 0 : directChannelUser.id) : hideUserPresence && directChannelUser && hideUserPresence(directChannelUser) ? '' : directChannelUser && directChannelUser.presence && (directChannelUser.presence.state === USER_PRESENCE_STATUS.ONLINE ? 'Online' : directChannelUser.presence.lastActiveAt && userLastActiveDateFormat(directChannelUser.presence.lastActiveAt)))) : (/*#__PURE__*/React__default.createElement(SubTitle, {
40823
+ }, showPhoneNumber && directChannelUser !== null && directChannelUser !== void 0 && directChannelUser.id ? "+" + (directChannelUser === null || directChannelUser === void 0 ? void 0 : directChannelUser.id) : hideUserPresence && directChannelUser && hideUserPresence(directChannelUser) ? '' : directChannelUser && directChannelUser.presence && (directChannelUser.presence.state === USER_PRESENCE_STATUS.ONLINE ? 'Online' : directChannelUser.presence.lastActiveAt && userLastActiveDateFormat(directChannelUser.presence.lastActiveAt)))) : (/*#__PURE__*/React__default.createElement(SubTitle, {
40522
40824
  color: textSecondary,
40523
40825
  fontSize: channelMembersFontSize,
40524
40826
  lineHeight: channelMembersLineHeight
@@ -40972,10 +41274,10 @@ var MessagesScrollToBottomButton = function MessagesScrollToBottomButton(_ref) {
40972
41274
  };
40973
41275
  var handleScrollToLastMessage = function handleScrollToLastMessage(messageId) {
40974
41276
  try {
40975
- dispatch(scrollToNewMessageAC(true, false, false));
40976
41277
  if (messages.findIndex(function (msg) {
40977
41278
  return msg.id === messageId;
40978
41279
  }) >= 10) {
41280
+ dispatch(scrollToNewMessageAC(true, false, false));
40979
41281
  dispatch(setMessagesLoadingStateAC(LOADING_STATE.LOADING));
40980
41282
  var repliedMessage = document.getElementById(messageId);
40981
41283
  if (repliedMessage) {