stream-chat-react-native-core 6.0.2-beta.1 → 6.1.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (216) hide show
  1. package/README.md +1 -1
  2. package/lib/commonjs/components/Channel/Channel.js +371 -279
  3. package/lib/commonjs/components/Channel/Channel.js.map +1 -1
  4. package/lib/commonjs/components/Channel/hooks/useChannelDataState.js +8 -0
  5. package/lib/commonjs/components/Channel/hooks/useChannelDataState.js.map +1 -1
  6. package/lib/commonjs/components/Channel/hooks/useCreateChannelContext.js +10 -1
  7. package/lib/commonjs/components/Channel/hooks/useCreateChannelContext.js.map +1 -1
  8. package/lib/commonjs/components/Channel/hooks/useCreateMessagesContext.js +4 -0
  9. package/lib/commonjs/components/Channel/hooks/useCreateMessagesContext.js.map +1 -1
  10. package/lib/commonjs/components/Channel/hooks/useMessageListPagination.js +161 -69
  11. package/lib/commonjs/components/Channel/hooks/useMessageListPagination.js.map +1 -1
  12. package/lib/commonjs/components/Channel/hooks/useTargetedMessage.js +10 -0
  13. package/lib/commonjs/components/Channel/hooks/useTargetedMessage.js.map +1 -1
  14. package/lib/commonjs/components/Chat/hooks/handleEventToSyncDB.js +81 -54
  15. package/lib/commonjs/components/Chat/hooks/handleEventToSyncDB.js.map +1 -1
  16. package/lib/commonjs/components/Message/Message.js +6 -0
  17. package/lib/commonjs/components/Message/Message.js.map +1 -1
  18. package/lib/commonjs/components/Message/hooks/useMessageActionHandlers.js +117 -79
  19. package/lib/commonjs/components/Message/hooks/useMessageActionHandlers.js.map +1 -1
  20. package/lib/commonjs/components/Message/hooks/useMessageActions.js +32 -14
  21. package/lib/commonjs/components/Message/hooks/useMessageActions.js.map +1 -1
  22. package/lib/commonjs/components/Message/utils/messageActions.js +4 -0
  23. package/lib/commonjs/components/Message/utils/messageActions.js.map +1 -1
  24. package/lib/commonjs/components/MessageList/InlineUnreadIndicator.js +19 -55
  25. package/lib/commonjs/components/MessageList/InlineUnreadIndicator.js.map +1 -1
  26. package/lib/commonjs/components/MessageList/MessageList.js +249 -211
  27. package/lib/commonjs/components/MessageList/MessageList.js.map +1 -1
  28. package/lib/commonjs/components/MessageList/UnreadMessagesNotification.js +148 -0
  29. package/lib/commonjs/components/MessageList/UnreadMessagesNotification.js.map +1 -0
  30. package/lib/commonjs/components/MessageMenu/MessageActionListItem.js.map +1 -1
  31. package/lib/commonjs/contexts/channelContext/ChannelContext.js.map +1 -1
  32. package/lib/commonjs/contexts/messagesContext/MessagesContext.js.map +1 -1
  33. package/lib/commonjs/contexts/themeContext/utils/theme.js +7 -1
  34. package/lib/commonjs/contexts/themeContext/utils/theme.js.map +1 -1
  35. package/lib/commonjs/i18n/en.json +2 -0
  36. package/lib/commonjs/i18n/es.json +2 -0
  37. package/lib/commonjs/i18n/fr.json +2 -0
  38. package/lib/commonjs/i18n/he.json +2 -0
  39. package/lib/commonjs/i18n/hi.json +2 -0
  40. package/lib/commonjs/i18n/it.json +2 -0
  41. package/lib/commonjs/i18n/ja.json +2 -0
  42. package/lib/commonjs/i18n/ko.json +2 -0
  43. package/lib/commonjs/i18n/nl.json +2 -0
  44. package/lib/commonjs/i18n/pt-br.json +2 -0
  45. package/lib/commonjs/i18n/ru.json +2 -0
  46. package/lib/commonjs/i18n/tr.json +2 -0
  47. package/lib/commonjs/icons/UnreadIndicator.js +30 -0
  48. package/lib/commonjs/icons/UnreadIndicator.js.map +1 -0
  49. package/lib/commonjs/icons/index.js +11 -0
  50. package/lib/commonjs/icons/index.js.map +1 -1
  51. package/lib/commonjs/store/SqliteClient.js +1 -1
  52. package/lib/commonjs/store/schema.js +1 -0
  53. package/lib/commonjs/store/schema.js.map +1 -1
  54. package/lib/commonjs/types/types.js.map +1 -1
  55. package/lib/commonjs/utils/utils.js +35 -1
  56. package/lib/commonjs/utils/utils.js.map +1 -1
  57. package/lib/commonjs/version.json +1 -1
  58. package/lib/module/components/Channel/Channel.js +371 -279
  59. package/lib/module/components/Channel/Channel.js.map +1 -1
  60. package/lib/module/components/Channel/hooks/useChannelDataState.js +8 -0
  61. package/lib/module/components/Channel/hooks/useChannelDataState.js.map +1 -1
  62. package/lib/module/components/Channel/hooks/useCreateChannelContext.js +10 -1
  63. package/lib/module/components/Channel/hooks/useCreateChannelContext.js.map +1 -1
  64. package/lib/module/components/Channel/hooks/useCreateMessagesContext.js +4 -0
  65. package/lib/module/components/Channel/hooks/useCreateMessagesContext.js.map +1 -1
  66. package/lib/module/components/Channel/hooks/useMessageListPagination.js +161 -69
  67. package/lib/module/components/Channel/hooks/useMessageListPagination.js.map +1 -1
  68. package/lib/module/components/Channel/hooks/useTargetedMessage.js +10 -0
  69. package/lib/module/components/Channel/hooks/useTargetedMessage.js.map +1 -1
  70. package/lib/module/components/Chat/hooks/handleEventToSyncDB.js +81 -54
  71. package/lib/module/components/Chat/hooks/handleEventToSyncDB.js.map +1 -1
  72. package/lib/module/components/Message/Message.js +6 -0
  73. package/lib/module/components/Message/Message.js.map +1 -1
  74. package/lib/module/components/Message/hooks/useMessageActionHandlers.js +117 -79
  75. package/lib/module/components/Message/hooks/useMessageActionHandlers.js.map +1 -1
  76. package/lib/module/components/Message/hooks/useMessageActions.js +32 -14
  77. package/lib/module/components/Message/hooks/useMessageActions.js.map +1 -1
  78. package/lib/module/components/Message/utils/messageActions.js +4 -0
  79. package/lib/module/components/Message/utils/messageActions.js.map +1 -1
  80. package/lib/module/components/MessageList/InlineUnreadIndicator.js +19 -55
  81. package/lib/module/components/MessageList/InlineUnreadIndicator.js.map +1 -1
  82. package/lib/module/components/MessageList/MessageList.js +249 -211
  83. package/lib/module/components/MessageList/MessageList.js.map +1 -1
  84. package/lib/module/components/MessageList/UnreadMessagesNotification.js +148 -0
  85. package/lib/module/components/MessageList/UnreadMessagesNotification.js.map +1 -0
  86. package/lib/module/components/MessageMenu/MessageActionListItem.js.map +1 -1
  87. package/lib/module/contexts/channelContext/ChannelContext.js.map +1 -1
  88. package/lib/module/contexts/messagesContext/MessagesContext.js.map +1 -1
  89. package/lib/module/contexts/themeContext/utils/theme.js +7 -1
  90. package/lib/module/contexts/themeContext/utils/theme.js.map +1 -1
  91. package/lib/module/i18n/en.json +2 -0
  92. package/lib/module/i18n/es.json +2 -0
  93. package/lib/module/i18n/fr.json +2 -0
  94. package/lib/module/i18n/he.json +2 -0
  95. package/lib/module/i18n/hi.json +2 -0
  96. package/lib/module/i18n/it.json +2 -0
  97. package/lib/module/i18n/ja.json +2 -0
  98. package/lib/module/i18n/ko.json +2 -0
  99. package/lib/module/i18n/nl.json +2 -0
  100. package/lib/module/i18n/pt-br.json +2 -0
  101. package/lib/module/i18n/ru.json +2 -0
  102. package/lib/module/i18n/tr.json +2 -0
  103. package/lib/module/icons/UnreadIndicator.js +30 -0
  104. package/lib/module/icons/UnreadIndicator.js.map +1 -0
  105. package/lib/module/icons/index.js +11 -0
  106. package/lib/module/icons/index.js.map +1 -1
  107. package/lib/module/store/SqliteClient.js +1 -1
  108. package/lib/module/store/schema.js +1 -0
  109. package/lib/module/store/schema.js.map +1 -1
  110. package/lib/module/types/types.js.map +1 -1
  111. package/lib/module/utils/utils.js +35 -1
  112. package/lib/module/utils/utils.js.map +1 -1
  113. package/lib/module/version.json +1 -1
  114. package/lib/typescript/components/Channel/Channel.d.ts +15 -3
  115. package/lib/typescript/components/Channel/Channel.d.ts.map +1 -1
  116. package/lib/typescript/components/Channel/hooks/useChannelDataState.d.ts +1 -0
  117. package/lib/typescript/components/Channel/hooks/useChannelDataState.d.ts.map +1 -1
  118. package/lib/typescript/components/Channel/hooks/useCreateChannelContext.d.ts +1 -1
  119. package/lib/typescript/components/Channel/hooks/useCreateChannelContext.d.ts.map +1 -1
  120. package/lib/typescript/components/Channel/hooks/useCreateMessagesContext.d.ts +4 -2
  121. package/lib/typescript/components/Channel/hooks/useCreateMessagesContext.d.ts.map +1 -1
  122. package/lib/typescript/components/Channel/hooks/useMessageListPagination.d.ts +4 -1
  123. package/lib/typescript/components/Channel/hooks/useMessageListPagination.d.ts.map +1 -1
  124. package/lib/typescript/components/Channel/hooks/useTargetedMessage.d.ts +2 -1
  125. package/lib/typescript/components/Channel/hooks/useTargetedMessage.d.ts.map +1 -1
  126. package/lib/typescript/components/Chat/hooks/handleEventToSyncDB.d.ts.map +1 -1
  127. package/lib/typescript/components/Message/Message.d.ts +2 -1
  128. package/lib/typescript/components/Message/Message.d.ts.map +1 -1
  129. package/lib/typescript/components/Message/hooks/useMessageActionHandlers.d.ts +2 -1
  130. package/lib/typescript/components/Message/hooks/useMessageActionHandlers.d.ts.map +1 -1
  131. package/lib/typescript/components/Message/hooks/useMessageActions.d.ts +3 -2
  132. package/lib/typescript/components/Message/hooks/useMessageActions.d.ts.map +1 -1
  133. package/lib/typescript/components/Message/hooks/useMessageData.d.ts +1 -1
  134. package/lib/typescript/components/Message/utils/messageActions.d.ts +2 -1
  135. package/lib/typescript/components/Message/utils/messageActions.d.ts.map +1 -1
  136. package/lib/typescript/components/MessageList/InlineUnreadIndicator.d.ts.map +1 -1
  137. package/lib/typescript/components/MessageList/MessageList.d.ts +1 -1
  138. package/lib/typescript/components/MessageList/MessageList.d.ts.map +1 -1
  139. package/lib/typescript/components/MessageList/UnreadMessagesNotification.d.ts +13 -0
  140. package/lib/typescript/components/MessageList/UnreadMessagesNotification.d.ts.map +1 -0
  141. package/lib/typescript/components/MessageMenu/MessageActionListItem.d.ts +2 -2
  142. package/lib/typescript/components/MessageMenu/MessageActionListItem.d.ts.map +1 -1
  143. package/lib/typescript/contexts/channelContext/ChannelContext.d.ts +25 -8
  144. package/lib/typescript/contexts/channelContext/ChannelContext.d.ts.map +1 -1
  145. package/lib/typescript/contexts/messagesContext/MessagesContext.d.ts +5 -0
  146. package/lib/typescript/contexts/messagesContext/MessagesContext.d.ts.map +1 -1
  147. package/lib/typescript/contexts/themeContext/utils/theme.d.ts +6 -0
  148. package/lib/typescript/contexts/themeContext/utils/theme.d.ts.map +1 -1
  149. package/lib/typescript/i18n/en.json +2 -0
  150. package/lib/typescript/i18n/es.json +2 -0
  151. package/lib/typescript/i18n/fr.json +2 -0
  152. package/lib/typescript/i18n/he.json +2 -0
  153. package/lib/typescript/i18n/hi.json +2 -0
  154. package/lib/typescript/i18n/it.json +2 -0
  155. package/lib/typescript/i18n/ja.json +2 -0
  156. package/lib/typescript/i18n/ko.json +2 -0
  157. package/lib/typescript/i18n/nl.json +2 -0
  158. package/lib/typescript/i18n/pt-br.json +2 -0
  159. package/lib/typescript/i18n/ru.json +2 -0
  160. package/lib/typescript/i18n/tr.json +2 -0
  161. package/lib/typescript/icons/UnreadIndicator.d.ts +8 -0
  162. package/lib/typescript/icons/UnreadIndicator.d.ts.map +1 -0
  163. package/lib/typescript/icons/index.d.ts +1 -0
  164. package/lib/typescript/icons/index.d.ts.map +1 -1
  165. package/lib/typescript/store/mappers/mapStorableToChannel.d.ts +1 -1
  166. package/lib/typescript/store/schema.d.ts +1 -0
  167. package/lib/typescript/store/schema.d.ts.map +1 -1
  168. package/lib/typescript/types/types.d.ts +2 -1
  169. package/lib/typescript/types/types.d.ts.map +1 -1
  170. package/lib/typescript/utils/i18n/Streami18n.d.ts +2 -0
  171. package/lib/typescript/utils/i18n/Streami18n.d.ts.map +1 -1
  172. package/lib/typescript/utils/utils.d.ts +21 -1
  173. package/lib/typescript/utils/utils.d.ts.map +1 -1
  174. package/package.json +1 -1
  175. package/src/components/Channel/Channel.tsx +101 -24
  176. package/src/components/Channel/__tests__/Channel.test.js +109 -58
  177. package/src/components/Channel/__tests__/ownCapabilities.test.js +26 -0
  178. package/src/components/Channel/__tests__/useMessageListPagination.test.js +234 -37
  179. package/src/components/Channel/hooks/useChannelDataState.ts +8 -0
  180. package/src/components/Channel/hooks/useCreateChannelContext.ts +11 -0
  181. package/src/components/Channel/hooks/useCreateMessagesContext.ts +4 -0
  182. package/src/components/Channel/hooks/useMessageListPagination.tsx +134 -64
  183. package/src/components/Channel/hooks/useTargetedMessage.ts +9 -2
  184. package/src/components/Chat/hooks/handleEventToSyncDB.ts +23 -1
  185. package/src/components/Message/Message.tsx +8 -0
  186. package/src/components/Message/hooks/useMessageActionHandlers.ts +54 -40
  187. package/src/components/Message/hooks/useMessageActions.tsx +31 -14
  188. package/src/components/Message/utils/messageActions.ts +6 -0
  189. package/src/components/MessageList/InlineUnreadIndicator.tsx +17 -26
  190. package/src/components/MessageList/MessageList.tsx +197 -231
  191. package/src/components/MessageList/UnreadMessagesNotification.tsx +107 -0
  192. package/src/components/MessageList/__tests__/MessageList.test.js +213 -0
  193. package/src/components/MessageMenu/MessageActionListItem.tsx +2 -1
  194. package/src/components/Thread/__tests__/__snapshots__/Thread.test.js.snap +669 -679
  195. package/src/contexts/channelContext/ChannelContext.tsx +35 -9
  196. package/src/contexts/messagesContext/MessagesContext.tsx +7 -2
  197. package/src/contexts/themeContext/utils/theme.ts +12 -0
  198. package/src/i18n/en.json +2 -0
  199. package/src/i18n/es.json +2 -0
  200. package/src/i18n/fr.json +2 -0
  201. package/src/i18n/he.json +2 -0
  202. package/src/i18n/hi.json +2 -0
  203. package/src/i18n/it.json +2 -0
  204. package/src/i18n/ja.json +2 -0
  205. package/src/i18n/ko.json +2 -0
  206. package/src/i18n/nl.json +2 -0
  207. package/src/i18n/pt-br.json +2 -0
  208. package/src/i18n/ru.json +2 -0
  209. package/src/i18n/tr.json +2 -0
  210. package/src/icons/UnreadIndicator.tsx +18 -0
  211. package/src/icons/index.ts +1 -0
  212. package/src/store/SqliteClient.ts +1 -1
  213. package/src/store/schema.ts +2 -0
  214. package/src/types/types.ts +5 -2
  215. package/src/utils/utils.ts +61 -1
  216. package/src/version.json +1 -1
