sceyt-chat-react-uikit 1.7.1-beta.8 → 1.7.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) {
@@ -15182,9 +15186,8 @@ function searchChannels(action) {
15182
15186
  handleChannels = function handleChannels(channels) {
15183
15187
  channels.forEach(function (channel) {
15184
15188
  if (channel.type === DEFAULT_CHANNEL_TYPE.DIRECT) {
15185
- var _channel$metadata;
15186
15189
  channel.metadata = isJSON(channel.metadata) ? JSON.parse(channel.metadata) : channel.metadata;
15187
- var isSelfChannel = (_channel$metadata = channel.metadata) === null || _channel$metadata === void 0 ? void 0 : _channel$metadata.s;
15190
+ var isSelfChannel = channel.memberCount === 1 && channel.members.length > 0 && channel.members[0].id === SceytChatClient.user.id;
15188
15191
  var directChannelUser = isSelfChannel ? SceytChatClient.user : channel.members.find(function (member) {
15189
15192
  return member.id !== SceytChatClient.user.id;
15190
15193
  });
@@ -15302,9 +15305,8 @@ function getChannelsForForward() {
15302
15305
  return effects.put(channelHasNextAC(channelsData.hasNext, true));
15303
15306
  case 4:
15304
15307
  channelsToAdd = channelsData.channels.filter(function (channel) {
15305
- var _channel$metadata2;
15306
15308
  channel.metadata = isJSON(channel.metadata) ? JSON.parse(channel.metadata) : channel.metadata;
15307
- var isSelfChannel = (_channel$metadata2 = channel.metadata) === null || _channel$metadata2 === void 0 ? void 0 : _channel$metadata2.s;
15309
+ var isSelfChannel = channel.memberCount === 1 && channel.members.length > 0 && channel.members[0].id === _SceytChatClient.user.id;
15308
15310
  return channel.type === DEFAULT_CHANNEL_TYPE.BROADCAST || channel.type === DEFAULT_CHANNEL_TYPE.PUBLIC ? channel.userRole === 'admin' || channel.userRole === 'owner' : channel.type === DEFAULT_CHANNEL_TYPE.DIRECT ? isSelfChannel || channel.members.find(function (member) {
15309
15311
  return member.id && member.id !== _SceytChatClient.user.id;
15310
15312
  }) : true;
@@ -15371,9 +15373,8 @@ function searchChannelsForForward(action) {
15371
15373
  handleChannels = function handleChannels(channels) {
15372
15374
  channels.forEach(function (channel) {
15373
15375
  if (channel.type === DEFAULT_CHANNEL_TYPE.DIRECT) {
15374
- var _channel$metadata3;
15375
15376
  channel.metadata = isJSON(channel.metadata) ? JSON.parse(channel.metadata) : channel.metadata;
15376
- var isSelfChannel = (_channel$metadata3 = channel.metadata) === null || _channel$metadata3 === void 0 ? void 0 : _channel$metadata3.s;
15377
+ var isSelfChannel = channel.memberCount === 1 && channel.members.length > 0 && channel.members[0].id === _SceytChatClient2.user.id;
15377
15378
  var directChannelUser = isSelfChannel ? _SceytChatClient2.user : channel.members.find(function (member) {
15378
15379
  return member.id !== _SceytChatClient2.user.id;
15379
15380
  });
@@ -17113,6 +17114,9 @@ var scrollToMessageSelector = function scrollToMessageSelector(store) {
17113
17114
  var scrollToMessageHighlightSelector = function scrollToMessageHighlightSelector(store) {
17114
17115
  return store.MessageReducer.scrollToMessageHighlight;
17115
17116
  };
17117
+ var scrollToMessageBehaviorSelector = function scrollToMessageBehaviorSelector(store) {
17118
+ return store.MessageReducer.scrollToMessageBehavior;
17119
+ };
17116
17120
  var reactionsListSelector = function reactionsListSelector(store) {
17117
17121
  return store.MessageReducer.reactionsList;
17118
17122
  };
@@ -18506,7 +18510,7 @@ function editMessage(action) {
18506
18510
  }, _marked6$1, null, [[0, 5]]);
18507
18511
  }
18508
18512
  function getMessagesQuery(action) {
18509
- 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;
18510
18514
  return _regenerator().w(function (_context9) {
18511
18515
  while (1) switch (_context9.p = _context9.n) {
18512
18516
  case 0:
@@ -18514,9 +18518,9 @@ function getMessagesQuery(action) {
18514
18518
  _context9.n = 1;
18515
18519
  return effects.put(setMessagesLoadingStateAC(LOADING_STATE.LOADING));
18516
18520
  case 1:
18517
- _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;
18518
18522
  if (!(channel.id && !channel.isMockChannel)) {
18519
- _context9.n = 47;
18523
+ _context9.n = 48;
18520
18524
  break;
18521
18525
  }
18522
18526
  SceytChatClient = getClient();
@@ -18544,6 +18548,7 @@ function getMessagesQuery(action) {
18544
18548
  break;
18545
18549
  }
18546
18550
  setHasPrevCached(false);
18551
+ setMessagesToMap(channel.id, []);
18547
18552
  setAllMessages([]);
18548
18553
  _context9.n = 3;
18549
18554
  return effects.call(messageQuery.loadPreviousMessageId, '0');
@@ -18600,13 +18605,13 @@ function getMessagesQuery(action) {
18600
18605
  break;
18601
18606
  }
18602
18607
  _context9.n = 12;
18603
- return effects.put(setScrollToMessagesAC(messageId, highlight));
18608
+ return effects.put(setScrollToMessagesAC(messageId, highlight, behavior));
18604
18609
  case 12:
18605
- _context9.n = 45;
18610
+ _context9.n = 46;
18606
18611
  break;
18607
18612
  case 13:
18608
18613
  if (!messageId) {
18609
- _context9.n = 25;
18614
+ _context9.n = 26;
18610
18615
  break;
18611
18616
  }
18612
18617
  _allMessages = getAllMessages();
@@ -18615,7 +18620,7 @@ function getMessagesQuery(action) {
18615
18620
  });
18616
18621
  maxLengthPart = MESSAGES_MAX_LENGTH / 2;
18617
18622
  if (!(messageIndex >= maxLengthPart)) {
18618
- _context9.n = 15;
18623
+ _context9.n = 16;
18619
18624
  break;
18620
18625
  }
18621
18626
  result.messages = _allMessages.slice(messageIndex - maxLengthPart, messageIndex + maxLengthPart);
@@ -18624,151 +18629,160 @@ function getMessagesQuery(action) {
18624
18629
  case 14:
18625
18630
  setHasPrevCached(messageIndex > maxLengthPart);
18626
18631
  setHasNextCached(_allMessages.length > maxLengthPart);
18632
+ _context9.n = 15;
18633
+ return effects.put(setMessagesHasPrevAC(true));
18634
+ case 15:
18627
18635
  _context9.n = 22;
18628
18636
  break;
18629
- case 15:
18637
+ case 16:
18630
18638
  messageQuery.limit = MESSAGES_MAX_LENGTH;
18631
18639
  log.info('load by message id from server ...............', messageId);
18632
- _context9.n = 16;
18640
+ _context9.n = 17;
18633
18641
  return effects.call(messageQuery.loadNearMessageId, messageId);
18634
- case 16:
18642
+ case 17:
18635
18643
  result = _context9.v;
18636
18644
  if (!(result.messages.length === 50)) {
18637
- _context9.n = 19;
18645
+ _context9.n = 20;
18638
18646
  break;
18639
18647
  }
18640
- messageQuery.limit = (MESSAGES_MAX_LENGTH - 50) / 2;
18641
- _context9.n = 17;
18648
+ messageQuery.limit = MESSAGES_MAX_LENGTH - 50;
18649
+ _context9.n = 18;
18642
18650
  return effects.call(messageQuery.loadPreviousMessageId, result.messages[0].id);
18643
- case 17:
18651
+ case 18:
18644
18652
  _secondResult = _context9.v;
18645
18653
  messageQuery.reverse = false;
18646
- _context9.n = 18;
18654
+ _context9.n = 19;
18647
18655
  return effects.call(messageQuery.loadNextMessageId, result.messages[result.messages.length - 1].id);
18648
- case 18:
18656
+ case 19:
18649
18657
  thirdResult = _context9.v;
18650
18658
  result.messages = [].concat(_secondResult.messages, result.messages, thirdResult.messages);
18651
18659
  result.hasNext = _secondResult.hasNext;
18652
18660
  messageQuery.reverse = true;
18653
- case 19:
18654
- log.info('result from server ....... ', result);
18655
18661
  _context9.n = 20;
18656
- return effects.put(setMessagesHasNextAC(true));
18662
+ return effects.put(setMessagesHasPrevAC(_secondResult.hasNext));
18657
18663
  case 20:
18664
+ log.info('result from server ....... ', result);
18658
18665
  _context9.n = 21;
18659
18666
  return effects.put(setMessagesAC(JSON.parse(JSON.stringify(result.messages))));
18660
18667
  case 21:
18668
+ setMessagesToMap(channel.id, result.messages);
18661
18669
  setAllMessages([].concat(result.messages));
18662
18670
  setHasPrevCached(false);
18663
18671
  setHasNextCached(false);
18664
18672
  case 22:
18665
18673
  _context9.n = 23;
18666
- return effects.put(setScrollToMessagesAC(messageId));
18674
+ return effects.put(setMessagesHasNextAC(true));
18667
18675
  case 23:
18668
18676
  _context9.n = 24;
18669
- return effects.put(setMessagesLoadingStateAC(LOADING_STATE.LOADED));
18677
+ return effects.put(setScrollToMessagesAC(messageId, true, behavior));
18670
18678
  case 24:
18671
- _context9.n = 45;
18672
- break;
18679
+ _context9.n = 25;
18680
+ return effects.put(setMessagesLoadingStateAC(LOADING_STATE.LOADED));
18673
18681
  case 25:
18682
+ _context9.n = 46;
18683
+ break;
18684
+ case 26:
18674
18685
  if (!(channel.newMessageCount && channel.lastDisplayedMessageId)) {
18675
- _context9.n = 38;
18686
+ _context9.n = 39;
18676
18687
  break;
18677
18688
  }
18689
+ setMessagesToMap(channel.id, []);
18678
18690
  setAllMessages([]);
18679
18691
  messageQuery.limit = MESSAGES_MAX_LENGTH;
18680
18692
  if (!Number(channel.lastDisplayedMessageId)) {
18681
- _context9.n = 31;
18693
+ _context9.n = 32;
18682
18694
  break;
18683
18695
  }
18684
- _context9.n = 26;
18696
+ _context9.n = 27;
18685
18697
  return effects.call(messageQuery.loadNearMessageId, channel.lastDisplayedMessageId);
18686
- case 26:
18698
+ case 27:
18687
18699
  result = _context9.v;
18688
18700
  if (!(result.messages.length === 50)) {
18689
- _context9.n = 30;
18701
+ _context9.n = 31;
18690
18702
  break;
18691
18703
  }
18692
18704
  messageQuery.limit = channel.newMessageCount > 25 ? (MESSAGES_MAX_LENGTH - 50) / 2 : MESSAGES_MAX_LENGTH - 50;
18693
- _context9.n = 27;
18705
+ _context9.n = 28;
18694
18706
  return effects.call(messageQuery.loadPreviousMessageId, result.messages[0].id);
18695
- case 27:
18707
+ case 28:
18696
18708
  _secondResult2 = _context9.v;
18697
18709
  if (!(channel.newMessageCount > 25)) {
18698
- _context9.n = 29;
18710
+ _context9.n = 30;
18699
18711
  break;
18700
18712
  }
18701
18713
  messageQuery.reverse = false;
18702
- _context9.n = 28;
18714
+ _context9.n = 29;
18703
18715
  return effects.call(messageQuery.loadNextMessageId, result.messages[result.messages.length - 1].id);
18704
- case 28:
18716
+ case 29:
18705
18717
  _thirdResult = _context9.v;
18706
18718
  result.messages = [].concat(_secondResult2.messages, result.messages, _thirdResult.messages);
18707
18719
  messageQuery.reverse = true;
18708
- _context9.n = 30;
18720
+ _context9.n = 31;
18709
18721
  break;
18710
- case 29:
18711
- result.messages = [].concat(_secondResult2.messages, result.messages);
18712
18722
  case 30:
18713
- _context9.n = 34;
18714
- break;
18723
+ result.messages = [].concat(_secondResult2.messages, result.messages);
18715
18724
  case 31:
18716
- _context9.n = 32;
18717
- return effects.call(messageQuery.loadPrevious);
18725
+ _context9.n = 35;
18726
+ break;
18718
18727
  case 32:
18728
+ _context9.n = 33;
18729
+ return effects.call(messageQuery.loadPrevious);
18730
+ case 33:
18719
18731
  result = _context9.v;
18720
18732
  if (!(result.messages.length === 50)) {
18721
- _context9.n = 34;
18733
+ _context9.n = 35;
18722
18734
  break;
18723
18735
  }
18724
18736
  messageQuery.limit = MESSAGES_MAX_LENGTH - 50;
18725
- _context9.n = 33;
18737
+ _context9.n = 34;
18726
18738
  return effects.call(messageQuery.loadPreviousMessageId, result.messages[0].id);
18727
- case 33:
18739
+ case 34:
18728
18740
  _secondResult3 = _context9.v;
18729
18741
  result.messages = [].concat(_secondResult3.messages, result.messages);
18730
18742
  result.hasNext = _secondResult3.hasNext;
18731
- case 34:
18732
- setMessagesToMap(channel.id, result.messages);
18733
- _context9.n = 35;
18734
- return effects.put(setMessagesHasPrevAC(true));
18735
18743
  case 35:
18736
18744
  _context9.n = 36;
18737
- 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));
18738
18746
  case 36:
18739
- setAllMessages([].concat(result.messages));
18740
18747
  _context9.n = 37;
18741
- 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));
18742
18749
  case 37:
18743
- _context9.n = 45;
18744
- 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))));
18745
18754
  case 38:
18755
+ _context9.n = 46;
18756
+ break;
18757
+ case 39:
18758
+ setMessagesToMap(channel.id, []);
18746
18759
  setAllMessages([]);
18747
18760
  if (!(cachedMessages && cachedMessages.length)) {
18748
- _context9.n = 39;
18761
+ _context9.n = 40;
18749
18762
  break;
18750
18763
  }
18764
+ setMessagesToMap(channel.id, []);
18751
18765
  setAllMessages([].concat(cachedMessages));
18752
- _context9.n = 39;
18766
+ _context9.n = 40;
18753
18767
  return effects.put(setMessagesAC(JSON.parse(JSON.stringify(cachedMessages))));
18754
- case 39:
18768
+ case 40:
18755
18769
  log.info('load message from server');
18756
- _context9.n = 40;
18770
+ _context9.n = 41;
18757
18771
  return effects.call(messageQuery.loadPrevious);
18758
- case 40:
18772
+ case 41:
18759
18773
  result = _context9.v;
18760
18774
  if (!(result.messages.length === 50)) {
18761
- _context9.n = 42;
18775
+ _context9.n = 43;
18762
18776
  break;
18763
18777
  }
18764
18778
  messageQuery.limit = MESSAGES_MAX_LENGTH - 50;
18765
- _context9.n = 41;
18779
+ _context9.n = 42;
18766
18780
  return effects.call(messageQuery.loadPreviousMessageId, result.messages[0].id);
18767
- case 41:
18781
+ case 42:
18768
18782
  _secondResult4 = _context9.v;
18769
18783
  result.messages = [].concat(_secondResult4.messages, result.messages);
18770
18784
  result.hasNext = _secondResult4.hasNext;
18771
- case 42:
18785
+ case 43:
18772
18786
  updatedMessages = [];
18773
18787
  result.messages.forEach(function (msg) {
18774
18788
  var updatedMessage = updateMessageOnMap(channel.id, {
@@ -18780,18 +18794,18 @@ function getMessagesQuery(action) {
18780
18794
  });
18781
18795
  setMessagesToMap(channel.id, updatedMessages);
18782
18796
  setAllMessages([].concat(updatedMessages));
18783
- _context9.n = 43;
18784
- return effects.put(setMessagesAC(JSON.parse(JSON.stringify(updatedMessages))));
18785
- case 43:
18786
18797
  _context9.n = 44;
18787
- return effects.put(setMessagesHasPrevAC(result.hasNext));
18798
+ return effects.put(setMessagesAC(JSON.parse(JSON.stringify(updatedMessages))));
18788
18799
  case 44:
18789
18800
  _context9.n = 45;
18790
- return effects.put(setMessagesHasNextAC(false));
18801
+ return effects.put(setMessagesHasPrevAC(result.hasNext));
18791
18802
  case 45:
18803
+ _context9.n = 46;
18804
+ return effects.put(setMessagesHasNextAC(false));
18805
+ case 46:
18792
18806
  pendingMessages = getPendingMessages(channel.id);
18793
18807
  if (!(pendingMessages && pendingMessages.length)) {
18794
- _context9.n = 46;
18808
+ _context9.n = 47;
18795
18809
  break;
18796
18810
  }
18797
18811
  _messagesMap = {};
@@ -18801,38 +18815,38 @@ function getMessagesQuery(action) {
18801
18815
  filteredPendingMessages = pendingMessages.filter(function (msg) {
18802
18816
  return !_messagesMap[msg.tid || ''];
18803
18817
  });
18804
- _context9.n = 46;
18818
+ _context9.n = 47;
18805
18819
  return effects.put(addMessagesAC(filteredPendingMessages, MESSAGE_LOAD_DIRECTION.NEXT));
18806
- case 46:
18807
- _context9.n = 48;
18808
- break;
18809
18820
  case 47:
18821
+ _context9.n = 49;
18822
+ break;
18823
+ case 48:
18810
18824
  if (!channel.isMockChannel) {
18811
- _context9.n = 48;
18825
+ _context9.n = 49;
18812
18826
  break;
18813
18827
  }
18814
- _context9.n = 48;
18828
+ _context9.n = 49;
18815
18829
  return effects.put(setMessagesAC([]));
18816
- case 48:
18817
- _context9.n = 50;
18818
- break;
18819
18830
  case 49:
18820
- _context9.p = 49;
18821
- _t9 = _context9.v;
18822
- log.error('error in message query', _t9);
18831
+ _context9.n = 51;
18832
+ break;
18823
18833
  case 50:
18824
18834
  _context9.p = 50;
18825
- _context9.n = 51;
18826
- return effects.put(setMessagesLoadingStateAC(LOADING_STATE.LOADED));
18835
+ _t9 = _context9.v;
18836
+ log.error('error in message query', _t9);
18827
18837
  case 51:
18828
- return _context9.f(50);
18838
+ _context9.p = 51;
18839
+ _context9.n = 52;
18840
+ return effects.put(setMessagesLoadingStateAC(LOADING_STATE.LOADED));
18829
18841
  case 52:
18842
+ return _context9.f(51);
18843
+ case 53:
18830
18844
  return _context9.a(2);
18831
18845
  }
18832
- }, _marked7$1, null, [[0, 49, 50, 52]]);
18846
+ }, _marked7$1, null, [[0, 50, 51, 53]]);
18833
18847
  }
18834
18848
  function getMessageQuery(action) {
18835
- var payload, channelId, messageId, channel, messages, _t0;
18849
+ var payload, channelId, messageId, channel, messages, fetchedMessage, _t0;
18836
18850
  return _regenerator().w(function (_context0) {
18837
18851
  while (1) switch (_context0.p = _context0.n) {
18838
18852
  case 0:
@@ -18840,34 +18854,53 @@ function getMessageQuery(action) {
18840
18854
  payload = action.payload;
18841
18855
  channelId = payload.channelId, messageId = payload.messageId;
18842
18856
  _context0.n = 1;
18843
- return effects.call(getChannelFromMap, channelId);
18857
+ return effects.call(getChannelFromAllChannels, channelId);
18844
18858
  case 1:
18845
18859
  channel = _context0.v;
18846
- _context0.n = 2;
18847
- return effects.call(channel.getMessagesById, [messageId]);
18860
+ if (channel) {
18861
+ _context0.n = 2;
18862
+ break;
18863
+ }
18864
+ return _context0.a(2);
18848
18865
  case 2:
18849
- messages = _context0.v;
18850
18866
  _context0.n = 3;
18851
- return effects.put(updateMessageAC(messageId, messages[0]));
18867
+ return effects.call(channel.getMessagesById, [messageId]);
18852
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:
18853
18878
  updateMessageOnMap(channel.id, {
18854
18879
  messageId: messageId,
18855
- params: messages[0]
18880
+ params: fetchedMessage
18856
18881
  });
18857
- updateMessageOnAllMessages(messageId, messages[0]);
18858
- _context0.n = 4;
18882
+ updateMessageOnAllMessages(messageId, fetchedMessage);
18883
+ _context0.n = 5;
18859
18884
  return effects.put(setScrollToMessagesAC(messageId, false));
18860
- 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);
18861
18891
  _context0.n = 6;
18892
+ return effects.put(updateChannelLastMessageAC(fetchedMessage, channel));
18893
+ case 6:
18894
+ _context0.n = 8;
18862
18895
  break;
18863
- case 5:
18864
- _context0.p = 5;
18896
+ case 7:
18897
+ _context0.p = 7;
18865
18898
  _t0 = _context0.v;
18866
18899
  log.error('error in message query', _t0);
18867
- case 6:
18900
+ case 8:
18868
18901
  return _context0.a(2);
18869
18902
  }
18870
- }, _marked8$1, null, [[0, 5]]);
18903
+ }, _marked8$1, null, [[0, 7]]);
18871
18904
  }
18872
18905
  function loadMoreMessages(action) {
18873
18906
  var payload, limit, direction, channelId, messageId, hasNext, SceytChatClient, messageQueryBuilder, messageQuery, result, _t1;
@@ -18956,25 +18989,38 @@ function loadMoreMessages(action) {
18956
18989
  _context1.n = 11;
18957
18990
  return effects.put(addMessagesAC(JSON.parse(JSON.stringify(result.messages)), direction));
18958
18991
  case 11:
18959
- _context1.n = 13;
18992
+ _context1.n = 16;
18960
18993
  break;
18961
18994
  case 12:
18962
18995
  _context1.n = 13;
18963
18996
  return effects.put(addMessagesAC([], direction));
18964
18997
  case 13:
18998
+ if (!(direction === MESSAGE_LOAD_DIRECTION.NEXT)) {
18999
+ _context1.n = 15;
19000
+ break;
19001
+ }
18965
19002
  _context1.n = 14;
18966
- return effects.put(setMessagesLoadingStateAC(LOADING_STATE.LOADED));
19003
+ return effects.put(setMessagesHasNextAC(false));
18967
19004
  case 14:
18968
19005
  _context1.n = 16;
18969
19006
  break;
18970
19007
  case 15:
18971
- _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;
18972
19018
  _t1 = _context1.v;
18973
19019
  log.error('error in load more messages', _t1);
18974
- case 16:
19020
+ case 19:
18975
19021
  return _context1.a(2);
18976
19022
  }
18977
- }, _marked9$1, null, [[0, 15]]);
19023
+ }, _marked9$1, null, [[0, 18]]);
18978
19024
  }
18979
19025
  function addReaction(action) {
18980
19026
  var payload, channelId, messageId, key, score, reason, enforceUnique, user, channel, _yield$call, _message2, reaction, channelUpdateParam, _t10;
@@ -19398,7 +19444,7 @@ function MessageSaga() {
19398
19444
  return effects.takeLatest(GET_MESSAGES, getMessagesQuery);
19399
19445
  case 7:
19400
19446
  _context18.n = 8;
19401
- return effects.takeLatest(GET_MESSAGE, getMessageQuery);
19447
+ return effects.takeEvery(GET_MESSAGE, getMessageQuery);
19402
19448
  case 8:
19403
19449
  _context18.n = 9;
19404
19450
  return effects.takeLatest(GET_MESSAGES_ATTACHMENTS, getMessageAttachments);
@@ -21003,6 +21049,50 @@ function SvgAvatar(props) {
21003
21049
  })));
21004
21050
  }
