sceyt-chat-react-uikit 1.7.1-beta.16 → 1.7.1-beta.17

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.
Files changed (3) hide show
  1. package/index.js +203 -174
  2. package/index.modern.js +203 -174
  3. package/package.json +1 -1
package/index.modern.js CHANGED
@@ -10319,6 +10319,7 @@ var initialState$1 = {
10319
10319
  attachmentsUploadingState: {},
10320
10320
  scrollToMessage: null,
10321
10321
  scrollToMessageHighlight: true,
10322
+ scrollToMessageBehavior: 'smooth',
10322
10323
  scrollToMentionedMessage: false,
10323
10324
  reactionsList: [],
10324
10325
  reactionsHasNext: true,
@@ -10345,6 +10346,7 @@ var messageSlice = createSlice({
10345
10346
  setScrollToMessage: function setScrollToMessage(state, action) {
10346
10347
  state.scrollToMessage = action.payload.messageId;
10347
10348
  state.scrollToMessageHighlight = action.payload.highlight;
10349
+ state.scrollToMessageBehavior = action.payload.behavior || 'smooth';
10348
10350
  },
10349
10351
  setScrollToMentionedMessage: function setScrollToMentionedMessage(state, action) {
10350
10352
  state.scrollToMentionedMessage = action.payload.isScrollToMentionedMessage;
@@ -11596,7 +11598,7 @@ function setMessageToEditAC(message) {
11596
11598
  message: message
11597
11599
  });
11598
11600
  }
11599
- function getMessagesAC(channel, loadWithLastMessage, messageId, limit, withDeliveredMessages, highlight) {
11601
+ function getMessagesAC(channel, loadWithLastMessage, messageId, limit, withDeliveredMessages, highlight, behavior) {
11600
11602
  if (highlight === void 0) {
11601
11603
  highlight = true;
11602
11604
  }
@@ -11608,7 +11610,8 @@ function getMessagesAC(channel, loadWithLastMessage, messageId, limit, withDeliv
11608
11610
  messageId: messageId,
11609
11611
  limit: limit,
11610
11612
  withDeliveredMessages: withDeliveredMessages,
11611
- highlight: highlight
11613
+ highlight: highlight,
11614
+ behavior: behavior
11612
11615
  }
11613
11616
  };
11614
11617
  }
@@ -11622,13 +11625,14 @@ function getMessageAC(channelId, messageId, limit) {
11622
11625
  }
11623
11626
  };
11624
11627
  }