@@ -33,7 +33,7 @@ var _this = this,
33
33
  _jsxFileName = "/home/runner/work/stream-chat-react-native/stream-chat-react-native/package/src/components/MessageList/MessageList.tsx";
34
34
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
35
35
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
36
- var WAIT_FOR_SCROLL_TO_OFFSET_TIMEOUT = 150;
36
+ var WAIT_FOR_SCROLL_TIMEOUT = 0;
37
37
  var MAX_RETRIES_AFTER_SCROLL_FAILURE = 10;
38
38
  var styles = _reactNative.StyleSheet.create({
39
39
  container: {
@@ -42,7 +42,6 @@ var styles = _reactNative.StyleSheet.create({
42
42
  width: '100%'
43
43
  },
44
44
  contentContainer: {
45
- flexGrow: 1,
46
45
  paddingBottom: 4
47
46
  },
48
47
  flex: {
@@ -77,6 +76,7 @@ var MessageListWithContext = function MessageListWithContext(props) {
77
76
  var LoadingMoreRecentIndicator = props.threadList ? _InlineLoadingMoreRecentThreadIndicator.InlineLoadingMoreRecentThreadIndicator : _InlineLoadingMoreRecentIndicator.InlineLoadingMoreRecentIndicator;
78
77
  var additionalFlatListProps = props.additionalFlatListProps,
79
78
  channel = props.channel,
79
+ channelUnreadState = props.channelUnreadState,
80
80
  client = props.client,
81
81
  closePicker = props.closePicker,
82
82
  DateHeader = props.DateHeader,
@@ -89,7 +89,7 @@ var MessageListWithContext = function MessageListWithContext(props) {
89
89
  _props$HeaderComponen = props.HeaderComponent,
90
90
  HeaderComponent = _props$HeaderComponen === void 0 ? LoadingMoreRecentIndicator : _props$HeaderComponen,
91
91
  hideStickyDateHeader = props.hideStickyDateHeader,
92
- initialScrollToFirstUnreadMessage = props.initialScrollToFirstUnreadMessage,
92
+ highlightedMessageId = props.highlightedMessageId,
93
93
  InlineDateSeparator = props.InlineDateSeparator,
94
94
  InlineUnreadIndicator = props.InlineUnreadIndicator,
95
95
  _props$inverted = props.inverted,
@@ -128,7 +128,12 @@ var MessageListWithContext = function MessageListWithContext(props) {
128
128
  _props$threadList = props.threadList,
129
129
  threadList = _props$threadList === void 0 ? false : _props$threadList,
130
130
  TypingIndicator = props.TypingIndicator,
131
- TypingIndicatorContainer = props.TypingIndicatorContainer;
131
+ TypingIndicatorContainer = props.TypingIndicatorContainer,
132
+ UnreadMessagesNotification = props.UnreadMessagesNotification;
133
+ var _useState = (0, _react.useState)(false),
134
+ _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
135
+ isUnreadNotificationOpen = _useState2[0],
136
+ setIsUnreadNotificationOpen = _useState2[1];
132
137
  var _useTheme = (0, _ThemeContext.useTheme)(),
133
138
  theme = _useTheme.theme;
134
139
  var white_snow = theme.colors.white_snow,
@@ -159,22 +164,17 @@ var MessageListWithContext = function MessageListWithContext(props) {
159
164
  var latestNonCurrentMessageBeforeUpdateRef = (0, _react.useRef)();
160
165
  var topMessageAfterUpdate = rawMessageList[0];
161
166
  var shouldScrollToRecentOnNewOwnMessageRef = (0, _useShouldScrollToRecentOnNewOwnMessage.useShouldScrollToRecentOnNewOwnMessage)(rawMessageList, client.userID);
162
- var _useState = (0, _react.useState)(false),
163
- _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
164
- autoscrollToRecent = _useState2[0],
165
- setAutoscrollToRecent = _useState2[1];
167
+ var _useState3 = (0, _react.useState)(false),
168
+ _useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
169
+ autoscrollToRecent = _useState4[0],
170
+ setAutoscrollToRecent = _useState4[1];
166
171
  var onStartReachedTracker = (0, _react.useRef)({});
167
172
  var onEndReachedTracker = (0, _react.useRef)({});
168
173
  var onStartReachedInPromise = (0, _react.useRef)(null);
169
174
  var onEndReachedInPromise = (0, _react.useRef)(null);
170
175
  var flatListRef = (0, _react.useRef)(null);
171
- var _useState3 = (0, _react.useState)(!initialScrollToFirstUnreadMessage),
172
- _useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
173
- isInitialScrollDone = _useState4[0],
174
- setInitialScrollDone = _useState4[1];
175
176
  var channelResyncScrollSet = (0, _react.useRef)(true);
176
177
  var scrollToDebounceTimeoutRef = (0, _react.useRef)();
177
- var initialScrollSettingTimeoutRef = (0, _react.useRef)();
178
178
  var onScrollEventTimeoutRef = (0, _react.useRef)();
179
179
  var messageIdLastScrolledToRef = (0, _react.useRef)();
180
180
  var _useState5 = (0, _react.useState)(false),
@@ -197,9 +197,14 @@ var MessageListWithContext = function MessageListWithContext(props) {
197
197
  var channelRef = (0, _react.useRef)(channel);
198
198
  channelRef.current = channel;
199
199
  var updateStickyHeaderDateIfNeeded = function updateStickyHeaderDateIfNeeded(viewableItems) {
200
- if (viewableItems.length) {
200
+ if (!viewableItems.length) return;
201
+ var lastItem = viewableItems[viewableItems.length - 1];
202
+ if (lastItem) {
201
203
  var _lastItem$item, _stickyHeaderDateRef$;
202
- var lastItem = viewableItems.pop();
204
+ if (!channel.state.messagePagination.hasPrev && processedMessageList[processedMessageList.length - 1].id === lastItem.item.id) {
205
+ setStickyHeaderDate(undefined);
206
+ return;
207
+ }
203
208
  var isMessageTypeDeleted = lastItem.item.type === 'deleted';
204
209
  if (lastItem != null && (_lastItem$item = lastItem.item) != null && _lastItem$item.created_at && !isMessageTypeDeleted && typeof lastItem.item.created_at !== 'string' && lastItem.item.created_at.toDateString() !== ((_stickyHeaderDateRef$ = stickyHeaderDateRef.current) == null ? void 0 : _stickyHeaderDateRef$.toDateString())) {
205
210
  stickyHeaderDateRef.current = lastItem.item.created_at;
@@ -207,15 +212,41 @@ var MessageListWithContext = function MessageListWithContext(props) {
207
212
  }
208
213
  }
209
214
  };
210
- var onViewableItemsChanged = (0, _react.useRef)(function (_ref) {
215
+ var updateStickyUnreadIndicator = function updateStickyUnreadIndicator(viewableItems) {
216
+ if (!viewableItems.length) {
217
+ setIsUnreadNotificationOpen(false);
218
+ return;
219
+ }
220
+ if (selectedPicker === 'images') {
221
+ setIsUnreadNotificationOpen(false);
222
+ return;
223
+ }
224
+ var lastItem = viewableItems[viewableItems.length - 1];
225
+ if (lastItem) {
226
+ var lastItemCreatedAt = lastItem.item.created_at;
227
+ var unreadIndicatorDate = channelUnreadState == null ? void 0 : channelUnreadState.last_read.getTime();
228
+ var lastItemDate = lastItemCreatedAt.getTime();
229
+ if (!channel.state.messagePagination.hasPrev && processedMessageList[processedMessageList.length - 1].id === lastItem.item.id) {
230
+ setIsUnreadNotificationOpen(false);
231
+ return;
232
+ }
233
+ if (unreadIndicatorDate && lastItemDate > unreadIndicatorDate) {
234
+ setIsUnreadNotificationOpen(true);
235
+ } else {
236
+ setIsUnreadNotificationOpen(false);
237
+ }
238
+ }
239
+ };
240
+ var onViewableItemsChanged = function onViewableItemsChanged(_ref) {
211
241
  var viewableItems = _ref.viewableItems;
212
- if (_reactNative.Platform.OS === 'android' && viewableItems != null && viewableItems.length && (viewableItems == null ? void 0 : viewableItems.length) >= messageListLengthBeforeUpdate.current) {
213
- channel.markRead();
242
+ if (!viewableItems) {
243
+ return;
214
244
  }
215
- if (viewableItems && !hideStickyDateHeader) {
245
+ if (!hideStickyDateHeader) {
216
246
  updateStickyHeaderDateIfNeeded(viewableItems);
217
247
  }
218
- });
248
+ updateStickyUnreadIndicator(viewableItems);
249
+ };
219
250
  var resetPaginationTrackersRef = (0, _react.useRef)(function () {
220
251
  onStartReachedTracker.current = {};
221
252
  onEndReachedTracker.current = {};
@@ -226,23 +257,18 @@ var MessageListWithContext = function MessageListWithContext(props) {
226
257
  }
227
258
  }, [disabled]);
228
259
  (0, _react.useEffect)(function () {
229
- var getShouldMarkReadAutomatically = function getShouldMarkReadAutomatically() {
230
- if (loading || !channel) {
231
- return false;
232
- } else if (channel.countUnread() > 0) {
233
- if (!initialScrollToFirstUnreadMessage) {
234
- return true;
235
- } else {
236
- if (scrollToBottomButtonVisible) return false;
237
- return isInitialScrollDone;
238
- }
260
+ var listener = channel.on('message.new', function (event) {
261
+ var _event$message, _event$message2;
262
+ var newMessageToCurrentChannel = event.cid === channel.cid;
263
+ var mainChannelUpdated = !((_event$message = event.message) != null && _event$message.parent_id) || ((_event$message2 = event.message) == null ? void 0 : _event$message2.show_in_channel);
264
+ if (newMessageToCurrentChannel && mainChannelUpdated && !scrollToBottomButtonVisible) {
265
+ markRead();
239
266
  }
240
- return false;
267
+ });
268
+ return function () {
269
+ listener == null ? void 0 : listener.unsubscribe();
241
270
  };
242
- if (getShouldMarkReadAutomatically()) {
243
- markRead();
244
- }
245
- }, [loading, scrollToBottomButtonVisible, isInitialScrollDone]);
271
+ }, [channel, markRead, scrollToBottomButtonVisible]);
246
272
  (0, _react.useEffect)(function () {
247
273
  var lastReceivedMessage = (0, _getLastReceivedMessage.getLastReceivedMessage)(processedMessageList);
248
274
  setLastReceivedId(lastReceivedMessage == null ? void 0 : lastReceivedMessage.id);
@@ -261,7 +287,7 @@ var MessageListWithContext = function MessageListWithContext(props) {
261
287
  (_flatListRef$current = flatListRef.current) == null ? void 0 : _flatListRef$current.scrollToOffset({
262
288
  offset: 0
263
289
  });
264
- }, 50);
290
+ }, WAIT_FOR_SCROLL_TIMEOUT);
265
291
  setTimeout(function () {
266
292
  channelResyncScrollSet.current = true;
267
293
  if (channel.countUnread() > 0) {
@@ -272,8 +298,6 @@ var MessageListWithContext = function MessageListWithContext(props) {
272
298
  };
273
299
  if (threadList) {
274
300
  scrollToBottomIfNeeded();
275
- } else {
276
- setScrollToBottomButtonVisible(false);
277
301
  }
278
302
  messageListLengthBeforeUpdate.current = messageListLengthAfterUpdate;
279
303
  topMessageBeforeUpdate.current = topMessageAfterUpdate;
@@ -309,51 +333,121 @@ var MessageListWithContext = function MessageListWithContext(props) {
309
333
  animated: true,
310
334
  offset: 0
311
335
  });
312
- }, 150);
336
+ }, WAIT_FOR_SCROLL_TIMEOUT);
313
337
  }
314
338
  }
315
339
  }, [rawMessageList, threadList]);
340
+ var goToMessage = function () {
341
+ var _ref2 = (0, _asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee(messageId) {
342
+ var indexOfParentInMessageList;
343
+ return _regenerator["default"].wrap(function _callee$(_context) {
344
+ while (1) switch (_context.prev = _context.next) {
345
+ case 0:
346
+ indexOfParentInMessageList = processedMessageList.findIndex(function (message) {
347
+ return (message == null ? void 0 : message.id) === messageId;
348
+ });
349
+ _context.prev = 1;
350
+ if (!(indexOfParentInMessageList === -1)) {
351
+ _context.next = 8;
352
+ break;
353
+ }
354
+ _context.next = 5;
355
+ return loadChannelAroundMessage({
356
+ messageId: messageId
357
+ });
358
+ case 5:
359
+ return _context.abrupt("return");
360
+ case 8:
361
+ if (flatListRef.current) {
362
+ _context.next = 10;
363
+ break;
364
+ }
365
+ return _context.abrupt("return");
366
+ case 10:
367
+ clearTimeout(failScrollTimeoutId.current);
368
+ scrollToIndexFailedRetryCountRef.current = 0;
369
+ messageIdLastScrolledToRef.current = messageId;
370
+ setTargetedMessage(messageId);
371
+ flatListRef.current.scrollToIndex({
372
+ animated: true,
373
+ index: indexOfParentInMessageList,
374
+ viewPosition: 0.5
375
+ });
376
+ return _context.abrupt("return");
377
+ case 16:
378
+ _context.next = 21;
379
+ break;
380
+ case 18:
381
+ _context.prev = 18;
382
+ _context.t0 = _context["catch"](1);
383
+ console.warn('Error while scrolling to message', _context.t0);
384
+ case 21:
385
+ case "end":
386
+ return _context.stop();
387
+ }
388
+ }, _callee, null, [[1, 18]]);
389
+ }));
390
+ return function goToMessage(_x) {
391
+ return _ref2.apply(this, arguments);
392
+ };
393
+ }();
394
+ (0, _react.useEffect)(function () {
395
+ if (!targetedMessage) return;
396
+ scrollToDebounceTimeoutRef.current = setTimeout((0, _asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee2() {
397
+ var indexOfParentInMessageList;
398
+ return _regenerator["default"].wrap(function _callee2$(_context2) {
399
+ while (1) switch (_context2.prev = _context2.next) {
400
+ case 0:
401
+ indexOfParentInMessageList = processedMessageList.findIndex(function (message) {
402
+ return (message == null ? void 0 : message.id) === targetedMessage;
403
+ });
404
+ if (!(indexOfParentInMessageList === -1)) {
405
+ _context2.next = 6;
406
+ break;
407
+ }
408
+ _context2.next = 4;
409
+ return loadChannelAroundMessage({
410
+ messageId: targetedMessage,
411
+ setTargetedMessage: setTargetedMessage
412
+ });
413
+ case 4:
414
+ _context2.next = 13;
415
+ break;
416
+ case 6:
417
+ if (flatListRef.current) {
418
+ _context2.next = 8;
419
+ break;
420
+ }
421
+ return _context2.abrupt("return");
422
+ case 8:
423
+ clearTimeout(scrollToDebounceTimeoutRef.current);
424
+ clearTimeout(failScrollTimeoutId.current);
425
+ scrollToIndexFailedRetryCountRef.current = 0;
426
+ flatListRef.current.scrollToIndex({
427
+ animated: true,
428
+ index: indexOfParentInMessageList,
429
+ viewPosition: 0.5
430
+ });
431
+ setTargetedMessage(undefined);
432
+ case 13:
433
+ case "end":
434
+ return _context2.stop();
435
+ }
436
+ }, _callee2);
437
+ })), WAIT_FOR_SCROLL_TIMEOUT);
438
+ }, [targetedMessage]);
316
439
  var shouldApplyAndroidWorkaround = inverted && _reactNative.Platform.OS === 'android';
317
- var renderItem = function renderItem(_ref2) {
440
+ var renderItem = function renderItem(_ref4) {
318
441
  var _message$user;
319
- var index = _ref2.index,
320
- message = _ref2.item;
442
+ var index = _ref4.index,
443
+ message = _ref4.item;
321
444
  if (!channel || channel.disconnected || !channel.initialized && !channel.offlineMode) return null;
322
- var unreadCount = channel.countUnread();
323
- var lastRead = channel.lastRead();
324
- function isMessageUnread(messageArrayIndex) {
325
- var isLatestMessageSetShown = !!channel.state.messageSets.find(function (set) {
326
- return set.isCurrent && set.isLatest;
327
- });
328
- if (!isLatestMessageSetShown) {
329
- var msg = processedMessageList == null ? void 0 : processedMessageList[messageArrayIndex];
330
- if (channel.state.latestMessages.length !== 0 && unreadCount > channel.state.latestMessages.length) {
331
- return messageArrayIndex <= unreadCount - channel.state.latestMessages.length - 1;
332
- } else if (lastRead && msg != null && msg.created_at) {
333
- return lastRead < msg.created_at;
334
- }
335
- return false;
336
- } else {
337
- return messageArrayIndex <= unreadCount - 1;
338
- }
339
- }
340
- var isCurrentMessageUnread = isMessageUnread(index);
341
- var showUnreadUnderlay = !!shouldShowUnreadUnderlay && !channel.muteStatus().muted && isCurrentMessageUnread && scrollToBottomButtonVisible;
342
- var insertInlineUnreadIndicator = showUnreadUnderlay && !isMessageUnread(index + 1);
343
- if (message.type === 'system') {
344
- return (0, _jsxRuntime.jsxs)(_reactNative.View, {
345
- style: [shouldApplyAndroidWorkaround ? styles.invertAndroid : undefined],
346
- children: [(0, _jsxRuntime.jsx)(_reactNative.View, {
347
- testID: "message-list-item-".concat(index),
348
- children: (0, _jsxRuntime.jsx)(MessageSystem, {
349
- message: message,
350
- style: [{
351
- paddingHorizontal: screenPadding
352
- }, messageContainer]
353
- })
354
- }), insertInlineUnreadIndicator && (0, _jsxRuntime.jsx)(InlineUnreadIndicator, {})]
355
- });
356
- }
445
+ var createdAtTimestamp = message.created_at && new Date(message.created_at).getTime();
446
+ var lastReadTimestamp = channelUnreadState == null ? void 0 : channelUnreadState.last_read.getTime();
447
+ var isNewestMessage = index === 0;
448
+ var isLastReadMessage = (channelUnreadState == null ? void 0 : channelUnreadState.last_read_message_id) === message.id || !(channelUnreadState != null && channelUnreadState.unread_messages) && createdAtTimestamp === lastReadTimestamp;
449
+ var showUnreadSeparator = isLastReadMessage && !isNewestMessage && (!!(channelUnreadState != null && channelUnreadState.first_unread_message_id) || !!(channelUnreadState != null && channelUnreadState.unread_messages));
450
+ var showUnreadUnderlay = !!shouldShowUnreadUnderlay && showUnreadSeparator;
357
451
  var wrapMessageInTheme = client.userID === ((_message$user = message.user) == null ? void 0 : _message$user.id) && !!myMessageTheme;
358
452
  var renderDateSeperator = (0, _useMessageList2.isMessageWithStylesReadByAndDateSeparator)(message) && message.dateSeparator && (0, _jsxRuntime.jsx)(InlineDateSeparator, {
359
453
  date: message.dateSeparator
@@ -361,7 +455,7 @@ var MessageListWithContext = function MessageListWithContext(props) {
361
455
  var renderMessage = (0, _jsxRuntime.jsx)(Message, {
362
456
  goToMessage: goToMessage,
363
457
  groupStyles: (0, _useMessageList2.isMessageWithStylesReadByAndDateSeparator)(message) ? message.groupStyles : [],
364
- isTargetedMessage: targetedMessage === message.id,
458
+ isTargetedMessage: highlightedMessageId === message.id,
365
459
  lastReceivedId: lastReceivedId === message.id || message.quoted_message_id ? lastReceivedId : undefined,
366
460
  message: message,
367
461
  onThreadSelect: onThreadSelect,
@@ -369,35 +463,37 @@ var MessageListWithContext = function MessageListWithContext(props) {
369
463
  style: [messageContainer],
370
464
  threadList: threadList
371
465
  });
372
- return (0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
373
- children: [wrapMessageInTheme ? (0, _jsxRuntime.jsx)(_ThemeContext.ThemeProvider, {
466
+ return (0, _jsxRuntime.jsxs)(_reactNative.View, {
467
+ style: [shouldApplyAndroidWorkaround ? styles.invertAndroid : undefined],
468
+ testID: "message-list-item-".concat(index),
469
+ children: [message.type === 'system' ? (0, _jsxRuntime.jsx)(MessageSystem, {
470
+ message: message,
471
+ style: [{
472
+ paddingHorizontal: screenPadding
473
+ }, messageContainer]
474
+ }) : wrapMessageInTheme ? (0, _jsxRuntime.jsx)(_ThemeContext.ThemeProvider, {
374
475
  mergedStyle: modifiedTheme,
375
476
  children: (0, _jsxRuntime.jsxs)(_reactNative.View, {
376
- style: [shouldApplyAndroidWorkaround ? styles.invertAndroid : undefined],
377
477
  testID: "message-list-item-".concat(index),
378
- children: [shouldApplyAndroidWorkaround && renderDateSeperator, renderMessage]
478
+ children: [renderDateSeperator, renderMessage]
379
479
  })
380
480
  }) : (0, _jsxRuntime.jsxs)(_reactNative.View, {
381
- style: [shouldApplyAndroidWorkaround ? styles.invertAndroid : undefined],
382
481
  testID: "message-list-item-".concat(index),
383
- children: [shouldApplyAndroidWorkaround && renderDateSeperator, renderMessage]
384
- }), !shouldApplyAndroidWorkaround && renderDateSeperator, (0, _jsxRuntime.jsx)(_reactNative.View, {
385
- style: [shouldApplyAndroidWorkaround ? styles.invertAndroid : undefined],
386
- children: insertInlineUnreadIndicator && (0, _jsxRuntime.jsx)(InlineUnreadIndicator, {})
387
- })]
482
+ children: [renderDateSeperator, renderMessage]
483
+ }), showUnreadUnderlay && (0, _jsxRuntime.jsx)(InlineUnreadIndicator, {})]
388
484
  });
389
485
  };
390
486
  var maybeCallOnStartReached = function () {
391
- var _ref3 = (0, _asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee() {
487
+ var _ref5 = (0, _asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee3() {
392
488
  var callback, onError;
393
- return _regenerator["default"].wrap(function _callee$(_context) {
394
- while (1) switch (_context.prev = _context.next) {
489
+ return _regenerator["default"].wrap(function _callee3$(_context3) {
490
+ while (1) switch (_context3.prev = _context3.next) {
395
491
  case 0:
396
492
  if (!(processedMessageList != null && processedMessageList.length && onStartReachedTracker.current[processedMessageList.length])) {
397
- _context.next = 2;
493
+ _context3.next = 2;
398
494
  break;
399
495
  }
400
- return _context.abrupt("return");
496
+ return _context3.abrupt("return");
401
497
  case 2:
402
498
  if (processedMessageList != null && processedMessageList.length) {
403
499
  onStartReachedTracker.current[processedMessageList.length] = true;
@@ -412,34 +508,34 @@ var MessageListWithContext = function MessageListWithContext(props) {
412
508
  }, 2000);
413
509
  };
414
510
  if (!onEndReachedInPromise.current) {
415
- _context.next = 8;
511
+ _context3.next = 8;
416
512
  break;
417
513
  }
418
- _context.next = 8;
514
+ _context3.next = 8;
419
515
  return onEndReachedInPromise.current;
420
516
  case 8:
421
517
  onStartReachedInPromise.current = (threadList && !!threadInstance && loadMoreRecentThread ? loadMoreRecentThread({}) : loadMoreRecent()).then(callback)["catch"](onError);
422
518
  case 9:
423
519
  case "end":
424
- return _context.stop();
520
+ return _context3.stop();
425
521
  }
426
- }, _callee);
522
+ }, _callee3);
427
523
  }));
428
524
  return function maybeCallOnStartReached() {
429
- return _ref3.apply(this, arguments);
525
+ return _ref5.apply(this, arguments);
430
526
  };
431
527
  }();
432
528
  var maybeCallOnEndReached = function () {
433
- var _ref4 = (0, _asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee2() {
529
+ var _ref6 = (0, _asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee4() {
434
530
  var callback, onError;
435
- return _regenerator["default"].wrap(function _callee2$(_context2) {
436
- while (1) switch (_context2.prev = _context2.next) {
531
+ return _regenerator["default"].wrap(function _callee4$(_context4) {
532
+ while (1) switch (_context4.prev = _context4.next) {
437
533
  case 0:
438
534
  if (!(processedMessageList != null && processedMessageList.length && onEndReachedTracker.current[processedMessageList.length])) {
439
- _context2.next = 2;
535
+ _context4.next = 2;
440
536
  break;
441
537
  }
442
- return _context2.abrupt("return");
538
+ return _context4.abrupt("return");
443
539
  case 2:
444
540
  if (processedMessageList != null && processedMessageList.length) {
445
541
  onEndReachedTracker.current[processedMessageList.length] = true;
@@ -454,21 +550,21 @@ var MessageListWithContext = function MessageListWithContext(props) {
454
550
  }, 2000);
455
551
  };
456
552
  if (!onStartReachedInPromise.current) {
457
- _context2.next = 8;
553
+ _context4.next = 8;
458
554
  break;
459
555
  }
460
- _context2.next = 8;
556
+ _context4.next = 8;
461
557
  return onStartReachedInPromise.current;
462
558
  case 8:
463
559
  onEndReachedInPromise.current = (threadList ? loadMoreThread() : loadMore()).then(callback)["catch"](onError);
464
560
  case 9:
465
561
  case "end":
466
- return _context2.stop();
562
+ return _context4.stop();
467
563
  }
468
- }, _callee2);
564
+ }, _callee4);
469
565
  }));
470
566
  return function maybeCallOnEndReached() {
471
- return _ref4.apply(this, arguments);
567
+ return _ref6.apply(this, arguments);
472
568
  };
473
569
  }();
474
570
  var onUserScrollEvent = function onUserScrollEvent(event) {
@@ -490,72 +586,61 @@ var MessageListWithContext = function MessageListWithContext(props) {
490
586
  }
491
587
  };
492
588
  var handleScroll = function handleScroll(event) {
493
- var offset = event.nativeEvent.contentOffset.y;
494
589
  var messageListHasMessages = processedMessageList.length > 0;
590
+ var offset = event.nativeEvent.contentOffset.y;
495
591
  var isScrollAtBottom = offset <= 150;
496
592
  var notLatestSet = channel.state.messages !== channel.state.latestMessages;
497
593
  var showScrollToBottomButton = messageListHasMessages && (!threadList && notLatestSet || !isScrollAtBottom);
498
594
  setScrollToBottomButtonVisible(showScrollToBottomButton);
499
- var shouldMarkRead = !threadList && !notLatestSet && offset <= 0 && channel.countUnread() > 0;
500
- if (shouldMarkRead) {
501
- markRead();
502
- }
503
- setInitialScrollDone(false);
504
595
  if (onListScroll) {
505
596
  onListScroll(event);
506
597
  }
507
598
  };
508
599
  var goToNewMessages = function () {
509
- var _ref5 = (0, _asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee3() {
600
+ var _ref7 = (0, _asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee5() {
510
601
  var isNotLatestSet;
511
- return _regenerator["default"].wrap(function _callee3$(_context3) {
512
- while (1) switch (_context3.prev = _context3.next) {
602
+ return _regenerator["default"].wrap(function _callee5$(_context5) {
603
+ while (1) switch (_context5.prev = _context5.next) {
513
604
  case 0:
514
605
  isNotLatestSet = channel.state.messages !== channel.state.latestMessages;
515
606
  if (!isNotLatestSet) {
516
- _context3.next = 7;
607
+ _context5.next = 7;
517
608
  break;
518
609
  }
519
610
  resetPaginationTrackersRef.current();
520
- _context3.next = 5;
611
+ _context5.next = 5;
521
612
  return reloadChannel();
522
613
  case 5:
523
- _context3.next = 8;
614
+ _context5.next = 8;
524
615
  break;
525
616
  case 7:
526
617
  if (flatListRef.current) {
527
618
  flatListRef.current.scrollToOffset({
619
+ animated: true,
528
620
  offset: 0
529
621
  });
530
622
  }
531
623
  case 8:
532
624
  setScrollToBottomButtonVisible(false);
533
- if (!threadList) {
534
- markRead();
535
- }
536
- case 10:
625
+ case 9:
537
626
  case "end":
538
- return _context3.stop();
627
+ return _context5.stop();
539
628
  }
540
- }, _callee3);
629
+ }, _callee5);
541
630
  }));
542
631
  return function goToNewMessages() {
543
- return _ref5.apply(this, arguments);
632
+ return _ref7.apply(this, arguments);
544
633
  };
545
634
  }();
546
635
  var scrollToIndexFailedRetryCountRef = (0, _react.useRef)(0);
547
636
  var failScrollTimeoutId = (0, _react.useRef)();
548
637
  var onScrollToIndexFailedRef = (0, _react.useRef)(function (info) {
549
638
  if (!flatListRef.current) return;
550
- flatListRef.current.scrollToOffset({
551
- animated: false,
552
- offset: info.averageItemLength * info.index
553
- });
554
639
  failScrollTimeoutId.current = setTimeout(function () {
555
640
  try {
556
641
  var _flatListRef$current3;
557
642
  (_flatListRef$current3 = flatListRef.current) == null ? void 0 : _flatListRef$current3.scrollToIndex({
558
- animated: false,
643
+ animated: true,
559
644
  index: info.index,
560
645
  viewPosition: 0.5
561
646
  });
@@ -571,80 +656,8 @@ var MessageListWithContext = function MessageListWithContext(props) {
571
656
  scrollToIndexFailedRetryCountRef.current += 1;
572
657
  onScrollToIndexFailedRef.current(info);
573
658
  }
574
- }, WAIT_FOR_SCROLL_TO_OFFSET_TIMEOUT);
659
+ }, WAIT_FOR_SCROLL_TIMEOUT);
575
660
  });
576
- var goToMessage = function () {
577
- var _ref6 = (0, _asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee4(messageId) {
578
- var indexOfParentInMessageList;
579
- return _regenerator["default"].wrap(function _callee4$(_context4) {
580
- while (1) switch (_context4.prev = _context4.next) {
581
- case 0:
582
- indexOfParentInMessageList = processedMessageList.findIndex(function (message) {
583
- return (message == null ? void 0 : message.id) === messageId;
584
- });
585
- if (!(indexOfParentInMessageList !== -1 && flatListRef.current)) {
586
- _context4.next = 8;
587
- break;
588
- }
589
- clearTimeout(failScrollTimeoutId.current);
590
- scrollToIndexFailedRetryCountRef.current = 0;
591
- messageIdLastScrolledToRef.current = messageId;
592
- setTargetedMessage(messageId);
593
- flatListRef.current.scrollToIndex({
594
- animated: true,
595
- index: indexOfParentInMessageList,
596
- viewPosition: 0.5
597
- });
598
- return _context4.abrupt("return");
599
- case 8:
600
- _context4.next = 10;
601
- return loadChannelAroundMessage({
602
- messageId: messageId
603
- });
604
- case 10:
605
- case "end":
606
- return _context4.stop();
607
- }
608
- }, _callee4);
609
- }));
610
- return function goToMessage(_x) {
611
- return _ref6.apply(this, arguments);
612
- };
613
- }();
614
- (0, _react.useEffect)(function () {
615
- scrollToDebounceTimeoutRef.current = setTimeout(function () {
616
- if (initialScrollToFirstUnreadMessage) {
617
- clearTimeout(initialScrollSettingTimeoutRef.current);
618
- initialScrollSettingTimeoutRef.current = setTimeout(function () {
619
- setInitialScrollDone(true);
620
- }, 2000);
621
- }
622
- var messageIdToScroll;
623
- if (targetedMessage && messageIdLastScrolledToRef.current !== targetedMessage) {
624
- messageIdToScroll = targetedMessage;
625
- }
626
- if (!messageIdToScroll) return;
627
- var indexOfParentInMessageList = processedMessageList.findIndex(function (message) {
628
- return (message == null ? void 0 : message.id) === messageIdToScroll;
629
- });
630
- if (indexOfParentInMessageList !== -1 && flatListRef.current) {
631
- clearTimeout(scrollToDebounceTimeoutRef.current);
632
- clearTimeout(failScrollTimeoutId.current);
633
- messageIdLastScrolledToRef.current = messageIdToScroll;
634
- scrollToIndexFailedRetryCountRef.current = 0;
635
- flatListRef.current.scrollToIndex({
636
- animated: false,
637
- index: indexOfParentInMessageList,
638
- viewPosition: 0.5
639
- });
640
- }
641
- if (indexOfParentInMessageList === -1) {
642
- loadChannelAroundMessage({
643
- messageId: messageIdToScroll
644
- });
645
- }
646
- }, 50);
647
- }, [targetedMessage, initialScrollToFirstUnreadMessage]);
648
661
  var messagesWithImages = legacyImageViewerSwipeBehaviour && processedMessageList.filter(function (message) {
649
662
  var isMessageTypeDeleted = message.type === 'deleted';
650
663
  if (!isMessageTypeDeleted && message.attachments) {
@@ -687,6 +700,25 @@ var MessageListWithContext = function MessageListWithContext(props) {
687
700
  setFlatListRef(ref);
688
701
  }
689
702
  };
703
+ var onUnreadNotificationClose = function () {
704
+ var _ref8 = (0, _asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee6() {
705
+ return _regenerator["default"].wrap(function _callee6$(_context6) {
706
+ while (1) switch (_context6.prev = _context6.next) {
707
+ case 0:
708
+ _context6.next = 2;
709
+ return markRead();
710
+ case 2:
711
+ setIsUnreadNotificationOpen(false);
712
+ case 3:
713
+ case "end":
714
+ return _context6.stop();
715
+ }
716
+ }, _callee6);
717
+ }));
718
+ return function onUnreadNotificationClose() {
719
+ return _ref8.apply(this, arguments);
720
+ };
721
+ }();
690
722
  var debugRef = (0, _DebugContext.useDebugContext)();
691
723
  var isDebugModeEnabled = __DEV__ && debugRef && debugRef.current;
692
724
  if (isDebugModeEnabled) {
@@ -768,7 +800,7 @@ var MessageListWithContext = function MessageListWithContext(props) {
768
800
  onScrollEndDrag: onScrollEndDrag,
769
801
  onScrollToIndexFailed: onScrollToIndexFailedRef.current,
770
802
  onTouchEnd: dismissImagePicker,
771
- onViewableItemsChanged: onViewableItemsChanged.current,
803
+ onViewableItemsChanged: onViewableItemsChanged,
772
804
  ref: refCallback,
773
805
  renderItem: renderItem,
774
806
  scrollEnabled: overlay === 'none',
@@ -788,7 +820,9 @@ var MessageListWithContext = function MessageListWithContext(props) {
788
820
  onPress: goToNewMessages,
789
821
  showNotification: scrollToBottomButtonVisible,
790
822
  unreadCount: threadList ? 0 : channel == null ? void 0 : channel.countUnread()
791
- }), (0, _jsxRuntime.jsx)(NetworkDownIndicator, {})]
823
+ }), (0, _jsxRuntime.jsx)(NetworkDownIndicator, {}), isUnreadNotificationOpen && !threadList ? (0, _jsxRuntime.jsx)(UnreadMessagesNotification, {
824
+ onCloseHandler: onUnreadNotificationClose
825
+ }) : null]
792
826
  });
793
827
  };
794
828
  var MessageList = function MessageList(props) {
@@ -798,11 +832,13 @@ var MessageList = function MessageList(props) {
798
832
  setSelectedPicker = _useAttachmentPickerC.setSelectedPicker;
799
833
  var _useChannelContext = (0, _ChannelContext.useChannelContext)(),
800
834
  channel = _useChannelContext.channel,
835
+ channelUnreadState = _useChannelContext.channelUnreadState,
801
836
  disabled = _useChannelContext.disabled,
802
837
  EmptyStateIndicator = _useChannelContext.EmptyStateIndicator,
803
838
  enableMessageGroupingByUser = _useChannelContext.enableMessageGroupingByUser,
804
839
  error = _useChannelContext.error,
805
840
  hideStickyDateHeader = _useChannelContext.hideStickyDateHeader,
841
+ highlightedMessageId = _useChannelContext.highlightedMessageId,
806
842
  isChannelActive = _useChannelContext.isChannelActive,
807
843
  loadChannelAroundMessage = _useChannelContext.loadChannelAroundMessage,
808
844
  loading = _useChannelContext.loading,
@@ -823,7 +859,6 @@ var MessageList = function MessageList(props) {
823
859
  DateHeader = _useMessagesContext.DateHeader,
824
860
  disableTypingIndicator = _useMessagesContext.disableTypingIndicator,
825
861
  FlatList = _useMessagesContext.FlatList,
826
- initialScrollToFirstUnreadMessage = _useMessagesContext.initialScrollToFirstUnreadMessage,
827
862
  InlineDateSeparator = _useMessagesContext.InlineDateSeparator,
828
863
  InlineUnreadIndicator = _useMessagesContext.InlineUnreadIndicator,
829
864
  legacyImageViewerSwipeBehaviour = _useMessagesContext.legacyImageViewerSwipeBehaviour,
@@ -833,7 +868,8 @@ var MessageList = function MessageList(props) {
833
868
  ScrollToBottomButton = _useMessagesContext.ScrollToBottomButton,
834
869
  shouldShowUnreadUnderlay = _useMessagesContext.shouldShowUnreadUnderlay,
835
870
  TypingIndicator = _useMessagesContext.TypingIndicator,
836
- TypingIndicatorContainer = _useMessagesContext.TypingIndicatorContainer;
871
+ TypingIndicatorContainer = _useMessagesContext.TypingIndicatorContainer,
872
+ UnreadMessagesNotification = _useMessagesContext.UnreadMessagesNotification;
837
873
  var _usePaginatedMessageL = (0, _PaginatedMessageListContext.usePaginatedMessageListContext)(),
838
874
  loadMore = _usePaginatedMessageL.loadMore,
839
875
  loadMoreRecent = _usePaginatedMessageL.loadMoreRecent;
@@ -846,6 +882,7 @@ var MessageList = function MessageList(props) {
846
882
  threadInstance = _useThreadContext.threadInstance;
847
883
  return (0, _jsxRuntime.jsx)(MessageListWithContext, Object.assign({
848
884
  channel: channel,
885
+ channelUnreadState: channelUnreadState,
849
886
  client: client,
850
887
  closePicker: closePicker,
851
888
  DateHeader: DateHeader,
@@ -856,7 +893,7 @@ var MessageList = function MessageList(props) {
856
893
  error: error,
857
894
  FlatList: FlatList,
858
895
  hideStickyDateHeader: hideStickyDateHeader,
859
- initialScrollToFirstUnreadMessage: initialScrollToFirstUnreadMessage,
896
+ highlightedMessageId: highlightedMessageId,
860
897
  InlineDateSeparator: InlineDateSeparator,
861
898
  InlineUnreadIndicator: InlineUnreadIndicator,
862
899
  isListActive: isChannelActive,
@@ -888,7 +925,8 @@ var MessageList = function MessageList(props) {
888
925
  threadInstance: threadInstance,
889
926
  threadList: threadList,
890
927
  TypingIndicator: TypingIndicator,
891
- TypingIndicatorContainer: TypingIndicatorContainer
928
+ TypingIndicatorContainer: TypingIndicatorContainer,
929
+ UnreadMessagesNotification: UnreadMessagesNotification
892
930
  }, props, {
893
931
  noGroupByUser: !enableMessageGroupingByUser || props.noGroupByUser
894
932
  }));