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.js CHANGED
@@ -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;
@@ -11617,7 +11619,7 @@ function setMessageToEditAC(message) {
11617
11619
  message: message
11618
11620
  });
11619
11621
  }
11620
- function getMessagesAC(channel, loadWithLastMessage, messageId, limit, withDeliveredMessages, highlight) {
11622
+ function getMessagesAC(channel, loadWithLastMessage, messageId, limit, withDeliveredMessages, highlight, behavior) {
11621
11623
  if (highlight === void 0) {
11622
11624
  highlight = true;
11623
11625
  }
@@ -11629,7 +11631,8 @@ function getMessagesAC(channel, loadWithLastMessage, messageId, limit, withDeliv
11629
11631
  messageId: messageId,
11630
11632
  limit: limit,
11631
11633
  withDeliveredMessages: withDeliveredMessages,
11632
- highlight: highlight
11634
+ highlight: highlight,
11635
+ behavior: behavior
11633
11636
  }
11634
11637
  };
11635
11638
  }
@@ -11643,13 +11646,14 @@ function getMessageAC(channelId, messageId, limit) {
11643
11646
  }
11644
11647
  };
11645
11648
  }
11646
- function setScrollToMessagesAC(messageId, highlight) {
11649
+ function setScrollToMessagesAC(messageId, highlight, behavior) {
11647
11650
  if (highlight === void 0) {
11648
11651
  highlight = true;
11649
11652
  }
11650
11653
  return setScrollToMessage({
11651
11654
  messageId: messageId || '',
11652
- highlight: highlight
11655
+ highlight: highlight,
11656
+ behavior: behavior
11653
11657
  });
11654
11658
  }
11655
11659
  function setScrollToMentionedMessageAC(isScrollToMentionedMessage) {
@@ -17110,6 +17114,9 @@ var scrollToMessageSelector = function scrollToMessageSelector(store) {
17110
17114
  var scrollToMessageHighlightSelector = function scrollToMessageHighlightSelector(store) {
17111
17115
  return store.MessageReducer.scrollToMessageHighlight;
17112
17116
  };
17117
+ var scrollToMessageBehaviorSelector = function scrollToMessageBehaviorSelector(store) {
17118
+ return store.MessageReducer.scrollToMessageBehavior;
17119
+ };
17113
17120
  var reactionsListSelector = function reactionsListSelector(store) {
17114
17121
  return store.MessageReducer.reactionsList;
17115
17122
  };
@@ -18503,7 +18510,7 @@ function editMessage(action) {
18503
18510
  }, _marked6$1, null, [[0, 5]]);
18504
18511
  }
18505
18512
  function getMessagesQuery(action) {
18506
- var _action$payload, channel, loadWithLastMessage, messageId, limit, withDeliveredMessages, highlight, SceytChatClient, messageQueryBuilder, messageQuery, cachedMessages, result, allMessages, havLastMessage, secondResult, sentMessages, messagesMap, filteredSentMessages, _allMessages, messageIndex, maxLengthPart, _secondResult, thirdResult, _secondResult2, _thirdResult, _secondResult3, _secondResult4, updatedMessages, pendingMessages, _messagesMap, filteredPendingMessages, _t9;
18513
+ var _action$payload, channel, loadWithLastMessage, messageId, limit, withDeliveredMessages, highlight, behavior, SceytChatClient, messageQueryBuilder, messageQuery, cachedMessages, result, allMessages, havLastMessage, secondResult, sentMessages, messagesMap, filteredSentMessages, _allMessages, messageIndex, maxLengthPart, _secondResult, thirdResult, _secondResult2, _thirdResult, _secondResult3, _secondResult4, updatedMessages, pendingMessages, _messagesMap, filteredPendingMessages, _t9;
18507
18514
  return _regenerator().w(function (_context9) {
18508
18515
  while (1) switch (_context9.p = _context9.n) {
18509
18516
  case 0:
@@ -18511,7 +18518,7 @@ function getMessagesQuery(action) {
18511
18518
  _context9.n = 1;
18512
18519
  return effects.put(setMessagesLoadingStateAC(LOADING_STATE.LOADING));
18513
18520
  case 1:
18514
- _action$payload = action.payload, channel = _action$payload.channel, loadWithLastMessage = _action$payload.loadWithLastMessage, messageId = _action$payload.messageId, limit = _action$payload.limit, withDeliveredMessages = _action$payload.withDeliveredMessages, highlight = _action$payload.highlight;
18521
+ _action$payload = action.payload, channel = _action$payload.channel, loadWithLastMessage = _action$payload.loadWithLastMessage, messageId = _action$payload.messageId, limit = _action$payload.limit, withDeliveredMessages = _action$payload.withDeliveredMessages, highlight = _action$payload.highlight, behavior = _action$payload.behavior;
18515
18522
  if (!(channel.id && !channel.isMockChannel)) {
18516
18523
  _context9.n = 47;
18517
18524
  break;
@@ -18597,7 +18604,7 @@ function getMessagesQuery(action) {
18597
18604
  break;
18598
18605
  }
18599
18606
  _context9.n = 12;
18600
- return effects.put(setScrollToMessagesAC(messageId, highlight));
18607
+ return effects.put(setScrollToMessagesAC(messageId, highlight, behavior));
18601
18608
  case 12:
18602
18609
  _context9.n = 45;
18603
18610
  break;
@@ -18660,7 +18667,7 @@ function getMessagesQuery(action) {
18660
18667
  setHasNextCached(false);
18661
18668
  case 22:
18662
18669
  _context9.n = 23;
18663
- return effects.put(setScrollToMessagesAC(messageId));
18670
+ return effects.put(setScrollToMessagesAC(messageId, true, behavior));
18664
18671
  case 23:
18665
18672
  _context9.n = 24;
18666
18673
  return effects.put(setMessagesLoadingStateAC(LOADING_STATE.LOADED));
@@ -26142,6 +26149,7 @@ var Message = function Message(_ref) {
26142
26149
  var _useColor = useColors(),
26143
26150
  textOnPrimary = _useColor[THEME_COLORS.TEXT_ON_PRIMARY],
26144
26151
  overlayBackground = _useColor[THEME_COLORS.OVERLAY_BACKGROUND];
26152
+ var scrollToNewMessage = useSelector(scrollToNewMessageSelector);
26145
26153
  var dispatch = useDispatch();
26146
26154
  var ChatClient = getClient();
26147
26155
  var user = ChatClient.user;
@@ -26160,7 +26168,19 @@ var Message = function Message(_ref) {
26160
26168
  };
26161
26169
  React.useEffect(function () {
26162
26170
  if (isVisible) {
26171
+ var _channel$lastMessage;
26163
26172
  handleSendReadMarker();
26173
+ if (!channel.isLinkedChannel) {
26174
+ setMessageToVisibleMessagesMap(message);
26175
+ }
26176
+ 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))) {
26177
+ dispatch(scrollToNewMessageAC(false, false, false));
26178
+ dispatch(setMessagesLoadingStateAC(LOADING_STATE.LOADED));
26179
+ }
26180
+ } else {
26181
+ if (!channel.isLinkedChannel) {
26182
+ removeMessageFromVisibleMessagesMap(message);
26183
+ }
26164
26184
  }
26165
26185
  }, [isVisible]);
26166
26186
  useDidUpdate(function () {
@@ -32813,14 +32833,6 @@ var HiddenMessageProperty;
32813
32833
  })(HiddenMessageProperty || (HiddenMessageProperty = {}));
32814
32834
 
32815
32835
  var _templateObject$D, _templateObject2$y, _templateObject3$s, _templateObject4$o, _templateObject5$k, _templateObject6$h, _templateObject7$f, _templateObject8$e, _templateObject9$c, _templateObject0$b, _templateObject1$8;
32816
- var loadFromServer = false;
32817
- var loadDirection = '';
32818
- var nextDisable = false;
32819
- var prevDisable = false;
32820
- var scrollToBottom = false;
32821
- var shouldLoadMessages;
32822
- var loading = false;
32823
- var messagesIndexMap = {};
32824
32836
  var CreateMessageDateDivider = function CreateMessageDateDivider(_ref) {
32825
32837
  var lastIndex = _ref.lastIndex,
32826
32838
  currentMessageDate = _ref.currentMessageDate,
@@ -33030,6 +33042,7 @@ var MessageList = function MessageList(_ref2) {
33030
33042
  var scrollToMentionedMessage = useSelector(scrollToMentionedMessageSelector, reactRedux.shallowEqual);
33031
33043
  var scrollToRepliedMessage = useSelector(scrollToMessageSelector, reactRedux.shallowEqual);
33032
33044
  var scrollToMessageHighlight = useSelector(scrollToMessageHighlightSelector, reactRedux.shallowEqual);
33045
+ var scrollToMessageBehavior = useSelector(scrollToMessageBehaviorSelector, reactRedux.shallowEqual);
33033
33046
  var browserTabIsActive = useSelector(browserTabIsActiveSelector, reactRedux.shallowEqual);
33034
33047
  var hasNextMessages = useSelector(messagesHasNextSelector, reactRedux.shallowEqual);
33035
33048
  var hasPrevMessages = useSelector(messagesHasPrevSelector, reactRedux.shallowEqual);
@@ -33070,35 +33083,39 @@ var MessageList = function MessageList(_ref2) {
33070
33083
  setShouldPreserveScroll = _useState0[1];
33071
33084
  var messageForReply = {};
33072
33085
  var attachmentsSelected = false;
33073
- var messageTopDateRef = React.useRef(null);
33086
+ var _useState1 = React.useState(''),
33087
+ topDateLabel = _useState1[0],
33088
+ setTopDateLabel = _useState1[1];
33074
33089
  var scrollRef = React.useRef(null);
33090
+ var loadFromServerRef = React.useRef(false);
33091
+ var loadDirectionRef = React.useRef('');
33092
+ var nextDisableRef = React.useRef(false);
33093
+ var prevDisableRef = React.useRef(false);
33094
+ var scrollToBottomRef = React.useRef(false);
33095
+ var shouldLoadMessagesRef = React.useRef('');
33096
+ var loadingRef = React.useRef(false);
33097
+ var messagesIndexMapRef = React.useRef({});
33098
+ var scrollRafRef = React.useRef(null);
33075
33099
  var renderTopDate = function renderTopDate() {
33076
- var dateLabels = document.querySelectorAll('.divider');
33077
- var messageTopDate = messageTopDateRef.current;
33100
+ var container = scrollRef.current;
33101
+ if (!container) return;
33102
+ var dateLabels = container.querySelectorAll('.divider');
33078
33103
  var text = '';
33079
33104
  for (var i = dateLabels.length - 1; i >= 0; i--) {
33080
- var _dateLabel$firstChild;
33081
33105
  var dateLabel = dateLabels[i];
33082
- var span = dateLabel === null || dateLabel === void 0 ? void 0 : (_dateLabel$firstChild = dateLabel.firstChild) === null || _dateLabel$firstChild === void 0 ? void 0 : _dateLabel$firstChild.firstChild;
33083
- if (!text && scrollRef.current.scrollTop > dateLabel.offsetTop) {
33084
- text = span && span.innerText;
33085
- span.style.display = 'none';
33086
- } else {
33087
- span.style.display = 'block';
33106
+ if (!text && container.scrollTop > dateLabel.offsetTop) {
33107
+ var span = (dateLabel === null || dateLabel === void 0 ? void 0 : dateLabel.firstChild) && dateLabel.firstChild.firstChild;
33108
+ text = span ? span.innerText || '' : '';
33088
33109
  }
33089
33110
  }
33090
- if (text) {
33091
- messageTopDate.innerText = text;
33092
- messageTopDate.style.display = 'inline';
33093
- } else {
33094
- messageTopDate.style.display = 'none';
33095
- }
33111
+ setTopDateLabel(text);
33096
33112
  };
33097
- var handleMessagesListScroll = React.useCallback(function (event) {
33113
+ var handleMessagesListScroll = React.useCallback(function () {
33098
33114
  try {
33115
+ var target = scrollRef.current;
33116
+ if (!target) return Promise.resolve();
33099
33117
  if (scrollToMentionedMessage) {
33100
- var _target = event.target;
33101
- if (_target.scrollTop <= -50 || channel.lastMessage.id !== messages[messages.length - 1].id) {
33118
+ if (target.scrollTop <= -50 || channel.lastMessage.id !== messages[messages.length - 1].id) {
33102
33119
  dispatch(showScrollToNewMessageButtonAC(true));
33103
33120
  } else {
33104
33121
  dispatch(showScrollToNewMessageButtonAC(false));
@@ -33111,7 +33128,6 @@ var MessageList = function MessageList(_ref2) {
33111
33128
  setShowTopDate(false);
33112
33129
  }, 1000);
33113
33130
  renderTopDate();
33114
- var target = event.target;
33115
33131
  var forceLoadPrevMessages = false;
33116
33132
  if (-target.scrollTop + target.offsetHeight + 30 > target.scrollHeight) {
33117
33133
  forceLoadPrevMessages = true;
@@ -33126,51 +33142,68 @@ var MessageList = function MessageList(_ref2) {
33126
33142
  }
33127
33143
  if (scrollToReply) {
33128
33144
  target.scrollTop = scrollToReply;
33129
- } else {
33130
- if (messagesIndexMap[lastVisibleMessageId] < 15 || forceLoadPrevMessages) {
33131
- if (connectionStatus === CONNECTION_STATUS.CONNECTED && !scrollToNewMessage.scrollToBottom && hasPrevMessages) {
33132
- if (loading || messagesLoading === LOADING_STATE.LOADING || prevDisable) {
33133
- shouldLoadMessages = 'prev';
33134
- } else {
33135
- if (shouldLoadMessages === 'prev') {
33136
- shouldLoadMessages = '';
33137
- }
33138
- loadDirection = 'prev';
33139
- handleLoadMoreMessages(MESSAGE_LOAD_DIRECTION.PREV, LOAD_MAX_MESSAGE_COUNT);
33140
- if (!getHasPrevCached()) {
33141
- loadFromServer = true;
33142
- }
33143
- nextDisable = true;
33145
+ return Promise.resolve();
33146
+ }
33147
+ var currentIndex = messagesIndexMapRef.current[lastVisibleMessageId];
33148
+ var hasIndex = typeof currentIndex === 'number';
33149
+ if (hasIndex && currentIndex < 15 || forceLoadPrevMessages) {
33150
+ if (connectionStatus === CONNECTION_STATUS.CONNECTED && !scrollToNewMessage.scrollToBottom && hasPrevMessages) {
33151
+ if (loadingRef.current || messagesLoading === LOADING_STATE.LOADING || prevDisableRef.current) {
33152
+ shouldLoadMessagesRef.current = 'prev';
33153
+ } else {
33154
+ if (shouldLoadMessagesRef.current === 'prev') {
33155
+ shouldLoadMessagesRef.current = '';
33144
33156
  }
33157
+ loadDirectionRef.current = 'prev';
33158
+ handleLoadMoreMessages(MESSAGE_LOAD_DIRECTION.PREV, LOAD_MAX_MESSAGE_COUNT);
33159
+ if (!getHasPrevCached()) {
33160
+ loadFromServerRef.current = true;
33161
+ }
33162
+ nextDisableRef.current = true;
33145
33163
  }
33146
33164
  }
33147
- if (messagesIndexMap[lastVisibleMessageId] >= messages.length - 15 || target.scrollTop === 0) {
33148
- if (connectionStatus === CONNECTION_STATUS.CONNECTED && !scrollToNewMessage.scrollToBottom && (hasNextMessages || getHasNextCached())) {
33149
- if (loading || messagesLoading === LOADING_STATE.LOADING || nextDisable) {
33150
- shouldLoadMessages = 'next';
33151
- } else {
33152
- if (shouldLoadMessages === 'next') {
33153
- shouldLoadMessages = '';
33154
- }
33155
- loadDirection = 'next';
33156
- prevDisable = true;
33157
- handleLoadMoreMessages(MESSAGE_LOAD_DIRECTION.NEXT, LOAD_MAX_MESSAGE_COUNT);
33165
+ }
33166
+ if (hasIndex && currentIndex >= messages.length - 15 || target.scrollTop === 0) {
33167
+ if (connectionStatus === CONNECTION_STATUS.CONNECTED && !scrollToNewMessage.scrollToBottom && (hasNextMessages || getHasNextCached())) {
33168
+ if (loadingRef.current || messagesLoading === LOADING_STATE.LOADING || nextDisableRef.current) {
33169
+ shouldLoadMessagesRef.current = 'next';
33170
+ } else {
33171
+ if (shouldLoadMessagesRef.current === 'next') {
33172
+ shouldLoadMessagesRef.current = '';
33158
33173
  }
33174
+ loadDirectionRef.current = 'next';
33175
+ prevDisableRef.current = true;
33176
+ handleLoadMoreMessages(MESSAGE_LOAD_DIRECTION.NEXT, LOAD_MAX_MESSAGE_COUNT);
33159
33177
  }
33160
33178
  }
33161
- if (messagesIndexMap[lastVisibleMessageId] > messages.length - 10) {
33162
- nextDisable = false;
33163
- }
33179
+ }
33180
+ if (hasIndex && currentIndex > messages.length - 10) {
33181
+ nextDisableRef.current = false;
33164
33182
  }
33165
33183
  return Promise.resolve();
33166
33184
  } catch (e) {
33167
33185
  return Promise.reject(e);
33168
33186
  }
33169
- }, [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]);
33187
+ }, [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]);
33188
+ var onScroll = React.useCallback(function () {
33189
+ if (scrollRafRef.current !== null) return;
33190
+ scrollRafRef.current = window.requestAnimationFrame(function () {
33191
+ scrollRafRef.current = null;
33192
+ handleMessagesListScroll();
33193
+ });
33194
+ }, [handleMessagesListScroll]);
33195
+ React.useEffect(function () {
33196
+ return function () {
33197
+ if (scrollRafRef.current !== null) {
33198
+ cancelAnimationFrame(scrollRafRef.current);
33199
+ scrollRafRef.current = null;
33200
+ }
33201
+ };
33202
+ }, []);
33170
33203
  var handleScrollToRepliedMessage = function handleScrollToRepliedMessage(messageId) {
33171
33204
  try {
33172
- prevDisable = true;
33173
- nextDisable = true;
33205
+ prevDisableRef.current = true;
33206
+ nextDisableRef.current = true;
33174
33207
  if (messages.findIndex(function (msg) {
33175
33208
  return msg.id === messageId;
33176
33209
  }) >= 10) {
@@ -33184,8 +33217,8 @@ var MessageList = function MessageList(_ref2) {
33184
33217
  var positiveValue = repliedMessage.offsetTop - scrollRef.current.offsetHeight / 2 < 0 ? repliedMessage.offsetTop - scrollRef.current.offsetHeight * -1 : repliedMessage.offsetTop - scrollRef.current.offsetHeight / 2;
33185
33218
  setTimeout(function () {
33186
33219
  repliedMessage.classList.remove('highlight');
33187
- prevDisable = false;
33188
- nextDisable = false;
33220
+ prevDisableRef.current = false;
33221
+ nextDisableRef.current = false;
33189
33222
  }, 1000 + positiveValue * 0.1);
33190
33223
  }
33191
33224
  } else {
@@ -33206,10 +33239,10 @@ var MessageList = function MessageList(_ref2) {
33206
33239
  var hasNextCached = getHasNextCached();
33207
33240
  if (messagesLoading === LOADING_STATE.LOADED && connectionStatus === CONNECTION_STATUS.CONNECTED) {
33208
33241
  if (direction === MESSAGE_LOAD_DIRECTION.PREV && firstMessageId && (hasPrevMessages || hasPrevCached)) {
33209
- loading = true;
33242
+ loadingRef.current = true;
33210
33243
  dispatch(loadMoreMessagesAC(channel.id, limit, direction, firstMessageId, hasPrevMessages));
33211
33244
  } else if (direction === MESSAGE_LOAD_DIRECTION.NEXT && lastMessageId && (hasNextMessages || hasNextCached)) {
33212
- loading = true;
33245
+ loadingRef.current = true;
33213
33246
  dispatch(loadMoreMessagesAC(channel.id, limit, direction, lastMessageId, hasNextMessages));
33214
33247
  }
33215
33248
  }
@@ -33240,39 +33273,42 @@ var MessageList = function MessageList(_ref2) {
33240
33273
  setIsDragging(false);
33241
33274
  }
33242
33275
  };
33276
+ var readDroppedFiles = function readDroppedFiles(e) {
33277
+ return new Promise(function (resolve) {
33278
+ var fileList = Object.values(e.dataTransfer.files);
33279
+ var attachmentsFiles = [];
33280
+ var readFiles = 0;
33281
+ var errorCount = 0;
33282
+ fileList.forEach(function (attachment) {
33283
+ var fileReader = new FileReader();
33284
+ fileReader.onload = function (event) {
33285
+ var file = event.target.result;
33286
+ attachmentsFiles.push({
33287
+ name: attachment.name,
33288
+ data: file,
33289
+ type: attachment.type
33290
+ });
33291
+ readFiles++;
33292
+ if (readFiles + errorCount === fileList.length) {
33293
+ resolve(attachmentsFiles);
33294
+ }
33295
+ };
33296
+ fileReader.onerror = function () {
33297
+ errorCount++;
33298
+ if (readFiles + errorCount === fileList.length) {
33299
+ resolve(attachmentsFiles);
33300
+ }
33301
+ };
33302
+ fileReader.readAsDataURL(attachment);
33303
+ });
33304
+ });
33305
+ };
33243
33306
  var handleDropFile = function handleDropFile(e) {
33244
33307
  e.preventDefault();
33245
33308
  e.stopPropagation();
33246
33309
  setIsDragging(false);
33247
33310
  if (e.dataTransfer.files && e.dataTransfer.files.length > 0) {
33248
- var fileList = Object.values(e.dataTransfer.files);
33249
- new Promise(function (resolve) {
33250
- var attachmentsFiles = [];
33251
- var readFiles = 0;
33252
- var errorCount = 0;
33253
- fileList.forEach(function (attachment) {
33254
- var fileReader = new FileReader();
33255
- fileReader.onload = function (event) {
33256
- var file = event.target.result;
33257
- attachmentsFiles.push({
33258
- name: attachment.name,
33259
- data: file,
33260
- type: attachment.type
33261
- });
33262
- readFiles++;
33263
- if (readFiles + errorCount === fileList.length) {
33264
- resolve(attachmentsFiles);
33265
- }
33266
- };
33267
- fileReader.onerror = function () {
33268
- errorCount++;
33269
- if (readFiles + errorCount === fileList.length) {
33270
- resolve(attachmentsFiles);
33271
- }
33272
- };
33273
- fileReader.readAsDataURL(attachment);
33274
- });
33275
- }).then(function (result) {
33311
+ readDroppedFiles(e).then(function (result) {
33276
33312
  dispatch(setDraggedAttachmentsAC(result, 'file'));
33277
33313
  })["catch"](function (error) {
33278
33314
  console.error('Error in handleDropFile:', error);
@@ -33285,34 +33321,7 @@ var MessageList = function MessageList(_ref2) {
33285
33321
  e.stopPropagation();
33286
33322
  setIsDragging(false);
33287
33323
  if (e.dataTransfer.files && e.dataTransfer.files.length > 0) {
33288
- var fileList = Object.values(e.dataTransfer.files);
33289
- new Promise(function (resolve) {
33290
- var attachmentsFiles = [];
33291
- var readFiles = 0;
33292
- var errorCount = 0;
33293
- fileList.forEach(function (attachment) {
33294
- var fileReader = new FileReader();
33295
- fileReader.onload = function (event) {
33296
- var file = event.target.result;
33297
- attachmentsFiles.push({
33298
- name: attachment.name,
33299
- data: file,
33300
- type: attachment.type
33301
- });
33302
- readFiles++;
33303
- if (readFiles + errorCount === fileList.length) {
33304
- resolve(attachmentsFiles);
33305
- }
33306
- };
33307
- fileReader.onerror = function () {
33308
- errorCount++;
33309
- if (readFiles + errorCount === fileList.length) {
33310
- resolve(attachmentsFiles);
33311
- }
33312
- };
33313
- fileReader.readAsDataURL(attachment);
33314
- });
33315
- }).then(function (result) {
33324
+ readDroppedFiles(e).then(function (result) {
33316
33325
  dispatch(setDraggedAttachmentsAC(result, 'media'));
33317
33326
  })["catch"](function (error) {
33318
33327
  console.error('Error in handleDropMedia:', error);
@@ -33324,21 +33333,21 @@ var MessageList = function MessageList(_ref2) {
33324
33333
  var _messages, _channel$lastMessage2;
33325
33334
  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) {
33326
33335
  dispatch(showScrollToNewMessageButtonAC(false));
33327
- prevDisable = false;
33336
+ prevDisableRef.current = false;
33328
33337
  }
33329
33338
  }, [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]);
33330
33339
  React.useEffect(function () {
33331
33340
  if (scrollToRepliedMessage) {
33332
- loading = false;
33341
+ loadingRef.current = false;
33333
33342
  scrollRef.current.style.scrollBehavior = 'inherit';
33334
33343
  var repliedMessage = document.getElementById(scrollToRepliedMessage);
33335
33344
  if (repliedMessage) {
33336
33345
  setScrollToReply(repliedMessage && repliedMessage.offsetTop - (channel.backToLinkedChannel ? 0 : 200));
33337
33346
  scrollRef.current.scrollTo({
33338
33347
  top: repliedMessage && repliedMessage.offsetTop - (channel.backToLinkedChannel ? 0 : 200),
33339
- behavior: 'smooth'
33348
+ behavior: scrollToMessageBehavior
33340
33349
  });
33341
- scrollRef.current.style.scrollBehavior = 'smooth';
33350
+ scrollRef.current.style.scrollBehavior = scrollToMessageBehavior;
33342
33351
  if (!channel.backToLinkedChannel && scrollToMessageHighlight) {
33343
33352
  repliedMessage && repliedMessage.classList.add('highlight');
33344
33353
  }
@@ -33348,9 +33357,9 @@ var MessageList = function MessageList(_ref2) {
33348
33357
  var _repliedMessage = document.getElementById(scrollToRepliedMessage);
33349
33358
  _repliedMessage && _repliedMessage.classList.remove('highlight');
33350
33359
  }
33351
- prevDisable = false;
33360
+ prevDisableRef.current = false;
33352
33361
  setScrollToReply(null);
33353
- scrollRef.current.style.scrollBehavior = 'smooth';
33362
+ scrollRef.current.style.scrollBehavior = 'instant';
33354
33363
  }, 1000 + positiveValue * 0.1);
33355
33364
  }
33356
33365
  dispatch(setScrollToMessagesAC(null));
@@ -33366,15 +33375,15 @@ var MessageList = function MessageList(_ref2) {
33366
33375
  });
33367
33376
  }
33368
33377
  } else {
33369
- nextDisable = true;
33370
- prevDisable = true;
33378
+ nextDisableRef.current = true;
33379
+ prevDisableRef.current = true;
33371
33380
  scrollRef.current.scrollTo({
33372
33381
  top: 0,
33373
33382
  behavior: 'smooth'
33374
33383
  });
33375
33384
  dispatch(showScrollToNewMessageButtonAC(false));
33376
33385
  setTimeout(function () {
33377
- prevDisable = false;
33386
+ prevDisableRef.current = false;
33378
33387
  }, 800);
33379
33388
  }
33380
33389
  }
@@ -33392,11 +33401,18 @@ var MessageList = function MessageList(_ref2) {
33392
33401
  React.useEffect(function () {
33393
33402
  setHasNextCached(false);
33394
33403
  setHasPrevCached(false);
33404
+ messagesIndexMapRef.current = {};
33405
+ loadFromServerRef.current = false;
33406
+ loadDirectionRef.current = '';
33407
+ nextDisableRef.current = false;
33408
+ prevDisableRef.current = false;
33409
+ shouldLoadMessagesRef.current = '';
33410
+ loadingRef.current = false;
33395
33411
  if (channel.backToLinkedChannel) {
33396
33412
  var visibleMessages = getVisibleMessagesMap();
33397
33413
  var visibleMessagesIds = Object.keys(visibleMessages);
33398
33414
  var messageId = visibleMessagesIds[visibleMessagesIds.length - 1];
33399
- dispatch(getMessagesAC(channel, undefined, messageId));
33415
+ dispatch(getMessagesAC(channel, undefined, messageId, undefined, undefined, undefined, 'instant'));
33400
33416
  setUnreadMessageId(messageId);
33401
33417
  } else {
33402
33418
  if (!channel.isLinkedChannel) {
@@ -33419,9 +33435,9 @@ var MessageList = function MessageList(_ref2) {
33419
33435
  }
33420
33436
  setPreviousScrollTop(0);
33421
33437
  setShouldPreserveScroll(false);
33422
- nextDisable = false;
33423
- prevDisable = false;
33424
- scrollToBottom = true;
33438
+ nextDisableRef.current = false;
33439
+ prevDisableRef.current = false;
33440
+ scrollToBottomRef.current = true;
33425
33441
  setAllowEditDeleteIncomingMessage(allowEditDeleteIncomingMessage);
33426
33442
  }, [channel.id]);
33427
33443
  React.useEffect(function () {
@@ -33445,35 +33461,36 @@ var MessageList = function MessageList(_ref2) {
33445
33461
  setShouldPreserveScroll(true);
33446
33462
  }
33447
33463
  }
33448
- if (loading) {
33449
- if (loadDirection !== 'next') {
33464
+ if (loadingRef.current) {
33465
+ if (loadDirectionRef.current !== 'next') {
33450
33466
  var lastVisibleMessage = document.getElementById(lastVisibleMessageId);
33451
33467
  if (lastVisibleMessage) {
33452
33468
  scrollRef.current.style.scrollBehavior = 'inherit';
33453
33469
  scrollRef.current.scrollTop = lastVisibleMessage.offsetTop;
33454
33470
  scrollRef.current.style.scrollBehavior = 'smooth';
33455
33471
  }
33456
- if (loadFromServer) {
33472
+ if (loadFromServerRef.current) {
33457
33473
  setTimeout(function () {
33458
- loading = false;
33459
- loadFromServer = false;
33460
- nextDisable = false;
33461
- if (shouldLoadMessages === 'prev' && messagesIndexMap[lastVisibleMessageId] < 15) {
33474
+ loadingRef.current = false;
33475
+ loadFromServerRef.current = false;
33476
+ nextDisableRef.current = false;
33477
+ var currentIndex = messagesIndexMapRef.current[lastVisibleMessageId];
33478
+ if (shouldLoadMessagesRef.current === 'prev' && typeof currentIndex === 'number' && currentIndex < 15) {
33462
33479
  handleLoadMoreMessages(MESSAGE_LOAD_DIRECTION.PREV, LOAD_MAX_MESSAGE_COUNT);
33463
33480
  }
33464
- if (shouldLoadMessages === 'next' && messagesIndexMap[lastVisibleMessageId] > messages.length - 15) {
33481
+ if (shouldLoadMessagesRef.current === 'next' && typeof currentIndex === 'number' && currentIndex > messages.length - 15) {
33465
33482
  handleLoadMoreMessages(MESSAGE_LOAD_DIRECTION.NEXT, LOAD_MAX_MESSAGE_COUNT);
33466
33483
  }
33467
33484
  }, 50);
33468
33485
  } else {
33469
- loading = false;
33470
- if (shouldLoadMessages === 'prev') {
33486
+ loadingRef.current = false;
33487
+ if (shouldLoadMessagesRef.current === 'prev') {
33471
33488
  handleLoadMoreMessages(MESSAGE_LOAD_DIRECTION.PREV, LOAD_MAX_MESSAGE_COUNT);
33472
- shouldLoadMessages = '';
33489
+ shouldLoadMessagesRef.current = '';
33473
33490
  }
33474
- if (shouldLoadMessages === 'next') {
33491
+ if (shouldLoadMessagesRef.current === 'next') {
33475
33492
  handleLoadMoreMessages(MESSAGE_LOAD_DIRECTION.NEXT, LOAD_MAX_MESSAGE_COUNT);
33476
- shouldLoadMessages = '';
33493
+ shouldLoadMessagesRef.current = '';
33477
33494
  }
33478
33495
  }
33479
33496
  } else {
@@ -33483,22 +33500,26 @@ var MessageList = function MessageList(_ref2) {
33483
33500
  scrollRef.current.scrollTop = _lastVisibleMessage.offsetTop - scrollRef.current.offsetHeight + _lastVisibleMessage.offsetHeight;
33484
33501
  scrollRef.current.style.scrollBehavior = 'smooth';
33485
33502
  }
33486
- loading = false;
33487
- prevDisable = false;
33488
- if (shouldLoadMessages === 'prev') {
33503
+ loadingRef.current = false;
33504
+ prevDisableRef.current = false;
33505
+ if (shouldLoadMessagesRef.current === 'prev') {
33489
33506
  handleLoadMoreMessages(MESSAGE_LOAD_DIRECTION.PREV, LOAD_MAX_MESSAGE_COUNT);
33490
- shouldLoadMessages = '';
33507
+ shouldLoadMessagesRef.current = '';
33491
33508
  }
33492
- if (shouldLoadMessages === 'next') {
33509
+ if (shouldLoadMessagesRef.current === 'next') {
33493
33510
  handleLoadMoreMessages(MESSAGE_LOAD_DIRECTION.NEXT, LOAD_MAX_MESSAGE_COUNT);
33494
- shouldLoadMessages = '';
33511
+ shouldLoadMessagesRef.current = '';
33495
33512
  }
33496
33513
  }
33497
33514
  }
33498
33515
  renderTopDate();
33499
- if (scrollToBottom) {
33500
- dispatch(scrollToNewMessageAC(true));
33501
- scrollToBottom = false;
33516
+ if (scrollToBottomRef.current) {
33517
+ if (channel.backToLinkedChannel) {
33518
+ dispatch(scrollToNewMessageAC(false));
33519
+ } else {
33520
+ dispatch(scrollToNewMessageAC(true));
33521
+ }
33522
+ scrollToBottomRef.current = false;
33502
33523
  }
33503
33524
  if (shouldPreserveScroll && scrollRef.current && previousScrollTop > 0) {
33504
33525
  requestAnimationFrame(function () {
@@ -33515,9 +33536,9 @@ var MessageList = function MessageList(_ref2) {
33515
33536
  React.useEffect(function () {
33516
33537
  log.info('connection status is changed.. .... ', connectionStatus, 'channel ... ', channel);
33517
33538
  if (connectionStatus === CONNECTION_STATUS.CONNECTED) {
33518
- loading = false;
33519
- prevDisable = false;
33520
- nextDisable = false;
33539
+ loadingRef.current = false;
33540
+ prevDisableRef.current = false;
33541
+ nextDisableRef.current = false;
33521
33542
  clearMessagesMap();
33522
33543
  removeAllMessages();
33523
33544
  if (channel.id) {
@@ -33526,7 +33547,8 @@ var MessageList = function MessageList(_ref2) {
33526
33547
  }
33527
33548
  }, [connectionStatus]);
33528
33549
  React.useEffect(function () {
33529
- if (channel.newMessageCount && channel.newMessageCount > 0 && getUnreadScrollTo()) {
33550
+ var unreadScrollTo = getUnreadScrollTo();
33551
+ if (channel.newMessageCount && channel.newMessageCount > 0 && unreadScrollTo) {
33530
33552
  if (scrollRef.current) {
33531
33553
  scrollRef.current.style.scrollBehavior = 'inherit';
33532
33554
  }
@@ -33539,7 +33561,14 @@ var MessageList = function MessageList(_ref2) {
33539
33561
  setUnreadScrollTo(false);
33540
33562
  }
33541
33563
  }
33542
- });
33564
+ }, [channel.id, channel.newMessageCount, channel.lastDisplayedMessageId]);
33565
+ React.useEffect(function () {
33566
+ return function () {
33567
+ if (hideTopDateTimeout.current) {
33568
+ clearTimeout(hideTopDateTimeout.current);
33569
+ }
33570
+ };
33571
+ }, []);
33543
33572
  return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, isDragging && !(attachmentsPreview !== null && attachmentsPreview !== void 0 && attachmentsPreview.show && mediaFile) && (/*#__PURE__*/React__default.createElement(DragAndDropContainer, {
33544
33573
  id: 'draggingContainer',
33545
33574
  draggable: true,
@@ -33582,14 +33611,12 @@ var MessageList = function MessageList(_ref2) {
33582
33611
  dateDividerBackgroundColor: dateDividerBackgroundColor || overlayBackground,
33583
33612
  dateDividerBorderRadius: dateDividerBorderRadius,
33584
33613
  topOffset: scrollRef && scrollRef.current && scrollRef.current.offsetTop
33585
- }, /*#__PURE__*/React__default.createElement("span", {
33586
- ref: messageTopDateRef
33587
- }))), /*#__PURE__*/React__default.createElement(Container$h, {
33614
+ }, /*#__PURE__*/React__default.createElement("span", null, topDateLabel))), /*#__PURE__*/React__default.createElement(Container$h, {
33588
33615
  id: 'scrollableDiv',
33589
33616
  className: isScrolling ? 'show-scrollbar' : '',
33590
33617
  ref: scrollRef,
33591
33618
  stopScrolling: stopScrolling,
33592
- onScroll: handleMessagesListScroll,
33619
+ onScroll: onScroll,
33593
33620
  onMouseEnter: function onMouseEnter() {
33594
33621
  return setIsScrolling(true);
33595
33622
  },
@@ -33608,8 +33635,10 @@ var MessageList = function MessageList(_ref2) {
33608
33635
  var prevMessage = messages[index - 1];
33609
33636
  var nextMessage = messages[index + 1];
33610
33637
  var isUnreadMessage = !!(unreadMessageId && unreadMessageId === message.id && nextMessage) && !channel.backToLinkedChannel;
33611
- messagesIndexMap[message.id] = index;
33612
- return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(CreateMessageDateDivider, {
33638
+ messagesIndexMapRef.current[message.id] = index;
33639
+ return /*#__PURE__*/React__default.createElement(React__default.Fragment, {
33640
+ key: message.id || message.tid
33641
+ }, /*#__PURE__*/React__default.createElement(CreateMessageDateDivider, {
33613
33642
  noMargin: !isUnreadMessage && prevMessage && prevMessage.type === 'system' && message.type !== 'system',
33614
33643
  theme: theme,
33615
33644
  lastIndex: false,