11625
- function setScrollToMessagesAC(messageId, highlight) {
11628
+ function setScrollToMessagesAC(messageId, highlight, behavior) {
11626
11629
  if (highlight === void 0) {
11627
11630
  highlight = true;
11628
11631
  }
11629
11632
  return setScrollToMessage({
11630
11633
  messageId: messageId || '',
11631
- highlight: highlight
11634
+ highlight: highlight,
11635
+ behavior: behavior
11632
11636
  });
11633
11637
  }
11634
11638
  function setScrollToMentionedMessageAC(isScrollToMentionedMessage) {
@@ -17089,6 +17093,9 @@ var scrollToMessageSelector = function scrollToMessageSelector(store) {
17089
17093
  var scrollToMessageHighlightSelector = function scrollToMessageHighlightSelector(store) {
17090
17094
  return store.MessageReducer.scrollToMessageHighlight;
17091
17095
  };
17096
+ var scrollToMessageBehaviorSelector = function scrollToMessageBehaviorSelector(store) {
17097
+ return store.MessageReducer.scrollToMessageBehavior;
17098
+ };
17092
17099
  var reactionsListSelector = function reactionsListSelector(store) {
17093
17100
  return store.MessageReducer.reactionsList;
17094
17101
  };
@@ -18482,7 +18489,7 @@ function editMessage(action) {
18482
18489
  }, _marked6$1, null, [[0, 5]]);
18483
18490
  }
18484
18491
  function getMessagesQuery(action) {
18485
- 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;
18492
+ 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;
18486
18493
  return _regenerator().w(function (_context9) {
18487
18494
  while (1) switch (_context9.p = _context9.n) {
18488
18495
  case 0:
@@ -18490,7 +18497,7 @@ function getMessagesQuery(action) {
18490
18497
  _context9.n = 1;
18491
18498
  return put(setMessagesLoadingStateAC(LOADING_STATE.LOADING));
18492
18499
  case 1:
18493
- _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;
18500
+ _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;
18494
18501
  if (!(channel.id && !channel.isMockChannel)) {
18495
18502
  _context9.n = 47;
18496
18503
  break;
@@ -18576,7 +18583,7 @@ function getMessagesQuery(action) {
18576
18583
  break;
18577
18584
  }
18578
18585
  _context9.n = 12;
18579
- return put(setScrollToMessagesAC(messageId, highlight));
18586
+ return put(setScrollToMessagesAC(messageId, highlight, behavior));
18580
18587
  case 12:
18581
18588
  _context9.n = 45;
18582
18589
  break;
@@ -18639,7 +18646,7 @@ function getMessagesQuery(action) {
18639
18646
  setHasNextCached(false);
18640
18647
  case 22:
18641
18648
  _context9.n = 23;
18642
- return put(setScrollToMessagesAC(messageId));
18649
+ return put(setScrollToMessagesAC(messageId, true, behavior));
18643
18650
  case 23:
18644
18651
  _context9.n = 24;
18645
18652
  return put(setMessagesLoadingStateAC(LOADING_STATE.LOADED));
@@ -26121,6 +26128,7 @@ var Message = function Message(_ref) {
26121
26128
  var _useColor = useColors(),
26122
26129
  textOnPrimary = _useColor[THEME_COLORS.TEXT_ON_PRIMARY],
26123
26130
  overlayBackground = _useColor[THEME_COLORS.OVERLAY_BACKGROUND];
26131
+ var scrollToNewMessage = useSelector(scrollToNewMessageSelector);
26124
26132
  var dispatch = useDispatch();
26125
26133
  var ChatClient = getClient();
26126
26134
  var user = ChatClient.user;
@@ -26139,7 +26147,19 @@ var Message = function Message(_ref) {
26139
26147
  };
26140
26148
  useEffect(function () {
26141
26149
  if (isVisible) {
26150
+ var _channel$lastMessage;
26142
26151
  handleSendReadMarker();
26152
+ if (!channel.isLinkedChannel) {
26153
+ setMessageToVisibleMessagesMap(message);
26154
+ }
26155
+ 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))) {
26156
+ dispatch(scrollToNewMessageAC(false, false, false));
26157
+ dispatch(setMessagesLoadingStateAC(LOADING_STATE.LOADED));
26158
+ }
26159
+ } else {
26160
+ if (!channel.isLinkedChannel) {
26161
+ removeMessageFromVisibleMessagesMap(message);
26162
+ }
26143
26163
  }
26144
26164
  }, [isVisible]);
26145
26165
  useDidUpdate(function () {
@@ -32792,14 +32812,6 @@ var HiddenMessageProperty;
32792
32812
  })(HiddenMessageProperty || (HiddenMessageProperty = {}));
32793
32813
 
32794
32814
  var _templateObject$D, _templateObject2$y, _templateObject3$s, _templateObject4$o, _templateObject5$k, _templateObject6$h, _templateObject7$f, _templateObject8$e, _templateObject9$c, _templateObject0$b, _templateObject1$8;
32795
- var loadFromServer = false;
32796
- var loadDirection = '';
32797
- var nextDisable = false;
32798
- var prevDisable = false;
32799
- var scrollToBottom = false;
32800
- var shouldLoadMessages;
32801
- var loading = false;
32802
- var messagesIndexMap = {};
32803
32815
  var CreateMessageDateDivider = function CreateMessageDateDivider(_ref) {
32804
32816
  var lastIndex = _ref.lastIndex,
32805
32817
  currentMessageDate = _ref.currentMessageDate,
@@ -33009,6 +33021,7 @@ var MessageList = function MessageList(_ref2) {
33009
33021
  var scrollToMentionedMessage = useSelector(scrollToMentionedMessageSelector, shallowEqual);
33010
33022
  var scrollToRepliedMessage = useSelector(scrollToMessageSelector, shallowEqual);
33011
33023
  var scrollToMessageHighlight = useSelector(scrollToMessageHighlightSelector, shallowEqual);
33024
+ var scrollToMessageBehavior = useSelector(scrollToMessageBehaviorSelector, shallowEqual);
33012
33025
  var browserTabIsActive = useSelector(browserTabIsActiveSelector, shallowEqual);
33013
33026
  var hasNextMessages = useSelector(messagesHasNextSelector, shallowEqual);
33014
33027
  var hasPrevMessages = useSelector(messagesHasPrevSelector, shallowEqual);
@@ -33049,35 +33062,39 @@ var MessageList = function MessageList(_ref2) {
33049
33062
  setShouldPreserveScroll = _useState0[1];
33050
33063
  var messageForReply = {};
33051
33064
  var attachmentsSelected = false;
33052
- var messageTopDateRef = useRef(null);
33065
+ var _useState1 = useState(''),
33066
+ topDateLabel = _useState1[0],
33067
+ setTopDateLabel = _useState1[1];
33053
33068
  var scrollRef = useRef(null);
33069
+ var loadFromServerRef = useRef(false);
33070
+ var loadDirectionRef = useRef('');
33071
+ var nextDisableRef = useRef(false);
33072
+ var prevDisableRef = useRef(false);
33073
+ var scrollToBottomRef = useRef(false);
33074
+ var shouldLoadMessagesRef = useRef('');
33075
+ var loadingRef = useRef(false);
33076
+ var messagesIndexMapRef = useRef({});
33077
+ var scrollRafRef = useRef(null);
33054
33078
  var renderTopDate = function renderTopDate() {
33055
- var dateLabels = document.querySelectorAll('.divider');
33056
- var messageTopDate = messageTopDateRef.current;
33079
+ var container = scrollRef.current;
33080
+ if (!container) return;
33081
+ var dateLabels = container.querySelectorAll('.divider');
33057
33082
  var text = '';
33058
33083
  for (var i = dateLabels.length - 1; i >= 0; i--) {
33059
- var _dateLabel$firstChild;
33060
33084
  var dateLabel = dateLabels[i];
33061
- var span = dateLabel === null || dateLabel === void 0 ? void 0 : (_dateLabel$firstChild = dateLabel.firstChild) === null || _dateLabel$firstChild === void 0 ? void 0 : _dateLabel$firstChild.firstChild;
33062
- if (!text && scrollRef.current.scrollTop > dateLabel.offsetTop) {
33063
- text = span && span.innerText;
33064
- span.style.display = 'none';
33065
- } else {
33066
- span.style.display = 'block';
33085
+ if (!text && container.scrollTop > dateLabel.offsetTop) {
33086
+ var span = (dateLabel === null || dateLabel === void 0 ? void 0 : dateLabel.firstChild) && dateLabel.firstChild.firstChild;
33087
+ text = span ? span.innerText || '' : '';
33067
33088
  }
33068
33089
  }
33069
- if (text) {
33070
- messageTopDate.innerText = text;
33071
- messageTopDate.style.display = 'inline';
33072
- } else {
33073
- messageTopDate.style.display = 'none';
33074
- }
33090
+ setTopDateLabel(text);
33075
33091
  };
33076
- var handleMessagesListScroll = useCallback(function (event) {
33092
+ var handleMessagesListScroll = useCallback(function () {
33077
33093
  try {
33094
+ var target = scrollRef.current;
33095
+ if (!target) return Promise.resolve();
33078
33096
  if (scrollToMentionedMessage) {
33079
- var _target = event.target;
33080
- if (_target.scrollTop <= -50 || channel.lastMessage.id !== messages[messages.length - 1].id) {
33097
+ if (target.scrollTop <= -50 || channel.lastMessage.id !== messages[messages.length - 1].id) {
33081
33098
  dispatch(showScrollToNewMessageButtonAC(true));
33082
33099
  } else {
33083
33100
  dispatch(showScrollToNewMessageButtonAC(false));
@@ -33090,7 +33107,6 @@ var MessageList = function MessageList(_ref2) {
33090
33107
  setShowTopDate(false);
33091
33108
  }, 1000);
33092
33109
  renderTopDate();
33093
- var target = event.target;
33094
33110
  var forceLoadPrevMessages = false;
33095
33111
  if (-target.scrollTop + target.offsetHeight + 30 > target.scrollHeight) {
33096
33112
  forceLoadPrevMessages = true;
@@ -33105,51 +33121,68 @@ var MessageList = function MessageList(_ref2) {
33105
33121
  }
33106
33122
  if (scrollToReply) {
33107
33123
  target.scrollTop = scrollToReply;
33108
- } else {
33109
- if (messagesIndexMap[lastVisibleMessageId] < 15 || forceLoadPrevMessages) {
33110
- if (connectionStatus === CONNECTION_STATUS.CONNECTED && !scrollToNewMessage.scrollToBottom && hasPrevMessages) {
33111
- if (loading || messagesLoading === LOADING_STATE.LOADING || prevDisable) {
33112
- shouldLoadMessages = 'prev';
33113
- } else {
33114
- if (shouldLoadMessages === 'prev') {
33115
- shouldLoadMessages = '';
33116
- }
33117
- loadDirection = 'prev';
33118
- handleLoadMoreMessages(MESSAGE_LOAD_DIRECTION.PREV, LOAD_MAX_MESSAGE_COUNT);
33119
- if (!getHasPrevCached()) {
33120
- loadFromServer = true;
33121
- }
33122
- nextDisable = true;
33124
+ return Promise.resolve();
33125
+ }
33126
+ var currentIndex = messagesIndexMapRef.current[lastVisibleMessageId];
33127
+ var hasIndex = typeof currentIndex === 'number';
33128
+ if (hasIndex && currentIndex < 15 || forceLoadPrevMessages) {
33129
+ if (connectionStatus === CONNECTION_STATUS.CONNECTED && !scrollToNewMessage.scrollToBottom && hasPrevMessages) {
33130
+ if (loadingRef.current || messagesLoading === LOADING_STATE.LOADING || prevDisableRef.current) {
33131
+ shouldLoadMessagesRef.current = 'prev';
33132
+ } else {
33133
+ if (shouldLoadMessagesRef.current === 'prev') {
33134
+ shouldLoadMessagesRef.current = '';
33123
33135
  }
33136
+ loadDirectionRef.current = 'prev';
33137
+ handleLoadMoreMessages(MESSAGE_LOAD_DIRECTION.PREV, LOAD_MAX_MESSAGE_COUNT);
33138
+ if (!getHasPrevCached()) {
33139
+ loadFromServerRef.current = true;
33140
+ }
33141
+ nextDisableRef.current = true;
33124
33142
  }
33125
33143
  }
33126
- if (messagesIndexMap[lastVisibleMessageId] >= messages.length - 15 || target.scrollTop === 0) {
33127
- if (connectionStatus === CONNECTION_STATUS.CONNECTED && !scrollToNewMessage.scrollToBottom && (hasNextMessages || getHasNextCached())) {
33128
- if (loading || messagesLoading === LOADING_STATE.LOADING || nextDisable) {
33129
- shouldLoadMessages = 'next';
33130
- } else {
33131
- if (shouldLoadMessages === 'next') {
33132
- shouldLoadMessages = '';
33133
- }
33134
- loadDirection = 'next';
33135
- prevDisable = true;
33136
- handleLoadMoreMessages(MESSAGE_LOAD_DIRECTION.NEXT, LOAD_MAX_MESSAGE_COUNT);
33144
+ }
33145
+ if (hasIndex && currentIndex >= messages.length - 15 || target.scrollTop === 0) {
33146
+ if (connectionStatus === CONNECTION_STATUS.CONNECTED && !scrollToNewMessage.scrollToBottom && (hasNextMessages || getHasNextCached())) {
33147
+ if (loadingRef.current || messagesLoading === LOADING_STATE.LOADING || nextDisableRef.current) {
33148
+ shouldLoadMessagesRef.current = 'next';
33149
+ } else {
33150
+ if (shouldLoadMessagesRef.current === 'next') {
33151
+ shouldLoadMessagesRef.current = '';
33137
33152
  }
33153
+ loadDirectionRef.current = 'next';
33154
+ prevDisableRef.current = true;
33155
+ handleLoadMoreMessages(MESSAGE_LOAD_DIRECTION.NEXT, LOAD_MAX_MESSAGE_COUNT);
33138
33156
  }
33139
33157
  }
33140
- if (messagesIndexMap[lastVisibleMessageId] > messages.length - 10) {
33141
- nextDisable = false;
33142
- }
33158
+ }
33159
+ if (hasIndex && currentIndex > messages.length - 10) {
33160
+ nextDisableRef.current = false;
33143
33161
  }
33144
33162
  return Promise.resolve();
33145
33163
  } catch (e) {
33146
33164
  return Promise.reject(e);
33147
33165
  }
33148
- }, [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]);
33166
+ }, [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]);
33167
+ var onScroll = useCallback(function () {
33168
+ if (scrollRafRef.current !== null) return;
33169
+ scrollRafRef.current = window.requestAnimationFrame(function () {
33170
+ scrollRafRef.current = null;
33171
+ handleMessagesListScroll();
33172
+ });
33173
+ }, [handleMessagesListScroll]);
33174
+ useEffect(function () {
33175
+ return function () {
33176
+ if (scrollRafRef.current !== null) {
33177
+ cancelAnimationFrame(scrollRafRef.current);
33178
+ scrollRafRef.current = null;
33179
+ }
33180
+ };
33181
+ }, []);
33149
33182
  var handleScrollToRepliedMessage = function handleScrollToRepliedMessage(messageId) {
33150
33183
  try {
33151
- prevDisable = true;
33152
- nextDisable = true;
33184
+ prevDisableRef.current = true;
33185
+ nextDisableRef.current = true;
33153
33186
  if (messages.findIndex(function (msg) {
33154
33187
  return msg.id === messageId;
33155
33188
  }) >= 10) {
@@ -33163,8 +33196,8 @@ var MessageList = function MessageList(_ref2) {
33163
33196
  var positiveValue = repliedMessage.offsetTop - scrollRef.current.offsetHeight / 2 < 0 ? repliedMessage.offsetTop - scrollRef.current.offsetHeight * -1 : repliedMessage.offsetTop - scrollRef.current.offsetHeight / 2;
33164
33197
  setTimeout(function () {
33165
33198
  repliedMessage.classList.remove('highlight');
33166
- prevDisable = false;
33167
- nextDisable = false;
33199
+ prevDisableRef.current = false;
33200
+ nextDisableRef.current = false;
33168
33201
  }, 1000 + positiveValue * 0.1);
33169
33202
  }
33170
33203
  } else {
@@ -33185,10 +33218,10 @@ var MessageList = function MessageList(_ref2) {
33185
33218
  var hasNextCached = getHasNextCached();
33186
33219
  if (messagesLoading === LOADING_STATE.LOADED && connectionStatus === CONNECTION_STATUS.CONNECTED) {
33187
33220
  if (direction === MESSAGE_LOAD_DIRECTION.PREV && firstMessageId && (hasPrevMessages || hasPrevCached)) {
33188
- loading = true;
33221
+ loadingRef.current = true;
33189
33222
  dispatch(loadMoreMessagesAC(channel.id, limit, direction, firstMessageId, hasPrevMessages));
33190
33223
  } else if (direction === MESSAGE_LOAD_DIRECTION.NEXT && lastMessageId && (hasNextMessages || hasNextCached)) {
33191
- loading = true;
33224
+ loadingRef.current = true;
33192
33225
  dispatch(loadMoreMessagesAC(channel.id, limit, direction, lastMessageId, hasNextMessages));
33193
33226
  }
33194
33227
  }
@@ -33219,39 +33252,42 @@ var MessageList = function MessageList(_ref2) {
33219
33252
  setIsDragging(false);
33220
33253
  }
33221
33254
  };
33255
+ var readDroppedFiles = function readDroppedFiles(e) {
33256
+ return new Promise(function (resolve) {
33257
+ var fileList = Object.values(e.dataTransfer.files);
33258
+ var attachmentsFiles = [];
33259
+ var readFiles = 0;
33260
+ var errorCount = 0;
33261
+ fileList.forEach(function (attachment) {
33262
+ var fileReader = new FileReader();
33263
+ fileReader.onload = function (event) {
33264
+ var file = event.target.result;
33265
+ attachmentsFiles.push({
33266
+ name: attachment.name,
33267
+ data: file,
33268
+ type: attachment.type
33269
+ });
33270
+ readFiles++;
33271
+ if (readFiles + errorCount === fileList.length) {
33272
+ resolve(attachmentsFiles);
33273
+ }
33274
+ };
33275
+ fileReader.onerror = function () {
33276
+ errorCount++;
33277
+ if (readFiles + errorCount === fileList.length) {
33278
+ resolve(attachmentsFiles);
33279
+ }
33280
+ };
33281
+ fileReader.readAsDataURL(attachment);
33282
+ });
33283
+ });
33284
+ };
33222
33285
  var handleDropFile = function handleDropFile(e) {
33223
33286
  e.preventDefault();
33224
33287
  e.stopPropagation();
33225
33288
  setIsDragging(false);
33226
33289
  if (e.dataTransfer.files && e.dataTransfer.files.length > 0) {
33227
- var fileList = Object.values(e.dataTransfer.files);
33228
- new Promise(function (resolve) {
33229
- var attachmentsFiles = [];
33230
- var readFiles = 0;
33231
- var errorCount = 0;
33232
- fileList.forEach(function (attachment) {
33233
- var fileReader = new FileReader();
33234
- fileReader.onload = function (event) {
33235
- var file = event.target.result;
33236
- attachmentsFiles.push({
33237
- name: attachment.name,
33238
- data: file,
33239
- type: attachment.type
33240
- });
33241
- readFiles++;
33242
- if (readFiles + errorCount === fileList.length) {
33243
- resolve(attachmentsFiles);
33244
- }
33245
- };
33246
- fileReader.onerror = function () {
33247
- errorCount++;
33248
- if (readFiles + errorCount === fileList.length) {
33249
- resolve(attachmentsFiles);
33250
- }
33251
- };
33252
- fileReader.readAsDataURL(attachment);
33253
- });
33254
- }).then(function (result) {
33290
+ readDroppedFiles(e).then(function (result) {
33255
33291
  dispatch(setDraggedAttachmentsAC(result, 'file'));
33256
33292
  })["catch"](function (error) {
33257
33293
  console.error('Error in handleDropFile:', error);
@@ -33264,34 +33300,7 @@ var MessageList = function MessageList(_ref2) {
33264
33300
  e.stopPropagation();
33265
33301
  setIsDragging(false);
33266
33302
  if (e.dataTransfer.files && e.dataTransfer.files.length > 0) {
33267
- var fileList = Object.values(e.dataTransfer.files);
33268
- new Promise(function (resolve) {
33269
- var attachmentsFiles = [];
33270
- var readFiles = 0;
33271
- var errorCount = 0;
33272
- fileList.forEach(function (attachment) {
33273
- var fileReader = new FileReader();
33274
- fileReader.onload = function (event) {
33275
- var file = event.target.result;
33276
- attachmentsFiles.push({
33277
- name: attachment.name,
33278
- data: file,
33279
- type: attachment.type
33280
- });
33281
- readFiles++;
33282
- if (readFiles + errorCount === fileList.length) {
33283
- resolve(attachmentsFiles);
33284
- }
33285
- };
33286
- fileReader.onerror = function () {
33287
- errorCount++;
33288
- if (readFiles + errorCount === fileList.length) {
33289
- resolve(attachmentsFiles);
33290
- }
33291
- };
33292
- fileReader.readAsDataURL(attachment);
33293
- });
33294
- }).then(function (result) {
33303
+ readDroppedFiles(e).then(function (result) {
33295
33304
  dispatch(setDraggedAttachmentsAC(result, 'media'));
33296
33305
  })["catch"](function (error) {
33297
33306
  console.error('Error in handleDropMedia:', error);
@@ -33303,21 +33312,21 @@ var MessageList = function MessageList(_ref2) {
33303
33312
  var _messages, _channel$lastMessage2;
33304
33313
  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) {
33305
33314
  dispatch(showScrollToNewMessageButtonAC(false));
33306
- prevDisable = false;
33315
+ prevDisableRef.current = false;
33307
33316
  }
33308
33317
  }, [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]);
33309
33318
  useEffect(function () {
33310
33319
  if (scrollToRepliedMessage) {
33311
- loading = false;
33320
+ loadingRef.current = false;
33312
33321
  scrollRef.current.style.scrollBehavior = 'inherit';
33313
33322
  var repliedMessage = document.getElementById(scrollToRepliedMessage);
33314
33323
  if (repliedMessage) {
33315
33324
  setScrollToReply(repliedMessage && repliedMessage.offsetTop - (channel.backToLinkedChannel ? 0 : 200));
33316
33325
  scrollRef.current.scrollTo({
33317
33326
  top: repliedMessage && repliedMessage.offsetTop - (channel.backToLinkedChannel ? 0 : 200),
33318
- behavior: 'smooth'
33327
+ behavior: scrollToMessageBehavior
33319
33328
  });
33320
- scrollRef.current.style.scrollBehavior = 'smooth';
33329
+ scrollRef.current.style.scrollBehavior = scrollToMessageBehavior;
33321
33330
  if (!channel.backToLinkedChannel && scrollToMessageHighlight) {
33322
33331
  repliedMessage && repliedMessage.classList.add('highlight');
33323
33332
  }
@@ -33327,9 +33336,9 @@ var MessageList = function MessageList(_ref2) {
33327
33336
  var _repliedMessage = document.getElementById(scrollToRepliedMessage);
33328
33337
  _repliedMessage && _repliedMessage.classList.remove('highlight');
33329
33338
  }
33330
- prevDisable = false;
33339
+ prevDisableRef.current = false;
33331
33340
  setScrollToReply(null);
33332
- scrollRef.current.style.scrollBehavior = 'smooth';
33341
+ scrollRef.current.style.scrollBehavior = 'instant';
33333
33342
  }, 1000 + positiveValue * 0.1);
33334
33343
  }
33335
33344
  dispatch(setScrollToMessagesAC(null));
@@ -33345,15 +33354,15 @@ var MessageList = function MessageList(_ref2) {
33345
33354
  });
33346
33355
  }
33347
33356
  } else {
33348
- nextDisable = true;
33349
- prevDisable = true;
33357
+ nextDisableRef.current = true;
33358
+ prevDisableRef.current = true;
33350
33359
  scrollRef.current.scrollTo({
33351
33360
  top: 0,
33352
33361
  behavior: 'smooth'
33353
33362
  });
33354
33363
  dispatch(showScrollToNewMessageButtonAC(false));
33355
33364
  setTimeout(function () {
33356
- prevDisable = false;
33365
+ prevDisableRef.current = false;
33357
33366
  }, 800);
33358
33367
  }
33359
33368
  }
@@ -33371,11 +33380,18 @@ var MessageList = function MessageList(_ref2) {
33371
33380
  useEffect(function () {
33372
33381
  setHasNextCached(false);
33373
33382
  setHasPrevCached(false);
33383
+ messagesIndexMapRef.current = {};
33384
+ loadFromServerRef.current = false;
33385
+ loadDirectionRef.current = '';
33386
+ nextDisableRef.current = false;
33387
+ prevDisableRef.current = false;
33388
+ shouldLoadMessagesRef.current = '';
33389
+ loadingRef.current = false;
33374
33390
  if (channel.backToLinkedChannel) {
33375
33391
  var visibleMessages = getVisibleMessagesMap();
33376
33392
  var visibleMessagesIds = Object.keys(visibleMessages);
33377
33393
  var messageId = visibleMessagesIds[visibleMessagesIds.length - 1];
33378
- dispatch(getMessagesAC(channel, undefined, messageId));
33394
+ dispatch(getMessagesAC(channel, undefined, messageId, undefined, undefined, undefined, 'instant'));
33379
33395
  setUnreadMessageId(messageId);
33380
33396
  } else {
33381
33397
  if (!channel.isLinkedChannel) {
@@ -33398,9 +33414,9 @@ var MessageList = function MessageList(_ref2) {
33398
33414
  }
33399
33415
  setPreviousScrollTop(0);
33400
33416
  setShouldPreserveScroll(false);
33401
- nextDisable = false;
33402
- prevDisable = false;
33403
- scrollToBottom = true;
33417
+ nextDisableRef.current = false;
33418
+ prevDisableRef.current = false;
33419
+ scrollToBottomRef.current = true;
33404
33420
  setAllowEditDeleteIncomingMessage(allowEditDeleteIncomingMessage);
33405
33421
  }, [channel.id]);
33406
33422
  useEffect(function () {
@@ -33424,35 +33440,36 @@ var MessageList = function MessageList(_ref2) {
33424
33440
  setShouldPreserveScroll(true);
33425
33441
  }
33426
33442
  }
33427
- if (loading) {
33428
- if (loadDirection !== 'next') {
33443
+ if (loadingRef.current) {
33444
+ if (loadDirectionRef.current !== 'next') {
33429
33445
  var lastVisibleMessage = document.getElementById(lastVisibleMessageId);
33430
33446
  if (lastVisibleMessage) {
33431
33447
  scrollRef.current.style.scrollBehavior = 'inherit';
33432
33448
  scrollRef.current.scrollTop = lastVisibleMessage.offsetTop;
33433
33449
  scrollRef.current.style.scrollBehavior = 'smooth';
33434
33450
  }
33435
- if (loadFromServer) {
33451
+ if (loadFromServerRef.current) {
33436
33452
  setTimeout(function () {
33437
- loading = false;
33438
- loadFromServer = false;
33439
- nextDisable = false;
33440
- if (shouldLoadMessages === 'prev' && messagesIndexMap[lastVisibleMessageId] < 15) {
33453
+ loadingRef.current = false;
33454
+ loadFromServerRef.current = false;
33455
+ nextDisableRef.current = false;
33456
+ var currentIndex = messagesIndexMapRef.current[lastVisibleMessageId];
33457
+ if (shouldLoadMessagesRef.current === 'prev' && typeof currentIndex === 'number' && currentIndex < 15) {
33441
33458
  handleLoadMoreMessages(MESSAGE_LOAD_DIRECTION.PREV, LOAD_MAX_MESSAGE_COUNT);
33442
33459
  }
33443
- if (shouldLoadMessages === 'next' && messagesIndexMap[lastVisibleMessageId] > messages.length - 15) {
33460
+ if (shouldLoadMessagesRef.current === 'next' && typeof currentIndex === 'number' && currentIndex > messages.length - 15) {
33444
33461
  handleLoadMoreMessages(MESSAGE_LOAD_DIRECTION.NEXT, LOAD_MAX_MESSAGE_COUNT);
33445
33462
  }
33446
33463
  }, 50);
33447
33464
  } else {
33448
- loading = false;
33449
- if (shouldLoadMessages === 'prev') {
33465
+ loadingRef.current = false;
33466
+ if (shouldLoadMessagesRef.current === 'prev') {
33450
33467
  handleLoadMoreMessages(MESSAGE_LOAD_DIRECTION.PREV, LOAD_MAX_MESSAGE_COUNT);
33451
- shouldLoadMessages = '';
33468
+ shouldLoadMessagesRef.current = '';
33452
33469
  }
33453
- if (shouldLoadMessages === 'next') {
33470
+ if (shouldLoadMessagesRef.current === 'next') {
33454
33471
  handleLoadMoreMessages(MESSAGE_LOAD_DIRECTION.NEXT, LOAD_MAX_MESSAGE_COUNT);
33455
- shouldLoadMessages = '';
33472
+ shouldLoadMessagesRef.current = '';
33456
33473
  }
33457
33474
  }
33458
33475
  } else {
@@ -33462,22 +33479,26 @@ var MessageList = function MessageList(_ref2) {
33462
33479
  scrollRef.current.scrollTop = _lastVisibleMessage.offsetTop - scrollRef.current.offsetHeight + _lastVisibleMessage.offsetHeight;
33463
33480
  scrollRef.current.style.scrollBehavior = 'smooth';
33464
33481
  }
33465
- loading = false;
33466
- prevDisable = false;
33467
- if (shouldLoadMessages === 'prev') {
33482
+ loadingRef.current = false;
33483
+ prevDisableRef.current = false;
33484
+ if (shouldLoadMessagesRef.current === 'prev') {
33468
33485
  handleLoadMoreMessages(MESSAGE_LOAD_DIRECTION.PREV, LOAD_MAX_MESSAGE_COUNT);
33469
- shouldLoadMessages = '';
33486
+ shouldLoadMessagesRef.current = '';
33470
33487
  }
33471
- if (shouldLoadMessages === 'next') {
33488
+ if (shouldLoadMessagesRef.current === 'next') {
33472
33489
  handleLoadMoreMessages(MESSAGE_LOAD_DIRECTION.NEXT, LOAD_MAX_MESSAGE_COUNT);
33473
- shouldLoadMessages = '';
33490
+ shouldLoadMessagesRef.current = '';
33474
33491
  }
33475
33492
  }
33476
33493
  }
33477
33494
  renderTopDate();
33478
- if (scrollToBottom) {
33479
- dispatch(scrollToNewMessageAC(true));
33480
- scrollToBottom = false;
33495
+ if (scrollToBottomRef.current) {
33496
+ if (channel.backToLinkedChannel) {
33497
+ dispatch(scrollToNewMessageAC(false));
33498
+ } else {
33499
+ dispatch(scrollToNewMessageAC(true));
33500
+ }
33501
+ scrollToBottomRef.current = false;
33481
33502
  }
33482
33503
  if (shouldPreserveScroll && scrollRef.current && previousScrollTop > 0) {
33483
33504
  requestAnimationFrame(function () {
@@ -33494,9 +33515,9 @@ var MessageList = function MessageList(_ref2) {
33494
33515
  useEffect(function () {
33495
33516
  log.info('connection status is changed.. .... ', connectionStatus, 'channel ... ', channel);
33496
33517
  if (connectionStatus === CONNECTION_STATUS.CONNECTED) {
33497
- loading = false;
33498
- prevDisable = false;
33499
- nextDisable = false;
33518
+ loadingRef.current = false;
33519
+ prevDisableRef.current = false;
33520
+ nextDisableRef.current = false;
33500
33521
  clearMessagesMap();
33501
33522
  removeAllMessages();
33502
33523
  if (channel.id) {
@@ -33505,7 +33526,8 @@ var MessageList = function MessageList(_ref2) {
33505
33526
  }
33506
33527
  }, [connectionStatus]);
33507
33528
  useEffect(function () {
33508
- if (channel.newMessageCount && channel.newMessageCount > 0 && getUnreadScrollTo()) {
33529
+ var unreadScrollTo = getUnreadScrollTo();
33530
+ if (channel.newMessageCount && channel.newMessageCount > 0 && unreadScrollTo) {
33509
33531
  if (scrollRef.current) {
33510
33532
  scrollRef.current.style.scrollBehavior = 'inherit';
33511
33533
  }
@@ -33518,7 +33540,14 @@ var MessageList = function MessageList(_ref2) {
33518
33540
  setUnreadScrollTo(false);
33519
33541
  }
33520
33542
  }
33521
- });
33543
+ }, [channel.id, channel.newMessageCount, channel.lastDisplayedMessageId]);
33544
+ useEffect(function () {
33545
+ return function () {
33546
+ if (hideTopDateTimeout.current) {
33547
+ clearTimeout(hideTopDateTimeout.current);
33548
+ }
33549
+ };
33550
+ }, []);
33522
33551
  return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, isDragging && !(attachmentsPreview !== null && attachmentsPreview !== void 0 && attachmentsPreview.show && mediaFile) && (/*#__PURE__*/React__default.createElement(DragAndDropContainer, {
33523
33552
  id: 'draggingContainer',
33524
33553
  draggable: true,
@@ -33561,14 +33590,12 @@ var MessageList = function MessageList(_ref2) {
33561
33590
  dateDividerBackgroundColor: dateDividerBackgroundColor || overlayBackground,
33562
33591
  dateDividerBorderRadius: dateDividerBorderRadius,
33563
33592
  topOffset: scrollRef && scrollRef.current && scrollRef.current.offsetTop
33564
- }, /*#__PURE__*/React__default.createElement("span", {
33565
- ref: messageTopDateRef
33566
- }))), /*#__PURE__*/React__default.createElement(Container$h, {
33593
+ }, /*#__PURE__*/React__default.createElement("span", null, topDateLabel))), /*#__PURE__*/React__default.createElement(Container$h, {
33567
33594
  id: 'scrollableDiv',
33568
33595
  className: isScrolling ? 'show-scrollbar' : '',
33569
33596
  ref: scrollRef,
33570
33597
  stopScrolling: stopScrolling,
33571
- onScroll: handleMessagesListScroll,
33598
+ onScroll: onScroll,
33572
33599
  onMouseEnter: function onMouseEnter() {
33573
33600
  return setIsScrolling(true);
33574
33601
  },
@@ -33587,8 +33614,10 @@ var MessageList = function MessageList(_ref2) {
33587
33614
  var prevMessage = messages[index - 1];
33588
33615
  var nextMessage = messages[index + 1];
33589
33616
  var isUnreadMessage = !!(unreadMessageId && unreadMessageId === message.id && nextMessage) && !channel.backToLinkedChannel;
33590
- messagesIndexMap[message.id] = index;
33591
- return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(CreateMessageDateDivider, {
33617
+ messagesIndexMapRef.current[message.id] = index;
33618
+ return /*#__PURE__*/React__default.createElement(React__default.Fragment, {
33619
+ key: message.id || message.tid
33620
+ }, /*#__PURE__*/React__default.createElement(CreateMessageDateDivider, {
33592
33621
  noMargin: !isUnreadMessage && prevMessage && prevMessage.type === 'system' && message.type !== 'system',
33593
33622
  theme: theme,
33594
33623
  lastIndex: false,