21005
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
+
21006
21096
  var _templateObject$3, _templateObject2$3, _templateObject3$2, _templateObject4$2;
21007
21097
  var Avatar = function Avatar(_ref) {
21008
21098
  var image = _ref.image,
@@ -21019,6 +21109,9 @@ var Avatar = function Avatar(_ref) {
21019
21109
  var theme = useSelector(themeSelector);
21020
21110
  var _useColor = useColors(),
21021
21111
  iconInactive = _useColor[THEME_COLORS.ICON_INACTIVE];
21112
+ var _useState = React.useState(image || null),
21113
+ resolvedImageSrc = _useState[0],
21114
+ setResolvedImageSrc = _useState[1];
21022
21115
  var isDeletedUserAvatar = !image && !name;
21023
21116
  var avatarText = '';
21024
21117
  if (!image && name) {
@@ -21035,11 +21128,68 @@ var Avatar = function Avatar(_ref) {
21035
21128
  avatarText = _firstCharOfFirstWord ? String.fromCodePoint(_firstCharOfFirstWord) : '';
21036
21129
  }
21037
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]);
21038
21188
  return /*#__PURE__*/React__default.createElement(Container$1, {
21039
21189
  border: border,
21040
21190
  marginAuto: marginAuto,
21041
21191
  size: size,
21042
- isImage: !!(image || setDefaultAvatar),
21192
+ isImage: !!(resolvedImageSrc || setDefaultAvatar),
21043
21193
  avatarName: name,
21044
21194
  textSize: textSize,
21045
21195
  onClick: handleAvatarClick,
@@ -21053,7 +21203,7 @@ var Avatar = function Avatar(_ref) {
21053
21203
  }) : (/*#__PURE__*/React__default.createElement("span", null, avatarText)) : (/*#__PURE__*/React__default.createElement(AvatarImage, {
21054
21204
  draggable: false,
21055
21205
  showImage: true,
21056
- src: image,
21206
+ src: resolvedImageSrc || image,
21057
21207
  size: size,
21058
21208
  alt: ''
21059
21209
  })));
@@ -21144,7 +21294,6 @@ var ChannelMessageText = function ChannelMessageText(_ref2) {
21144
21294
  }), channel.lastReactedMessage && '"')))));
