stream-chat-react-native-core 5.23.0-beta.1 → 5.23.0-beta.3

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 (65) hide show
  1. package/lib/commonjs/components/Channel/Channel.js +587 -384
  2. package/lib/commonjs/components/Channel/Channel.js.map +1 -1
  3. package/lib/commonjs/components/Channel/hooks/useCreateMessagesContext.js +1 -1
  4. package/lib/commonjs/components/Channel/hooks/useCreateMessagesContext.js.map +1 -1
  5. package/lib/commonjs/components/MessageList/MessageList.js +174 -180
  6. package/lib/commonjs/components/MessageList/MessageList.js.map +1 -1
  7. package/lib/commonjs/components/MessageList/hooks/useMessageList.js +6 -1
  8. package/lib/commonjs/components/MessageList/hooks/useMessageList.js.map +1 -1
  9. package/lib/commonjs/components/MessageList/hooks/useShouldScrollToRecentOnNewOwnMessage.js +36 -0
  10. package/lib/commonjs/components/MessageList/hooks/useShouldScrollToRecentOnNewOwnMessage.js.map +1 -0
  11. package/lib/commonjs/components/MessageOverlay/MessageOverlay.js +30 -36
  12. package/lib/commonjs/components/MessageOverlay/MessageOverlay.js.map +1 -1
  13. package/lib/commonjs/i18n/en.json +1 -1
  14. package/lib/commonjs/i18n/fr.json +45 -45
  15. package/lib/commonjs/i18n/hi.json +43 -43
  16. package/lib/commonjs/i18n/it.json +43 -43
  17. package/lib/commonjs/i18n/nl.json +43 -43
  18. package/lib/commonjs/i18n/ru.json +45 -45
  19. package/lib/commonjs/i18n/tr.json +45 -45
  20. package/lib/commonjs/version.json +1 -1
  21. package/lib/module/components/Channel/Channel.js +587 -384
  22. package/lib/module/components/Channel/Channel.js.map +1 -1
  23. package/lib/module/components/Channel/hooks/useCreateMessagesContext.js +1 -1
  24. package/lib/module/components/Channel/hooks/useCreateMessagesContext.js.map +1 -1
  25. package/lib/module/components/MessageList/MessageList.js +174 -180
  26. package/lib/module/components/MessageList/MessageList.js.map +1 -1
  27. package/lib/module/components/MessageList/hooks/useMessageList.js +6 -1
  28. package/lib/module/components/MessageList/hooks/useMessageList.js.map +1 -1
  29. package/lib/module/components/MessageList/hooks/useShouldScrollToRecentOnNewOwnMessage.js +36 -0
  30. package/lib/module/components/MessageList/hooks/useShouldScrollToRecentOnNewOwnMessage.js.map +1 -0
  31. package/lib/module/components/MessageOverlay/MessageOverlay.js +30 -36
  32. package/lib/module/components/MessageOverlay/MessageOverlay.js.map +1 -1
  33. package/lib/module/i18n/en.json +1 -1
  34. package/lib/module/i18n/fr.json +45 -45
  35. package/lib/module/i18n/hi.json +43 -43
  36. package/lib/module/i18n/it.json +43 -43
  37. package/lib/module/i18n/nl.json +43 -43
  38. package/lib/module/i18n/ru.json +45 -45
  39. package/lib/module/i18n/tr.json +45 -45
  40. package/lib/module/version.json +1 -1
  41. package/lib/typescript/components/MessageList/hooks/useMessageList.d.ts +6 -1
  42. package/lib/typescript/components/MessageList/hooks/useShouldScrollToRecentOnNewOwnMessage.d.ts +4 -0
  43. package/lib/typescript/i18n/en.json +1 -1
  44. package/lib/typescript/i18n/fr.json +45 -45
  45. package/lib/typescript/i18n/hi.json +43 -43
  46. package/lib/typescript/i18n/it.json +43 -43
  47. package/lib/typescript/i18n/nl.json +43 -43
  48. package/lib/typescript/i18n/ru.json +45 -45
  49. package/lib/typescript/i18n/tr.json +45 -45
  50. package/package.json +1 -1
  51. package/src/components/Channel/Channel.tsx +237 -61
  52. package/src/components/Channel/hooks/useCreateMessagesContext.ts +1 -0
  53. package/src/components/MessageList/MessageList.tsx +193 -181
  54. package/src/components/MessageList/__tests__/useMessageList.test.tsx +5 -2
  55. package/src/components/MessageList/hooks/useMessageList.ts +8 -1
  56. package/src/components/MessageList/hooks/useShouldScrollToRecentOnNewOwnMessage.ts +44 -0
  57. package/src/components/MessageOverlay/MessageOverlay.tsx +1 -6
  58. package/src/i18n/en.json +1 -1
  59. package/src/i18n/fr.json +45 -45
  60. package/src/i18n/hi.json +43 -43
  61. package/src/i18n/it.json +43 -43
  62. package/src/i18n/nl.json +43 -43
  63. package/src/i18n/ru.json +45 -45
  64. package/src/i18n/tr.json +45 -45
  65. package/src/version.json +1 -1
@@ -144,7 +144,7 @@ var debounceOptions = {
144
144
  trailing: true
145
145
  };
