stream-chat-react 10.20.0 → 10.20.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.
@@ -25,7 +25,7 @@ import { EmojiProvider } from '../../context/EmojiContext';
25
25
  import { useTranslationContext } from '../../context/TranslationContext';
26
26
  import { TypingProvider } from '../../context/TypingContext';
27
27
  import { DEFAULT_INITIAL_CHANNEL_PAGE_SIZE, DEFAULT_NEXT_CHANNEL_PAGE_SIZE, DEFAULT_THREAD_PAGE_SIZE, } from '../../constants/limits';
28
- import { hasMoreMessagesProbably, hasNotMoreMessages } from '../MessageList/utils';
28
+ import { hasMoreMessagesProbably } from '../MessageList/utils';
29
29
  import defaultEmojiData from '../../stream-emoji.json';
30
30
  import { makeAddNotifications } from './utils';
31
31
  import { getChannel } from '../../utils/getChannel';
@@ -153,6 +153,7 @@ var ChannelInner = function (props) {
153
153
  /**
154
154
  * As the channel state is not normalized we re-fetch the channel data. Thus, we avoid having to search for user references in the channel state.
155
155
  */
156
+ // FIXME: we should use channelQueryOptions if they are available
156
157
  return [4 /*yield*/, channel.query({
157
158
  messages: { id_lt: oldestID, limit: DEFAULT_NEXT_CHANNEL_PAGE_SIZE },
158
159
  watchers: { limit: DEFAULT_NEXT_CHANNEL_PAGE_SIZE },
@@ -161,6 +162,7 @@ var ChannelInner = function (props) {
161
162
  /**
162
163
  * As the channel state is not normalized we re-fetch the channel data. Thus, we avoid having to search for user references in the channel state.
163
164
  */
165
+ // FIXME: we should use channelQueryOptions if they are available
164
166
  _m.sent();
165
167
  _m.label = 2;
166
168
  case 2:
@@ -179,14 +181,14 @@ var ChannelInner = function (props) {
179
181
  };
180
182
  (function () { return __awaiter(void 0, void 0, void 0, function () {
181
183
  var members, _i, _a, member, userId, _b, user, user_id, config, e_1;
182
- var _c;
183
- return __generator(this, function (_d) {
184
- switch (_d.label) {
184
+ var _c, _d, _e;
185
+ return __generator(this, function (_f) {
186
+ switch (_f.label) {
185
187
  case 0:
186
188
  if (!(!channel.initialized && initializeOnMount)) return [3 /*break*/, 4];
187
- _d.label = 1;
189
+ _f.label = 1;
188
190
  case 1:
189
- _d.trys.push([1, 3, , 4]);
191
+ _f.trys.push([1, 3, , 4]);
190
192
  members = [];
191
193
  if (!channel.id && ((_c = channel.data) === null || _c === void 0 ? void 0 : _c.members)) {
192
194
  for (_i = 0, _a = channel.data.members; _i < _a.length; _i++) {
@@ -206,12 +208,12 @@ var ChannelInner = function (props) {
206
208
  }
207
209
  return [4 /*yield*/, getChannel({ channel: channel, client: client, members: members, options: channelQueryOptions })];
208
210
  case 2:
209
- _d.sent();
211
+ _f.sent();
210
212
  config = channel.getConfig();
211
213
  setChannelConfig(config);
212
214
  return [3 /*break*/, 4];
213
215
  case 3:
214
- e_1 = _d.sent();
216
+ e_1 = _f.sent();
215
217
  dispatch({ error: e_1, type: 'setError' });
216
218
  errored = true;
217
219
  return [3 /*break*/, 4];
@@ -219,7 +221,11 @@ var ChannelInner = function (props) {
219
221
  done = true;
220
222
  originalTitle.current = document.title;
221
223
  if (!errored) {
222
- dispatch({ channel: channel, type: 'initStateFromChannel' });
224
+ dispatch({
225
+ channel: channel,
226
+ hasMore: hasMoreMessagesProbably(channel.state.messages.length, (_e = (_d = channelQueryOptions === null || channelQueryOptions === void 0 ? void 0 : channelQueryOptions.messages) === null || _d === void 0 ? void 0 : _d.limit) !== null && _e !== void 0 ? _e : DEFAULT_INITIAL_CHANNEL_PAGE_SIZE),
227
+ type: 'initStateFromChannel',
228
+ });
223
229
  if (channel.countUnread() > 0)
224
230
  markRead();
225
231
  // The more complex sync logic is done in Chat
@@ -274,22 +280,17 @@ var ChannelInner = function (props) {
274
280
  var loadMore = function (limit) {
275
281
  if (limit === void 0) { limit = DEFAULT_NEXT_CHANNEL_PAGE_SIZE; }
276
282
  return __awaiter(void 0, void 0, void 0, function () {
277
- var oldestMessage, notHasMore, oldestID, perPage, queryResponse, e_2, hasMoreMessages;
283
+ var oldestMessage, oldestID, perPage, queryResponse, e_2, hasMoreMessages;
278
284
  var _a;
279
285
  return __generator(this, function (_b) {
280
286
  switch (_b.label) {
281
287
  case 0:
282
- if (!online.current || !window.navigator.onLine)
288
+ if (!online.current || !window.navigator.onLine || !state.hasMore)
283
289
  return [2 /*return*/, 0];
284
290
  oldestMessage = (_a = state === null || state === void 0 ? void 0 : state.messages) === null || _a === void 0 ? void 0 : _a[0];
285
291
  if (state.loadingMore || state.loadingMoreNewer || (oldestMessage === null || oldestMessage === void 0 ? void 0 : oldestMessage.status) !== 'received') {
286
292
  return [2 /*return*/, 0];
287
293
  }
288
- notHasMore = hasNotMoreMessages(channel.state.messages.length, DEFAULT_INITIAL_CHANNEL_PAGE_SIZE);
289
- if (notHasMore) {
290
- loadMoreFinished(false, channel.state.messages);
291
- return [2 /*return*/, channel.state.messages.length];
292
- }
293
294
  dispatch({ loadingMore: true, type: 'setLoadingMore' });
294
295
  oldestID = oldestMessage === null || oldestMessage === void 0 ? void 0 : oldestMessage.id;
295
296
  perPage = limit;
@@ -569,6 +570,7 @@ var ChannelInner = function (props) {
569
570
  return __generator(this, function (_b) {
570
571
  switch (_b.label) {
571
572
  case 0:
573
+ // FIXME: should prevent loading more, if state.thread.reply_count === channel.state.threads[parentID].length
572
574
  if (state.threadLoadingMore || !state.thread)
573
575
  return [2 /*return*/];
574
576
  dispatch({ type: 'startLoadingThread' });
@@ -19,6 +19,7 @@ export declare type ChannelStateReducerAction<StreamChatGenerics extends Default
19
19
  type: 'jumpToMessageFinished';
20
20
  } | {
21
21
  channel: Channel<StreamChatGenerics>;
22
+ hasMore: boolean;
22
23
  type: 'initStateFromChannel';
23
24
  } | {
24
25
  hasMore: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"channelState.d.ts","sourceRoot":"","sources":["../../../src/components/Channel/channelState.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"channelState.d.ts","sourceRoot":"","sources":["../../../src/components/Channel/channelState.ts"],"names":[],"mappings":"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"}
@@ -18,8 +18,8 @@ export var channelReducer = function (state, action) {
18
18
  return __assign(__assign({}, state), { members: __assign({}, channel.state.members), messages: __spreadArray([], channel.state.messages, true), pinnedMessages: __spreadArray([], channel.state.pinnedMessages, true), read: __assign({}, channel.state.read), watcherCount: channel.state.watcher_count, watchers: __assign({}, channel.state.watchers) });
19
19
  }
20
20
  case 'initStateFromChannel': {
21
- var channel = action.channel;
22
- return __assign(__assign({}, state), { loading: false, members: __assign({}, channel.state.members), messages: __spreadArray([], channel.state.messages, true), pinnedMessages: __spreadArray([], channel.state.pinnedMessages, true), read: __assign({}, channel.state.read), watcherCount: channel.state.watcher_count, watchers: __assign({}, channel.state.watchers) });
21
+ var channel = action.channel, hasMore = action.hasMore;
22
+ return __assign(__assign({}, state), { hasMore: hasMore, loading: false, members: __assign({}, channel.state.members), messages: __spreadArray([], channel.state.messages, true), pinnedMessages: __spreadArray([], channel.state.pinnedMessages, true), read: __assign({}, channel.state.read), watcherCount: channel.state.watcher_count, watchers: __assign({}, channel.state.watchers) });
23
23
  }
24
24
  case 'jumpToLatestMessage': {
25
25
  return __assign(__assign({}, state), { hasMoreNewer: false, highlightedMessageId: undefined, loading: false, suppressAutoscroll: false });
@@ -31,6 +31,7 @@ export var InfiniteScroll = function (props) {
31
31
  }
32
32
  if (isLoading)
33
33
  return;
34
+ // FIXME: this triggers loadMore call when a user types messages in thread and the scroll container container expands
34
35
  if (reverseOffset < Number(threshold) &&
35
36
  typeof loadPreviousPageFn === 'function' &&
36
37
  hasPreviousPageFlag) {
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/components/MessageList/utils.ts"],"names":[],"mappings":";AAOA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAEnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAEvE,aAAK,qBAAqB,CACxB,kBAAkB,SAAS,yBAAyB,GAAG,yBAAyB,IAC9E;IACF,QAAQ,EAAE,aAAa,CAAC,kBAAkB,CAAC,EAAE,CAAC;IAC9C,MAAM,EAAE,MAAM,CAAC;IACf,4BAA4B;IAC5B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,2EAA2E;IAC3E,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,kEAAkE;IAClE,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACvB,+FAA+F;IAC/F,sBAAsB,CAAC,EAAE,KAAK,CAAC,QAAQ,CACrC,KAAK,CAAC,cAAc,CAAC,aAAa,CAAC,kBAAkB,CAAC,GAAG,SAAS,CAAC,CACpE,CAAC;CACH,CAAC;AAEF;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,eAAe,8KAuF3B,CAAC;AAEF,eAAO,MAAM,iBAAiB,UAAW,MAAM,GAAG,IAAI,WAQrD,CAAC;AAGF,eAAO,MAAM,eAAe,oJAY3B,CAAC;AAEF,eAAO,MAAM,aAAa;eAIU,IAAI;;mCACnB,OAAO,uDAqC3B,CAAC;AAEF,eAAO,MAAM,WAAW,qJAIL,MAAM,wCAgDxB,CAAC;AAEF,oBAAY,UAAU,GAAG,EAAE,GAAG,QAAQ,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAErE,eAAO,MAAM,cAAc,oPAMV,OAAO,KACrB,UAyCF,CAAC;AAOF,eAAO,MAAM,uBAAuB,0BAA2B,MAAM,SAAS,MAAM,YACnD,CAAC;AAElC,eAAO,MAAM,kBAAkB,0BAA2B,MAAM,SAAS,MAAM,YAChD,CAAC"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/components/MessageList/utils.ts"],"names":[],"mappings":";AAOA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAEnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAEvE,aAAK,qBAAqB,CACxB,kBAAkB,SAAS,yBAAyB,GAAG,yBAAyB,IAC9E;IACF,QAAQ,EAAE,aAAa,CAAC,kBAAkB,CAAC,EAAE,CAAC;IAC9C,MAAM,EAAE,MAAM,CAAC;IACf,4BAA4B;IAC5B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,2EAA2E;IAC3E,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,kEAAkE;IAClE,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACvB,+FAA+F;IAC/F,sBAAsB,CAAC,EAAE,KAAK,CAAC,QAAQ,CACrC,KAAK,CAAC,cAAc,CAAC,aAAa,CAAC,kBAAkB,CAAC,GAAG,SAAS,CAAC,CACpE,CAAC;CACH,CAAC;AAEF;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,eAAe,8KAuF3B,CAAC;AAEF,eAAO,MAAM,iBAAiB,UAAW,MAAM,GAAG,IAAI,WAQrD,CAAC;AAGF,eAAO,MAAM,eAAe,oJAY3B,CAAC;AAEF,eAAO,MAAM,aAAa;eAIU,IAAI;;mCACnB,OAAO,uDAqC3B,CAAC;AAEF,eAAO,MAAM,WAAW,qJAIL,MAAM,wCAgDxB,CAAC;AAEF,oBAAY,UAAU,GAAG,EAAE,GAAG,QAAQ,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAErE,eAAO,MAAM,cAAc,oPAMV,OAAO,KACrB,UAyCF,CAAC;AAOF,eAAO,MAAM,uBAAuB,0BAA2B,MAAM,SAAS,MAAM,YACnD,CAAC;AAGlC,eAAO,MAAM,kBAAkB,0BAA2B,MAAM,SAAS,MAAM,YAChD,CAAC"}
@@ -219,6 +219,7 @@ export var getGroupStyles = function (message, previousMessage, nextMessage, noG
219
219
  export var hasMoreMessagesProbably = function (returnedCountMessages, limit) {
220
220
  return returnedCountMessages === limit;
221
221
  };
222
+ // @deprecated
222
223
  export var hasNotMoreMessages = function (returnedCountMessages, limit) {
223
224
  return returnedCountMessages < limit;
224
225
  };
@@ -31,6 +31,7 @@ var ThreadInner = function (props) {
31
31
  var ThreadMessageList = virtualized ? VirtualizedMessageList : MessageList;
32
32
  useEffect(function () {
33
33
  if ((thread === null || thread === void 0 ? void 0 : thread.id) && (thread === null || thread === void 0 ? void 0 : thread.reply_count)) {
34
+ // FIXME: integrators can customize channel query options but cannot customize channel.getReplies() options
34
35
  loadMoreThread();
35
36
  }
36
37
  }, []);
package/dist/index.cjs.js CHANGED
@@ -27341,8 +27341,8 @@ var channelReducer = function (state, action) {
27341
27341
  return __assign(__assign({}, state), { members: __assign({}, channel.state.members), messages: __spreadArray([], channel.state.messages, true), pinnedMessages: __spreadArray([], channel.state.pinnedMessages, true), read: __assign({}, channel.state.read), watcherCount: channel.state.watcher_count, watchers: __assign({}, channel.state.watchers) });
27342
27342
  }
27343
27343
  case 'initStateFromChannel': {
27344
- var channel = action.channel;
27345
- return __assign(__assign({}, state), { loading: false, members: __assign({}, channel.state.members), messages: __spreadArray([], channel.state.messages, true), pinnedMessages: __spreadArray([], channel.state.pinnedMessages, true), read: __assign({}, channel.state.read), watcherCount: channel.state.watcher_count, watchers: __assign({}, channel.state.watchers) });
27344
+ var channel = action.channel, hasMore = action.hasMore;
27345
+ return __assign(__assign({}, state), { hasMore: hasMore, loading: false, members: __assign({}, channel.state.members), messages: __spreadArray([], channel.state.messages, true), pinnedMessages: __spreadArray([], channel.state.pinnedMessages, true), read: __assign({}, channel.state.read), watcherCount: channel.state.watcher_count, watchers: __assign({}, channel.state.watchers) });
27346
27346
  }
27347
27347
  case 'jumpToLatestMessage': {
27348
27348
  return __assign(__assign({}, state), { hasMoreNewer: false, highlightedMessageId: undefined, loading: false, suppressAutoscroll: false });
@@ -32965,6 +32965,7 @@ var getGroupStyles = function (message, previousMessage, nextMessage, noGroupByU
32965
32965
  var hasMoreMessagesProbably = function (returnedCountMessages, limit) {
32966
32966
  return returnedCountMessages === limit;
32967
32967
  };
32968
+ // @deprecated
32968
32969
  var hasNotMoreMessages = function (returnedCountMessages, limit) {
32969
32970
  return returnedCountMessages < limit;
32970
32971
  };
@@ -33260,6 +33261,7 @@ var ChannelInner = function (props) {
33260
33261
  /**
33261
33262
  * As the channel state is not normalized we re-fetch the channel data. Thus, we avoid having to search for user references in the channel state.
33262
33263
  */
33264
+ // FIXME: we should use channelQueryOptions if they are available
33263
33265
  return [4 /*yield*/, channel.query({
33264
33266
  messages: { id_lt: oldestID, limit: DEFAULT_NEXT_CHANNEL_PAGE_SIZE },
33265
33267
  watchers: { limit: DEFAULT_NEXT_CHANNEL_PAGE_SIZE },
@@ -33268,6 +33270,7 @@ var ChannelInner = function (props) {
33268
33270
  /**
33269
33271
  * As the channel state is not normalized we re-fetch the channel data. Thus, we avoid having to search for user references in the channel state.
33270
33272
  */
33273
+ // FIXME: we should use channelQueryOptions if they are available
33271
33274
  _m.sent();
33272
33275
  _m.label = 2;
33273
33276
  case 2:
@@ -33286,14 +33289,14 @@ var ChannelInner = function (props) {
33286
33289
  };
33287
33290
  (function () { return __awaiter(void 0, void 0, void 0, function () {
33288
33291
  var members, _i, _a, member, userId, _b, user, user_id, config, e_1;
33289
- var _c;
33290
- return __generator(this, function (_d) {
33291
- switch (_d.label) {
33292
+ var _c, _d, _e;
33293
+ return __generator(this, function (_f) {
33294
+ switch (_f.label) {
33292
33295
  case 0:
33293
33296
  if (!(!channel.initialized && initializeOnMount)) return [3 /*break*/, 4];
33294
- _d.label = 1;
33297
+ _f.label = 1;
33295
33298
  case 1:
33296
- _d.trys.push([1, 3, , 4]);
33299
+ _f.trys.push([1, 3, , 4]);
33297
33300
  members = [];
33298
33301
  if (!channel.id && ((_c = channel.data) === null || _c === void 0 ? void 0 : _c.members)) {
33299
33302
  for (_i = 0, _a = channel.data.members; _i < _a.length; _i++) {
@@ -33313,12 +33316,12 @@ var ChannelInner = function (props) {
33313
33316
  }
33314
33317
  return [4 /*yield*/, getChannel({ channel: channel, client: client, members: members, options: channelQueryOptions })];
33315
33318
  case 2:
33316
- _d.sent();
33319
+ _f.sent();
33317
33320
  config = channel.getConfig();
33318
33321
  setChannelConfig(config);
33319
33322
  return [3 /*break*/, 4];
33320
33323
  case 3:
33321
- e_1 = _d.sent();
33324
+ e_1 = _f.sent();
33322
33325
  dispatch({ error: e_1, type: 'setError' });
33323
33326
  errored = true;
33324
33327
  return [3 /*break*/, 4];
@@ -33326,7 +33329,11 @@ var ChannelInner = function (props) {
33326
33329
  done = true;
33327
33330
  originalTitle.current = document.title;
33328
33331
  if (!errored) {
33329
- dispatch({ channel: channel, type: 'initStateFromChannel' });
33332
+ dispatch({
33333
+ channel: channel,
33334
+ hasMore: hasMoreMessagesProbably(channel.state.messages.length, (_e = (_d = channelQueryOptions === null || channelQueryOptions === void 0 ? void 0 : channelQueryOptions.messages) === null || _d === void 0 ? void 0 : _d.limit) !== null && _e !== void 0 ? _e : DEFAULT_INITIAL_CHANNEL_PAGE_SIZE),
33335
+ type: 'initStateFromChannel',
33336
+ });
33330
33337
  if (channel.countUnread() > 0)
33331
33338
  markRead();
33332
33339
  // The more complex sync logic is done in Chat
@@ -33381,22 +33388,17 @@ var ChannelInner = function (props) {
33381
33388
  var loadMore = function (limit) {
33382
33389
  if (limit === void 0) { limit = DEFAULT_NEXT_CHANNEL_PAGE_SIZE; }
33383
33390
  return __awaiter(void 0, void 0, void 0, function () {
33384
- var oldestMessage, notHasMore, oldestID, perPage, queryResponse, e_2, hasMoreMessages;
33391
+ var oldestMessage, oldestID, perPage, queryResponse, e_2, hasMoreMessages;
33385
33392
  var _a;
33386
33393
  return __generator(this, function (_b) {
33387
33394
  switch (_b.label) {
33388
33395
  case 0:
33389
- if (!online.current || !window.navigator.onLine)
33396
+ if (!online.current || !window.navigator.onLine || !state.hasMore)
33390
33397
  return [2 /*return*/, 0];
33391
33398
  oldestMessage = (_a = state === null || state === void 0 ? void 0 : state.messages) === null || _a === void 0 ? void 0 : _a[0];
33392
33399
  if (state.loadingMore || state.loadingMoreNewer || (oldestMessage === null || oldestMessage === void 0 ? void 0 : oldestMessage.status) !== 'received') {
33393
33400
  return [2 /*return*/, 0];
33394
33401
  }
33395
- notHasMore = hasNotMoreMessages(channel.state.messages.length, DEFAULT_INITIAL_CHANNEL_PAGE_SIZE);
33396
- if (notHasMore) {
33397
- loadMoreFinished(false, channel.state.messages);
33398
- return [2 /*return*/, channel.state.messages.length];
33399
- }
33400
33402
  dispatch({ loadingMore: true, type: 'setLoadingMore' });
33401
33403
  oldestID = oldestMessage === null || oldestMessage === void 0 ? void 0 : oldestMessage.id;
33402
33404
  perPage = limit;
@@ -33676,6 +33678,7 @@ var ChannelInner = function (props) {
33676
33678
  return __generator(this, function (_b) {
33677
33679
  switch (_b.label) {
33678
33680
  case 0:
33681
+ // FIXME: should prevent loading more, if state.thread.reply_count === channel.state.threads[parentID].length
33679
33682
  if (state.threadLoadingMore || !state.thread)
33680
33683
  return [2 /*return*/];
33681
33684
  dispatch({ type: 'startLoadingThread' });
@@ -35116,7 +35119,7 @@ var UnMemoizedChannelList = function (props) {
35116
35119
  */
35117
35120
  var ChannelList = React__default["default"].memo(UnMemoizedChannelList);
35118
35121
 
35119
- var version = '10.20.0';
35122
+ var version = '10.20.1';
35120
35123
 
35121
35124
  var useChat = function (_a) {
35122
35125
  var _b, _c;
@@ -35423,6 +35426,7 @@ var InfiniteScroll = function (props) {
35423
35426
  }
35424
35427
  if (isLoading)
35425
35428
  return;
35429
+ // FIXME: this triggers loadMore call when a user types messages in thread and the scroll container container expands
35426
35430
  if (reverseOffset < Number(threshold) &&
35427
35431
  typeof loadPreviousPageFn === 'function' &&
35428
35432
  hasPreviousPageFlag) {
@@ -37171,6 +37175,7 @@ var ThreadInner = function (props) {
37171
37175
  var ThreadMessageList = virtualized ? VirtualizedMessageList : MessageList;
37172
37176
  React.useEffect(function () {
37173
37177
  if ((thread === null || thread === void 0 ? void 0 : thread.id) && (thread === null || thread === void 0 ? void 0 : thread.reply_count)) {
37178
+ // FIXME: integrators can customize channel query options but cannot customize channel.getReplies() options
37174
37179
  loadMoreThread();
37175
37180
  }
37176
37181
  }, []);