21145
21295
  };
21146
21296
  var Channel = function Channel(_ref3) {
21147
- var _channel$metadata;
21148
21297
  var channel = _ref3.channel,
21149
21298
  theme = _ref3.theme,
21150
21299
  _ref3$showAvatar = _ref3.showAvatar,
@@ -21168,7 +21317,10 @@ var Channel = function Channel(_ref3) {
21168
21317
  channelLastMessageTimeFontSize = _ref3.channelLastMessageTimeFontSize,
21169
21318
  channelLastMessageHeight = _ref3.channelLastMessageHeight,
21170
21319
  channelAvatarSize = _ref3.channelAvatarSize,
21171
- channelAvatarTextSize = _ref3.channelAvatarTextSize;
21320
+ channelAvatarTextSize = _ref3.channelAvatarTextSize,
21321
+ setSelectedChannel = _ref3.setSelectedChannel,
21322
+ getCustomLatestMessage = _ref3.getCustomLatestMessage,
21323
+ doNotShowMessageDeliveryTypes = _ref3.doNotShowMessageDeliveryTypes;
21172
21324
  var _useColor = useColors(),
21173
21325
  accentColor = _useColor[THEME_COLORS.ACCENT],
21174
21326
  textPrimary = _useColor[THEME_COLORS.TEXT_PRIMARY],
@@ -21189,7 +21341,7 @@ var Channel = function Channel(_ref3) {
21189
21341
  var activeChannel = useSelector(activeChannelSelector) || {};
21190
21342
  var channelDraftIsRemoved = useSelector(channelMessageDraftIsRemovedSelector);
21191
21343
  var isDirectChannel = channel.type === DEFAULT_CHANNEL_TYPE.DIRECT;
21192
- var isSelfChannel = isDirectChannel && (((_channel$metadata = channel.metadata) === null || _channel$metadata === void 0 ? void 0 : _channel$metadata.s) || channel.members.length === 1 && channel.members[0].id === user.id);
21344
+ var isSelfChannel = isDirectChannel && channel.memberCount === 1 && channel.members.length > 0 && channel.members[0].id === user.id;
21193
21345
  var directChannelUser = isDirectChannel && channel.members.find(function (member) {
21194
21346
  return member.id !== user.id;
21195
21347
  });
@@ -21206,13 +21358,6 @@ var Channel = function Channel(_ref3) {
21206
21358
  statusWidth = _useState3[0],
21207
21359
  setStatusWidth = _useState3[1];
21208
21360
  var avatarName = channel.subject || (isDirectChannel && directChannelUser ? directChannelUser.firstName || directChannelUser.id : isSelfChannel ? 'Me' : '');
21209
- var handleChangeActiveChannel = function handleChangeActiveChannel(chan) {
21210
- if (activeChannel.id !== chan.id) {
21211
- dispatch(sendTypingAC(false));
21212
- dispatch(clearMessagesAC());
21213
- dispatch(switchChannelActionAC(chan));
21214
- }
21215
- };
21216
21361
  var messageAuthorRef = React.useRef(null);
21217
21362
  var messageTimeAndStatusRef = React.useRef(null);
21218
21363
  useUpdatePresence(channel, true);
@@ -21297,6 +21442,43 @@ var Channel = function Channel(_ref3) {
21297
21442
  isDirectChannel: isDirectChannel
21298
21443
  });
21299
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]);
21300
21482
  return /*#__PURE__*/React__default.createElement(Container$2, {
21301
21483
  theme: theme,
21302
21484
  selectedChannel: channel.id === activeChannel.id,
@@ -21307,7 +21489,7 @@ var Channel = function Channel(_ref3) {
21307
21489
  selectedChannelBorderRadius: selectedChannelBorderRadius,
21308
21490
  channelsMargin: channelsMargin,
21309
21491
  onClick: function onClick() {
21310
- return handleChangeActiveChannel(channel);
21492
+ return setSelectedChannel(channel);
21311
21493
  },
21312
21494
  hoverBackground: channelHoverBackground || backgroundHovered
21313
21495
  }, showAvatar && (/*#__PURE__*/React__default.createElement(AvatarWrapper, null, /*#__PURE__*/React__default.createElement(Avatar, {
@@ -21333,7 +21515,23 @@ var Channel = function Channel(_ref3) {
21333
21515
  avatarSize: channelAvatarSize
21334
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, {
21335
21517
  color: notificationsIsMutedIconColor || iconInactive
21336
- }, 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, {
21337
21535
  color: textSecondary,
21338
21536
  markedAsUnread: !!(channel.unread || channel.newMessageCount && channel.newMessageCount > 0),
21339
21537
  unreadMentions: !!(channel.newMentionCount && channel.newMentionCount > 0),
@@ -21369,7 +21567,7 @@ var Channel = function Channel(_ref3) {
21369
21567
  }, MessageText)))), /*#__PURE__*/React__default.createElement(ChannelStatus, {
21370
21568
  color: iconInactive,
21371
21569
  ref: messageTimeAndStatusRef
21372
- }, 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({
21373
21571
  messageStatus: lastMessage.deliveryStatus,
21374
21572
  messageStatusDisplayingType: 'ticks',
21375
21573
  readIconColor: accentColor,
@@ -21436,9 +21634,9 @@ var Container$2 = styled__default.div(_templateObject6$1 || (_templateObject6$1
21436
21634
  return props.channelsMargin || '0 8px';
21437
21635
  }, function (props) {
21438
21636
  return props.selectedChannelBorderRadius || '12px';
21439
- }, function (_ref4) {
21440
- var selectedChannel = _ref4.selectedChannel,
21441
- hoverBackground = _ref4.hoverBackground;
21637
+ }, function (_ref5) {
21638
+ var selectedChannel = _ref5.selectedChannel,
21639
+ hoverBackground = _ref5.hoverBackground;
21442
21640
  return !selectedChannel && "\n background-color: " + hoverBackground + ";\n ";
21443
21641
  }, UserStatus, function (props) {
21444
21642
  return props.selectedChannel ? props.selectedBackgroundColor : props.hoverBackground;
@@ -21453,9 +21651,9 @@ var DraftMessageText = styled__default.span(_templateObject8$1 || (_templateObje
21453
21651
  });
21454
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) {
21455
21653
  return props.color;
21456
- }, function (_ref5) {
21457
- var typing = _ref5.typing,
21458
- recording = _ref5.recording;
21654
+ }, function (_ref6) {
21655
+ var typing = _ref6.typing,
21656
+ recording = _ref6.recording;
21459
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 ";
21460
21658
  });
21461
21659
  var Points = styled__default.span(_templateObject0$1 || (_templateObject0$1 = _taggedTemplateLiteralLoose(["\n margin-right: 4px;\n color: ", ";\n font-style: normal;\n"])), function (props) {
@@ -21512,7 +21710,7 @@ var MessageTextContainer = styled__default.div(_templateObject20$1 || (_template
21512
21710
 
21513
21711
  var _templateObject$5, _templateObject2$5;
21514
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) {
21515
- return props.inline && 'calc(100% - 24px)';
21713
+ return props.width || props.inline && 'calc(100% - 24px)';
21516
21714
  }, function (props) {
21517
21715
  return !props.inline && '0 12px 16px';
21518
21716
  }, ClearTypedText, function (props) {
@@ -21539,14 +21737,16 @@ var ChannelSearch = function ChannelSearch(_ref) {
21539
21737
  borderRadius = _ref.borderRadius,
21540
21738
  searchInputBackgroundColor = _ref.searchInputBackgroundColor,
21541
21739
  searchInputTextColor = _ref.searchInputTextColor,
21542
- fontSize = _ref.fontSize;
21740
+ fontSize = _ref.fontSize,
21741
+ width = _ref.width;
21543
21742
  var _useColor = useColors(),
21544
21743
  textPrimary = _useColor[THEME_COLORS.TEXT_PRIMARY],
21545
21744
  surface1 = _useColor[THEME_COLORS.SURFACE_1],
21546
21745
  iconInactive = _useColor[THEME_COLORS.ICON_INACTIVE],
21547
21746
  footnoteColor = _useColor[THEME_COLORS.TEXT_FOOTNOTE];
21548
21747
  return /*#__PURE__*/React__default.createElement(SearchInputContainer, {
21549
- inline: inline
21748
+ inline: inline,
21749
+ width: width
21550
21750
  }, /*#__PURE__*/React__default.createElement(StyledSearchSvg, {
21551
21751
  left: !inline ? '22px' : '',
21552
21752
  color: iconInactive
@@ -23327,6 +23527,7 @@ var ChannelList = function ChannelList(_ref) {
23327
23527
  searchInputTextColor = _ref.searchInputTextColor,
23328
23528
  _ref$searchChannelsPo = _ref.searchChannelsPosition,
23329
23529
  searchChannelsPosition = _ref$searchChannelsPo === void 0 ? 'bottom' : _ref$searchChannelsPo,
23530
+ channelSearchWidth = _ref.channelSearchWidth,
23330
23531
  searchInputBorderRadius = _ref.searchInputBorderRadius,
23331
23532
  selectedChannelBorderRadius = _ref.selectedChannelBorderRadius,
23332
23533
  selectedChannelPaddings = _ref.selectedChannelPaddings,
@@ -23373,7 +23574,10 @@ var ChannelList = function ChannelList(_ref) {
23373
23574
  channelAvatarTextSize = _ref.channelAvatarTextSize,
23374
23575
  searchChannelInputFontSize = _ref.searchChannelInputFontSize,
23375
23576
  searchedChannelsTitleFontSize = _ref.searchedChannelsTitleFontSize,
23376
- 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;
23377
23581
  var _useColor = useColors(),
23378
23582
  background = _useColor[THEME_COLORS.BACKGROUND],
23379
23583
  textPrimary = _useColor[THEME_COLORS.TEXT_PRIMARY],
@@ -23441,11 +23645,6 @@ var ChannelList = function ChannelList(_ref) {
23441
23645
  handleLoadMoreChannels();
23442
23646
  }
23443
23647
  };
23444
- var handleChangeActiveChannel = function handleChangeActiveChannel(chan) {
23445
- if (activeChannel.id !== chan.id) {
23446
- dispatch(switchChannelActionAC(chan));
23447
- }
23448
- };
23449
23648
  var handleCrateChatWithContact = function handleCrateChatWithContact(contact) {
23450
23649
  if (contact) {
23451
23650
  var channelData = {
@@ -23601,6 +23800,13 @@ var ChannelList = function ChannelList(_ref) {
23601
23800
  setListWidthIsSet(false);
23602
23801
  }
23603
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
+ };
23604
23810
  return /*#__PURE__*/React__default.createElement(Container$7, {
23605
23811
  className: className,
23606
23812
  withCustomList: !!List,
@@ -23614,6 +23820,7 @@ var ChannelList = function ChannelList(_ref) {
23614
23820
  padding: searchChannelsPadding
23615
23821
  }, Profile, showSearch && searchChannelsPosition === 'inline' ? (/*#__PURE__*/React__default.createElement(ChannelSearch, {
23616
23822
  inline: true,
23823
+ width: channelSearchWidth,
23617
23824
  borderRadius: searchInputBorderRadius,
23618
23825
  searchValue: searchValue,
23619
23826
  handleSearchValueChange: handleSearchValueChange,
@@ -23635,6 +23842,7 @@ var ChannelList = function ChannelList(_ref) {
23635
23842
  })))), showSearch && searchChannelsPosition === 'bottom' && (/*#__PURE__*/React__default.createElement(ChannelSearch, {
23636
23843
  searchValue: searchValue,
23637
23844
  theme: theme,
23845
+ width: channelSearchWidth,
23638
23846
  borderRadius: searchInputBorderRadius,
23639
23847
  handleSearchValueChange: handleSearchValueChange,
23640
23848
  getMyChannels: getMyChannels,
@@ -23645,13 +23853,13 @@ var ChannelList = function ChannelList(_ref) {
23645
23853
  channels: channels,
23646
23854
  searchedChannels: searchedChannels,
23647
23855
  selectedChannel: activeChannel,
23648
- setSelectedChannel: handleChangeActiveChannel,
23856
+ setSelectedChannel: setSelectedChannel,
23649
23857
  loadMoreChannels: handleLoadMoreChannels,
23650
23858
  searchValue: searchValue
23651
23859
  }, !searchValue ? (/*#__PURE__*/React__default.createElement(React__default.Fragment, null, channels.map(function (channel) {
23652
23860
  return ListItem ? (/*#__PURE__*/React__default.createElement(ListItem, {
23653
23861
  channel: channel,
23654
- setSelectedChannel: handleChangeActiveChannel,
23862
+ setSelectedChannel: setSelectedChannel,
23655
23863
  key: channel.id
23656
23864
  })) : (/*#__PURE__*/React__default.createElement(Channel, {
23657
23865
  theme: theme,
@@ -23677,7 +23885,10 @@ var ChannelList = function ChannelList(_ref) {
23677
23885
  avatarBorderRadius: avatarBorderRadius,
23678
23886
  channel: channel,
23679
23887
  key: channel.id,
23680
- contactsMap: contactsMap
23888
+ contactsMap: contactsMap,
23889
+ setSelectedChannel: setSelectedChannel,
23890
+ getCustomLatestMessage: getCustomLatestMessage,
23891
+ doNotShowMessageDeliveryTypes: doNotShowMessageDeliveryTypes
23681
23892
  }));
23682
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, {
23683
23894
  color: textSecondary,
@@ -23685,7 +23896,7 @@ var ChannelList = function ChannelList(_ref) {
23685
23896
  }, "Chats & Groups"), searchedChannels.chats_groups.map(function (channel) {
23686
23897
  return ListItem ? (/*#__PURE__*/React__default.createElement(ListItem, {
23687
23898
  channel: channel,
23688
- setSelectedChannel: handleChangeActiveChannel,
23899
+ setSelectedChannel: setSelectedChannel,
23689
23900
  key: channel.id
23690
23901
  })) : (/*#__PURE__*/React__default.createElement(Channel, {
23691
23902
  theme: theme,
@@ -23711,7 +23922,10 @@ var ChannelList = function ChannelList(_ref) {
23711
23922
  avatarBorderRadius: avatarBorderRadius,
23712
23923
  channel: channel,
23713
23924
  key: channel.id,
23714
- contactsMap: contactsMap
23925
+ contactsMap: contactsMap,
23926
+ setSelectedChannel: setSelectedChannel,
23927
+ getCustomLatestMessage: getCustomLatestMessage,
23928
+ doNotShowMessageDeliveryTypes: doNotShowMessageDeliveryTypes
23715
23929
  }));
23716
23930
  }))), !!(searchedChannels.contacts && searchedChannels.contacts.length) && (/*#__PURE__*/React__default.createElement(GroupChannels, null, /*#__PURE__*/React__default.createElement(SearchedChannelsHeader, {
23717
23931
  color: textSecondary,
@@ -23720,7 +23934,7 @@ var ChannelList = function ChannelList(_ref) {
23720
23934
  return ListItem ? (/*#__PURE__*/React__default.createElement(ListItem, {
23721
23935
  contact: contact,
23722
23936
  createChatWithContact: handleCrateChatWithContact,
23723
- setSelectedChannel: handleChangeActiveChannel,
23937
+ setSelectedChannel: setSelectedChannel,
23724
23938
  key: contact.id
23725
23939
  })) : (/*#__PURE__*/React__default.createElement(ContactItem, {
23726
23940
  theme: theme,
@@ -23751,7 +23965,7 @@ var ChannelList = function ChannelList(_ref) {
23751
23965
  }, "Channels"), searchedChannels.channels.map(function (channel) {
23752
23966
  return ListItem ? (/*#__PURE__*/React__default.createElement(ListItem, {
23753
23967
  channel: channel,
23754
- setSelectedChannel: handleChangeActiveChannel,
23968
+ setSelectedChannel: setSelectedChannel,
23755
23969
  key: channel.id
23756
23970
  })) : (/*#__PURE__*/React__default.createElement(Channel, {
23757
23971
  theme: theme,
@@ -23777,7 +23991,10 @@ var ChannelList = function ChannelList(_ref) {
23777
23991
  avatarBorderRadius: avatarBorderRadius,
23778
23992
  channel: channel,
23779
23993
  key: channel.id,
23780
- contactsMap: contactsMap
23994
+ contactsMap: contactsMap,
23995
+ setSelectedChannel: setSelectedChannel,
23996
+ getCustomLatestMessage: getCustomLatestMessage,
23997
+ doNotShowMessageDeliveryTypes: doNotShowMessageDeliveryTypes
23781
23998
  }));
23782
23999
  }))))) : (/*#__PURE__*/React__default.createElement(NoData, {
23783
24000
  color: textSecondary,
@@ -23798,7 +24015,7 @@ var ChannelList = function ChannelList(_ref) {
23798
24015
  }, channels.map(function (channel) {
23799
24016
  return ListItem ? (/*#__PURE__*/React__default.createElement(ListItem, {
23800
24017
  channel: channel,
23801
- setSelectedChannel: handleChangeActiveChannel,
24018
+ setSelectedChannel: setSelectedChannel,
23802
24019
  key: channel.id
23803
24020
  })) : (/*#__PURE__*/React__default.createElement(Channel, {
23804
24021
  theme: theme,
@@ -23824,7 +24041,10 @@ var ChannelList = function ChannelList(_ref) {
23824
24041
  avatarBorderRadius: avatarBorderRadius,
23825
24042
  channel: channel,
23826
24043
  key: channel.id,
23827
- contactsMap: contactsMap
24044
+ contactsMap: contactsMap,
24045
+ setSelectedChannel: setSelectedChannel,
24046
+ getCustomLatestMessage: getCustomLatestMessage,
24047
+ doNotShowMessageDeliveryTypes: doNotShowMessageDeliveryTypes
23828
24048
  }));
23829
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, {
23830
24050
  color: textSecondary,
@@ -23835,7 +24055,7 @@ var ChannelList = function ChannelList(_ref) {
23835
24055
  }, "Chats & Groups"), searchedChannels.chats_groups.map(function (channel) {
23836
24056
  return ListItem ? (/*#__PURE__*/React__default.createElement(ListItem, {
23837
24057
  channel: channel,
23838
- setSelectedChannel: handleChangeActiveChannel,
24058
+ setSelectedChannel: setSelectedChannel,
23839
24059
  key: channel.id
23840
24060
  })) : (/*#__PURE__*/React__default.createElement(Channel, {
23841
24061
  theme: theme,
@@ -23861,7 +24081,10 @@ var ChannelList = function ChannelList(_ref) {
23861
24081
  avatarBorderRadius: avatarBorderRadius,
23862
24082
  channel: channel,
23863
24083
  contactsMap: contactsMap,
23864
- key: channel.id
24084
+ key: channel.id,
24085
+ setSelectedChannel: setSelectedChannel,
24086
+ getCustomLatestMessage: getCustomLatestMessage,
24087
+ doNotShowMessageDeliveryTypes: doNotShowMessageDeliveryTypes
23865
24088
  }));
23866
24089
  }))), !!searchedChannels.channels.length && (/*#__PURE__*/React__default.createElement(GroupChannels, null, /*#__PURE__*/React__default.createElement(SearchedChannelsHeader, {
23867
24090
  color: textSecondary,
@@ -23869,7 +24092,7 @@ var ChannelList = function ChannelList(_ref) {
23869
24092
  }, "Channels"), searchedChannels.channels.map(function (channel) {
23870
24093
  return ListItem ? (/*#__PURE__*/React__default.createElement(ListItem, {
23871
24094
  channel: channel,
23872
- setSelectedChannel: handleChangeActiveChannel,
24095
+ setSelectedChannel: setSelectedChannel,
23873
24096
  key: channel.id
23874
24097
  })) : (/*#__PURE__*/React__default.createElement(Channel, {
23875
24098
  theme: theme,
@@ -23895,7 +24118,10 @@ var ChannelList = function ChannelList(_ref) {
23895
24118
  avatarBorderRadius: avatarBorderRadius,
23896
24119
  channel: channel,
23897
24120
  key: channel.id,
23898
- contactsMap: contactsMap
24121
+ contactsMap: contactsMap,
24122
+ setSelectedChannel: setSelectedChannel,
24123
+ getCustomLatestMessage: getCustomLatestMessage,
24124
+ doNotShowMessageDeliveryTypes: doNotShowMessageDeliveryTypes
23899
24125
  }));
23900
24126
  }))))) : (/*#__PURE__*/React__default.createElement(LoadingWrapper, null, /*#__PURE__*/React__default.createElement(UploadingIcon, {
23901
24127
  color: textFootnote
@@ -23934,7 +24160,7 @@ var NoData = styled__default.div(_templateObject8$4 || (_templateObject8$4 = _ta
23934
24160
  return props.color;
23935
24161
  });
23936
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"])));
23937
- 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) {
23938
24164
  return props.maxWidth ? props.maxWidth + "px" : 'inherit';
23939
24165
  }, function (props) {
23940
24166
  return props.padding || '12px';
@@ -24099,7 +24325,6 @@ function SvgInfo(props) {
24099
24325
 
24100
24326
  var _templateObject$i, _templateObject2$g, _templateObject3$c, _templateObject4$a, _templateObject5$8, _templateObject6$6, _templateObject7$5, _templateObject8$5, _templateObject9$5, _templateObject0$4;
24101
24327
  function ChatHeader(_ref) {
24102
- var _activeChannel$metada;
24103
24328
  var infoIcon = _ref.infoIcon,
24104
24329
  backgroundColor = _ref.backgroundColor,
24105
24330
  titleColor = _ref.titleColor,
@@ -24138,7 +24363,7 @@ function ChatHeader(_ref) {
24138
24363
  var channelListHidden = useSelector(channelListHiddenSelector);
24139
24364
  var channelDetailsIsOpen = useSelector(channelInfoIsOpenSelector, reactRedux.shallowEqual);
24140
24365
  var isDirectChannel = activeChannel.type === DEFAULT_CHANNEL_TYPE.DIRECT;
24141
- var isSelfChannel = isDirectChannel && ((_activeChannel$metada = activeChannel.metadata) === null || _activeChannel$metada === void 0 ? void 0 : _activeChannel$metada.s);
24366
+ var isSelfChannel = isDirectChannel && activeChannel.memberCount === 1 && activeChannel.members.length > 0 && activeChannel.members[0].id === user.id;
24142
24367
  var directChannelUser = isDirectChannel && activeChannel.members.find(function (member) {
24143
24368
  return member.id !== user.id;
24144
24369
  });
@@ -24549,50 +24774,6 @@ function SvgDeleteChannel(props) {
24549
24774
  })));
24550
24775
  }
24551
24776
 
24552
- var ATTACHMENTS_CACHE = 'attachments-cache';
24553
- var isBrowser = typeof window !== 'undefined';
24554
- var cacheAvailable;
24555
- if (isBrowser) {
24556
- cacheAvailable = 'caches' in window;
24557
- } else {
24558
- cacheAvailable = 'caches' in global;
24559
- }
24560
- var setAttachmentToCache = function setAttachmentToCache(attachmentUrl, attachmentResponse) {
24561
- if (cacheAvailable) {
24562
- caches.open(ATTACHMENTS_CACHE).then(function (cache) {
24563
- try {
24564
- cache.put(attachmentUrl, attachmentResponse).then(function () {
24565
- log.info('Cache success');
24566
- })["catch"](function (e) {
24567
- log.info('Error on cache attachment ... ', e);
24568
- caches["delete"](attachmentUrl);
24569
- });
24570
- return Promise.resolve();
24571
- } catch (e) {
24572
- return Promise.reject(e);
24573
- }
24574
- });
24575
- }
24576
- };
24577
- var getAttachmentUrlFromCache = function getAttachmentUrlFromCache(attachmentUrl) {
24578
- try {
24579
- if (!cacheAvailable) {
24580
- log.error('Cache is not available');
24581
- return Promise.reject(new Error('Cache not available'));
24582
- }
24583
- return Promise.resolve(caches.match(attachmentUrl)).then(function (response) {
24584
- if (response) {
24585
- return Promise.resolve(response.blob()).then(URL.createObjectURL);
24586
- } else {
24587
- log.info('The image or video is not cached', attachmentUrl);
24588
- return false;
24589
- }
24590
- });
24591
- } catch (e) {
24592
- return Promise.reject(e);
24593
- }
24594
- };
24595
-
24596
24777
  var _path$A;
24597
24778
  function _extends$B() {
24598
24779
  return _extends$B = Object.assign ? Object.assign.bind() : function (n) {
@@ -25024,10 +25205,9 @@ function ForwardMessagePopup(_ref) {
25024
25205
  setSearchValue('');
25025
25206
  };
25026
25207
  var handleChannelSelect = function handleChannelSelect(isSelected, channel) {
25027
- var _channel$metadata;
25028
25208
  var newSelectedChannels = [].concat(selectedChannels);
25029
25209
  var isDirectChannel = channel.type === DEFAULT_CHANNEL_TYPE.DIRECT;
25030
- var isSelfChannel = isDirectChannel && ((_channel$metadata = channel.metadata) === null || _channel$metadata === void 0 ? void 0 : _channel$metadata.s);
25210
+ var isSelfChannel = isDirectChannel && channel.memberCount === 1 && channel.members.length > 0 && channel.members[0].id === user.id;
25031
25211
  var directChannelUser = isDirectChannel && channel.members.find(function (member) {
25032
25212
  return member.id !== user.id;
25033
25213
  });
@@ -25140,12 +25320,11 @@ function ForwardMessagePopup(_ref) {
25140
25320
  color: textSecondary,
25141
25321
  margin: '0 0 12px'
25142
25322
  }, "Chats & Groups"), searchedChannels.chats_groups.map(function (channel) {
25143
- var _channel$metadata2;
25144
25323
  var isSelected = selectedChannels.findIndex(function (chan) {
25145
25324
  return chan.id === channel.id;
25146
25325
  }) >= 0;
25147
25326
  var isDirectChannel = channel.type === DEFAULT_CHANNEL_TYPE.DIRECT;
25148
- var isSelfChannel = isDirectChannel && ((_channel$metadata2 = channel.metadata) === null || _channel$metadata2 === void 0 ? void 0 : _channel$metadata2.s);
25327
+ var isSelfChannel = isDirectChannel && channel.memberCount === 1 && channel.members.length > 0 && channel.members[0].id === user.id;
25149
25328
  var directChannelUser = isDirectChannel && isSelfChannel ? user : channel.members.find(function (member) {
25150
25329
  return member.id !== user.id;
25151
25330
  });
@@ -25216,9 +25395,8 @@ function ForwardMessagePopup(_ref) {
25216
25395
  }))), !searchedChannels.chats_groups.length && !searchedChannels.channels.length && (/*#__PURE__*/React__default.createElement(NoResults, {
25217
25396
  color: textSecondary
25218
25397
  }, "No channels found")))) : channels.map(function (channel) {
25219
- var _channel$metadata3;
25220
25398
  var isDirectChannel = channel.type === DEFAULT_CHANNEL_TYPE.DIRECT;
25221
- var isSelfChannel = isDirectChannel && ((_channel$metadata3 = channel.metadata) === null || _channel$metadata3 === void 0 ? void 0 : _channel$metadata3.s);
25399
+ var isSelfChannel = isDirectChannel && channel.memberCount === 1 && channel.members.length > 0 && channel.members[0].id === user.id;
25222
25400
  var directChannelUser = isDirectChannel && isSelfChannel ? user : channel.members.find(function (member) {
25223
25401
  return member.id !== user.id;
25224
25402
  });
@@ -26059,6 +26237,7 @@ var Message = function Message(_ref) {
26059
26237
  var _useColor = useColors(),
26060
26238
  textOnPrimary = _useColor[THEME_COLORS.TEXT_ON_PRIMARY],
26061
26239
  overlayBackground = _useColor[THEME_COLORS.OVERLAY_BACKGROUND];
26240
+ var scrollToNewMessage = useSelector(scrollToNewMessageSelector);
26062
26241
  var dispatch = useDispatch();
26063
26242
  var ChatClient = getClient();
26064
26243
  var user = ChatClient.user;
@@ -26077,7 +26256,19 @@ var Message = function Message(_ref) {
26077
26256
  };
26078
26257
  React.useEffect(function () {
26079
26258
  if (isVisible) {
26259
+ var _channel$lastMessage;
26080
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
+ }
26081
26272
  }
26082
26273
  }, [isVisible]);
26083
26274
  useDidUpdate(function () {
@@ -27146,7 +27337,7 @@ var VideoPreview = /*#__PURE__*/React.memo(function VideoPreview(_ref) {
27146
27337
  preload: 'auto',
27147
27338
  id: 'video',
27148
27339
  src: file.attachmentUrl || videoUrl
27149
- }), videoCurrentTime && (/*#__PURE__*/React__default.createElement(VideoControls, null, !isPreview && !!videoCurrentTime && !isRepliedMessage && !uploading && !isDetailsView && (
27340
+ }), videoCurrentTime && !isRepliedMessage && (/*#__PURE__*/React__default.createElement(VideoControls, null, !isPreview && !!videoCurrentTime && !isRepliedMessage && !uploading && !isDetailsView && (
27150
27341
  /*#__PURE__*/
27151
27342
  React__default.createElement(VideoPlayButton, null, /*#__PURE__*/React__default.createElement(SvgPlayVideo, null))), /*#__PURE__*/React__default.createElement(VideoTime, {
27152
27343
  isDetailsView: isDetailsView,
@@ -31193,7 +31384,7 @@ var validateUrl = function validateUrl(url) {
31193
31384
  }
31194
31385
  };
31195
31386
  var OGMetadata = function OGMetadata(_ref) {
31196
- 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;
31197
31388
  var attachments = _ref.attachments,
31198
31389
  state = _ref.state;
31199
31390
  var _useState = React.useState(null),
@@ -31202,6 +31393,18 @@ var OGMetadata = function OGMetadata(_ref) {
31202
31393
  var _useState2 = React.useState(true),
31203
31394
  imageLoadError = _useState2[0],
31204
31395
  setImageLoadError = _useState2[1];
31396
+ var _useState3 = React.useState(true),
31397
+ faviconLoadError = _useState3[0],
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];
31205
31408
  var attachment = React.useMemo(function () {
31206
31409
  return attachments.find(function (attachment) {
31207
31410
  return attachment.type === attachmentTypes.link;
@@ -31216,7 +31419,7 @@ var OGMetadata = function OGMetadata(_ref) {
31216
31419
  var queryBuilder = new client.MessageLinkOGQueryBuilder(url);
31217
31420
  return Promise.resolve(queryBuilder.build()).then(function (query) {
31218
31421
  return Promise.resolve(query.loadOGData()).then(function (metadata) {
31219
- return Promise.resolve(storeMetadata(url.replace('https://', '').replace('http://', ''), metadata)).then(function () {
31422
+ return Promise.resolve(storeMetadata(url, metadata)).then(function () {
31220
31423
  setMetadata(metadata);
31221
31424
  });
31222
31425
  });
@@ -31239,7 +31442,7 @@ var OGMetadata = function OGMetadata(_ref) {
31239
31442
  if (attachment !== null && attachment !== void 0 && attachment.id && attachment !== null && attachment !== void 0 && attachment.url) {
31240
31443
  var url = attachment === null || attachment === void 0 ? void 0 : attachment.url;
31241
31444
  if (url) {
31242
- getMetadata(url.replace('https://', '').replace('http://', '')).then(function (cachedMetadata) {
31445
+ getMetadata(url).then(function (cachedMetadata) {
31243
31446
  try {
31244
31447
  if (cachedMetadata) {
31245
31448
  setMetadata(cachedMetadata);
@@ -31268,6 +31471,29 @@ var OGMetadata = function OGMetadata(_ref) {
31268
31471
  var _metadata$og, _metadata$og2, _metadata$og2$image, _metadata$og2$image$, _metadata$og3;
31269
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;
31270
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]);
31271
31497
  return /*#__PURE__*/React__default.createElement(OGMetadataContainer, {
31272
31498
  showOGMetadata: !!showOGMetadata
31273
31499
  }, /*#__PURE__*/React__default.createElement("div", {
@@ -31275,37 +31501,69 @@ var OGMetadata = function OGMetadata(_ref) {
31275
31501
  window.open(attachment === null || attachment === void 0 ? void 0 : attachment.url, '_blank');
31276
31502
  }
31277
31503
  }, /*#__PURE__*/React__default.createElement(ImageContainer, {
31278
- showOGMetadata: !!showOGMetadata && !imageLoadError
31279
- }, 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, {
31280
- 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,
31281
31509
  alt: 'OG metadata image',
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,
31282
31518
  onLoad: function onLoad() {
31283
- return setImageLoadError(false);
31519
+ return setFaviconLoadError(false);
31284
31520
  },
31285
31521
  onError: function onError() {
31286
- return setImageLoadError(true);
31522
+ return setFaviconLoadError(true);
31287
31523
  }
31288
- })) : 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 ? /*#__PURE__*/React__default.createElement(Favicon, {
31289
- 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
31290
- }) : 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));
31291
31527
  };
31292
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) {
31293
31529
  var showOGMetadata = _ref2.showOGMetadata;
31294
31530
  return showOGMetadata ? '0.8rem' : '0';
31295
31531
  });
31296
- 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) {
31297
- var showOGMetadata = _ref3.showOGMetadata;
31298
- 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 ";
31299
31535
  }, function (_ref4) {
31300
- var showOGMetadata = _ref4.showOGMetadata;
31301
- 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';
31302
31545
  });
31303
- var OGText = styled__default.div(_templateObject3$p || (_templateObject3$p = _taggedTemplateLiteralLoose(["\n width: 80%;\n padding: 0.5rem;\n margin: 0;\n"])));
31304
- 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"])));
31305
- 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"])));
31306
- var Desc = styled__default.p(_templateObject6$f || (_templateObject6$f = _taggedTemplateLiteralLoose(["\n font-weight: normal;\n font-size: 13px;\n padding: 0;\n"])));
31307
- 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"])));
31308
- 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"])));
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 ";
31554
+ });
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"])));
31309
31567
 
31310
31568
  var _templateObject$B, _templateObject2$w, _templateObject3$q, _templateObject4$m, _templateObject5$i;
31311
31569
  var MessageBody = function MessageBody(_ref) {
@@ -32645,14 +32903,6 @@ var HiddenMessageProperty;
32645
32903
  })(HiddenMessageProperty || (HiddenMessageProperty = {}));
32646
32904
 
32647
32905
  var _templateObject$D, _templateObject2$y, _templateObject3$s, _templateObject4$o, _templateObject5$k, _templateObject6$h, _templateObject7$f, _templateObject8$e, _templateObject9$c, _templateObject0$b, _templateObject1$8;
32648
- var loadFromServer = false;
32649
- var loadDirection = '';
32650
- var nextDisable = false;
32651
- var prevDisable = false;
32652
- var scrollToBottom = false;
32653
- var shouldLoadMessages;
32654
- var loading = false;
32655
- var messagesIndexMap = {};
32656
32906
  var CreateMessageDateDivider = function CreateMessageDateDivider(_ref) {
32657
32907
  var lastIndex = _ref.lastIndex,
32658
32908
  currentMessageDate = _ref.currentMessageDate,
@@ -32862,6 +33112,7 @@ var MessageList = function MessageList(_ref2) {
32862
33112
  var scrollToMentionedMessage = useSelector(scrollToMentionedMessageSelector, reactRedux.shallowEqual);
32863
33113
  var scrollToRepliedMessage = useSelector(scrollToMessageSelector, reactRedux.shallowEqual);
32864
33114
  var scrollToMessageHighlight = useSelector(scrollToMessageHighlightSelector, reactRedux.shallowEqual);
33115
+ var scrollToMessageBehavior = useSelector(scrollToMessageBehaviorSelector, reactRedux.shallowEqual);
32865
33116
  var browserTabIsActive = useSelector(browserTabIsActiveSelector, reactRedux.shallowEqual);
32866
33117
  var hasNextMessages = useSelector(messagesHasNextSelector, reactRedux.shallowEqual);
32867
33118
  var hasPrevMessages = useSelector(messagesHasPrevSelector, reactRedux.shallowEqual);
@@ -32902,35 +33153,40 @@ var MessageList = function MessageList(_ref2) {
32902
33153
  setShouldPreserveScroll = _useState0[1];
32903
33154
  var messageForReply = {};
32904
33155
  var attachmentsSelected = false;
32905
- var messageTopDateRef = React.useRef(null);
33156
+ var _useState1 = React.useState(''),
33157
+ topDateLabel = _useState1[0],
33158
+ setTopDateLabel = _useState1[1];
32906
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);
32907
33170
  var renderTopDate = function renderTopDate() {
32908
- var dateLabels = document.querySelectorAll('.divider');
32909
- var messageTopDate = messageTopDateRef.current;
33171
+ var container = scrollRef.current;
33172
+ if (!container) return;
33173
+ var dateLabels = container.querySelectorAll('.divider');
32910
33174
  var text = '';
32911
33175
  for (var i = dateLabels.length - 1; i >= 0; i--) {
32912
- var _dateLabel$firstChild;
32913
33176
  var dateLabel = dateLabels[i];
32914
- var span = dateLabel === null || dateLabel === void 0 ? void 0 : (_dateLabel$firstChild = dateLabel.firstChild) === null || _dateLabel$firstChild === void 0 ? void 0 : _dateLabel$firstChild.firstChild;
32915
- if (!text && scrollRef.current.scrollTop > dateLabel.offsetTop) {
32916
- text = span && span.innerText;
32917
- span.style.display = 'none';
32918
- } else {
32919
- span.style.display = 'block';
33177
+ if (!text && container.scrollTop > dateLabel.offsetTop) {
33178
+ var span = (dateLabel === null || dateLabel === void 0 ? void 0 : dateLabel.firstChild) && dateLabel.firstChild.firstChild;
33179
+ text = span ? span.innerText || '' : '';
32920
33180
  }
32921
33181
  }
32922
- if (text) {
32923
- messageTopDate.innerText = text;
32924
- messageTopDate.style.display = 'inline';
32925
- } else {
32926
- messageTopDate.style.display = 'none';
32927
- }
33182
+ setTopDateLabel(text);
32928
33183
  };
32929
- var handleMessagesListScroll = React.useCallback(function (event) {
33184
+ var handleMessagesListScroll = React.useCallback(function () {
32930
33185
  try {
33186
+ var target = scrollRef.current;
33187
+ if (!target) return Promise.resolve();
32931
33188
  if (scrollToMentionedMessage) {
32932
- var _target = event.target;
32933
- if (_target.scrollTop <= -50 || channel.lastMessage.id !== messages[messages.length - 1].id) {
33189
+ if (target.scrollTop <= -50 || channel.lastMessage.id !== messages[messages.length - 1].id) {
32934
33190
  dispatch(showScrollToNewMessageButtonAC(true));
32935
33191
  } else {
32936
33192
  dispatch(showScrollToNewMessageButtonAC(false));
@@ -32943,7 +33199,6 @@ var MessageList = function MessageList(_ref2) {
32943
33199
  setShowTopDate(false);
32944
33200
  }, 1000);
32945
33201
  renderTopDate();
32946
- var target = event.target;
32947
33202
  var forceLoadPrevMessages = false;
32948
33203
  if (-target.scrollTop + target.offsetHeight + 30 > target.scrollHeight) {
32949
33204
  forceLoadPrevMessages = true;
@@ -32958,51 +33213,68 @@ var MessageList = function MessageList(_ref2) {
32958
33213
  }
32959
33214
  if (scrollToReply) {
32960
33215
  target.scrollTop = scrollToReply;
32961
- } else {
32962
- if (messagesIndexMap[lastVisibleMessageId] < 15 || forceLoadPrevMessages) {
32963
- if (connectionStatus === CONNECTION_STATUS.CONNECTED && !scrollToNewMessage.scrollToBottom && hasPrevMessages) {
32964
- if (loading || messagesLoading === LOADING_STATE.LOADING || prevDisable) {
32965
- shouldLoadMessages = 'prev';
32966
- } else {
32967
- if (shouldLoadMessages === 'prev') {
32968
- shouldLoadMessages = '';
32969
- }
32970
- loadDirection = 'prev';
32971
- handleLoadMoreMessages(MESSAGE_LOAD_DIRECTION.PREV, LOAD_MAX_MESSAGE_COUNT);
32972
- if (!getHasPrevCached()) {
32973
- loadFromServer = true;
32974
- }
32975
- nextDisable = true;
33216
+ return Promise.resolve();
33217
+ }
33218
+ var currentIndex = messagesIndexMapRef.current[lastVisibleMessageId];
33219
+ var hasIndex = typeof currentIndex === 'number';
33220
+ if (hasIndex && currentIndex < 15 || forceLoadPrevMessages) {
33221
+ if (connectionStatus === CONNECTION_STATUS.CONNECTED && !scrollToNewMessage.scrollToBottom && hasPrevMessages) {
33222
+ if (loadingRef.current || messagesLoading === LOADING_STATE.LOADING || prevDisableRef.current) {
33223
+ shouldLoadMessagesRef.current = 'prev';
33224
+ } else {
33225
+ if (shouldLoadMessagesRef.current === 'prev') {
33226
+ shouldLoadMessagesRef.current = '';
33227
+ }
33228
+ loadDirectionRef.current = 'prev';
33229
+ handleLoadMoreMessages(MESSAGE_LOAD_DIRECTION.PREV, LOAD_MAX_MESSAGE_COUNT);
33230
+ if (!getHasPrevCached()) {
33231
+ loadFromServerRef.current = true;
32976
33232
  }
33233
+ nextDisableRef.current = true;
32977
33234
  }
32978
33235
  }
32979
- if (messagesIndexMap[lastVisibleMessageId] >= messages.length - 15 || target.scrollTop === 0) {
32980
- if (connectionStatus === CONNECTION_STATUS.CONNECTED && !scrollToNewMessage.scrollToBottom && (hasNextMessages || getHasNextCached())) {
32981
- if (loading || messagesLoading === LOADING_STATE.LOADING || nextDisable) {
32982
- shouldLoadMessages = 'next';
32983
- } else {
32984
- if (shouldLoadMessages === 'next') {
32985
- shouldLoadMessages = '';
32986
- }
32987
- loadDirection = 'next';
32988
- prevDisable = true;
32989
- handleLoadMoreMessages(MESSAGE_LOAD_DIRECTION.NEXT, LOAD_MAX_MESSAGE_COUNT);
33236
+ }
33237
+ if (hasIndex && currentIndex >= messages.length - 15 || target.scrollTop === 0) {
33238
+ if (connectionStatus === CONNECTION_STATUS.CONNECTED && !scrollToNewMessage.scrollToBottom && (hasNextMessages || getHasNextCached())) {
33239
+ if (loadingRef.current || messagesLoading === LOADING_STATE.LOADING || nextDisableRef.current) {
33240
+ shouldLoadMessagesRef.current = 'next';
33241
+ } else {
33242
+ if (shouldLoadMessagesRef.current === 'next') {
33243
+ shouldLoadMessagesRef.current = '';
32990
33244
  }
33245
+ loadDirectionRef.current = 'next';
33246
+ prevDisableRef.current = true;
33247
+ handleLoadMoreMessages(MESSAGE_LOAD_DIRECTION.NEXT, LOAD_MAX_MESSAGE_COUNT);
32991
33248
  }
32992
33249
  }
32993
- if (messagesIndexMap[lastVisibleMessageId] > messages.length - 10) {
32994
- nextDisable = false;
32995
- }
33250
+ }
33251
+ if (hasIndex && currentIndex > messages.length - 10) {
33252
+ nextDisableRef.current = false;
32996
33253
  }
32997
33254
  return Promise.resolve();
32998
33255
  } catch (e) {
32999
33256
  return Promise.reject(e);
33000
33257
  }
33001
- }, [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]);
33258
+ }, [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]);
33259
+ var onScroll = React.useCallback(function () {
33260
+ if (scrollRafRef.current !== null) return;
33261
+ scrollRafRef.current = window.requestAnimationFrame(function () {
33262
+ scrollRafRef.current = null;
33263
+ handleMessagesListScroll();
33264
+ });
33265
+ }, [handleMessagesListScroll]);
33266
+ React.useEffect(function () {
33267
+ return function () {
33268
+ if (scrollRafRef.current !== null) {
33269
+ cancelAnimationFrame(scrollRafRef.current);
33270
+ scrollRafRef.current = null;
33271
+ }
33272
+ };
33273
+ }, []);
33002
33274
  var handleScrollToRepliedMessage = function handleScrollToRepliedMessage(messageId) {
33003
33275
  try {
33004
- prevDisable = true;
33005
- nextDisable = true;
33276
+ prevDisableRef.current = true;
33277
+ nextDisableRef.current = true;
33006
33278
  if (messages.findIndex(function (msg) {
33007
33279
  return msg.id === messageId;
33008
33280
  }) >= 10) {
@@ -33016,8 +33288,8 @@ var MessageList = function MessageList(_ref2) {
33016
33288
  var positiveValue = repliedMessage.offsetTop - scrollRef.current.offsetHeight / 2 < 0 ? repliedMessage.offsetTop - scrollRef.current.offsetHeight * -1 : repliedMessage.offsetTop - scrollRef.current.offsetHeight / 2;
33017
33289
  setTimeout(function () {
33018
33290
  repliedMessage.classList.remove('highlight');
33019
- prevDisable = false;
33020
- nextDisable = false;
33291
+ prevDisableRef.current = false;
33292
+ nextDisableRef.current = false;
33021
33293
  }, 1000 + positiveValue * 0.1);
33022
33294
  }
33023
33295
  } else {
@@ -33038,10 +33310,10 @@ var MessageList = function MessageList(_ref2) {
33038
33310
  var hasNextCached = getHasNextCached();
33039
33311
  if (messagesLoading === LOADING_STATE.LOADED && connectionStatus === CONNECTION_STATUS.CONNECTED) {
33040
33312
  if (direction === MESSAGE_LOAD_DIRECTION.PREV && firstMessageId && (hasPrevMessages || hasPrevCached)) {
33041
- loading = true;
33313
+ loadingRef.current = true;
33042
33314
  dispatch(loadMoreMessagesAC(channel.id, limit, direction, firstMessageId, hasPrevMessages));
33043
33315
  } else if (direction === MESSAGE_LOAD_DIRECTION.NEXT && lastMessageId && (hasNextMessages || hasNextCached)) {
33044
- loading = true;
33316
+ loadingRef.current = true;
33045
33317
  dispatch(loadMoreMessagesAC(channel.id, limit, direction, lastMessageId, hasNextMessages));
33046
33318
  }
33047
33319
  }
@@ -33072,39 +33344,42 @@ var MessageList = function MessageList(_ref2) {
33072
33344
  setIsDragging(false);
33073
33345
  }
33074
33346
  };
33347
+ var readDroppedFiles = function readDroppedFiles(e) {
33348
+ return new Promise(function (resolve) {
33349
+ var fileList = Object.values(e.dataTransfer.files);
33350
+ var attachmentsFiles = [];
33351
+ var readFiles = 0;
33352
+ var errorCount = 0;
33353
+ fileList.forEach(function (attachment) {
33354
+ var fileReader = new FileReader();
33355
+ fileReader.onload = function (event) {
33356
+ var file = event.target.result;
33357
+ attachmentsFiles.push({
33358
+ name: attachment.name,
33359
+ data: file,
33360
+ type: attachment.type
33361
+ });
33362
+ readFiles++;
33363
+ if (readFiles + errorCount === fileList.length) {
33364
+ resolve(attachmentsFiles);
33365
+ }
33366
+ };
33367
+ fileReader.onerror = function () {
33368
+ errorCount++;
33369
+ if (readFiles + errorCount === fileList.length) {
33370
+ resolve(attachmentsFiles);
33371
+ }
33372
+ };
33373
+ fileReader.readAsDataURL(attachment);
33374
+ });
33375
+ });
33376
+ };
33075
33377
  var handleDropFile = function handleDropFile(e) {
33076
33378
  e.preventDefault();
33077
33379
  e.stopPropagation();
33078
33380
  setIsDragging(false);
33079
33381
  if (e.dataTransfer.files && e.dataTransfer.files.length > 0) {
33080
- var fileList = Object.values(e.dataTransfer.files);
33081
- new Promise(function (resolve) {
33082
- var attachmentsFiles = [];
33083
- var readFiles = 0;
33084
- var errorCount = 0;
33085
- fileList.forEach(function (attachment) {
33086
- var fileReader = new FileReader();
33087
- fileReader.onload = function (event) {
33088
- var file = event.target.result;
33089
- attachmentsFiles.push({
33090
- name: attachment.name,
33091
- data: file,
33092
- type: attachment.type
33093
- });
33094
- readFiles++;
33095
- if (readFiles + errorCount === fileList.length) {
33096
- resolve(attachmentsFiles);
33097
- }
33098
- };
33099
- fileReader.onerror = function () {
33100
- errorCount++;
33101
- if (readFiles + errorCount === fileList.length) {
33102
- resolve(attachmentsFiles);
33103
- }
33104
- };
33105
- fileReader.readAsDataURL(attachment);
33106
- });
33107
- }).then(function (result) {
33382
+ readDroppedFiles(e).then(function (result) {
33108
33383
  dispatch(setDraggedAttachmentsAC(result, 'file'));
33109
33384
  })["catch"](function (error) {
33110
33385
  console.error('Error in handleDropFile:', error);
@@ -33117,34 +33392,7 @@ var MessageList = function MessageList(_ref2) {
33117
33392
  e.stopPropagation();
33118
33393
  setIsDragging(false);
33119
33394
  if (e.dataTransfer.files && e.dataTransfer.files.length > 0) {
33120
- var fileList = Object.values(e.dataTransfer.files);
33121
- new Promise(function (resolve) {
33122
- var attachmentsFiles = [];
33123
- var readFiles = 0;
33124
- var errorCount = 0;
33125
- fileList.forEach(function (attachment) {
33126
- var fileReader = new FileReader();
33127
- fileReader.onload = function (event) {
33128
- var file = event.target.result;
33129
- attachmentsFiles.push({
33130
- name: attachment.name,
33131
- data: file,
33132
- type: attachment.type
33133
- });
33134
- readFiles++;
33135
- if (readFiles + errorCount === fileList.length) {
33136
- resolve(attachmentsFiles);
33137
- }
33138
- };
33139
- fileReader.onerror = function () {
33140
- errorCount++;
33141
- if (readFiles + errorCount === fileList.length) {
33142
- resolve(attachmentsFiles);
33143
- }
33144
- };
33145
- fileReader.readAsDataURL(attachment);
33146
- });
33147
- }).then(function (result) {
33395
+ readDroppedFiles(e).then(function (result) {
33148
33396
  dispatch(setDraggedAttachmentsAC(result, 'media'));
33149
33397
  })["catch"](function (error) {
33150
33398
  console.error('Error in handleDropMedia:', error);
@@ -33156,21 +33404,21 @@ var MessageList = function MessageList(_ref2) {
33156
33404
  var _messages, _channel$lastMessage2;
33157
33405
  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) {
33158
33406
  dispatch(showScrollToNewMessageButtonAC(false));
33159
- prevDisable = false;
33407
+ prevDisableRef.current = false;
33160
33408
  }
33161
33409
  }, [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]);
33162
33410
  React.useEffect(function () {
33163
33411
  if (scrollToRepliedMessage) {
33164
- loading = false;
33412
+ loadingRef.current = false;
33165
33413
  scrollRef.current.style.scrollBehavior = 'inherit';
33166
33414
  var repliedMessage = document.getElementById(scrollToRepliedMessage);
33167
33415
  if (repliedMessage) {
33168
33416
  setScrollToReply(repliedMessage && repliedMessage.offsetTop - (channel.backToLinkedChannel ? 0 : 200));
33169
33417
  scrollRef.current.scrollTo({
33170
33418
  top: repliedMessage && repliedMessage.offsetTop - (channel.backToLinkedChannel ? 0 : 200),
33171
- behavior: 'smooth'
33419
+ behavior: scrollToMessageBehavior
33172
33420
  });
33173
- scrollRef.current.style.scrollBehavior = 'smooth';
33421
+ scrollRef.current.style.scrollBehavior = scrollToMessageBehavior;
33174
33422
  if (!channel.backToLinkedChannel && scrollToMessageHighlight) {
33175
33423
  repliedMessage && repliedMessage.classList.add('highlight');
33176
33424
  }
@@ -33180,9 +33428,9 @@ var MessageList = function MessageList(_ref2) {
33180
33428
  var _repliedMessage = document.getElementById(scrollToRepliedMessage);
33181
33429
  _repliedMessage && _repliedMessage.classList.remove('highlight');
33182
33430
  }
33183
- prevDisable = false;
33431
+ prevDisableRef.current = false;
33184
33432
  setScrollToReply(null);
33185
- scrollRef.current.style.scrollBehavior = 'smooth';
33433
+ scrollRef.current.style.scrollBehavior = 'instant';
33186
33434
  }, 1000 + positiveValue * 0.1);
33187
33435
  }
33188
33436
  dispatch(setScrollToMessagesAC(null));
@@ -33198,15 +33446,15 @@ var MessageList = function MessageList(_ref2) {
33198
33446
  });
33199
33447
  }
33200
33448
  } else {
33201
- nextDisable = true;
33202
- prevDisable = true;
33449
+ nextDisableRef.current = true;
33450
+ prevDisableRef.current = true;
33203
33451
  scrollRef.current.scrollTo({
33204
33452
  top: 0,
33205
33453
  behavior: 'smooth'
33206
33454
  });
33207
33455
  dispatch(showScrollToNewMessageButtonAC(false));
33208
33456
  setTimeout(function () {
33209
- prevDisable = false;
33457
+ prevDisableRef.current = false;
33210
33458
  }, 800);
33211
33459
  }
33212
33460
  }
@@ -33224,11 +33472,18 @@ var MessageList = function MessageList(_ref2) {
33224
33472
  React.useEffect(function () {
33225
33473
  setHasNextCached(false);
33226
33474
  setHasPrevCached(false);
33475
+ messagesIndexMapRef.current = {};
33476
+ loadFromServerRef.current = false;
33477
+ loadDirectionRef.current = '';
33478
+ nextDisableRef.current = false;
33479
+ prevDisableRef.current = false;
33480
+ shouldLoadMessagesRef.current = '';
33481
+ loadingRef.current = false;
33227
33482
  if (channel.backToLinkedChannel) {
33228
33483
  var visibleMessages = getVisibleMessagesMap();
33229
33484
  var visibleMessagesIds = Object.keys(visibleMessages);
33230
33485
  var messageId = visibleMessagesIds[visibleMessagesIds.length - 1];
33231
- dispatch(getMessagesAC(channel, undefined, messageId));
33486
+ dispatch(getMessagesAC(channel, undefined, messageId, undefined, undefined, undefined, 'instant'));
33232
33487
  setUnreadMessageId(messageId);
33233
33488
  } else {
33234
33489
  if (!channel.isLinkedChannel) {
@@ -33251,9 +33506,9 @@ var MessageList = function MessageList(_ref2) {
33251
33506
  }
33252
33507
  setPreviousScrollTop(0);
33253
33508
  setShouldPreserveScroll(false);
33254
- nextDisable = false;
33255
- prevDisable = false;
33256
- scrollToBottom = true;
33509
+ nextDisableRef.current = false;
33510
+ prevDisableRef.current = false;
33511
+ scrollToBottomRef.current = true;
33257
33512
  setAllowEditDeleteIncomingMessage(allowEditDeleteIncomingMessage);
33258
33513
  }, [channel.id]);
33259
33514
  React.useEffect(function () {
@@ -33268,7 +33523,7 @@ var MessageList = function MessageList(_ref2) {
33268
33523
  setUnreadMessageId('');
33269
33524
  }
33270
33525
  }
33271
- }, [messages]);
33526
+ }, [messages, hiddenMessagesProperties, user === null || user === void 0 ? void 0 : user.id]);
33272
33527
  React.useEffect(function () {
33273
33528
  if (scrollRef.current) {
33274
33529
  var isAtBottom = scrollRef.current.scrollTop > -50;
@@ -33277,35 +33532,40 @@ var MessageList = function MessageList(_ref2) {
33277
33532
  setShouldPreserveScroll(true);
33278
33533
  }
33279
33534
  }
33280
- if (loading) {
33281
- if (loadDirection !== 'next') {
33535
+ if (loadingRef.current) {
33536
+ if (loadDirectionRef.current !== 'next') {
33282
33537
  var lastVisibleMessage = document.getElementById(lastVisibleMessageId);
33283
33538
  if (lastVisibleMessage) {
33284
33539
  scrollRef.current.style.scrollBehavior = 'inherit';
33285
33540
  scrollRef.current.scrollTop = lastVisibleMessage.offsetTop;
33286
33541
  scrollRef.current.style.scrollBehavior = 'smooth';
33287
33542
  }
33288
- if (loadFromServer) {
33289
- setTimeout(function () {
33290
- loading = false;
33291
- loadFromServer = false;
33292
- nextDisable = false;
33293
- if (shouldLoadMessages === 'prev' && messagesIndexMap[lastVisibleMessageId] < 15) {
33543
+ if (loadFromServerRef.current) {
33544
+ var timeout = setTimeout(function () {
33545
+ loadingRef.current = false;
33546
+ loadFromServerRef.current = false;
33547
+ nextDisableRef.current = false;
33548
+ var currentIndex = messagesIndexMapRef.current[lastVisibleMessageId];
33549
+ if (shouldLoadMessagesRef.current === 'prev' && typeof currentIndex === 'number' && currentIndex < 15) {
33294
33550
  handleLoadMoreMessages(MESSAGE_LOAD_DIRECTION.PREV, LOAD_MAX_MESSAGE_COUNT);
33295
33551
  }
33296
- if (shouldLoadMessages === 'next' && messagesIndexMap[lastVisibleMessageId] > messages.length - 15) {
33552
+ if (shouldLoadMessagesRef.current === 'next' && typeof currentIndex === 'number' && currentIndex > messages.length - 15) {
33297
33553
  handleLoadMoreMessages(MESSAGE_LOAD_DIRECTION.NEXT, LOAD_MAX_MESSAGE_COUNT);
33298
33554
  }
33299
33555
  }, 50);
33556
+ if (loadingMessagesTimeoutRef.current) {
33557
+ clearTimeout(loadingMessagesTimeoutRef.current);
33558
+ }
33559
+ loadingMessagesTimeoutRef.current = timeout;
33300
33560
  } else {
33301
- loading = false;
33302
- if (shouldLoadMessages === 'prev') {
33561
+ loadingRef.current = false;
33562
+ if (shouldLoadMessagesRef.current === 'prev') {
33303
33563
  handleLoadMoreMessages(MESSAGE_LOAD_DIRECTION.PREV, LOAD_MAX_MESSAGE_COUNT);
33304
- shouldLoadMessages = '';
33564
+ shouldLoadMessagesRef.current = '';
33305
33565
  }
33306
- if (shouldLoadMessages === 'next') {
33566
+ if (shouldLoadMessagesRef.current === 'next') {
33307
33567
  handleLoadMoreMessages(MESSAGE_LOAD_DIRECTION.NEXT, LOAD_MAX_MESSAGE_COUNT);
33308
- shouldLoadMessages = '';
33568
+ shouldLoadMessagesRef.current = '';
33309
33569
  }
33310
33570
  }
33311
33571
  } else {
@@ -33315,22 +33575,26 @@ var MessageList = function MessageList(_ref2) {
33315
33575
  scrollRef.current.scrollTop = _lastVisibleMessage.offsetTop - scrollRef.current.offsetHeight + _lastVisibleMessage.offsetHeight;
33316
33576
  scrollRef.current.style.scrollBehavior = 'smooth';
33317
33577
  }
33318
- loading = false;
33319
- prevDisable = false;
33320
- if (shouldLoadMessages === 'prev') {
33578
+ loadingRef.current = false;
33579
+ prevDisableRef.current = false;
33580
+ if (shouldLoadMessagesRef.current === 'prev') {
33321
33581
  handleLoadMoreMessages(MESSAGE_LOAD_DIRECTION.PREV, LOAD_MAX_MESSAGE_COUNT);
33322
- shouldLoadMessages = '';
33582
+ shouldLoadMessagesRef.current = '';
33323
33583
  }
33324
- if (shouldLoadMessages === 'next') {
33584
+ if (shouldLoadMessagesRef.current === 'next') {
33325
33585
  handleLoadMoreMessages(MESSAGE_LOAD_DIRECTION.NEXT, LOAD_MAX_MESSAGE_COUNT);
33326
- shouldLoadMessages = '';
33586
+ shouldLoadMessagesRef.current = '';
33327
33587
  }
33328
33588
  }
33329
33589
  }
33330
33590
  renderTopDate();
33331
- if (scrollToBottom) {
33332
- dispatch(scrollToNewMessageAC(true));
33333
- scrollToBottom = false;
33591
+ if (scrollToBottomRef.current) {
33592
+ if (channel.backToLinkedChannel) {
33593
+ dispatch(scrollToNewMessageAC(false));
33594
+ } else {
33595
+ dispatch(scrollToNewMessageAC(true));
33596
+ }
33597
+ scrollToBottomRef.current = false;
33334
33598
  }
33335
33599
  if (shouldPreserveScroll && scrollRef.current && previousScrollTop > 0) {
33336
33600
  requestAnimationFrame(function () {
@@ -33343,13 +33607,43 @@ var MessageList = function MessageList(_ref2) {
33343
33607
  setPreviousScrollTop(0);
33344
33608
  });
33345
33609
  }
33610
+ return function () {
33611
+ if (loadingMessagesTimeoutRef.current) {
33612
+ clearTimeout(loadingMessagesTimeoutRef.current);
33613
+ }
33614
+ };
33346
33615
  }, [messages]);
33616
+ React.useEffect(function () {
33617
+ if (messagesLoading === LOADING_STATE.LOADED) {
33618
+ var timeout = setTimeout(function () {
33619
+ loadingRef.current = false;
33620
+ loadFromServerRef.current = false;
33621
+ nextDisableRef.current = false;
33622
+ var currentIndex = messagesIndexMapRef.current[lastVisibleMessageId];
33623
+ if (shouldLoadMessagesRef.current === 'prev' && typeof currentIndex === 'number' && currentIndex < 15) {
33624
+ handleLoadMoreMessages(MESSAGE_LOAD_DIRECTION.PREV, LOAD_MAX_MESSAGE_COUNT);
33625
+ }
33626
+ if (shouldLoadMessagesRef.current === 'next' && typeof currentIndex === 'number' && currentIndex > messages.length - 15) {
33627
+ handleLoadMoreMessages(MESSAGE_LOAD_DIRECTION.NEXT, LOAD_MAX_MESSAGE_COUNT);
33628
+ }
33629
+ }, 50);
33630
+ if (loadingMessagesTimeoutRef.current) {
33631
+ clearTimeout(loadingMessagesTimeoutRef.current);
33632
+ }
33633
+ loadingMessagesTimeoutRef.current = timeout;
33634
+ }
33635
+ return function () {
33636
+ if (loadingMessagesTimeoutRef.current) {
33637
+ clearTimeout(loadingMessagesTimeoutRef.current);
33638
+ }
33639
+ };
33640
+ }, [messagesLoading, messages, lastVisibleMessageId]);
33347
33641
  React.useEffect(function () {
33348
33642
  log.info('connection status is changed.. .... ', connectionStatus, 'channel ... ', channel);
33349
33643
  if (connectionStatus === CONNECTION_STATUS.CONNECTED) {
33350
- loading = false;
33351
- prevDisable = false;
33352
- nextDisable = false;
33644
+ loadingRef.current = false;
33645
+ prevDisableRef.current = false;
33646
+ nextDisableRef.current = false;
33353
33647
  clearMessagesMap();
33354
33648
  removeAllMessages();
33355
33649
  if (channel.id) {
@@ -33358,7 +33652,8 @@ var MessageList = function MessageList(_ref2) {
33358
33652
  }
33359
33653
  }, [connectionStatus]);
33360
33654
  React.useEffect(function () {
33361
- if (channel.newMessageCount && channel.newMessageCount > 0 && getUnreadScrollTo()) {
33655
+ var unreadScrollTo = getUnreadScrollTo();
33656
+ if (channel.newMessageCount && channel.newMessageCount > 0 && unreadScrollTo) {
33362
33657
  if (scrollRef.current) {
33363
33658
  scrollRef.current.style.scrollBehavior = 'inherit';
33364
33659
  }
@@ -33371,7 +33666,14 @@ var MessageList = function MessageList(_ref2) {
33371
33666
  setUnreadScrollTo(false);
33372
33667
  }
33373
33668
  }
33374
- });
33669
+ }, [channel.id, channel.newMessageCount, channel.lastDisplayedMessageId]);
33670
+ React.useEffect(function () {
33671
+ return function () {
33672
+ if (hideTopDateTimeout.current) {
33673
+ clearTimeout(hideTopDateTimeout.current);
33674
+ }
33675
+ };
33676
+ }, []);
33375
33677
  return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, isDragging && !(attachmentsPreview !== null && attachmentsPreview !== void 0 && attachmentsPreview.show && mediaFile) && (/*#__PURE__*/React__default.createElement(DragAndDropContainer, {
33376
33678
  id: 'draggingContainer',
33377
33679
  draggable: true,
@@ -33414,14 +33716,12 @@ var MessageList = function MessageList(_ref2) {
33414
33716
  dateDividerBackgroundColor: dateDividerBackgroundColor || overlayBackground,
33415
33717
  dateDividerBorderRadius: dateDividerBorderRadius,
33416
33718
  topOffset: scrollRef && scrollRef.current && scrollRef.current.offsetTop
33417
- }, /*#__PURE__*/React__default.createElement("span", {
33418
- ref: messageTopDateRef
33419
- }))), /*#__PURE__*/React__default.createElement(Container$h, {
33719
+ }, /*#__PURE__*/React__default.createElement("span", null, topDateLabel))), /*#__PURE__*/React__default.createElement(Container$h, {
33420
33720
  id: 'scrollableDiv',
33421
33721
  className: isScrolling ? 'show-scrollbar' : '',
33422
33722
  ref: scrollRef,
33423
33723
  stopScrolling: stopScrolling,
33424
- onScroll: handleMessagesListScroll,
33724
+ onScroll: onScroll,
33425
33725
  onMouseEnter: function onMouseEnter() {
33426
33726
  return setIsScrolling(true);
33427
33727
  },
@@ -33440,8 +33740,10 @@ var MessageList = function MessageList(_ref2) {
33440
33740
  var prevMessage = messages[index - 1];
33441
33741
  var nextMessage = messages[index + 1];
33442
33742
  var isUnreadMessage = !!(unreadMessageId && unreadMessageId === message.id && nextMessage) && !channel.backToLinkedChannel;
33443
- messagesIndexMap[message.id] = index;
33444
- return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(CreateMessageDateDivider, {
33743
+ messagesIndexMapRef.current[message.id] = index;
33744
+ return /*#__PURE__*/React__default.createElement(React__default.Fragment, {
33745
+ key: message.id || message.tid
33746
+ }, /*#__PURE__*/React__default.createElement(CreateMessageDateDivider, {
33445
33747
  noMargin: !isUnreadMessage && prevMessage && prevMessage.type === 'system' && message.type !== 'system',
33446
33748
  theme: theme,
33447
33749
  lastIndex: false,
@@ -36135,8 +36437,12 @@ var AudioRecord = function AudioRecord(_ref) {
36135
36437
  }
36136
36438
  }, [currentRecordedFile]);
36137
36439
  React.useEffect(function () {
36440
+ if (!showRecording) {
36441
+ setCurrentTime(0);
36442
+ }
36138
36443
  return function () {
36139
36444
  handleStopRecording();
36445
+ setCurrentTime(0);
36140
36446
  };
36141
36447
  }, [showRecording]);
36142
36448
  React.useEffect(function () {
@@ -37376,7 +37682,7 @@ var SendMessageInput = function SendMessageInput(_ref3) {
37376
37682
  if (attachments.length) {
37377
37683
  var videoAttachment = false;
37378
37684
  attachments.forEach(function (att) {
37379
- if (att.type === 'video' || att.data.type.split('/')[0] === 'video') {
37685
+ if ((att.type === 'video' || att.data.type.split('/')[0] === 'video') && att.type !== 'file') {
37380
37686
  videoAttachment = true;
37381
37687
  if (!readyVideoAttachments[att.tid]) {
37382
37688
  setSendMessageIsActive(false);
@@ -38220,7 +38526,6 @@ function SvgUnpin(props) {
38220
38526
 
38221
38527
  var _templateObject$K, _templateObject2$F, _templateObject3$y, _templateObject4$t, _templateObject5$p, _templateObject6$l, _templateObject7$j, _templateObject8$h, _templateObject9$e, _templateObject0$d, _templateObject1$a, _templateObject10$6, _templateObject11$6, _templateObject12$5, _templateObject13$4, _templateObject14$3, _templateObject15$3, _templateObject16$3;
38222
38528
  var Actions = function Actions(_ref) {
38223
- var _channel$metadata;
38224
38529
  var setActionsHeight = _ref.setActionsHeight,
38225
38530
  channel = _ref.channel,
38226
38531
  actionMenuOpen = _ref.actionMenuOpen,
@@ -38338,7 +38643,7 @@ var Actions = function Actions(_ref) {
38338
38643
  var twoHours = oneHour * 2;
38339
38644
  var oneDay = oneHour * 24;
38340
38645
  var isDirectChannel = channel.type === DEFAULT_CHANNEL_TYPE.DIRECT;
38341
- var isSelfChannel = isDirectChannel && ((_channel$metadata = channel.metadata) === null || _channel$metadata === void 0 ? void 0 : _channel$metadata.s);
38646
+ var isSelfChannel = isDirectChannel && channel.memberCount === 1 && channel.members.length > 0 && channel.members[0].id === user.id;
38342
38647
  var directChannelUser = isDirectChannel && channel.members.find(function (member) {
38343
38648
  return member.id !== user.id;
38344
38649
  });
@@ -40245,7 +40550,7 @@ var EditChannel = function EditChannel(_ref) {
40245
40550
 
40246
40551
  var _templateObject$V, _templateObject2$O, _templateObject3$F, _templateObject4$z, _templateObject5$u, _templateObject6$p, _templateObject7$n, _templateObject8$l, _templateObject9$g, _templateObject0$e, _templateObject1$b, _templateObject10$7;
40247
40552
  var Details = function Details(_ref) {
40248
- var _activeChannel$metada, _activeChannel$member;
40553
+ var _activeChannel$member;
40249
40554
  var detailsTitleText = _ref.detailsTitleText,
40250
40555
  editDetailsTitleText = _ref.editDetailsTitleText,
40251
40556
  detailsTitleFontSize = _ref.detailsTitleFontSize,
@@ -40400,7 +40705,7 @@ var Details = function Details(_ref) {
40400
40705
  var detailsHeaderRef = React.useRef(null);
40401
40706
  var openTimeOut = React.useRef(null);
40402
40707
  var isDirectChannel = activeChannel && activeChannel.type === DEFAULT_CHANNEL_TYPE.DIRECT;
40403
- var isSelfChannel = isDirectChannel && ((_activeChannel$metada = activeChannel.metadata) === null || _activeChannel$metada === void 0 ? void 0 : _activeChannel$metada.s);
40708
+ var isSelfChannel = isDirectChannel && activeChannel.memberCount === 1 && activeChannel.members.length > 0 && activeChannel.members[0].id === user.id;
40404
40709
  var memberDisplayText = getChannelTypesMemberDisplayTextMap();
40405
40710
  var displayMemberText = memberDisplayText && (memberDisplayText[activeChannel.type] ? activeChannel.memberCount > 1 ? memberDisplayText[activeChannel.type] + "s" : memberDisplayText[activeChannel.type] : activeChannel.type === DEFAULT_CHANNEL_TYPE.BROADCAST || activeChannel.type === DEFAULT_CHANNEL_TYPE.PUBLIC ? activeChannel.memberCount > 1 ? 'subscribers' : 'subscriber' : activeChannel.memberCount > 1 ? 'members' : 'member');
40406
40711
  var directChannelUser = isDirectChannel && (activeChannel.members.find(function (member) {
@@ -40514,7 +40819,7 @@ var Details = function Details(_ref) {
40514
40819
  color: textSecondary,
40515
40820
  fontSize: channelMembersFontSize,
40516
40821
  lineHeight: channelMembersLineHeight
40517
- }, 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, {
40822
+ }, 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, {
40518
40823
  color: textSecondary,
40519
40824
  fontSize: channelMembersFontSize,
40520
40825
  lineHeight: channelMembersLineHeight
@@ -40968,10 +41273,10 @@ var MessagesScrollToBottomButton = function MessagesScrollToBottomButton(_ref) {
40968
41273
  };
40969
41274
  var handleScrollToLastMessage = function handleScrollToLastMessage(messageId) {
40970
41275
  try {
40971
- dispatch(scrollToNewMessageAC(true, false, false));
40972
41276
  if (messages.findIndex(function (msg) {
40973
41277
  return msg.id === messageId;
40974
41278
  }) >= 10) {
41279
+ dispatch(scrollToNewMessageAC(true, false, false));
40975
41280
  dispatch(setMessagesLoadingStateAC(LOADING_STATE.LOADING));
40976
41281
  var repliedMessage = document.getElementById(messageId);
40977
41282
  if (repliedMessage) {