146
146
  var ChannelWithContext = function ChannelWithContext(props) {
147
- var _client$user, _channel$data, _ref27, _ref28;
147
+ var _client$user, _channel$data, _ref28, _ref29;
148
148
  var additionalKeyboardAvoidingViewProps = props.additionalKeyboardAvoidingViewProps,
149
149
  additionalTextInputProps = props.additionalTextInputProps,
150
150
  additionalTouchableProps = props.additionalTouchableProps,
@@ -443,11 +443,10 @@ var ChannelWithContext = function ChannelWithContext(props) {
443
443
  _useState28 = (0, _slicedToArray2["default"])(_useState27, 2),
444
444
  hasNoMoreRecentMessagesToLoad = _useState28[0],
445
445
  setHasNoMoreRecentMessagesToLoad = _useState28[1];
446
- var messagesRef = (0, _react.useRef)(messages);
447
- messagesRef.current = messages;
448
446
  var _useTargetedMessage = (0, _useTargetedMessage2.useTargetedMessage)(),
449
447
  setTargetedMessage = _useTargetedMessage.setTargetedMessage,
450
448
  targetedMessage = _useTargetedMessage.targetedMessage;
449
+ var hasOverlappingRecentMessagesRef = (0, _react.useRef)(false);
451
450
  var uploadAbortControllerRef = (0, _react.useRef)(new Map());
452
451
  var channelId = (channel == null ? void 0 : channel.id) || '';
453
452
  (0, _react.useEffect)(function () {
@@ -516,7 +515,9 @@ var ChannelWithContext = function ChannelWithContext(props) {
516
515
  }, defaultThrottleInterval, throttleOptions)).current;
517
516
  var copyMessagesState = (0, _react.useRef)((0, _throttle["default"])(function () {
518
517
  if (channel) {
518
+ clearInterval(mergeSetsIntervalRef.current);
519
519
  setMessages((0, _toConsumableArray2["default"])(channel.state.messages));
520
+ restartSetsMergeFuncRef.current();
520
521
  }
521
522
  }, newMessageStateUpdateThrottleInterval, throttleOptions)).current;
522
523
  var copyTypingState = (0, _react.useRef)((0, _throttle["default"])(function () {
@@ -584,64 +585,84 @@ var ChannelWithContext = function ChannelWithContext(props) {
584
585
  unsubscribe = _client$on.unsubscribe;
585
586
  return unsubscribe;
586
587
  }, [channelId]);
588
+ (0, _react.useEffect)(function () {
589
+ var handleEvent = function handleEvent(event) {
590
+ if (channel.cid === event.cid) copyChannelState();
591
+ };
592
+ var _client$on2 = client.on('notification.mark_read', handleEvent),
593
+ unsubscribe = _client$on2.unsubscribe;
594
+ return unsubscribe;
595
+ }, []);
587
596
  var channelQueryCallRef = (0, _react.useRef)(function () {
588
597
  var _ref = (0, _asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee(queryCall) {
589
598
  var onAfterQueryCall,
590
- targetMessageId,
591
- limit,
599
+ scrollToMessageId,
592
600
  currentMessages,
593
- targetMessageIndex,
594
- startIndex,
601
+ hadCurrentLatestMessages,
602
+ scrollToMessageIndex,
603
+ limitAfter,
604
+ currentLength,
605
+ noOfMessagesAfter,
595
606
  endIndex,
596
- hadLatestMessages,
597
- recentMessage,
598
- stillHasLatestMessages,
599
- areLatestMessages,
607
+ restOfMessages,
608
+ latestSet,
609
+ hasLatestMessages,
600
610
  _args = arguments;
601
611
  return _regenerator["default"].wrap(function _callee$(_context) {
602
612
  while (1) switch (_context.prev = _context.next) {
603
613
  case 0:
604
614
  onAfterQueryCall = _args.length > 1 && _args[1] !== undefined ? _args[1] : undefined;
605
- targetMessageId = _args.length > 2 && _args[2] !== undefined ? _args[2] : undefined;
615
+ scrollToMessageId = _args.length > 2 && _args[2] !== undefined ? _args[2] : undefined;
606
616
  setError(false);
607
617
  _context.prev = 3;
608
- _context.next = 6;
618
+ clearInterval(mergeSetsIntervalRef.current);
619
+ _context.next = 7;
609
620
  return queryCall();
610
- case 6:
621
+ case 7:
611
622
  setLastRead(new Date());
612
623
  setHasMore(true);
613
- if (channel && targetMessageId) {
614
- limit = 30 * 3;
615
- currentMessages = channel.state.messages;
616
- if (currentMessages.length > limit) {
617
- targetMessageIndex = currentMessages.findIndex(function (_ref2) {
618
- var id = _ref2.id;
619
- return id === targetMessageId;
620
- });
621
- startIndex = Math.max(targetMessageIndex - Math.floor(limit / 2), 0);
622
- endIndex = targetMessageIndex + Math.floor(limit / 2);
623
- if (endIndex > currentMessages.length) {
624
- startIndex = Math.max(startIndex - (endIndex - currentMessages.length - 1) - 1, 0);
624
+ currentMessages = channel.state.messages;
625
+ hadCurrentLatestMessages = currentMessages.length > 0 && currentMessages === channel.state.latestMessages;
626
+ if (typeof scrollToMessageId === 'function') {
627
+ scrollToMessageId = scrollToMessageId();
628
+ }
629
+ scrollToMessageIndex = scrollToMessageId ? currentMessages.findIndex(function (_ref2) {
630
+ var id = _ref2.id;
631
+ return id === scrollToMessageId;
632
+ }) : -1;
633
+ if (channel && scrollToMessageIndex !== -1) {
634
+ limitAfter = 4;
635
+ currentLength = currentMessages.length;
636
+ if (scrollToMessageIndex !== -1) {
637
+ noOfMessagesAfter = currentLength - scrollToMessageIndex - 1;
638
+ if (noOfMessagesAfter > limitAfter) {
639
+ endIndex = scrollToMessageIndex + limitAfter;
640
+ channel.state.clearMessages();
641
+ channel.state.messages = currentMessages.slice(0, endIndex + 1);
642
+ splitLatestCurrentMessageSetRef.current();
643
+ restOfMessages = currentMessages.slice(endIndex + 1);
644
+ if (hadCurrentLatestMessages) {
645
+ latestSet = channel.state.messageSets.find(function (set) {
646
+ return set.isLatest;
647
+ });
648
+ if (latestSet) {
649
+ latestSet.messages = restOfMessages;
650
+ hasOverlappingRecentMessagesRef.current = true;
651
+ }
652
+ }
625
653
  }
626
- hadLatestMessages = channel.state.messages === channel.state.latestMessages;
627
- recentMessage = currentMessages[currentMessages.length - 1];
628
- channel.state.clearMessages();
629
- channel.state.messages = currentMessages.slice(startIndex, endIndex);
630
- stillHasLatestMessages = hadLatestMessages && channel.state.messages[channel.state.messages.length - 1] === recentMessage;
631
- setHasNoMoreRecentMessagesToLoad(stillHasLatestMessages);
632
- channel.state.setIsUpToDate(stillHasLatestMessages);
633
654
  }
634
- } else {
635
- areLatestMessages = channel.state.messages === channel.state.latestMessages;
636
- setHasNoMoreRecentMessagesToLoad(areLatestMessages);
637
- channel.state.setIsUpToDate(areLatestMessages);
638
655
  }
656
+ hasLatestMessages = channel.state.latestMessages.length > 0;
657
+ channel.state.setIsUpToDate(hasLatestMessages);
658
+ setHasNoMoreRecentMessagesToLoad(hasLatestMessages);
639
659
  copyChannelState();
660
+ restartSetsMergeFuncRef.current();
640
661
  onAfterQueryCall == null ? void 0 : onAfterQueryCall();
641
- _context.next = 18;
662
+ _context.next = 27;
642
663
  break;
643
- case 13:
644
- _context.prev = 13;
664
+ case 22:
665
+ _context.prev = 22;
645
666
  _context.t0 = _context["catch"](3);
646
667
  if (_context.t0 instanceof Error) {
647
668
  setError(_context.t0);
@@ -650,11 +671,11 @@ var ChannelWithContext = function ChannelWithContext(props) {
650
671
  }
651
672
  setLoading(false);
652
673
  setLastRead(new Date());
653
- case 18:
674
+ case 27:
654
675
  case "end":
655
676
  return _context.stop();
656
677
  }
657
- }, _callee, null, [[3, 13]]);
678
+ }, _callee, null, [[3, 22]]);
658
679
  }));
659
680
  return function (_x) {
660
681
  return _ref.apply(this, arguments);
@@ -664,63 +685,102 @@ var ChannelWithContext = function ChannelWithContext(props) {
664
685
  if (!channel) return;
665
686
  var unreadMessageIdToScrollTo;
666
687
  return channelQueryCallRef.current((0, _asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee2() {
667
- var lastReadDate, _channel$state$messag;
688
+ var unreadCount, isLatestMessageSetShown, lastReadDate, _res$messages$find, res;
668
689
  return _regenerator["default"].wrap(function _callee2$(_context2) {
669
690
  while (1) switch (_context2.prev = _context2.next) {
670
691
  case 0:
671
- setLoading(true);
692
+ unreadCount = channel.countUnread();
693
+ if (!(unreadCount === 0)) {
694
+ _context2.next = 3;
695
+ break;
696
+ }
697
+ return _context2.abrupt("return");
698
+ case 3:
699
+ isLatestMessageSetShown = !!channel.state.messageSets.find(function (set) {
700
+ return set.isCurrent && set.isLatest;
701
+ });
702
+ if (!(isLatestMessageSetShown && unreadCount <= channel.state.messages.length)) {
703
+ _context2.next = 7;
704
+ break;
705
+ }
706
+ unreadMessageIdToScrollTo = channel.state.messages[channel.state.messages.length - unreadCount].id;
707
+ return _context2.abrupt("return");
708
+ case 7:
672
709
  lastReadDate = channel.lastRead();
673
710
  if (!lastReadDate) {
674
- _context2.next = 8;
711
+ _context2.next = 17;
675
712
  break;
676
713
  }
677
- _context2.next = 5;
714
+ setLoading(true);
715
+ _context2.next = 12;
678
716
  return channel.query({
679
717
  messages: {
680
718
  created_at_around: lastReadDate,
681
719
  limit: 30
682
- }
720
+ },
721
+ watch: true
683
722
  }, 'new');
684
- case 5:
685
- unreadMessageIdToScrollTo = (_channel$state$messag = channel.state.messages.find(function (m) {
686
- return lastReadDate < m.created_at;
687
- })) == null ? void 0 : _channel$state$messag.id;
688
- _context2.next = 10;
723
+ case 12:
724
+ res = _context2.sent;
725
+ unreadMessageIdToScrollTo = (_res$messages$find = res.messages.find(function (m) {
726
+ return lastReadDate < (m.created_at ? new Date(m.created_at) : new Date());
727
+ })) == null ? void 0 : _res$messages$find.id;
728
+ if (unreadMessageIdToScrollTo) {
729
+ channel.state.loadMessageIntoState(unreadMessageIdToScrollTo);
730
+ }
731
+ _context2.next = 19;
689
732
  break;
690
- case 8:
691
- _context2.next = 10;
692
- return channel.state.loadMessageIntoState('latest');
693
- case 10:
733
+ case 17:
734
+ _context2.next = 19;
735
+ return loadLatestMessagesRef.current();
736
+ case 19:
694
737
  case "end":
695
738
  return _context2.stop();
696
739
  }
697
740
  }, _callee2);
698
- })), function () {
699
- if (unreadMessageIdToScrollTo) {
700
- setTargetedMessage(unreadMessageIdToScrollTo);
701
- }
741
+ })), undefined, function () {
742
+ return unreadMessageIdToScrollTo;
702
743
  });
703
744
  };
704
745
  var loadChannelAroundMessage = function loadChannelAroundMessage(_ref4) {
705
746
  var messageIdToLoadAround = _ref4.messageId;
706
747
  return channelQueryCallRef.current((0, _asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee3() {
748
+ var currentMessageSet, recentCurrentSetMsgId;
707
749
  return _regenerator["default"].wrap(function _callee3$(_context3) {
708
750
  while (1) switch (_context3.prev = _context3.next) {
709
751
  case 0:
710
752
  setLoading(true);
711
753
  if (!messageIdToLoadAround) {
712
- _context3.next = 6;
754
+ _context3.next = 12;
713
755
  break;
714
756
  }
715
- _context3.next = 4;
757
+ setMessages([]);
758
+ _context3.next = 5;
716
759
  return channel.state.loadMessageIntoState(messageIdToLoadAround);
717
- case 4:
718
- _context3.next = 8;
760
+ case 5:
761
+ currentMessageSet = channel.state.messageSets.find(function (set) {
762
+ return set.isCurrent;
763
+ });
764
+ if (!(currentMessageSet && !(currentMessageSet != null && currentMessageSet.isLatest))) {
765
+ _context3.next = 10;
766
+ break;
767
+ }
768
+ recentCurrentSetMsgId = currentMessageSet.messages[currentMessageSet.messages.length - 1].id;
769
+ _context3.next = 10;
770
+ return channel.query({
771
+ messages: {
772
+ id_gte: recentCurrentSetMsgId,
773
+ limit: 25
774
+ },
775
+ watch: true
776
+ });
777
+ case 10:
778
+ _context3.next = 14;
719
779
  break;
720
- case 6:
721
- _context3.next = 8;
722
- return channel.state.loadMessageIntoState('latest');
723
- case 8:
780
+ case 12:
781
+ _context3.next = 14;
782
+ return loadLatestMessagesRef.current();
783
+ case 14:
724
784
  case "end":
725
785
  return _context3.stop();
726
786
  }
@@ -758,123 +818,211 @@ var ChannelWithContext = function ChannelWithContext(props) {
758
818
  }, _callee4);
759
819
  })));
760
820
  };
821
+ var splitLatestCurrentMessageSetRef = (0, _react.useRef)(function () {
822
+ var currentLatestSet = channel.state.messageSets.find(function (set) {
823
+ return set.isCurrent && set.isLatest;
824
+ });
825
+ if (!currentLatestSet) return;
826
+ currentLatestSet.isLatest = false;
827
+ channel.state.messageSets.push({
828
+ isCurrent: false,
829
+ isLatest: true,
830
+ messages: []
831
+ });
832
+ });
833
+ var mergeOverlappingMessageSetsRef = (0, _react.useRef)(function () {
834
+ var limitToMaxRenderPerBatch = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
835
+ if (hasOverlappingRecentMessagesRef.current) {
836
+ var limit = 30;
837
+ var latestMessageSet = channel.state.messageSets.find(function (set) {
838
+ return set.isLatest;
839
+ });
840
+ var currentMessageSet = channel.state.messageSets.find(function (set) {
841
+ return set.isCurrent;
842
+ });
843
+ if (latestMessageSet && currentMessageSet && latestMessageSet !== currentMessageSet) {
844
+ if (limitToMaxRenderPerBatch && latestMessageSet.messages.length > limit) {
845
+ currentMessageSet.messages = currentMessageSet.messages.concat(latestMessageSet.messages.slice(0, limit));
846
+ latestMessageSet.messages = latestMessageSet.messages.slice(limit);
847
+ } else {
848
+ channel.state.messageSets = channel.state.messageSets.filter(function (set) {
849
+ return !set.isLatest;
850
+ });
851
+ currentMessageSet.messages = currentMessageSet.messages.concat(latestMessageSet.messages);
852
+ currentMessageSet.isLatest = true;
853
+ hasOverlappingRecentMessagesRef.current = false;
854
+ clearInterval(mergeSetsIntervalRef.current);
855
+ }
856
+ return true;
857
+ }
858
+ }
859
+ return false;
860
+ });
861
+ var mergeSetsIntervalRef = (0, _react.useRef)();
862
+ (0, _react.useEffect)(function () {
863
+ return function () {
864
+ clearInterval(mergeSetsIntervalRef.current);
865
+ };
866
+ }, []);
867
+ var restartSetsMergeFuncRef = (0, _react.useRef)(function () {
868
+ clearInterval(mergeSetsIntervalRef.current);
869
+ if (!hasOverlappingRecentMessagesRef.current) return;
870
+ mergeSetsIntervalRef.current = setInterval(function () {
871
+ var currentLength = channel.state.messages.length || 0;
872
+ var didMerge = mergeOverlappingMessageSetsRef.current(true);
873
+ if (didMerge && channel.state.messages.length !== currentLength) {
874
+ setMessages((0, _toConsumableArray2["default"])(channel.state.messages));
875
+ }
876
+ }, 1000);
877
+ });
878
+ var loadLatestMessagesRef = (0, _react.useRef)((0, _asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee5() {
879
+ var clearLatest,
880
+ latestSet,
881
+ _args5 = arguments;
882
+ return _regenerator["default"].wrap(function _callee5$(_context5) {
883
+ while (1) switch (_context5.prev = _context5.next) {
884
+ case 0:
885
+ clearLatest = _args5.length > 0 && _args5[0] !== undefined ? _args5[0] : false;
886
+ mergeOverlappingMessageSetsRef.current();
887
+ if (clearLatest) {
888
+ latestSet = channel.state.messageSets.find(function (set) {
889
+ return set.isLatest;
890
+ });
891
+ if (latestSet) latestSet.messages = [];
892
+ }
893
+ if (!(channel.state.latestMessages.length === 0)) {
894
+ _context5.next = 6;
895
+ break;
896
+ }
897
+ _context5.next = 6;
898
+ return channel.query({}, 'latest');
899
+ case 6:
900
+ _context5.next = 8;
901
+ return channel.state.loadMessageIntoState('latest');
902
+ case 8:
903
+ case "end":
904
+ return _context5.stop();
905
+ }
906
+ }, _callee5);
907
+ })));
761
908
  var loadChannel = function loadChannel() {
762
- return channelQueryCallRef.current((0, _asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee5() {
763
- return _regenerator["default"].wrap(function _callee5$(_context5) {
764
- while (1) switch (_context5.prev = _context5.next) {
909
+ return channelQueryCallRef.current((0, _asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee6() {
910
+ return _regenerator["default"].wrap(function _callee6$(_context6) {
911
+ while (1) switch (_context6.prev = _context6.next) {
765
912
  case 0:
766
913
  if (!(!(channel != null && channel.initialized) || !channel.state.isUpToDate)) {
767
- _context5.next = 7;
914
+ _context6.next = 5;
768
915
  break;
769
916
  }
770
- _context5.next = 3;
917
+ _context6.next = 3;
771
918
  return channel == null ? void 0 : channel.watch();
772
919
  case 3:
773
- setHasNoMoreRecentMessagesToLoad(true);
774
- channel == null ? void 0 : channel.state.setIsUpToDate(true);
775
- _context5.next = 9;
920
+ _context6.next = 7;
776
921
  break;
922
+ case 5:
923
+ _context6.next = 7;
924
+ return loadLatestMessagesRef.current(true);
777
925
  case 7:
778
- _context5.next = 9;
779
- return channel.state.loadMessageIntoState('latest');
926
+ channel == null ? void 0 : channel.state.setIsUpToDate(true);
927
+ setHasNoMoreRecentMessagesToLoad(true);
780
928
  case 9:
781
- return _context5.abrupt("return");
782
- case 10:
783
929
  case "end":
784
- return _context5.stop();
930
+ return _context6.stop();
785
931
  }
786
- }, _callee5);
932
+ }, _callee6);
787
933
  })));
788
934
  };
789
935
  var reloadThread = function () {
790
- var _ref9 = (0, _asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee6() {
936
+ var _ref10 = (0, _asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee7() {
791
937
  var parentID, limit, queryResponse, updatedHasMore, updatedThreadMessages, _yield$channel$getMes, _messages, _messages2, threadMessage, formattedMessage;
792
- return _regenerator["default"].wrap(function _callee6$(_context6) {
793
- while (1) switch (_context6.prev = _context6.next) {
938
+ return _regenerator["default"].wrap(function _callee7$(_context7) {
939
+ while (1) switch (_context7.prev = _context7.next) {
794
940
  case 0:
795
941
  if (!(!channel || !(thread != null && thread.id))) {
796
- _context6.next = 2;
942
+ _context7.next = 2;
797
943
  break;
798
944
  }
799
- return _context6.abrupt("return");
945
+ return _context7.abrupt("return");
800
946
  case 2:
801
947
  setThreadLoadingMore(true);
802
- _context6.prev = 3;
948
+ _context7.prev = 3;
803
949
  parentID = thread.id;
804
950
  limit = 50;
805
951
  channel.state.threads[parentID] = [];
806
- _context6.next = 9;
952
+ _context7.next = 9;
807
953
  return channel.getReplies(parentID, {
808
954
  limit: limit
809
955
  });
810
956
  case 9:
811
- queryResponse = _context6.sent;
957
+ queryResponse = _context7.sent;
812
958
  updatedHasMore = queryResponse.messages.length === limit;
813
959
  updatedThreadMessages = channel.state.threads[parentID] || [];
814
960
  loadMoreThreadFinished(updatedHasMore, updatedThreadMessages);
815
- _context6.next = 15;
961
+ _context7.next = 15;
816
962
  return channel.getMessagesById([parentID]);
817
963
  case 15:
818
- _yield$channel$getMes = _context6.sent;
964
+ _yield$channel$getMes = _context7.sent;
819
965
  _messages = _yield$channel$getMes.messages;
820
966
  _messages2 = (0, _slicedToArray2["default"])(_messages, 1), threadMessage = _messages2[0];
821
967
  if (threadMessage) {
822
968
  formattedMessage = channel.state.formatMessage(threadMessage);
823
969
  setThread(formattedMessage);
824
970
  }
825
- _context6.next = 27;
971
+ _context7.next = 27;
826
972
  break;
827
973
  case 21:
828
- _context6.prev = 21;
829
- _context6.t0 = _context6["catch"](3);
830
- console.warn('Thread loading request failed with error', _context6.t0);
831
- if (_context6.t0 instanceof Error) {
832
- setError(_context6.t0);
974
+ _context7.prev = 21;
975
+ _context7.t0 = _context7["catch"](3);
976
+ console.warn('Thread loading request failed with error', _context7.t0);
977
+ if (_context7.t0 instanceof Error) {
978
+ setError(_context7.t0);
833
979
  } else {
834
980
  setError(true);
835
981
  }
836
982
  setThreadLoadingMore(false);
837
- throw _context6.t0;
983
+ throw _context7.t0;
838
984
  case 27:
839
985
  case "end":
840
- return _context6.stop();
986
+ return _context7.stop();
841
987
  }
842
- }, _callee6, null, [[3, 21]]);
988
+ }, _callee7, null, [[3, 21]]);
843
989
  }));
844
990
  return function reloadThread() {
845
- return _ref9.apply(this, arguments);
991
+ return _ref10.apply(this, arguments);
846
992
  };
847
993
  }();
848
994
  var resyncChannel = function () {
849
- var _ref10 = (0, _asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee7() {
995
+ var _ref11 = (0, _asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee8() {
850
996
  var _messages$, state, oldListTopMessage, oldListTopMessageId, oldListBottomMessage, newListTopMessage, newListBottomMessage, parseMessage, failedMessages, failedThreadMessages, oldListTopMessageCreatedAt, oldListBottomMessageCreatedAt, newListTopMessageCreatedAt, newListBottomMessageCreatedAt, finalMessages, index;
851
- return _regenerator["default"].wrap(function _callee7$(_context7) {
852
- while (1) switch (_context7.prev = _context7.next) {
997
+ return _regenerator["default"].wrap(function _callee8$(_context8) {
998
+ while (1) switch (_context8.prev = _context8.next) {
853
999
  case 0:
854
1000
  if (!(!channel || syncingChannel)) {
855
- _context7.next = 2;
1001
+ _context8.next = 2;
856
1002
  break;
857
1003
  }
858
- return _context7.abrupt("return");
1004
+ return _context8.abrupt("return");
859
1005
  case 2:
1006
+ hasOverlappingRecentMessagesRef.current = false;
1007
+ clearInterval(mergeSetsIntervalRef.current);
860
1008
  setSyncingChannel(true);
861
1009
  setError(false);
862
- _context7.prev = 4;
863
- _context7.next = 7;
1010
+ _context8.prev = 6;
1011
+ _context8.next = 9;
864
1012
  return channel.watch({
865
1013
  messages: {
866
1014
  limit: messages.length + 30
867
1015
  }
868
1016
  });
869
- case 7:
870
- state = _context7.sent;
1017
+ case 9:
1018
+ state = _context8.sent;
871
1019
  oldListTopMessage = messages[0];
872
1020
  oldListTopMessageId = (_messages$ = messages[0]) == null ? void 0 : _messages$.id;
873
1021
  oldListBottomMessage = messages[messages.length - 1];
874
1022
  newListTopMessage = state.messages[0];
875
1023
  newListBottomMessage = state.messages[state.messages.length - 1];
876
1024
  if (!(!oldListTopMessage || !oldListBottomMessage || !newListTopMessage || !newListBottomMessage)) {
877
- _context7.next = 20;
1025
+ _context8.next = 22;
878
1026
  break;
879
1027
  }
880
1028
  channel.state.clearMessages();
@@ -882,8 +1030,8 @@ var ChannelWithContext = function ChannelWithContext(props) {
882
1030
  channel.state.addMessagesSorted(state.messages);
883
1031
  channel.state.addPinnedMessages(state.pinned_messages);
884
1032
  copyChannelState();
885
- return _context7.abrupt("return");
886
- case 20:
1033
+ return _context8.abrupt("return");
1034
+ case 22:
887
1035
  parseMessage = function parseMessage(message) {
888
1036
  var _message$pinned_at, _message$updated_at;
889
1037
  return (0, _extends2["default"])({}, message, {
@@ -911,45 +1059,45 @@ var ChannelWithContext = function ChannelWithContext(props) {
911
1059
  } else {
912
1060
  finalMessages = state.messages;
913
1061
  }
914
- setHasNoMoreRecentMessagesToLoad(true);
915
1062
  channel.state.setIsUpToDate(true);
916
1063
  channel.state.clearMessages();
917
1064
  channel.state.addMessagesSorted(finalMessages);
918
1065
  channel.state.addPinnedMessages(state.pinned_messages);
1066
+ setHasNoMoreRecentMessagesToLoad(true);
919
1067
  setHasMore(true);
920
1068
  copyChannelState();
921
1069
  if (failedMessages.length) {
922
1070
  channel.state.addMessagesSorted(failedMessages);
923
1071
  copyChannelState();
924
1072
  }
925
- _context7.next = 39;
1073
+ _context8.next = 41;
926
1074
  return reloadThread();
927
- case 39:
1075
+ case 41:
928
1076
  if (thread && failedThreadMessages.length) {
929
1077
  channel.state.addMessagesSorted(failedThreadMessages);
930
1078
  setThreadMessages((0, _toConsumableArray2["default"])(channel.state.threads[thread.id]));
931
1079
  }
932
- _context7.next = 46;
1080
+ _context8.next = 48;
933
1081
  break;
934
- case 42:
935
- _context7.prev = 42;
936
- _context7.t0 = _context7["catch"](4);
937
- if (_context7.t0 instanceof Error) {
938
- setError(_context7.t0);
1082
+ case 44:
1083
+ _context8.prev = 44;
1084
+ _context8.t0 = _context8["catch"](6);
1085
+ if (_context8.t0 instanceof Error) {
1086
+ setError(_context8.t0);
939
1087
  } else {
940
1088
  setError(true);
941
1089
  }
942
1090
  setLoading(false);
943
- case 46:
1091
+ case 48:
944
1092
  setSyncingChannel(false);
945
- case 47:
1093
+ case 49:
946
1094
  case "end":
947
- return _context7.stop();
1095
+ return _context8.stop();
948
1096
  }
949
- }, _callee7, null, [[4, 42]]);
1097
+ }, _callee8, null, [[6, 44]]);
950
1098
  }));
951
1099
  return function resyncChannel() {
952
- return _ref10.apply(this, arguments);
1100
+ return _ref11.apply(this, arguments);
953
1101
  };
954
1102
  }();
955
1103
  var resyncChannelRef = (0, _react.useRef)(resyncChannel);
@@ -975,85 +1123,87 @@ var ChannelWithContext = function ChannelWithContext(props) {
975
1123
  };
976
1124
  }, [enableOfflineSupport, shouldSyncChannel]);
977
1125
  var reloadChannel = function reloadChannel() {
978
- return channelQueryCallRef.current((0, _asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee8() {
979
- return _regenerator["default"].wrap(function _callee8$(_context8) {
980
- while (1) switch (_context8.prev = _context8.next) {
1126
+ return channelQueryCallRef.current((0, _asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee9() {
1127
+ return _regenerator["default"].wrap(function _callee9$(_context9) {
1128
+ while (1) switch (_context9.prev = _context9.next) {
981
1129
  case 0:
982
1130
  setLoading(true);
983
- _context8.next = 3;
984
- return channel.state.loadMessageIntoState('latest');
1131
+ _context9.next = 3;
1132
+ return loadLatestMessagesRef.current(true);
985
1133
  case 3:
986
1134
  setLoading(false);
987
- setHasNoMoreRecentMessagesToLoad(true);
988
1135
  channel == null ? void 0 : channel.state.setIsUpToDate(true);
1136
+ setHasNoMoreRecentMessagesToLoad(true);
989
1137
  case 6:
990
1138
  case "end":
991
- return _context8.stop();
1139
+ return _context9.stop();
992
1140
  }
993
- }, _callee8);
1141
+ }, _callee9);
994
1142
  })));
995
1143
  };
996
1144
  var queryAtMessage = function () {
997
- var _ref13 = (0, _asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee9(_ref12) {
998
- var _ref12$after, after, _ref12$before, before, messageId;
999
- return _regenerator["default"].wrap(function _callee9$(_context9) {
1000
- while (1) switch (_context9.prev = _context9.next) {
1145
+ var _ref14 = (0, _asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee10(_ref13) {
1146
+ var _ref13$after, after, _ref13$before, before, messageId;
1147
+ return _regenerator["default"].wrap(function _callee10$(_context10) {
1148
+ while (1) switch (_context10.prev = _context10.next) {
1001
1149
  case 0:
1002
- _ref12$after = _ref12.after, after = _ref12$after === void 0 ? 10 : _ref12$after, _ref12$before = _ref12.before, before = _ref12$before === void 0 ? 10 : _ref12$before, messageId = _ref12.messageId;
1150
+ _ref13$after = _ref13.after, after = _ref13$after === void 0 ? 10 : _ref13$after, _ref13$before = _ref13.before, before = _ref13$before === void 0 ? 10 : _ref13$before, messageId = _ref13.messageId;
1003
1151
  if (channel) {
1004
- _context9.next = 3;
1152
+ _context10.next = 3;
1005
1153
  break;
1006
1154
  }
1007
- return _context9.abrupt("return");
1155
+ return _context10.abrupt("return");
1008
1156
  case 3:
1009
1157
  channel.state.setIsUpToDate(false);
1158
+ hasOverlappingRecentMessagesRef.current = false;
1159
+ clearInterval(mergeSetsIntervalRef.current);
1010
1160
  channel.state.clearMessages();
1011
- setMessages((0, _toConsumableArray2["default"])(channel.state.messages));
1161
+ setMessages([]);
1012
1162
  if (messageId) {
1013
- _context9.next = 11;
1163
+ _context10.next = 13;
1014
1164
  break;
1015
1165
  }
1016
- _context9.next = 9;
1166
+ _context10.next = 11;
1017
1167
  return channel.query({
1018
1168
  messages: {
1019
1169
  limit: before
1020
1170
  },
1021
1171
  watch: true
1022
1172
  });
1023
- case 9:
1024
- channel.state.setIsUpToDate(true);
1025
- return _context9.abrupt("return");
1026
1173
  case 11:
1027
- _context9.next = 13;
1028
- return queryBeforeMessage(messageId, before);
1174
+ channel.state.setIsUpToDate(true);
1175
+ return _context10.abrupt("return");
1029
1176
  case 13:
1030
- _context9.next = 15;
1031
- return queryAfterMessage(messageId, after);
1177
+ _context10.next = 15;
1178
+ return queryBeforeMessage(messageId, before);
1032
1179
  case 15:
1180
+ _context10.next = 17;
1181
+ return queryAfterMessage(messageId, after);
1182
+ case 17:
1033
1183
  case "end":
1034
- return _context9.stop();
1184
+ return _context10.stop();
1035
1185
  }
1036
- }, _callee9);
1186
+ }, _callee10);
1037
1187
  }));
1038
1188
  return function queryAtMessage(_x2) {
1039
- return _ref13.apply(this, arguments);
1189
+ return _ref14.apply(this, arguments);
1040
1190
  };
1041
1191
  }();
1042
1192
  var queryBeforeMessage = function () {
1043
- var _ref14 = (0, _asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee10(messageId) {
1193
+ var _ref15 = (0, _asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee11(messageId) {
1044
1194
  var limit,
1045
- _args10 = arguments;
1046
- return _regenerator["default"].wrap(function _callee10$(_context10) {
1047
- while (1) switch (_context10.prev = _context10.next) {
1195
+ _args11 = arguments;
1196
+ return _regenerator["default"].wrap(function _callee11$(_context11) {
1197
+ while (1) switch (_context11.prev = _context11.next) {
1048
1198
  case 0:
1049
- limit = _args10.length > 1 && _args10[1] !== undefined ? _args10[1] : 5;
1199
+ limit = _args11.length > 1 && _args11[1] !== undefined ? _args11[1] : 5;
1050
1200
  if (channel) {
1051
- _context10.next = 3;
1201
+ _context11.next = 3;
1052
1202
  break;
1053
1203
  }
1054
- return _context10.abrupt("return");
1204
+ return _context11.abrupt("return");
1055
1205
  case 3:
1056
- _context10.next = 5;
1206
+ _context11.next = 5;
1057
1207
  return channel.query({
1058
1208
  messages: {
1059
1209
  id_lt: messageId,
@@ -1065,30 +1215,31 @@ var ChannelWithContext = function ChannelWithContext(props) {
1065
1215
  channel.state.setIsUpToDate(false);
1066
1216
  case 6:
1067
1217
  case "end":
1068
- return _context10.stop();
1218
+ return _context11.stop();
1069
1219
  }
1070
- }, _callee10);
1220
+ }, _callee11);
1071
1221
  }));
1072
1222
  return function queryBeforeMessage(_x3) {
1073
- return _ref14.apply(this, arguments);
1223
+ return _ref15.apply(this, arguments);
1074
1224
  };
1075
1225
  }();
1076
1226
  var queryAfterMessage = function () {
1077
- var _ref15 = (0, _asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee11(messageId) {
1227
+ var _ref16 = (0, _asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee12(messageId) {
1078
1228
  var limit,
1079
1229
  state,
1080
- _args11 = arguments;
1081
- return _regenerator["default"].wrap(function _callee11$(_context11) {
1082
- while (1) switch (_context11.prev = _context11.next) {
1230
+ currentSet,
1231
+ _args12 = arguments;
1232
+ return _regenerator["default"].wrap(function _callee12$(_context12) {
1233
+ while (1) switch (_context12.prev = _context12.next) {
1083
1234
  case 0:
1084
- limit = _args11.length > 1 && _args11[1] !== undefined ? _args11[1] : 5;
1235
+ limit = _args12.length > 1 && _args12[1] !== undefined ? _args12[1] : 5;
1085
1236
  if (channel) {
1086
- _context11.next = 3;
1237
+ _context12.next = 3;
1087
1238
  break;
1088
1239
  }
1089
- return _context11.abrupt("return");
1240
+ return _context12.abrupt("return");
1090
1241
  case 3:
1091
- _context11.next = 5;
1242
+ _context12.next = 5;
1092
1243
  return channel.query({
1093
1244
  messages: {
1094
1245
  id_gte: messageId,
@@ -1097,20 +1248,32 @@ var ChannelWithContext = function ChannelWithContext(props) {
1097
1248
  watch: true
1098
1249
  });
1099
1250
  case 5:
1100
- state = _context11.sent;
1251
+ state = _context12.sent;
1101
1252
  if (state.messages.length < limit) {
1253
+ currentSet = channel.state.messageSets.find(function (set) {
1254
+ return set.isCurrent;
1255
+ });
1256
+ if (currentSet && !currentSet.isLatest) {
1257
+ channel.state.messageSets = channel.state.messageSets.filter(function (set) {
1258
+ return !set.isLatest;
1259
+ });
1260
+ currentSet.isLatest = true;
1261
+ }
1102
1262
  channel.state.setIsUpToDate(true);
1263
+ setHasNoMoreRecentMessagesToLoad(true);
1103
1264
  } else {
1265
+ splitLatestCurrentMessageSetRef.current();
1104
1266
  channel.state.setIsUpToDate(false);
1267
+ setHasNoMoreRecentMessagesToLoad(false);
1105
1268
  }
1106
1269
  case 7:
1107
1270
  case "end":
1108
- return _context11.stop();
1271
+ return _context12.stop();
1109
1272
  }
1110
- }, _callee11);
1273
+ }, _callee12);
1111
1274
  }));
1112
1275
  return function queryAfterMessage(_x4) {
1113
- return _ref15.apply(this, arguments);
1276
+ return _ref16.apply(this, arguments);
1114
1277
  };
1115
1278
  }();
1116
1279
  var getChannelConfigSafely = function getChannelConfigSafely() {
@@ -1143,12 +1306,12 @@ var ChannelWithContext = function ChannelWithContext(props) {
1143
1306
  setMessages(channel.state.messages);
1144
1307
  }
1145
1308
  };
1146
- var createMessagePreview = function createMessagePreview(_ref16) {
1147
- var attachments = _ref16.attachments,
1148
- mentioned_users = _ref16.mentioned_users,
1149
- parent_id = _ref16.parent_id,
1150
- text = _ref16.text,
1151
- extraFields = (0, _objectWithoutProperties2["default"])(_ref16, _excluded);
1309
+ var createMessagePreview = function createMessagePreview(_ref17) {
1310
+ var attachments = _ref17.attachments,
1311
+ mentioned_users = _ref17.mentioned_users,
1312
+ parent_id = _ref17.parent_id,
1313
+ text = _ref17.text,
1314
+ extraFields = (0, _objectWithoutProperties2["default"])(_ref17, _excluded);
1152
1315
  var _client$user2 = client.user,
1153
1316
  channel_mutes = _client$user2.channel_mutes,
1154
1317
  devices = _client$user2.devices,
@@ -1183,28 +1346,28 @@ var ChannelWithContext = function ChannelWithContext(props) {
1183
1346
  return preview;
1184
1347
  };
1185
1348
  var uploadPendingAttachments = function () {
1186
- var _ref17 = (0, _asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee12(message) {
1349
+ var _ref18 = (0, _asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee13(message) {
1187
1350
  var _updatedMessage$attac;
1188
1351
  var updatedMessage, i, _updatedMessage$attac2, attachment, image, file, _image$name, filename, controller, compressedUri, contentType, uploadResponse, _controller, response;
1189
- return _regenerator["default"].wrap(function _callee12$(_context12) {
1190
- while (1) switch (_context12.prev = _context12.next) {
1352
+ return _regenerator["default"].wrap(function _callee13$(_context13) {
1353
+ while (1) switch (_context13.prev = _context13.next) {
1191
1354
  case 0:
1192
1355
  updatedMessage = (0, _extends2["default"])({}, message);
1193
1356
  if (!((_updatedMessage$attac = updatedMessage.attachments) != null && _updatedMessage$attac.length)) {
1194
- _context12.next = 48;
1357
+ _context13.next = 48;
1195
1358
  break;
1196
1359
  }
1197
1360
  i = 0;
1198
1361
  case 3:
1199
1362
  if (!(i < ((_updatedMessage$attac2 = updatedMessage.attachments) == null ? void 0 : _updatedMessage$attac2.length))) {
1200
- _context12.next = 48;
1363
+ _context13.next = 48;
1201
1364
  break;
1202
1365
  }
1203
1366
  attachment = updatedMessage.attachments[i];
1204
1367
  image = attachment.originalImage;
1205
1368
  file = attachment.originalFile;
1206
1369
  if (!(attachment.type === 'image' && image != null && image.uri && attachment.image_url && (0, _utils.isLocalUrl)(attachment.image_url))) {
1207
- _context12.next = 28;
1370
+ _context13.next = 28;
1208
1371
  break;
1209
1372
  }
1210
1373
  filename = (_image$name = image.name) != null ? _image$name : image.uri.replace(/^(file:\/\/|content:\/\/)/, '');
@@ -1213,28 +1376,28 @@ var ChannelWithContext = function ChannelWithContext(props) {
1213
1376
  controller.abort();
1214
1377
  uploadAbortControllerRef.current["delete"](filename);
1215
1378
  }
1216
- _context12.next = 13;
1379
+ _context13.next = 13;
1217
1380
  return (0, _compressImage.compressedImageURI)(image, compressImageQuality);
1218
1381
  case 13:
1219
- compressedUri = _context12.sent;
1382
+ compressedUri = _context13.sent;
1220
1383
  contentType = (0, _mimeTypes.lookup)(filename) || 'multipart/form-data';
1221
1384
  if (!doImageUploadRequest) {
1222
- _context12.next = 21;
1385
+ _context13.next = 21;
1223
1386
  break;
1224
1387
  }
1225
- _context12.next = 18;
1388
+ _context13.next = 18;
1226
1389
  return doImageUploadRequest(image, channel);
1227
1390
  case 18:
1228
- _context12.t0 = _context12.sent;
1229
- _context12.next = 24;
1391
+ _context13.t0 = _context13.sent;
1392
+ _context13.next = 24;
1230
1393
  break;
1231
1394
  case 21:
1232
- _context12.next = 23;
1395
+ _context13.next = 23;
1233
1396
  return channel.sendImage(compressedUri, filename, contentType);
1234
1397
  case 23:
1235
- _context12.t0 = _context12.sent;
1398
+ _context13.t0 = _context13.sent;
1236
1399
  case 24:
1237
- uploadResponse = _context12.t0;
1400
+ uploadResponse = _context13.t0;
1238
1401
  attachment.image_url = uploadResponse.file;
1239
1402
  delete attachment.originalFile;
1240
1403
  dbApi.updateMessage({
@@ -1244,7 +1407,7 @@ var ChannelWithContext = function ChannelWithContext(props) {
1244
1407
  });
1245
1408
  case 28:
1246
1409
  if (!((attachment.type === 'file' || attachment.type === 'audio' || attachment.type === 'video') && attachment.asset_url && (0, _utils.isLocalUrl)(attachment.asset_url) && file != null && file.uri)) {
1247
- _context12.next = 45;
1410
+ _context13.next = 45;
1248
1411
  break;
1249
1412
  }
1250
1413
  _controller = uploadAbortControllerRef.current.get(file.name);
@@ -1253,22 +1416,22 @@ var ChannelWithContext = function ChannelWithContext(props) {
1253
1416
  uploadAbortControllerRef.current["delete"](file.name);
1254
1417
  }
1255
1418
  if (!doDocUploadRequest) {
1256
- _context12.next = 37;
1419
+ _context13.next = 37;
1257
1420
  break;
1258
1421
  }
1259
- _context12.next = 34;
1422
+ _context13.next = 34;
1260
1423
  return doDocUploadRequest(file, channel);
1261
1424
  case 34:
1262
- _context12.t1 = _context12.sent;
1263
- _context12.next = 40;
1425
+ _context13.t1 = _context13.sent;
1426
+ _context13.next = 40;
1264
1427
  break;
1265
1428
  case 37:
1266
- _context12.next = 39;
1429
+ _context13.next = 39;
1267
1430
  return channel.sendFile(file.uri, file.name, file.mimeType);
1268
1431
  case 39:
1269
- _context12.t1 = _context12.sent;
1432
+ _context13.t1 = _context13.sent;
1270
1433
  case 40:
1271
- response = _context12.t1;
1434
+ response = _context13.t1;
1272
1435
  attachment.asset_url = response.file;
1273
1436
  if (response.thumb_url) {
1274
1437
  attachment.thumb_url = response.thumb_url;
@@ -1281,37 +1444,37 @@ var ChannelWithContext = function ChannelWithContext(props) {
1281
1444
  });
1282
1445
  case 45:
1283
1446
  i++;
1284
- _context12.next = 3;
1447
+ _context13.next = 3;
1285
1448
  break;
1286
1449
  case 48:
1287
- return _context12.abrupt("return", updatedMessage);
1450
+ return _context13.abrupt("return", updatedMessage);
1288
1451
  case 49:
1289
1452
  case "end":
1290
- return _context12.stop();
1453
+ return _context13.stop();
1291
1454
  }
1292
- }, _callee12);
1455
+ }, _callee13);
1293
1456
  }));
1294
1457
  return function uploadPendingAttachments(_x5) {
1295
- return _ref17.apply(this, arguments);
1458
+ return _ref18.apply(this, arguments);
1296
1459
  };
1297
1460
  }();
1298
1461
  var sendMessageRequest = function () {
1299
- var _ref18 = (0, _asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee13(message, retrying) {
1462
+ var _ref19 = (0, _asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee14(message, retrying) {
1300
1463
  var _updatedMessage, __html, attachments, created_at, deleted_at, html, id, latest_reactions, mentioned_users, own_reactions, parent_id, quoted_message, reaction_counts, reactions, status, text, type, updated_at, user, extraFields, mentionedUserIds, _messageData, messageResponse;
1301
- return _regenerator["default"].wrap(function _callee13$(_context13) {
1302
- while (1) switch (_context13.prev = _context13.next) {
1464
+ return _regenerator["default"].wrap(function _callee14$(_context14) {
1465
+ while (1) switch (_context14.prev = _context14.next) {
1303
1466
  case 0:
1304
- _context13.prev = 0;
1305
- _context13.next = 3;
1467
+ _context14.prev = 0;
1468
+ _context14.next = 3;
1306
1469
  return uploadPendingAttachments(message);
1307
1470
  case 3:
1308
- _updatedMessage = _context13.sent;
1471
+ _updatedMessage = _context14.sent;
1309
1472
  __html = _updatedMessage.__html, attachments = _updatedMessage.attachments, created_at = _updatedMessage.created_at, deleted_at = _updatedMessage.deleted_at, html = _updatedMessage.html, id = _updatedMessage.id, latest_reactions = _updatedMessage.latest_reactions, mentioned_users = _updatedMessage.mentioned_users, own_reactions = _updatedMessage.own_reactions, parent_id = _updatedMessage.parent_id, quoted_message = _updatedMessage.quoted_message, reaction_counts = _updatedMessage.reaction_counts, reactions = _updatedMessage.reactions, status = _updatedMessage.status, text = _updatedMessage.text, type = _updatedMessage.type, updated_at = _updatedMessage.updated_at, user = _updatedMessage.user, extraFields = (0, _objectWithoutProperties2["default"])(_updatedMessage, _excluded3);
1310
1473
  if (channel.id) {
1311
- _context13.next = 7;
1474
+ _context14.next = 7;
1312
1475
  break;
1313
1476
  }
1314
- return _context13.abrupt("return");
1477
+ return _context14.abrupt("return");
1315
1478
  case 7:
1316
1479
  mentionedUserIds = (mentioned_users == null ? void 0 : mentioned_users.map(function (user) {
1317
1480
  return user.id;
@@ -1325,24 +1488,24 @@ var ChannelWithContext = function ChannelWithContext(props) {
1325
1488
  }, extraFields);
1326
1489
  messageResponse = {};
1327
1490
  if (!doSendMessageRequest) {
1328
- _context13.next = 16;
1491
+ _context14.next = 16;
1329
1492
  break;
1330
1493
  }
1331
- _context13.next = 13;
1494
+ _context14.next = 13;
1332
1495
  return doSendMessageRequest((channel == null ? void 0 : channel.cid) || '', _messageData);
1333
1496
  case 13:
1334
- messageResponse = _context13.sent;
1335
- _context13.next = 20;
1497
+ messageResponse = _context14.sent;
1498
+ _context14.next = 20;
1336
1499
  break;
1337
1500
  case 16:
1338
1501
  if (!channel) {
1339
- _context13.next = 20;
1502
+ _context14.next = 20;
1340
1503
  break;
1341
1504
  }
1342
- _context13.next = 19;
1505
+ _context14.next = 19;
1343
1506
  return channel.sendMessage(_messageData);
1344
1507
  case 19:
1345
- messageResponse = _context13.sent;
1508
+ messageResponse = _context14.sent;
1346
1509
  case 20:
1347
1510
  if (messageResponse.message) {
1348
1511
  messageResponse.message.status = _utils.MessageStatusTypes.RECEIVED;
@@ -1359,12 +1522,12 @@ var ChannelWithContext = function ChannelWithContext(props) {
1359
1522
  updateMessage(messageResponse.message);
1360
1523
  }
1361
1524
  }
1362
- _context13.next = 29;
1525
+ _context14.next = 29;
1363
1526
  break;
1364
1527
  case 23:
1365
- _context13.prev = 23;
1366
- _context13.t0 = _context13["catch"](0);
1367
- console.log(_context13.t0);
1528
+ _context14.prev = 23;
1529
+ _context14.t0 = _context14["catch"](0);
1530
+ console.log(_context14.t0);
1368
1531
  message.status = _utils.MessageStatusTypes.FAILED;
1369
1532
  updateMessage((0, _extends2["default"])({}, message, {
1370
1533
  cid: channel.cid
@@ -1378,20 +1541,20 @@ var ChannelWithContext = function ChannelWithContext(props) {
1378
1541
  }
1379
1542
  case 29:
1380
1543
  case "end":
1381
- return _context13.stop();
1544
+ return _context14.stop();
1382
1545
  }
1383
- }, _callee13, null, [[0, 23]]);
1546
+ }, _callee14, null, [[0, 23]]);
1384
1547
  }));
1385
1548
  return function sendMessageRequest(_x6, _x7) {
1386
- return _ref18.apply(this, arguments);
1549
+ return _ref19.apply(this, arguments);
1387
1550
  };
1388
1551
  }();
1389
1552
  var sendMessage = function () {
1390
- var _ref19 = (0, _asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee14(message) {
1553
+ var _ref20 = (0, _asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee15(message) {
1391
1554
  var _channel$state;
1392
1555
  var messagePreview;
1393
- return _regenerator["default"].wrap(function _callee14$(_context14) {
1394
- while (1) switch (_context14.prev = _context14.next) {
1556
+ return _regenerator["default"].wrap(function _callee15$(_context15) {
1557
+ while (1) switch (_context15.prev = _context15.next) {
1395
1558
  case 0:
1396
1559
  if (channel != null && (_channel$state = channel.state) != null && _channel$state.filterErrorMessages) {
1397
1560
  channel.state.filterErrorMessages();
@@ -1399,13 +1562,14 @@ var ChannelWithContext = function ChannelWithContext(props) {
1399
1562
  messagePreview = createMessagePreview((0, _extends2["default"])({}, message, {
1400
1563
  attachments: message.attachments || []
1401
1564
  }));
1565
+ mergeOverlappingMessageSetsRef.current();
1402
1566
  if (channel != null && channel.state.isUpToDate) {
1403
- _context14.next = 5;
1567
+ _context15.next = 6;
1404
1568
  break;
1405
1569
  }
1406
- _context14.next = 5;
1570
+ _context15.next = 6;
1407
1571
  return reloadChannel();
1408
- case 5:
1572
+ case 6:
1409
1573
  updateMessage(messagePreview, {
1410
1574
  commands: [],
1411
1575
  messageInput: ''
@@ -1418,86 +1582,87 @@ var ChannelWithContext = function ChannelWithContext(props) {
1418
1582
  })]
1419
1583
  });
1420
1584
  }
1421
- _context14.next = 9;
1585
+ _context15.next = 10;
1422
1586
  return sendMessageRequest(messagePreview);
1423
- case 9:
1587
+ case 10:
1424
1588
  case "end":
1425
- return _context14.stop();
1589
+ return _context15.stop();
1426
1590
  }
1427
- }, _callee14);
1591
+ }, _callee15);
1428
1592
  }));
1429
1593
  return function sendMessage(_x8) {
1430
- return _ref19.apply(this, arguments);
1594
+ return _ref20.apply(this, arguments);
1431
1595
  };
1432
1596
  }();
1433
1597
  var retrySendMessage = function () {
1434
- var _ref20 = (0, _asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee15(message) {
1598
+ var _ref21 = (0, _asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee16(message) {
1435
1599
  var statusPendingMessage;
1436
- return _regenerator["default"].wrap(function _callee15$(_context15) {
1437
- while (1) switch (_context15.prev = _context15.next) {
1600
+ return _regenerator["default"].wrap(function _callee16$(_context16) {
1601
+ while (1) switch (_context16.prev = _context16.next) {
1438
1602
  case 0:
1439
1603
  statusPendingMessage = (0, _extends2["default"])({}, message, {
1440
1604
  status: _utils.MessageStatusTypes.SENDING
1441
1605
  });
1442
1606
  updateMessage(statusPendingMessage);
1443
- _context15.next = 4;
1607
+ _context16.next = 4;
1444
1608
  return sendMessageRequest(statusPendingMessage, true);
1445
1609
  case 4:
1446
1610
  case "end":
1447
- return _context15.stop();
1611
+ return _context16.stop();
1448
1612
  }
1449
- }, _callee15);
1613
+ }, _callee16);
1450
1614
  }));
1451
1615
  return function retrySendMessage(_x9) {
1452
- return _ref20.apply(this, arguments);
1616
+ return _ref21.apply(this, arguments);
1453
1617
  };
1454
1618
  }();
1455
1619
  var loadMoreFinished = (0, _react.useRef)((0, _debounce["default"])(function (updatedHasMore, newMessages) {
1620
+ setLoading(false);
1456
1621
  setLoadingMore(false);
1457
1622
  setError(false);
1458
1623
  setHasMore(updatedHasMore);
1459
1624
  setMessages(newMessages);
1460
1625
  }, defaultDebounceInterval, debounceOptions)).current;
1461
- var loadMore = (0, _react.useCallback)((0, _asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee16() {
1626
+ var loadMore = (0, _react.useCallback)((0, _asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee17() {
1462
1627
  var limit,
1463
1628
  currentMessages,
1464
1629
  oldestMessage,
1465
1630
  oldestID,
1466
1631
  queryResponse,
1467
1632
  updatedHasMore,
1468
- _args16 = arguments;
1469
- return _regenerator["default"].wrap(function _callee16$(_context16) {
1470
- while (1) switch (_context16.prev = _context16.next) {
1633
+ _args17 = arguments;
1634
+ return _regenerator["default"].wrap(function _callee17$(_context17) {
1635
+ while (1) switch (_context17.prev = _context17.next) {
1471
1636
  case 0:
1472
- limit = _args16.length > 0 && _args16[0] !== undefined ? _args16[0] : 20;
1637
+ limit = _args17.length > 0 && _args17[0] !== undefined ? _args17[0] : 20;
1473
1638
  if (!(loadingMore || hasMore === false)) {
1474
- _context16.next = 3;
1639
+ _context17.next = 3;
1475
1640
  break;
1476
1641
  }
1477
- return _context16.abrupt("return");
1642
+ return _context17.abrupt("return");
1478
1643
  case 3:
1479
- setLoadingMore(true);
1480
- currentMessages = messagesRef.current;
1644
+ currentMessages = channel.state.messages;
1481
1645
  if (currentMessages.length) {
1482
- _context16.next = 7;
1646
+ _context17.next = 6;
1483
1647
  break;
1484
1648
  }
1485
- return _context16.abrupt("return", setLoadingMore(false));
1486
- case 7:
1649
+ return _context17.abrupt("return", setLoadingMore(false));
1650
+ case 6:
1487
1651
  oldestMessage = currentMessages && currentMessages[0];
1488
1652
  if (!(oldestMessage && oldestMessage.status !== _utils.MessageStatusTypes.RECEIVED)) {
1489
- _context16.next = 10;
1653
+ _context17.next = 9;
1490
1654
  break;
1491
1655
  }
1492
- return _context16.abrupt("return", setLoadingMore(false));
1493
- case 10:
1656
+ return _context17.abrupt("return", setLoadingMore(false));
1657
+ case 9:
1658
+ setLoadingMore(true);
1494
1659
  oldestID = oldestMessage && oldestMessage.id;
1495
- _context16.prev = 11;
1660
+ _context17.prev = 11;
1496
1661
  if (!channel) {
1497
- _context16.next = 18;
1662
+ _context17.next = 18;
1498
1663
  break;
1499
1664
  }
1500
- _context16.next = 15;
1665
+ _context17.next = 15;
1501
1666
  return channel.query({
1502
1667
  messages: {
1503
1668
  id_lt: oldestID,
@@ -1505,60 +1670,86 @@ var ChannelWithContext = function ChannelWithContext(props) {
1505
1670
  }
1506
1671
  });
1507
1672
  case 15:
1508
- queryResponse = _context16.sent;
1673
+ queryResponse = _context17.sent;
1509
1674
  updatedHasMore = queryResponse.messages.length === limit;
1510
1675
  loadMoreFinished(updatedHasMore, channel.state.messages);
1511
1676
  case 18:
1512
- _context16.next = 25;
1677
+ _context17.next = 25;
1513
1678
  break;
1514
1679
  case 20:
1515
- _context16.prev = 20;
1516
- _context16.t0 = _context16["catch"](11);
1517
- if (_context16.t0 instanceof Error) {
1518
- setError(_context16.t0);
1680
+ _context17.prev = 20;
1681
+ _context17.t0 = _context17["catch"](11);
1682
+ if (_context17.t0 instanceof Error) {
1683
+ setError(_context17.t0);
1519
1684
  } else {
1520
1685
  setError(true);
1521
1686
  }
1522
1687
  setLoadingMore(false);
1523
- throw _context16.t0;
1688
+ throw _context17.t0;
1524
1689
  case 25:
1525
1690
  case "end":
1526
- return _context16.stop();
1691
+ return _context17.stop();
1527
1692
  }
1528
- }, _callee16, null, [[11, 20]]);
1693
+ }, _callee17, null, [[11, 20]]);
1529
1694
  })), [channelId, hasMore, loadingMore]);
1530
- var loadMoreRecent = (0, _react.useCallback)((0, _asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee17() {
1695
+ var loadMoreRecent = (0, _react.useCallback)((0, _asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee18() {
1531
1696
  var limit,
1697
+ latestMessageSet,
1698
+ latestLengthBeforeMerge,
1699
+ didMerge,
1532
1700
  currentMessages,
1533
1701
  recentMessage,
1534
1702
  queryResponse,
1535
- _args17 = arguments;
1536
- return _regenerator["default"].wrap(function _callee17$(_context17) {
1537
- while (1) switch (_context17.prev = _context17.next) {
1703
+ gotAllRecentMessages,
1704
+ currentSet,
1705
+ _args18 = arguments;
1706
+ return _regenerator["default"].wrap(function _callee18$(_context18) {
1707
+ while (1) switch (_context18.prev = _context18.next) {
1538
1708
  case 0:
1539
- limit = _args17.length > 0 && _args17[0] !== undefined ? _args17[0] : 5;
1540
- if (!hasNoMoreRecentMessagesToLoad) {
1541
- _context17.next = 3;
1709
+ limit = _args18.length > 0 && _args18[0] !== undefined ? _args18[0] : 5;
1710
+ latestMessageSet = channel.state.messageSets.find(function (set) {
1711
+ return set.isLatest;
1712
+ });
1713
+ latestLengthBeforeMerge = (latestMessageSet == null ? void 0 : latestMessageSet.messages.length) || 0;
1714
+ didMerge = mergeOverlappingMessageSetsRef.current(true);
1715
+ if (!didMerge) {
1716
+ _context18.next = 12;
1717
+ break;
1718
+ }
1719
+ if (!(latestMessageSet && latestLengthBeforeMerge >= limit)) {
1720
+ _context18.next = 12;
1542
1721
  break;
1543
1722
  }
1544
- return _context17.abrupt("return");
1545
- case 3:
1546
1723
  setLoadingMoreRecent(true);
1547
- currentMessages = messagesRef.current;
1724
+ channel.state.setIsUpToDate(true);
1725
+ setHasNoMoreRecentMessagesToLoad(true);
1726
+ loadMoreRecentFinished(channel.state.messages);
1727
+ restartSetsMergeFuncRef.current();
1728
+ return _context18.abrupt("return");
1729
+ case 12:
1730
+ if (!channel.state.isUpToDate) {
1731
+ _context18.next = 15;
1732
+ break;
1733
+ }
1734
+ setLoadingMoreRecent(false);
1735
+ return _context18.abrupt("return");
1736
+ case 15:
1737
+ currentMessages = channel.state.messages;
1548
1738
  recentMessage = currentMessages[currentMessages.length - 1];
1549
1739
  if (!((recentMessage == null ? void 0 : recentMessage.status) !== _utils.MessageStatusTypes.RECEIVED)) {
1550
- _context17.next = 9;
1740
+ _context18.next = 20;
1551
1741
  break;
1552
1742
  }
1553
1743
  setLoadingMoreRecent(false);
1554
- return _context17.abrupt("return");
1555
- case 9:
1556
- _context17.prev = 9;
1744
+ return _context18.abrupt("return");
1745
+ case 20:
1746
+ setLoadingMoreRecent(true);
1747
+ _context18.prev = 21;
1557
1748
  if (!channel) {
1558
- _context17.next = 16;
1749
+ _context18.next = 32;
1559
1750
  break;
1560
1751
  }
1561
- _context17.next = 13;
1752
+ _context18.next = 25;
1562
1753
  return channel.query({
1563
1754
  messages: {
1564
1755
  id_gte: recentMessage.id,
@@ -1566,29 +1757,40 @@ var ChannelWithContext = function ChannelWithContext(props) {
1566
1757
  },
1567
1758
  watch: true
1568
1759
  });
1569
- case 13:
1570
- queryResponse = _context17.sent;
1571
- setHasNoMoreRecentMessagesToLoad(queryResponse.messages.length < limit);
1760
+ case 25:
1761
+ queryResponse = _context18.sent;
1762
+ gotAllRecentMessages = queryResponse.messages.length < limit;
1763
+ currentSet = channel.state.messageSets.find(function (set) {
1764
+ return set.isCurrent;
1765
+ });
1766
+ if (gotAllRecentMessages && currentSet && !currentSet.isLatest) {
1767
+ channel.state.messageSets = channel.state.messageSets.filter(function (set) {
1768
+ return !set.isLatest;
1769
+ });
1770
+ currentSet.isLatest = true;
1771
+ }
1772
+ channel.state.setIsUpToDate(gotAllRecentMessages);
1773
+ setHasNoMoreRecentMessagesToLoad(gotAllRecentMessages);
1572
1774
  loadMoreRecentFinished(channel.state.messages);
1573
- case 16:
1574
- _context17.next = 24;
1775
+ case 32:
1776
+ _context18.next = 40;
1575
1777
  break;
1576
- case 18:
1577
- _context17.prev = 18;
1578
- _context17.t0 = _context17["catch"](9);
1579
- console.warn('Message pagination request failed with error', _context17.t0);
1580
- if (_context17.t0 instanceof Error) {
1581
- setError(_context17.t0);
1778
+ case 34:
1779
+ _context18.prev = 34;
1780
+ _context18.t0 = _context18["catch"](21);
1781
+ console.warn('Message pagination request failed with error', _context18.t0);
1782
+ if (_context18.t0 instanceof Error) {
1783
+ setError(_context18.t0);
1582
1784
  } else {
1583
1785
  setError(true);
1584
1786
  }
1585
1787
  setLoadingMoreRecent(false);
1586
- throw _context17.t0;
1587
- case 24:
1788
+ throw _context18.t0;
1789
+ case 40:
1588
1790
  case "end":
1589
- return _context17.stop();
1791
+ return _context18.stop();
1590
1792
  }
1591
- }, _callee17, null, [[9, 18]]);
1793
+ }, _callee18, null, [[21, 34]]);
1592
1794
  })), [channelId, hasNoMoreRecentMessagesToLoad]);
1593
1795
  var loadMoreRecentFinished = (0, _react.useRef)((0, _debounce["default"])(function (newMessages) {
1594
1796
  setLoadingMoreRecent(false);
@@ -1626,13 +1828,13 @@ var ChannelWithContext = function ChannelWithContext(props) {
1626
1828
  }
1627
1829
  };
1628
1830
  var sendReaction = function () {
1629
- var _ref23 = (0, _asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee18(type, messageId) {
1831
+ var _ref24 = (0, _asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee19(type, messageId) {
1630
1832
  var payload;
1631
- return _regenerator["default"].wrap(function _callee18$(_context18) {
1632
- while (1) switch (_context18.prev = _context18.next) {
1833
+ return _regenerator["default"].wrap(function _callee19$(_context19) {
1834
+ while (1) switch (_context19.prev = _context19.next) {
1633
1835
  case 0:
1634
1836
  if (!(!(channel != null && channel.id) || !client.user)) {
1635
- _context18.next = 2;
1837
+ _context19.next = 2;
1636
1838
  break;
1637
1839
  }
1638
1840
  throw new Error('Channel has not been initialized');
@@ -1643,13 +1845,13 @@ var ChannelWithContext = function ChannelWithContext(props) {
1643
1845
  enforce_unique: enforceUniqueReaction
1644
1846
  }];
1645
1847
  if (enableOfflineSupport) {
1646
- _context18.next = 7;
1848
+ _context19.next = 7;
1647
1849
  break;
1648
1850
  }
1649
- _context18.next = 6;
1851
+ _context19.next = 6;
1650
1852
  return channel.sendReaction.apply(channel, payload);
1651
1853
  case 6:
1652
- return _context18.abrupt("return");
1854
+ return _context19.abrupt("return");
1653
1855
  case 7:
1654
1856
  (0, _addReactionToLocalState.addReactionToLocalState)({
1655
1857
  channel: channel,
@@ -1659,7 +1861,7 @@ var ChannelWithContext = function ChannelWithContext(props) {
1659
1861
  user: client.user
1660
1862
  });
1661
1863
  setMessages(channel.state.messages);
1662
- _context18.next = 11;
1864
+ _context19.next = 11;
1663
1865
  return _DBSyncManager.DBSyncManager.queueTask({
1664
1866
  client: client,
1665
1867
  task: {
@@ -1672,51 +1874,51 @@ var ChannelWithContext = function ChannelWithContext(props) {
1672
1874
  });
1673
1875
  case 11:
1674
1876
  case "end":
1675
- return _context18.stop();
1877
+ return _context19.stop();
1676
1878
  }
1677
- }, _callee18);
1879
+ }, _callee19);
1678
1880
  }));
1679
1881
  return function sendReaction(_x10, _x11) {
1680
- return _ref23.apply(this, arguments);
1882
+ return _ref24.apply(this, arguments);
1681
1883
  };
1682
1884
  }();
1683
1885
  var deleteMessage = function () {
1684
- var _ref24 = (0, _asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee19(message) {
1886
+ var _ref25 = (0, _asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee20(message) {
1685
1887
  var _data;
1686
- return _regenerator["default"].wrap(function _callee19$(_context19) {
1687
- while (1) switch (_context19.prev = _context19.next) {
1888
+ return _regenerator["default"].wrap(function _callee20$(_context20) {
1889
+ while (1) switch (_context20.prev = _context20.next) {
1688
1890
  case 0:
1689
1891
  if (channel.id) {
1690
- _context19.next = 2;
1892
+ _context20.next = 2;
1691
1893
  break;
1692
1894
  }
1693
1895
  throw new Error('Channel has not been initialized yet');
1694
1896
  case 2:
1695
1897
  if (enableOfflineSupport) {
1696
- _context19.next = 9;
1898
+ _context20.next = 9;
1697
1899
  break;
1698
1900
  }
1699
1901
  if (!(message.status === _utils.MessageStatusTypes.FAILED)) {
1700
- _context19.next = 6;
1902
+ _context20.next = 6;
1701
1903
  break;
1702
1904
  }
1703
1905
  removeMessage(message);
1704
- return _context19.abrupt("return");
1906
+ return _context20.abrupt("return");
1705
1907
  case 6:
1706
- _context19.next = 8;
1908
+ _context20.next = 8;
1707
1909
  return client.deleteMessage(message.id);
1708
1910
  case 8:
1709
- return _context19.abrupt("return");
1911
+ return _context20.abrupt("return");
1710
1912
  case 9:
1711
1913
  if (!(message.status === _utils.MessageStatusTypes.FAILED)) {
1712
- _context19.next = 14;
1914
+ _context20.next = 14;
1713
1915
  break;
1714
1916
  }
1715
1917
  _DBSyncManager.DBSyncManager.dropPendingTasks({
1716
1918
  messageId: message.id
1717
1919
  });
1718
1920
  removeMessage(message);
1719
- _context19.next = 19;
1921
+ _context20.next = 19;
1720
1922
  break;
1721
1923
  case 14:
1722
1924
  updateMessage((0, _extends2["default"])({}, message, {
@@ -1724,7 +1926,7 @@ var ChannelWithContext = function ChannelWithContext(props) {
1724
1926
  deleted_at: new Date().toISOString(),
1725
1927
  type: 'deleted'
1726
1928
  }));
1727
- _context19.next = 17;
1929
+ _context20.next = 17;
1728
1930
  return _DBSyncManager.DBSyncManager.queueTask({
1729
1931
  client: client,
1730
1932
  task: {
@@ -1736,41 +1938,41 @@ var ChannelWithContext = function ChannelWithContext(props) {
1736
1938
  }
1737
1939
  });
1738
1940
  case 17:
1739
- _data = _context19.sent;
1941
+ _data = _context20.sent;
1740
1942
  if (_data != null && _data.message) {
1741
1943
  updateMessage((0, _extends2["default"])({}, _data.message));
1742
1944
  }
1743
1945
  case 19:
1744
1946
  case "end":
1745
- return _context19.stop();
1947
+ return _context20.stop();
1746
1948
  }
1747
- }, _callee19);
1949
+ }, _callee20);
1748
1950
  }));
1749
1951
  return function deleteMessage(_x12) {
1750
- return _ref24.apply(this, arguments);
1952
+ return _ref25.apply(this, arguments);
1751
1953
  };
1752
1954
  }();
1753
1955
  var deleteReaction = function () {
1754
- var _ref25 = (0, _asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee20(type, messageId) {
1956
+ var _ref26 = (0, _asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee21(type, messageId) {
1755
1957
  var payload;
1756
- return _regenerator["default"].wrap(function _callee20$(_context20) {
1757
- while (1) switch (_context20.prev = _context20.next) {
1958
+ return _regenerator["default"].wrap(function _callee21$(_context21) {
1959
+ while (1) switch (_context21.prev = _context21.next) {
1758
1960
  case 0:
1759
1961
  if (!(!(channel != null && channel.id) || !client.user)) {
1760
- _context20.next = 2;
1962
+ _context21.next = 2;
1761
1963
  break;
1762
1964
  }
1763
1965
  throw new Error('Channel has not been initialized');
1764
1966
  case 2:
1765
1967
  payload = [messageId, type];
1766
1968
  if (enableOfflineSupport) {
1767
- _context20.next = 7;
1969
+ _context21.next = 7;
1768
1970
  break;
1769
1971
  }
1770
- _context20.next = 6;
1972
+ _context21.next = 6;
1771
1973
  return channel.deleteReaction.apply(channel, payload);
1772
1974
  case 6:
1773
- return _context20.abrupt("return");
1975
+ return _context21.abrupt("return");
1774
1976
  case 7:
1775
1977
  (0, _removeReactionFromLocalState.removeReactionFromLocalState)({
1776
1978
  channel: channel,
@@ -1779,7 +1981,7 @@ var ChannelWithContext = function ChannelWithContext(props) {
1779
1981
  user: client.user
1780
1982
  });
1781
1983
  setMessages(channel.state.messages);
1782
- _context20.next = 11;
1984
+ _context21.next = 11;
1783
1985
  return _DBSyncManager.DBSyncManager.queueTask({
1784
1986
  client: client,
1785
1987
  task: {
@@ -1792,12 +1994,12 @@ var ChannelWithContext = function ChannelWithContext(props) {
1792
1994
  });
1793
1995
  case 11:
1794
1996
  case "end":
1795
- return _context20.stop();
1997
+ return _context21.stop();
1796
1998
  }
1797
- }, _callee20);
1999
+ }, _callee21);
1798
2000
  }));
1799
2001
  return function deleteReaction(_x13, _x14) {
1800
- return _ref25.apply(this, arguments);
2002
+ return _ref26.apply(this, arguments);
1801
2003
  };
1802
2004
  }();
1803
2005
  var openThread = function openThread(message) {
@@ -1816,59 +2018,59 @@ var ChannelWithContext = function ChannelWithContext(props) {
1816
2018
  setThreadMessages(updatedThreadMessages);
1817
2019
  }, defaultDebounceInterval, debounceOptions)).current;
1818
2020
  var loadMoreThread = function () {
1819
- var _ref26 = (0, _asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee21() {
2021
+ var _ref27 = (0, _asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee22() {
1820
2022
  var _threadMessages$, parentID, oldestMessageID, limit, queryResponse, updatedHasMore, updatedThreadMessages;
1821
- return _regenerator["default"].wrap(function _callee21$(_context21) {
1822
- while (1) switch (_context21.prev = _context21.next) {
2023
+ return _regenerator["default"].wrap(function _callee22$(_context22) {
2024
+ while (1) switch (_context22.prev = _context22.next) {
1823
2025
  case 0:
1824
2026
  if (!(threadLoadingMore || !(thread != null && thread.id))) {
1825
- _context21.next = 2;
2027
+ _context22.next = 2;
1826
2028
  break;
1827
2029
  }
1828
- return _context21.abrupt("return");
2030
+ return _context22.abrupt("return");
1829
2031
  case 2:
1830
2032
  setThreadLoadingMore(true);
1831
- _context21.prev = 3;
2033
+ _context22.prev = 3;
1832
2034
  if (!channel) {
1833
- _context21.next = 15;
2035
+ _context22.next = 15;
1834
2036
  break;
1835
2037
  }
1836
2038
  parentID = thread.id;
1837
2039
  channel.state.threads[parentID] = threadMessages;
1838
2040
  oldestMessageID = threadMessages == null ? void 0 : (_threadMessages$ = threadMessages[0]) == null ? void 0 : _threadMessages$.id;
1839
2041
  limit = 50;
1840
- _context21.next = 11;
2042
+ _context22.next = 11;
1841
2043
  return channel.getReplies(parentID, {
1842
2044
  id_lt: oldestMessageID,
1843
2045
  limit: limit
1844
2046
  });
1845
2047
  case 11:
1846
- queryResponse = _context21.sent;
2048
+ queryResponse = _context22.sent;
1847
2049
  updatedHasMore = queryResponse.messages.length === limit;
1848
2050
  updatedThreadMessages = channel.state.threads[parentID] || [];
1849
2051
  loadMoreThreadFinished(updatedHasMore, updatedThreadMessages);
1850
2052
  case 15:
1851
- _context21.next = 23;
2053
+ _context22.next = 23;
1852
2054
  break;
1853
2055
  case 17:
1854
- _context21.prev = 17;
1855
- _context21.t0 = _context21["catch"](3);
1856
- console.warn('Message pagination request failed with error', _context21.t0);
1857
- if (_context21.t0 instanceof Error) {
1858
- setError(_context21.t0);
2056
+ _context22.prev = 17;
2057
+ _context22.t0 = _context22["catch"](3);
2058
+ console.warn('Message pagination request failed with error', _context22.t0);
2059
+ if (_context22.t0 instanceof Error) {
2060
+ setError(_context22.t0);
1859
2061
  } else {
1860
2062
  setError(true);
1861
2063
  }
1862
2064
  setThreadLoadingMore(false);
1863
- throw _context21.t0;
2065
+ throw _context22.t0;
1864
2066
  case 23:
1865
2067
  case "end":
1866
- return _context21.stop();
2068
+ return _context22.stop();
1867
2069
  }
1868
- }, _callee21, null, [[3, 17]]);
2070
+ }, _callee22, null, [[3, 17]]);
1869
2071
  }));
1870
2072
  return function loadMoreThread() {
1871
- return _ref26.apply(this, arguments);
2073
+ return _ref27.apply(this, arguments);
1872
2074
  };
1873
2075
  }();
1874
2076
  var ownCapabilitiesContext = (0, _useCreateOwnCapabilitiesContext.useCreateOwnCapabilitiesContext)({
@@ -1882,7 +2084,7 @@ var ChannelWithContext = function ChannelWithContext(props) {
1882
2084
  enableMessageGroupingByUser: enableMessageGroupingByUser,
1883
2085
  enforceUniqueReaction: enforceUniqueReaction,
1884
2086
  error: error,
1885
- giphyEnabled: giphyEnabled != null ? giphyEnabled : !!((_ref27 = (clientChannelConfig == null ? void 0 : clientChannelConfig.commands) || []) != null && _ref27.some(function (command) {
2087
+ giphyEnabled: giphyEnabled != null ? giphyEnabled : !!((_ref28 = (clientChannelConfig == null ? void 0 : clientChannelConfig.commands) || []) != null && _ref28.some(function (command) {
1886
2088
  return command.name === 'giphy';
1887
2089
  })),
1888
2090
  hideDateSeparators: hideDateSeparators,
@@ -1938,7 +2140,7 @@ var ChannelWithContext = function ChannelWithContext(props) {
1938
2140
  InputEditingStateHeader: InputEditingStateHeader,
1939
2141
  InputGiphySearch: InputGiphySearch,
1940
2142
  InputReplyStateHeader: InputReplyStateHeader,
1941
- maxMessageLength: (_ref28 = maxMessageLengthProp != null ? maxMessageLengthProp : clientChannelConfig == null ? void 0 : clientChannelConfig.max_message_length) != null ? _ref28 : undefined,
2143
+ maxMessageLength: (_ref29 = maxMessageLengthProp != null ? maxMessageLengthProp : clientChannelConfig == null ? void 0 : clientChannelConfig.max_message_length) != null ? _ref29 : undefined,
1942
2144
  maxNumberOfFiles: maxNumberOfFiles,
1943
2145
  mentionAllAppUsersEnabled: mentionAllAppUsersEnabled,
1944
2146
  mentionAllAppUsersQuery: mentionAllAppUsersQuery,
@@ -2081,7 +2283,7 @@ var ChannelWithContext = function ChannelWithContext(props) {
2081
2283
  __self: _this,
2082
2284
  __source: {
2083
2285
  fileName: _jsxFileName,
2084
- lineNumber: 2109,
2286
+ lineNumber: 2284,
2085
2287
  columnNumber: 12
2086
2288
  }
2087
2289
  });
@@ -2095,7 +2297,7 @@ var ChannelWithContext = function ChannelWithContext(props) {
2095
2297
  __self: _this,
2096
2298
  __source: {
2097
2299
  fileName: _jsxFileName,
2098
- lineNumber: 2114,
2300
+ lineNumber: 2289,
2099
2301
  columnNumber: 7
2100
2302
  }
2101
2303
  }, t('Please select a channel first'));
@@ -2108,7 +2310,7 @@ var ChannelWithContext = function ChannelWithContext(props) {
2108
2310
  __self: _this,
2109
2311
  __source: {
2110
2312
  fileName: _jsxFileName,
2111
- lineNumber: 2121,
2313
+ lineNumber: 2296,
2112
2314
  columnNumber: 5
2113
2315
  }
2114
2316
  }), _react["default"].createElement(_ChannelContext.ChannelProvider, {
@@ -2116,7 +2318,7 @@ var ChannelWithContext = function ChannelWithContext(props) {
2116
2318
  __self: _this,
2117
2319
  __source: {
2118
2320
  fileName: _jsxFileName,
2119
- lineNumber: 2127,
2321
+ lineNumber: 2302,
2120
2322
  columnNumber: 7
2121
2323
  }
2122
2324
  }, _react["default"].createElement(_OwnCapabilitiesContext.OwnCapabilitiesProvider, {
@@ -2124,7 +2326,7 @@ var ChannelWithContext = function ChannelWithContext(props) {
2124
2326
  __self: _this,
2125
2327
  __source: {
2126
2328
  fileName: _jsxFileName,
2127
- lineNumber: 2128,
2329
+ lineNumber: 2303,
2128
2330
  columnNumber: 9
2129
2331
  }
2130
2332
  }, _react["default"].createElement(_TypingContext.TypingProvider, {
@@ -2132,7 +2334,7 @@ var ChannelWithContext = function ChannelWithContext(props) {
2132
2334
  __self: _this,
2133
2335
  __source: {
2134
2336
  fileName: _jsxFileName,
2135
- lineNumber: 2129,
2337
+ lineNumber: 2304,
2136
2338
  columnNumber: 11
2137
2339
  }
2138
2340
  }, _react["default"].createElement(_PaginatedMessageListContext.PaginatedMessageListProvider, {
@@ -2140,7 +2342,7 @@ var ChannelWithContext = function ChannelWithContext(props) {
2140
2342
  __self: _this,
2141
2343
  __source: {
2142
2344
  fileName: _jsxFileName,
2143
- lineNumber: 2130,
2345
+ lineNumber: 2305,
2144
2346
  columnNumber: 13
2145
2347
  }
2146
2348
  }, _react["default"].createElement(_MessagesContext.MessagesProvider, {
@@ -2148,7 +2350,7 @@ var ChannelWithContext = function ChannelWithContext(props) {
2148
2350
  __self: _this,
2149
2351
  __source: {
2150
2352
  fileName: _jsxFileName,
2151
- lineNumber: 2131,
2353
+ lineNumber: 2306,
2152
2354
  columnNumber: 15
2153
2355
  }
2154
2356
  }, _react["default"].createElement(_ThreadContext.ThreadProvider, {
@@ -2156,7 +2358,7 @@ var ChannelWithContext = function ChannelWithContext(props) {
2156
2358
  __self: _this,
2157
2359
  __source: {
2158
2360
  fileName: _jsxFileName,
2159
- lineNumber: 2132,
2361
+ lineNumber: 2307,
2160
2362
  columnNumber: 17
2161
2363
  }
2162
2364
  }, _react["default"].createElement(_SuggestionsContext.SuggestionsProvider, {
@@ -2164,7 +2366,7 @@ var ChannelWithContext = function ChannelWithContext(props) {
2164
2366
  __self: _this,
2165
2367
  __source: {
2166
2368
  fileName: _jsxFileName,
2167
- lineNumber: 2133,
2369
+ lineNumber: 2308,
2168
2370
  columnNumber: 19
2169
2371
  }
2170
2372
  }, _react["default"].createElement(_MessageInputContext.MessageInputProvider, {
@@ -2172,7 +2374,7 @@ var ChannelWithContext = function ChannelWithContext(props) {
2172
2374
  __self: _this,
2173
2375
  __source: {
2174
2376
  fileName: _jsxFileName,
2175
- lineNumber: 2134,
2377
+ lineNumber: 2309,
2176
2378
  columnNumber: 21
2177
2379
  }
2178
2380
  }, _react["default"].createElement(_reactNative.View, {
@@ -2182,13 +2384,13 @@ var ChannelWithContext = function ChannelWithContext(props) {
2182
2384
  __self: _this,
2183
2385
  __source: {
2184
2386
  fileName: _jsxFileName,
2185
- lineNumber: 2135,
2387
+ lineNumber: 2310,
2186
2388
  columnNumber: 23
2187
2389
  }
2188
2390
  }, children))))))))));
2189
2391
  };
2190
2392
  var Channel = function Channel(props) {
2191
- var _props$thread, _props$thread2;
2393
+ var _props$thread, _props$thread2, _props$channel;
2192
2394
  var _useChatContext = (0, _ChatContext.useChatContext)(),
2193
2395
  client = _useChatContext.client,
2194
2396
  enableOfflineSupport = _useChatContext.enableOfflineSupport;
@@ -2211,6 +2413,7 @@ var Channel = function Channel(props) {
2211
2413
  watcherCount = _useChannelState.watcherCount,
2212
2414
  watchers = _useChannelState.watchers;
2213
2415
  return _react["default"].createElement(ChannelWithContext, (0, _extends2["default"])({
2416
+ key: (_props$channel = props.channel) == null ? void 0 : _props$channel.cid,
2214
2417
  client: client,
2215
2418
  enableOfflineSupport: enableOfflineSupport,
2216
2419
  t: t
@@ -2233,7 +2436,7 @@ var Channel = function Channel(props) {
2233
2436
  __self: _this,
2234
2437
  __source: {
2235
2438
  fileName: _jsxFileName,
2236
- lineNumber: 2192,
2439
+ lineNumber: 2367,
2237
2440
  columnNumber: 5
2238
2441
  }
2239
2442
  }));