@planningcenter/chat-react-native 4.2.1-qa-staging.4 → 4.2.1-qa-staging.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.
@@ -1 +1 @@
1
- {"version":3,"file":"conversation_screen.d.ts","sourceRoot":"","sources":["../../src/screens/conversation_screen.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAe,gBAAgB,EAAqB,MAAM,4BAA4B,CAAA;AAC7F,OAAO,EAGL,iBAAiB,EAIlB,MAAM,0BAA0B,CAAA;AAqCjC,OAAO,EAAE,yBAAyB,EAAE,MAAM,uCAAuC,CAAA;AAOjF,MAAM,MAAM,sBAAsB,GAAG;IACnC,eAAe,EAAE,MAAM,CAAA;IACvB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B,sBAAsB,CAAC,EAAE,MAAM,CAAA;IAC/B,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAClC,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAClC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,KAAK,CAAC,EAAE,yBAAyB,CAAA;IACjC,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,uBAAuB,GAAG,iBAAiB,CAAC,sBAAsB,CAAC,CAAA;AAE/E,wBAAgB,kBAAkB,CAAC,EAAE,KAAK,EAAE,EAAE,uBAAuB,2CAwCpE;AAoPD,UAAU,4BAA6B,SAAQ,gBAAgB;IAC7D,eAAe,EAAE,MAAM,CAAA;IACvB,KAAK,CAAC,EAAE,yBAAyB,CAAA;IACjC,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAED,eAAO,MAAM,uBAAuB,GAAI,8DAOrC,4BAA4B,4CAqC9B,CAAA"}
1
+ {"version":3,"file":"conversation_screen.d.ts","sourceRoot":"","sources":["../../src/screens/conversation_screen.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAe,gBAAgB,EAAqB,MAAM,4BAA4B,CAAA;AAC7F,OAAO,EAGL,iBAAiB,EAIlB,MAAM,0BAA0B,CAAA;AAqCjC,OAAO,EAAE,yBAAyB,EAAE,MAAM,uCAAuC,CAAA;AAMjF,MAAM,MAAM,sBAAsB,GAAG;IACnC,eAAe,EAAE,MAAM,CAAA;IACvB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B,sBAAsB,CAAC,EAAE,MAAM,CAAA;IAC/B,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAClC,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAClC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,KAAK,CAAC,EAAE,yBAAyB,CAAA;IACjC,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,uBAAuB,GAAG,iBAAiB,CAAC,sBAAsB,CAAC,CAAA;AAE/E,wBAAgB,kBAAkB,CAAC,EAAE,KAAK,EAAE,EAAE,uBAAuB,2CAwCpE;AAoPD,UAAU,4BAA6B,SAAQ,gBAAgB;IAC7D,eAAe,EAAE,MAAM,CAAA;IACvB,KAAK,CAAC,EAAE,yBAAyB,CAAA;IACjC,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAED,eAAO,MAAM,uBAAuB,GAAI,8DAOrC,4BAA4B,4CAqC9B,CAAA"}
@@ -28,7 +28,6 @@ import { useMarkLatestMessageRead } from '../hooks/use_mark_latest_message_read'
28
28
  import { analyticsEvents, normalizeAnalyticsMetadata, usePublishProductAnalyticsEvent } from '../hooks/use_product_analytics';
29
29
  import { useRestAwayFromDismissEdge } from '../hooks/use_rest_away_from_dismiss_edge';
30
30
  import { useVideoModerationJoltEvents } from '../hooks/use_video_moderation_jolt_events';
31
- import { newestPersistedMessageId } from '../utils/cache/messages_cache';
32
31
  import { gatedMessageCache } from '../utils/gated_message_cache';
33
32
  import { getMessagesQueryKey } from '../utils/request/get_messages';
34
33
  import { decodeUlidTime } from '../utils/ulid';
@@ -157,7 +156,7 @@ export function ConversationScreen(t0) {
157
156
  return t10;
158
157
  }
159
158
  function ConversationScreenContent(t0) {
160
- const $ = _c(120);
159
+ const $ = _c(118);
161
160
  const {
162
161
  route,
163
162
  anchor,
@@ -202,127 +201,119 @@ function ConversationScreenContent(t0) {
202
201
  const caughtUp = !hasPreviousPage;
203
202
  const [showJumpToBottomButton, setShowJumpToBottomButton] = useState(false);
204
203
  const readingHistory = showJumpToBottomButton;
204
+ const newestMessageId = messages[0]?.id;
205
205
  let t2;
206
- if ($[4] !== messages) {
207
- t2 = newestPersistedMessageId(messages);
208
- $[4] = messages;
209
- $[5] = t2;
210
- } else {
211
- t2 = $[5];
212
- }
213
- const newestMessageId = t2;
214
- let t3;
215
- if ($[6] !== conversation_id || $[7] !== queryKey || $[8] !== reply_root_id) {
216
- t3 = {
206
+ if ($[4] !== conversation_id || $[5] !== queryKey || $[6] !== reply_root_id) {
207
+ t2 = {
217
208
  conversation_id,
218
209
  reply_root_id,
219
210
  queryKey
220
211
  };
221
- $[6] = conversation_id;
222
- $[7] = queryKey;
223
- $[8] = reply_root_id;
224
- $[9] = t3;
212
+ $[4] = conversation_id;
213
+ $[5] = queryKey;
214
+ $[6] = reply_root_id;
215
+ $[7] = t2;
225
216
  } else {
226
- t3 = $[9];
217
+ t2 = $[7];
227
218
  }
228
- const fetchNewer = useFetchNewerMessages(t3);
229
- let t4;
230
- if ($[10] !== caughtUp || $[11] !== fetchNewer || $[12] !== newestMessageId || $[13] !== readingHistory) {
231
- t4 = {
219
+ const fetchNewer = useFetchNewerMessages(t2);
220
+ let t3;
221
+ if ($[8] !== caughtUp || $[9] !== fetchNewer || $[10] !== newestMessageId || $[11] !== readingHistory) {
222
+ t3 = {
232
223
  fetchNewer,
233
224
  newestMessageId,
234
225
  readingHistory,
235
226
  caughtUp
236
227
  };
237
- $[10] = caughtUp;
238
- $[11] = fetchNewer;
239
- $[12] = newestMessageId;
240
- $[13] = readingHistory;
241
- $[14] = t4;
228
+ $[8] = caughtUp;
229
+ $[9] = fetchNewer;
230
+ $[10] = newestMessageId;
231
+ $[11] = readingHistory;
232
+ $[12] = t3;
242
233
  } else {
243
- t4 = $[14];
234
+ t3 = $[12];
244
235
  }
245
236
  const {
246
237
  onSkippedNewMessage
247
- } = useHeldBackMessages(t4);
248
- let t5;
249
- if ($[15] !== conversation_id) {
250
- t5 = {
238
+ } = useHeldBackMessages(t3);
239
+ let t4;
240
+ if ($[13] !== conversation_id) {
241
+ t4 = {
251
242
  conversationId: conversation_id
252
243
  };
253
- $[15] = conversation_id;
254
- $[16] = t5;
244
+ $[13] = conversation_id;
245
+ $[14] = t4;
255
246
  } else {
256
- t5 = $[16];
247
+ t4 = $[14];
257
248
  }
258
- useConversationJoltEvents(t5);
259
- const t6 = reply_root_id ?? null;
260
- const t7 = caughtUp && !readingHistory;
261
- let t8;
262
- if ($[17] !== onSkippedNewMessage || $[18] !== queryKey || $[19] !== t7) {
263
- t8 = gatedMessageCache({
249
+ useConversationJoltEvents(t4);
250
+ const t5 = reply_root_id ?? null;
251
+ const t6 = caughtUp && !readingHistory;
252
+ let t7;
253
+ if ($[15] !== onSkippedNewMessage || $[16] !== queryKey || $[17] !== t6) {
254
+ t7 = gatedMessageCache({
264
255
  queryKey,
265
- acceptNewMessages: t7,
256
+ acceptNewMessages: t6,
266
257
  onSkippedNewMessage
267
258
  });
268
- $[17] = onSkippedNewMessage;
269
- $[18] = queryKey;
270
- $[19] = t7;
271
- $[20] = t8;
259
+ $[15] = onSkippedNewMessage;
260
+ $[16] = queryKey;
261
+ $[17] = t6;
262
+ $[18] = t7;
272
263
  } else {
273
- t8 = $[20];
264
+ t7 = $[18];
274
265
  }
275
- let t9;
276
- if ($[21] !== conversation_id || $[22] !== t6 || $[23] !== t8) {
277
- t9 = {
266
+ let t8;
267
+ if ($[19] !== conversation_id || $[20] !== t5 || $[21] !== t7) {
268
+ t8 = {
278
269
  conversationId: conversation_id,
279
- replyRootId: t6,
280
- messageCache: t8
270
+ replyRootId: t5,
271
+ messageCache: t7
281
272
  };
282
- $[21] = conversation_id;
283
- $[22] = t6;
284
- $[23] = t8;
285
- $[24] = t9;
273
+ $[19] = conversation_id;
274
+ $[20] = t5;
275
+ $[21] = t7;
276
+ $[22] = t8;
286
277
  } else {
287
- t9 = $[24];
278
+ t8 = $[22];
288
279
  }
289
- useConversationMessagesJoltEvents(t9);
280
+ useConversationMessagesJoltEvents(t8);
290
281
  const {
291
282
  markHandledByMessageForm
292
283
  } = useVideoModerationJoltEvents();
293
284
  useEnsureConversationsRouteExists();
294
- const t10 = !behindLatest;
295
- let t11;
296
- if ($[25] !== conversation || $[26] !== messages || $[27] !== t10) {
297
- t11 = {
285
+ const t9 = !behindLatest;
286
+ let t10;
287
+ if ($[23] !== conversation || $[24] !== messages || $[25] !== t9) {
288
+ t10 = {
298
289
  conversation,
299
290
  messages,
300
- enabled: t10
291
+ enabled: t9
301
292
  };
302
- $[25] = conversation;
303
- $[26] = messages;
304
- $[27] = t10;
305
- $[28] = t11;
306
- } else {
307
- t11 = $[28];
308
- }
309
- useMarkLatestMessageRead(t11);
310
- const t12 = anchored && caughtUp;
311
- let t13;
312
- if ($[29] !== fetchNewer || $[30] !== newestMessageId || $[31] !== t12) {
313
- t13 = {
293
+ $[23] = conversation;
294
+ $[24] = messages;
295
+ $[25] = t9;
296
+ $[26] = t10;
297
+ } else {
298
+ t10 = $[26];
299
+ }
300
+ useMarkLatestMessageRead(t10);
301
+ const t11 = anchored && caughtUp;
302
+ let t12;
303
+ if ($[27] !== fetchNewer || $[28] !== newestMessageId || $[29] !== t11) {
304
+ t12 = {
314
305
  fetchNewer,
315
306
  newestMessageId,
316
- enabled: t12
307
+ enabled: t11
317
308
  };
318
- $[29] = fetchNewer;
319
- $[30] = newestMessageId;
320
- $[31] = t12;
321
- $[32] = t13;
309
+ $[27] = fetchNewer;
310
+ $[28] = newestMessageId;
311
+ $[29] = t11;
312
+ $[30] = t12;
322
313
  } else {
323
- t13 = $[32];
314
+ t12 = $[30];
324
315
  }
325
- useFetchNewerOnForeground(t13);
316
+ useFetchNewerOnForeground(t12);
326
317
  const noMessages = messages.length === 0;
327
318
  const {
328
319
  repliesDisabled,
@@ -332,47 +323,47 @@ function ConversationScreenContent(t0) {
332
323
  } = conversation;
333
324
  const canReply = memberAbility?.canReply;
334
325
  const showLeaderDisabledReplyBanner = canReply && repliesDisabled;
335
- let t14;
336
- if ($[33] !== editing_message_id || $[34] !== messages) {
337
- let t15;
338
- if ($[36] !== editing_message_id) {
339
- t15 = m => String(m.id) === String(editing_message_id);
340
- $[36] = editing_message_id;
341
- $[37] = t15;
326
+ let t13;
327
+ if ($[31] !== editing_message_id || $[32] !== messages) {
328
+ let t14;
329
+ if ($[34] !== editing_message_id) {
330
+ t14 = m => String(m.id) === String(editing_message_id);
331
+ $[34] = editing_message_id;
332
+ $[35] = t14;
342
333
  } else {
343
- t15 = $[37];
334
+ t14 = $[35];
344
335
  }
345
- t14 = messages.find(t15);
346
- $[33] = editing_message_id;
347
- $[34] = messages;
348
- $[35] = t14;
336
+ t13 = messages.find(t14);
337
+ $[31] = editing_message_id;
338
+ $[32] = messages;
339
+ $[33] = t13;
349
340
  } else {
350
- t14 = $[35];
341
+ t13 = $[33];
351
342
  }
352
- const currentlyEditingMessage = t14;
353
- let t15;
354
- if ($[38] !== reply_root_author_name) {
355
- t15 = reply_root_author_name?.split(" ")[0];
356
- $[38] = reply_root_author_name;
357
- $[39] = t15;
343
+ const currentlyEditingMessage = t13;
344
+ let t14;
345
+ if ($[36] !== reply_root_author_name) {
346
+ t14 = reply_root_author_name?.split(" ")[0];
347
+ $[36] = reply_root_author_name;
348
+ $[37] = t14;
358
349
  } else {
359
- t15 = $[39];
350
+ t14 = $[37];
360
351
  }
361
- const replyRootAuthorFirstName = t15;
352
+ const replyRootAuthorFirstName = t14;
362
353
  const replyHeaderTitle = replyRootAuthorFirstName ? `Reply to ${replyRootAuthorFirstName}` : "Reply";
363
354
  const muted = conversation.conversationMembership?.muted ?? conversation.muted;
364
355
  const listRef = useRef(null);
365
356
  const [hasDragged, setHasDragged] = useState(false);
366
357
  const holdListPosition = behindLatest || readingHistory;
367
- let t16;
368
- if ($[40] === Symbol.for("react.memo_cache_sentinel")) {
369
- t16 = {
358
+ let t15;
359
+ if ($[38] === Symbol.for("react.memo_cache_sentinel")) {
360
+ t15 = {
370
361
  listRef,
371
362
  enabled: Platform.OS === "ios"
372
363
  };
373
- $[40] = t16;
364
+ $[38] = t15;
374
365
  } else {
375
- t16 = $[40];
366
+ t15 = $[38];
376
367
  }
377
368
  const {
378
369
  restOffset,
@@ -380,36 +371,36 @@ function ConversationScreenContent(t0) {
380
371
  onContentSizeChange,
381
372
  onMomentumScrollEnd,
382
373
  onScrollEndDrag
383
- } = useRestAwayFromDismissEdge(t16);
384
- let t17;
385
- if ($[41] !== restOffset) {
386
- t17 = () => {
374
+ } = useRestAwayFromDismissEdge(t15);
375
+ let t16;
376
+ if ($[39] !== restOffset) {
377
+ t16 = () => {
387
378
  listRef.current?.scrollToOffset({
388
379
  offset: restOffset
389
380
  });
390
381
  };
391
- $[41] = restOffset;
392
- $[42] = t17;
382
+ $[39] = restOffset;
383
+ $[40] = t16;
393
384
  } else {
394
- t17 = $[42];
385
+ t16 = $[40];
395
386
  }
396
- const handleReturnToBottom = t17;
397
- let t18;
398
- if ($[43] !== handleReturnToBottom || $[44] !== onExitAnchoredMode) {
399
- t18 = () => {
387
+ const handleReturnToBottom = t16;
388
+ let t17;
389
+ if ($[41] !== handleReturnToBottom || $[42] !== onExitAnchoredMode) {
390
+ t17 = () => {
400
391
  onExitAnchoredMode();
401
392
  handleReturnToBottom();
402
393
  };
403
- $[43] = handleReturnToBottom;
404
- $[44] = onExitAnchoredMode;
405
- $[45] = t18;
394
+ $[41] = handleReturnToBottom;
395
+ $[42] = onExitAnchoredMode;
396
+ $[43] = t17;
406
397
  } else {
407
- t18 = $[45];
398
+ t17 = $[43];
408
399
  }
409
- const exitAnchoredMode = t18;
410
- let t19;
411
- if ($[46] !== anchored || $[47] !== exitAnchoredMode || $[48] !== handleReturnToBottom) {
412
- t19 = () => {
400
+ const exitAnchoredMode = t17;
401
+ let t18;
402
+ if ($[44] !== anchored || $[45] !== exitAnchoredMode || $[46] !== handleReturnToBottom) {
403
+ t18 = () => {
413
404
  setShowJumpToBottomButton(false);
414
405
  if (anchored) {
415
406
  exitAnchoredMode();
@@ -417,45 +408,45 @@ function ConversationScreenContent(t0) {
417
408
  handleReturnToBottom();
418
409
  }
419
410
  };
420
- $[46] = anchored;
421
- $[47] = exitAnchoredMode;
422
- $[48] = handleReturnToBottom;
423
- $[49] = t19;
411
+ $[44] = anchored;
412
+ $[45] = exitAnchoredMode;
413
+ $[46] = handleReturnToBottom;
414
+ $[47] = t18;
424
415
  } else {
425
- t19 = $[49];
416
+ t18 = $[47];
426
417
  }
427
- const jumpToLatest = t19;
428
- let t20;
429
- if ($[50] === Symbol.for("react.memo_cache_sentinel")) {
430
- t20 = event => {
418
+ const jumpToLatest = t18;
419
+ let t19;
420
+ if ($[48] === Symbol.for("react.memo_cache_sentinel")) {
421
+ t19 = event => {
431
422
  const offsetY = event.nativeEvent.contentOffset.y;
432
423
  setShowJumpToBottomButton(offsetY > 200);
433
424
  };
434
- $[50] = t20;
425
+ $[48] = t19;
435
426
  } else {
436
- t20 = $[50];
427
+ t19 = $[48];
437
428
  }
438
- const trackScroll = t20;
439
- let t21;
440
- if ($[51] !== fetchPreviousPage || $[52] !== hasPreviousPage || $[53] !== isFetchingPreviousPage) {
441
- t21 = () => {
429
+ const trackScroll = t19;
430
+ let t20;
431
+ if ($[49] !== fetchPreviousPage || $[50] !== hasPreviousPage || $[51] !== isFetchingPreviousPage) {
432
+ t20 = () => {
442
433
  if (!hasPreviousPage || isFetchingPreviousPage) {
443
434
  return;
444
435
  }
445
436
  setHasDragged(false);
446
437
  fetchPreviousPage();
447
438
  };
448
- $[51] = fetchPreviousPage;
449
- $[52] = hasPreviousPage;
450
- $[53] = isFetchingPreviousPage;
451
- $[54] = t21;
439
+ $[49] = fetchPreviousPage;
440
+ $[50] = hasPreviousPage;
441
+ $[51] = isFetchingPreviousPage;
442
+ $[52] = t20;
452
443
  } else {
453
- t21 = $[54];
444
+ t20 = $[52];
454
445
  }
455
- const loadNewerMessages = t21;
456
- let t22;
457
- if ($[55] !== badges?.[0] || $[56] !== conversation.deleted || $[57] !== muted || $[58] !== navigation || $[59] !== replyHeaderTitle || $[60] !== reply_root_id || $[61] !== title) {
458
- t22 = () => {
446
+ const loadNewerMessages = t20;
447
+ let t21;
448
+ if ($[53] !== badges?.[0] || $[54] !== conversation.deleted || $[55] !== muted || $[56] !== navigation || $[57] !== replyHeaderTitle || $[58] !== reply_root_id || $[59] !== title) {
449
+ t21 = () => {
459
450
  if (reply_root_id) {
460
451
  navigation.setParams({
461
452
  title: replyHeaderTitle
@@ -469,86 +460,86 @@ function ConversationScreenContent(t0) {
469
460
  });
470
461
  }
471
462
  };
472
- $[55] = badges?.[0];
473
- $[56] = conversation.deleted;
474
- $[57] = muted;
475
- $[58] = navigation;
476
- $[59] = replyHeaderTitle;
477
- $[60] = reply_root_id;
478
- $[61] = title;
479
- $[62] = t22;
480
- } else {
481
- t22 = $[62];
482
- }
483
- const t23 = conversation?.deleted;
484
- let t24;
485
- if ($[63] !== badges || $[64] !== muted || $[65] !== navigation || $[66] !== replyHeaderTitle || $[67] !== reply_root_id || $[68] !== t23 || $[69] !== title) {
486
- t24 = [navigation, title, badges, t23, reply_root_id, replyHeaderTitle, muted];
487
- $[63] = badges;
488
- $[64] = muted;
489
- $[65] = navigation;
490
- $[66] = replyHeaderTitle;
491
- $[67] = reply_root_id;
463
+ $[53] = badges?.[0];
464
+ $[54] = conversation.deleted;
465
+ $[55] = muted;
466
+ $[56] = navigation;
467
+ $[57] = replyHeaderTitle;
468
+ $[58] = reply_root_id;
469
+ $[59] = title;
470
+ $[60] = t21;
471
+ } else {
472
+ t21 = $[60];
473
+ }
474
+ const t22 = conversation?.deleted;
475
+ let t23;
476
+ if ($[61] !== badges || $[62] !== muted || $[63] !== navigation || $[64] !== replyHeaderTitle || $[65] !== reply_root_id || $[66] !== t22 || $[67] !== title) {
477
+ t23 = [navigation, title, badges, t22, reply_root_id, replyHeaderTitle, muted];
478
+ $[61] = badges;
479
+ $[62] = muted;
480
+ $[63] = navigation;
481
+ $[64] = replyHeaderTitle;
482
+ $[65] = reply_root_id;
483
+ $[66] = t22;
484
+ $[67] = title;
492
485
  $[68] = t23;
493
- $[69] = title;
494
- $[70] = t24;
495
486
  } else {
496
- t24 = $[70];
487
+ t23 = $[68];
497
488
  }
498
- useEffect(t22, t24);
489
+ useEffect(t21, t23);
499
490
  if (!conversation || conversation.deleted) {
500
- let t25;
501
- if ($[71] === Symbol.for("react.memo_cache_sentinel")) {
502
- t25 = /*#__PURE__*/_jsx(BlankState.Imagery, {
491
+ let t24;
492
+ if ($[69] === Symbol.for("react.memo_cache_sentinel")) {
493
+ t24 = /*#__PURE__*/_jsx(BlankState.Imagery, {
503
494
  name: "general.outlinedTextMessage"
504
495
  });
505
- $[71] = t25;
496
+ $[69] = t24;
506
497
  } else {
507
- t25 = $[71];
498
+ t24 = $[69];
508
499
  }
509
- let t26;
510
- if ($[72] === Symbol.for("react.memo_cache_sentinel")) {
511
- t26 = /*#__PURE__*/_jsx(BlankState.Content, {
500
+ let t25;
501
+ if ($[70] === Symbol.for("react.memo_cache_sentinel")) {
502
+ t25 = /*#__PURE__*/_jsx(BlankState.Content, {
512
503
  children: /*#__PURE__*/_jsx(BlankState.Heading, {
513
504
  children: "This conversation has been deleted"
514
505
  })
515
506
  });
516
- $[72] = t26;
507
+ $[70] = t25;
517
508
  } else {
518
- t26 = $[72];
509
+ t25 = $[70];
519
510
  }
520
- let t27;
521
- if ($[73] !== navigation.goBack) {
522
- t27 = /*#__PURE__*/_jsxs(BlankState.Root, {
523
- children: [t25, t26, /*#__PURE__*/_jsx(BlankState.Button, {
511
+ let t26;
512
+ if ($[71] !== navigation.goBack) {
513
+ t26 = /*#__PURE__*/_jsxs(BlankState.Root, {
514
+ children: [t24, t25, /*#__PURE__*/_jsx(BlankState.Button, {
524
515
  onPress: navigation.goBack,
525
516
  title: "Back to conversations",
526
517
  accessibilityHint: "Navigates back to the conversations list",
527
518
  accessibilityRole: "link"
528
519
  })]
529
520
  });
530
- $[73] = navigation.goBack;
531
- $[74] = t27;
521
+ $[71] = navigation.goBack;
522
+ $[72] = t26;
532
523
  } else {
533
- t27 = $[74];
524
+ t26 = $[72];
534
525
  }
535
- let t28;
536
- if ($[75] !== styles.container || $[76] !== t27) {
537
- t28 = /*#__PURE__*/_jsx(View, {
526
+ let t27;
527
+ if ($[73] !== styles.container || $[74] !== t26) {
528
+ t27 = /*#__PURE__*/_jsx(View, {
538
529
  style: styles.container,
539
- children: t27
530
+ children: t26
540
531
  });
541
- $[75] = styles.container;
542
- $[76] = t27;
543
- $[77] = t28;
532
+ $[73] = styles.container;
533
+ $[74] = t26;
534
+ $[75] = t27;
544
535
  } else {
545
- t28 = $[77];
536
+ t27 = $[75];
546
537
  }
547
- return t28;
538
+ return t27;
548
539
  }
549
- let t25;
550
- if ($[78] !== anchor || $[79] !== anchored || $[80] !== conversation || $[81] !== conversation_id || $[82] !== fetchNextPage || $[83] !== hasDragged || $[84] !== hasNextPage || $[85] !== holdListPosition || $[86] !== loadNewerMessages || $[87] !== messages || $[88] !== noMessages || $[89] !== onContentSizeChange || $[90] !== onLayout || $[91] !== onMomentumScrollEnd || $[92] !== onScrollEndDrag || $[93] !== reply_root_id || $[94] !== styles.emptyState) {
551
- t25 = noMessages ? /*#__PURE__*/_jsx(View, {
540
+ let t24;
541
+ if ($[76] !== anchor || $[77] !== anchored || $[78] !== conversation || $[79] !== conversation_id || $[80] !== fetchNextPage || $[81] !== hasDragged || $[82] !== hasNextPage || $[83] !== holdListPosition || $[84] !== loadNewerMessages || $[85] !== messages || $[86] !== noMessages || $[87] !== onContentSizeChange || $[88] !== onLayout || $[89] !== onMomentumScrollEnd || $[90] !== onScrollEndDrag || $[91] !== reply_root_id || $[92] !== styles.emptyState) {
542
+ t24 = noMessages ? /*#__PURE__*/_jsx(View, {
552
543
  style: styles.emptyState,
553
544
  children: /*#__PURE__*/_jsx(ConversationStartBanner, {
554
545
  conversation: conversation,
@@ -575,59 +566,59 @@ function ConversationScreenContent(t0) {
575
566
  minIndexForVisible: 0
576
567
  } : undefined
577
568
  });
578
- $[78] = anchor;
579
- $[79] = anchored;
580
- $[80] = conversation;
581
- $[81] = conversation_id;
582
- $[82] = fetchNextPage;
583
- $[83] = hasDragged;
584
- $[84] = hasNextPage;
585
- $[85] = holdListPosition;
586
- $[86] = loadNewerMessages;
587
- $[87] = messages;
588
- $[88] = noMessages;
589
- $[89] = onContentSizeChange;
590
- $[90] = onLayout;
591
- $[91] = onMomentumScrollEnd;
592
- $[92] = onScrollEndDrag;
593
- $[93] = reply_root_id;
594
- $[94] = styles.emptyState;
569
+ $[76] = anchor;
570
+ $[77] = anchored;
571
+ $[78] = conversation;
572
+ $[79] = conversation_id;
573
+ $[80] = fetchNextPage;
574
+ $[81] = hasDragged;
575
+ $[82] = hasNextPage;
576
+ $[83] = holdListPosition;
577
+ $[84] = loadNewerMessages;
578
+ $[85] = messages;
579
+ $[86] = noMessages;
580
+ $[87] = onContentSizeChange;
581
+ $[88] = onLayout;
582
+ $[89] = onMomentumScrollEnd;
583
+ $[90] = onScrollEndDrag;
584
+ $[91] = reply_root_id;
585
+ $[92] = styles.emptyState;
586
+ $[93] = t24;
587
+ } else {
588
+ t24 = $[93];
589
+ }
590
+ const t25 = behindLatest || showJumpToBottomButton;
591
+ let t26;
592
+ if ($[94] !== jumpToLatest || $[95] !== t25) {
593
+ t26 = /*#__PURE__*/_jsx(JumpToBottomButton, {
594
+ onPress: jumpToLatest,
595
+ visible: t25
596
+ });
597
+ $[94] = jumpToLatest;
595
598
  $[95] = t25;
599
+ $[96] = t26;
596
600
  } else {
597
- t25 = $[95];
601
+ t26 = $[96];
598
602
  }
599
- const t26 = behindLatest || showJumpToBottomButton;
600
603
  let t27;
601
- if ($[96] !== jumpToLatest || $[97] !== t26) {
602
- t27 = /*#__PURE__*/_jsx(JumpToBottomButton, {
603
- onPress: jumpToLatest,
604
- visible: t26
605
- });
606
- $[96] = jumpToLatest;
607
- $[97] = t26;
604
+ if ($[97] !== noMessages) {
605
+ t27 = !noMessages && /*#__PURE__*/_jsx(TypingIndicator, {});
606
+ $[97] = noMessages;
608
607
  $[98] = t27;
609
608
  } else {
610
609
  t27 = $[98];
611
610
  }
612
611
  let t28;
613
- if ($[99] !== noMessages) {
614
- t28 = !noMessages && /*#__PURE__*/_jsx(TypingIndicator, {});
615
- $[99] = noMessages;
612
+ if ($[99] !== showLeaderDisabledReplyBanner) {
613
+ t28 = showLeaderDisabledReplyBanner && /*#__PURE__*/_jsx(LeaderMessagesDisabledBanner, {});
614
+ $[99] = showLeaderDisabledReplyBanner;
616
615
  $[100] = t28;
617
616
  } else {
618
617
  t28 = $[100];
619
618
  }
620
619
  let t29;
621
- if ($[101] !== showLeaderDisabledReplyBanner) {
622
- t29 = showLeaderDisabledReplyBanner && /*#__PURE__*/_jsx(LeaderMessagesDisabledBanner, {});
623
- $[101] = showLeaderDisabledReplyBanner;
624
- $[102] = t29;
625
- } else {
626
- t29 = $[102];
627
- }
628
- let t30;
629
- if ($[103] !== canReply || $[104] !== conversation || $[105] !== currentlyEditingMessage || $[106] !== jumpToLatest || $[107] !== markHandledByMessageForm || $[108] !== replyRootAuthorFirstName || $[109] !== reply_root_id) {
630
- t30 = /*#__PURE__*/_jsx(ConversationBottomBar, {
620
+ if ($[101] !== canReply || $[102] !== conversation || $[103] !== currentlyEditingMessage || $[104] !== jumpToLatest || $[105] !== markHandledByMessageForm || $[106] !== replyRootAuthorFirstName || $[107] !== reply_root_id) {
621
+ t29 = /*#__PURE__*/_jsx(ConversationBottomBar, {
631
622
  conversation: conversation,
632
623
  canReply: canReply,
633
624
  replyRootAuthorFirstName: replyRootAuthorFirstName,
@@ -636,44 +627,44 @@ function ConversationScreenContent(t0) {
636
627
  onFlaggedInMessageForm: markHandledByMessageForm,
637
628
  onBeforeSubmit: jumpToLatest
638
629
  });
639
- $[103] = canReply;
640
- $[104] = conversation;
641
- $[105] = currentlyEditingMessage;
642
- $[106] = jumpToLatest;
643
- $[107] = markHandledByMessageForm;
644
- $[108] = replyRootAuthorFirstName;
645
- $[109] = reply_root_id;
646
- $[110] = t30;
630
+ $[101] = canReply;
631
+ $[102] = conversation;
632
+ $[103] = currentlyEditingMessage;
633
+ $[104] = jumpToLatest;
634
+ $[105] = markHandledByMessageForm;
635
+ $[106] = replyRootAuthorFirstName;
636
+ $[107] = reply_root_id;
637
+ $[108] = t29;
647
638
  } else {
648
- t30 = $[110];
639
+ t29 = $[108];
649
640
  }
650
- let t31;
651
- if ($[111] !== t25 || $[112] !== t27 || $[113] !== t28 || $[114] !== t29 || $[115] !== t30) {
652
- t31 = /*#__PURE__*/_jsxs(KeyboardView, {
653
- children: [t25, t27, t28, t29, t30]
641
+ let t30;
642
+ if ($[109] !== t24 || $[110] !== t26 || $[111] !== t27 || $[112] !== t28 || $[113] !== t29) {
643
+ t30 = /*#__PURE__*/_jsxs(KeyboardView, {
644
+ children: [t24, t26, t27, t28, t29]
654
645
  });
655
- $[111] = t25;
656
- $[112] = t27;
657
- $[113] = t28;
658
- $[114] = t29;
659
- $[115] = t30;
660
- $[116] = t31;
661
- } else {
662
- t31 = $[116];
663
- }
664
- let t32;
665
- if ($[117] !== styles.container || $[118] !== t31) {
666
- t32 = /*#__PURE__*/_jsx(View, {
646
+ $[109] = t24;
647
+ $[110] = t26;
648
+ $[111] = t27;
649
+ $[112] = t28;
650
+ $[113] = t29;
651
+ $[114] = t30;
652
+ } else {
653
+ t30 = $[114];
654
+ }
655
+ let t31;
656
+ if ($[115] !== styles.container || $[116] !== t30) {
657
+ t31 = /*#__PURE__*/_jsx(View, {
667
658
  style: styles.container,
668
- children: t31
659
+ children: t30
669
660
  });
670
- $[117] = styles.container;
671
- $[118] = t31;
672
- $[119] = t32;
661
+ $[115] = styles.container;
662
+ $[116] = t30;
663
+ $[117] = t31;
673
664
  } else {
674
- t32 = $[119];
665
+ t31 = $[117];
675
666
  }
676
- return t32;
667
+ return t31;
677
668
  }
678
669
  function ConversationBottomBar(t0) {
679
670
  const $ = _c(16);
@@ -1 +1 @@
1
- {"version":3,"file":"conversation_screen.js","names":["HeaderTitle","PlatformPressable","CommonActions","useNavigation","useTheme","useNavigationTheme","useRoute","React","startTransition","useCallback","useEffect","useRef","useState","Platform","StyleSheet","useWindowDimensions","View","useSafeAreaInsets","Badge","Icon","AnchorNotFoundBoundary","ConversationStartBanner","JumpToBottomButton","MessageForm","MessageList","ConversationDisabledBanner","LeaderMessagesDisabledBanner","MemberMessagesDisabledBanner","TypingIndicator","KeyboardView","useHeaderSlotReserve","BlankState","ConversationContextProvider","useMessageAvailableMembersAction","useConversation","useConversationJoltEvents","useConversationMessages","useConversationMessagesJoltEvents","useFetchNewerMessages","useFetchNewerOnForeground","useHeldBackMessages","useMarkLatestMessageRead","analyticsEvents","normalizeAnalyticsMetadata","usePublishProductAnalyticsEvent","useRestAwayFromDismissEdge","useVideoModerationJoltEvents","newestPersistedMessageId","gatedMessageCache","getMessagesQueryKey","decodeUlidTime","jsx","_jsx","jsxs","_jsxs","ConversationScreen","t0","$","_c","route","conversation_id","reply_root_id","initial_message_id","params","t1","data","conversation","t2","lastMessageCreatedAt","isBeforeLatestMessage","anchor","setAnchor","t3","Symbol","for","exitAnchoredMode","t4","dropAnchor","t5","t6","conversation_show_opened","t7","t8","t9","children","ConversationScreenContent","t10","currentPageReplyRootId","messagesQueryKey","onExitAnchoredMode","styles","useStyles","navigation","editing_message_id","reply_root_author_name","anchored","messages","fetchNextPage","hasNextPage","fetchPreviousPage","hasPreviousPage","isFetchingPreviousPage","queryKey","behindLatest","caughtUp","showJumpToBottomButton","setShowJumpToBottomButton","readingHistory","newestMessageId","fetchNewer","onSkippedNewMessage","conversationId","acceptNewMessages","replyRootId","messageCache","markHandledByMessageForm","useEnsureConversationsRouteExists","t11","enabled","t12","t13","noMessages","length","repliesDisabled","memberAbility","badges","title","canReply","showLeaderDisabledReplyBanner","t14","t15","m","String","id","find","currentlyEditingMessage","split","replyRootAuthorFirstName","replyHeaderTitle","muted","conversationMembership","listRef","hasDragged","setHasDragged","holdListPosition","t16","OS","restOffset","onLayout","onContentSizeChange","onMomentumScrollEnd","onScrollEndDrag","t17","current","scrollToOffset","offset","handleReturnToBottom","t18","t19","jumpToLatest","t20","event","offsetY","nativeEvent","contentOffset","y","trackScroll","t21","loadNewerMessages","t22","deleted","setParams","badge","t23","t24","t25","Imagery","name","t26","Content","Heading","t27","goBack","Root","Button","onPress","accessibilityHint","accessibilityRole","t28","container","style","emptyState","hasMessages","onEndReached","onScrollBeginDrag","undefined","onStartReached","onStartReachedThreshold","maintainVisibleContentPosition","minIndexForVisible","visible","t29","t30","ConversationBottomBar","t31","t32","onFlaggedInMessageForm","onBeforeSubmit","messageLink","disabled","disabledMessage","message","AttachmentPicker","Commands","TextInput","SubmitButton","latestMessageCreatedAt","Date","parse","ConversationScreenTitle","usePressableHeaderStyle","resourceType","pcoResourceType","productName","appName","text","navigate","maxFontSizeMultiplier","titleTextContainer","size","titleWrapper","variant","testID","width","slotReserve","headerContainerStyle","maxWidth","create","alignItems","select","android","default","flex","columnGap","flexDirection","flexShrink","minWidth","alignSelf","marginTop","navigationTheme","bottom","colors","card","justifyContent","backgroundColor","paddingBottom","chat_group_graph_id","navigationState","getState","routes","conversationsRoute","_temp","dispatch","state","reset","index","r"],"sources":["../../src/screens/conversation_screen.tsx"],"sourcesContent":["import { HeaderTitle, HeaderTitleProps, PlatformPressable } from '@react-navigation/elements'\nimport {\n CommonActions,\n RouteProp,\n StaticScreenProps,\n useNavigation,\n useTheme as useNavigationTheme,\n useRoute,\n} from '@react-navigation/native'\nimport React, { startTransition, useCallback, useEffect, useRef, useState } from 'react'\nimport { FlatList, Platform, StyleSheet, useWindowDimensions, View } from 'react-native'\nimport { useSafeAreaInsets } from 'react-native-safe-area-context'\nimport { Badge, Icon } from '../components'\nimport { AnchorNotFoundBoundary } from '../components/conversation/anchor_not_found_boundary'\nimport { ConversationStartBanner } from '../components/conversation/conversation_start_banner'\nimport { JumpToBottomButton } from '../components/conversation/jump_to_bottom_button'\nimport { MessageForm } from '../components/conversation/message_form'\nimport { MessageList } from '../components/conversation/message_list'\nimport {\n ConversationDisabledBanner,\n LeaderMessagesDisabledBanner,\n MemberMessagesDisabledBanner,\n} from '../components/conversation/messages_disabled_banners'\nimport { TypingIndicator } from '../components/conversation/typing_indicator'\nimport { KeyboardView } from '../components/display/keyboard_view'\nimport { useHeaderSlotReserve } from '../components/display/platform_modal_header_buttons'\nimport BlankState from '../components/primitive/blank_state_primitive'\nimport { ConversationContextProvider } from '../contexts/conversation_context'\nimport { useMessageAvailableMembersAction } from '../hooks/direct_messages/use_message_available_members_action'\nimport { useConversation } from '../hooks/use_conversation'\nimport { useConversationJoltEvents } from '../hooks/use_conversation_jolt_events'\nimport { useConversationMessages } from '../hooks/use_conversation_messages'\nimport { useConversationMessagesJoltEvents } from '../hooks/use_conversation_messages_jolt_events'\nimport { useFetchNewerMessages } from '../hooks/use_fetch_newer_messages'\nimport { useFetchNewerOnForeground } from '../hooks/use_fetch_newer_on_foreground'\nimport { useHeldBackMessages } from '../hooks/use_held_back_messages'\nimport { useMarkLatestMessageRead } from '../hooks/use_mark_latest_message_read'\nimport {\n analyticsEvents,\n normalizeAnalyticsMetadata,\n usePublishProductAnalyticsEvent,\n} from '../hooks/use_product_analytics'\nimport { useRestAwayFromDismissEdge } from '../hooks/use_rest_away_from_dismiss_edge'\nimport { useVideoModerationJoltEvents } from '../hooks/use_video_moderation_jolt_events'\nimport { ConversationResource } from '../types/resources/conversation'\nimport { ConversationBadgeResource } from '../types/resources/conversation_badge'\nimport { MessageResource } from '../types/resources/message'\nimport { newestPersistedMessageId } from '../utils/cache/messages_cache'\nimport { gatedMessageCache } from '../utils/gated_message_cache'\nimport { getMessagesQueryKey } from '../utils/request/get_messages'\nimport { decodeUlidTime } from '../utils/ulid'\n\nexport type ConversationRouteProps = {\n conversation_id: number\n reply_root_id?: string | null\n reply_root_author_name?: string\n chat_group_graph_id?: string\n clear_input?: boolean\n editing_message_id?: number | null\n initial_message_id?: string | null\n title?: string\n subtitle?: string\n badge?: ConversationBadgeResource\n deleted?: boolean\n muted?: boolean\n}\n\nexport type ConversationScreenProps = StaticScreenProps<ConversationRouteProps>\n\nexport function ConversationScreen({ route }: ConversationScreenProps) {\n const { conversation_id, reply_root_id, initial_message_id } = route.params\n\n const { data: conversation } = useConversation({ conversation_id })\n const [anchor, setAnchor] = useState(() =>\n isBeforeLatestMessage(initial_message_id, conversation?.lastMessageCreatedAt)\n ? initial_message_id\n : null\n )\n const exitAnchoredMode = useCallback(() => startTransition(() => setAnchor(null)), [])\n const dropAnchor = useCallback(() => setAnchor(null), [])\n\n usePublishProductAnalyticsEvent(analyticsEvents.conversation_show_opened, {\n reply_root_id,\n ...normalizeAnalyticsMetadata(conversation),\n })\n\n return (\n <ConversationContextProvider\n conversationId={conversation_id}\n currentPageReplyRootId={reply_root_id ?? null}\n messagesQueryKey={getMessagesQueryKey({ conversation_id, reply_root_id, anchor })}\n >\n {anchor ? (\n <AnchorNotFoundBoundary onAnchorNotFound={dropAnchor}>\n <ConversationScreenContent\n route={route}\n anchor={anchor}\n onExitAnchoredMode={exitAnchoredMode}\n />\n </AnchorNotFoundBoundary>\n ) : (\n <ConversationScreenContent\n route={route}\n anchor={null}\n onExitAnchoredMode={exitAnchoredMode}\n />\n )}\n </ConversationContextProvider>\n )\n}\n\ninterface ConversationScreenContentProps extends ConversationScreenProps {\n anchor: string | null | undefined\n onExitAnchoredMode: () => void\n}\n\nfunction ConversationScreenContent({\n route,\n anchor,\n onExitAnchoredMode,\n}: ConversationScreenContentProps) {\n const styles = useStyles()\n const navigation = useNavigation()\n const { conversation_id, editing_message_id, reply_root_id, reply_root_author_name } =\n route.params\n const { data: conversation } = useConversation(route.params)\n const anchored = !!anchor\n const {\n messages,\n fetchNextPage,\n hasNextPage,\n fetchPreviousPage,\n hasPreviousPage,\n isFetchingPreviousPage,\n queryKey,\n } = useConversationMessages({ conversation_id, reply_root_id, anchor })\n const behindLatest = anchored && hasPreviousPage\n const caughtUp = !hasPreviousPage\n const [showJumpToBottomButton, setShowJumpToBottomButton] = useState(false)\n const readingHistory = showJumpToBottomButton\n const newestMessageId = newestPersistedMessageId(messages)\n const fetchNewer = useFetchNewerMessages({ conversation_id, reply_root_id, queryKey })\n const { onSkippedNewMessage } = useHeldBackMessages({\n fetchNewer,\n newestMessageId,\n readingHistory,\n caughtUp,\n })\n useConversationJoltEvents({ conversationId: conversation_id })\n useConversationMessagesJoltEvents({\n conversationId: conversation_id,\n replyRootId: reply_root_id ?? null,\n messageCache: gatedMessageCache({\n queryKey,\n acceptNewMessages: caughtUp && !readingHistory,\n onSkippedNewMessage,\n }),\n })\n const { markHandledByMessageForm } = useVideoModerationJoltEvents()\n useEnsureConversationsRouteExists()\n useMarkLatestMessageRead({ conversation, messages, enabled: !behindLatest })\n useFetchNewerOnForeground({ fetchNewer, newestMessageId, enabled: anchored && caughtUp })\n const noMessages = messages.length === 0\n\n const { repliesDisabled, memberAbility, badges, title } = conversation\n const canReply = memberAbility?.canReply\n const showLeaderDisabledReplyBanner = canReply && repliesDisabled\n const currentlyEditingMessage = messages.find(m => String(m.id) === String(editing_message_id))\n const replyRootAuthorFirstName = reply_root_author_name?.split(' ')[0]\n const replyHeaderTitle = replyRootAuthorFirstName\n ? `Reply to ${replyRootAuthorFirstName}`\n : 'Reply'\n // Prefer the membership for optimistic updates.\n const muted = conversation.conversationMembership?.muted ?? conversation.muted\n\n const listRef = useRef<FlatList>(null)\n const [hasDragged, setHasDragged] = useState(false)\n const holdListPosition = behindLatest || readingHistory\n\n const { restOffset, onLayout, onContentSizeChange, onMomentumScrollEnd, onScrollEndDrag } =\n useRestAwayFromDismissEdge({\n listRef,\n enabled: Platform.OS === 'ios',\n })\n\n const handleReturnToBottom = useCallback(() => {\n listRef.current?.scrollToOffset({\n offset: restOffset,\n })\n }, [restOffset])\n\n const exitAnchoredMode = useCallback(() => {\n onExitAnchoredMode()\n handleReturnToBottom()\n }, [handleReturnToBottom, onExitAnchoredMode])\n const jumpToLatest = useCallback(() => {\n setShowJumpToBottomButton(false)\n if (anchored) exitAnchoredMode()\n else handleReturnToBottom()\n }, [anchored, exitAnchoredMode, handleReturnToBottom])\n\n const trackScroll = (event: any) => {\n const offsetY = event.nativeEvent.contentOffset.y\n setShowJumpToBottomButton(offsetY > 200)\n }\n\n const loadNewerMessages = () => {\n if (!hasPreviousPage || isFetchingPreviousPage) return\n\n setHasDragged(false)\n fetchPreviousPage()\n }\n\n useEffect(() => {\n if (reply_root_id) {\n navigation.setParams({\n title: replyHeaderTitle,\n })\n } else {\n navigation.setParams({\n title: title,\n badge: badges?.[0],\n deleted: conversation?.deleted,\n muted,\n })\n }\n }, [navigation, title, badges, conversation?.deleted, reply_root_id, replyHeaderTitle, muted])\n\n if (!conversation || conversation.deleted) {\n return (\n <View style={styles.container}>\n <BlankState.Root>\n <BlankState.Imagery name=\"general.outlinedTextMessage\" />\n <BlankState.Content>\n <BlankState.Heading>This conversation has been deleted</BlankState.Heading>\n </BlankState.Content>\n <BlankState.Button\n onPress={navigation.goBack}\n title=\"Back to conversations\"\n accessibilityHint=\"Navigates back to the conversations list\"\n accessibilityRole=\"link\"\n />\n </BlankState.Root>\n </View>\n )\n }\n\n return (\n <View style={styles.container}>\n <KeyboardView>\n {noMessages ? (\n <View style={styles.emptyState}>\n <ConversationStartBanner conversation={conversation} hasMessages={false} />\n </View>\n ) : (\n <MessageList\n listRef={listRef}\n conversation={conversation}\n conversationId={conversation_id}\n messages={messages}\n replyRootId={reply_root_id}\n anchorMessageId={anchor}\n hasNextPage={hasNextPage}\n onEndReached={() => fetchNextPage()}\n onScroll={trackScroll}\n onLayout={onLayout}\n onContentSizeChange={onContentSizeChange}\n onScrollEndDrag={onScrollEndDrag}\n onMomentumScrollEnd={onMomentumScrollEnd}\n onScrollBeginDrag={anchored ? () => setHasDragged(true) : undefined}\n onStartReached={anchored && hasDragged ? loadNewerMessages : undefined}\n onStartReachedThreshold={anchored ? 0.5 : undefined}\n maintainVisibleContentPosition={\n holdListPosition ? { minIndexForVisible: 0 } : undefined\n }\n />\n )}\n <JumpToBottomButton\n onPress={jumpToLatest}\n visible={behindLatest || showJumpToBottomButton}\n />\n {!noMessages && <TypingIndicator />}\n {showLeaderDisabledReplyBanner && <LeaderMessagesDisabledBanner />}\n <ConversationBottomBar\n conversation={conversation}\n canReply={canReply}\n replyRootAuthorFirstName={replyRootAuthorFirstName}\n replyRootId={reply_root_id}\n currentlyEditingMessage={currentlyEditingMessage}\n onFlaggedInMessageForm={markHandledByMessageForm}\n onBeforeSubmit={jumpToLatest}\n />\n </KeyboardView>\n </View>\n )\n}\n\ninterface ConversationBottomBarProps {\n conversation: ConversationResource\n canReply: boolean | undefined\n replyRootAuthorFirstName: string | undefined\n replyRootId: string | null | undefined\n currentlyEditingMessage: MessageResource | undefined\n onFlaggedInMessageForm?: (id: string) => void\n onBeforeSubmit?: () => void\n}\n\nfunction ConversationBottomBar({\n conversation,\n canReply,\n replyRootAuthorFirstName,\n replyRootId,\n currentlyEditingMessage,\n onFlaggedInMessageForm,\n onBeforeSubmit,\n}: ConversationBottomBarProps) {\n const messageLink = useMessageAvailableMembersAction(conversation)\n\n if (conversation.disabled)\n return (\n <ConversationDisabledBanner\n message={conversation.disabledMessage ?? null}\n messageLink={messageLink}\n />\n )\n if (!canReply) return <MemberMessagesDisabledBanner />\n return (\n <MessageForm.Root\n replyRootAuthorFirstName={replyRootAuthorFirstName}\n conversation={conversation}\n replyRootId={replyRootId}\n currentlyEditingMessage={currentlyEditingMessage}\n onFlaggedInMessageForm={onFlaggedInMessageForm}\n onBeforeSubmit={onBeforeSubmit}\n key={\n currentlyEditingMessage\n ? `edit-message-form-${currentlyEditingMessage.id}`\n : 'new-message-form'\n }\n >\n <MessageForm.AttachmentPicker />\n <MessageForm.Commands />\n <MessageForm.TextInput />\n <MessageForm.SubmitButton />\n </MessageForm.Root>\n )\n}\n\nconst isBeforeLatestMessage = (anchor?: string | null, latestMessageCreatedAt?: string) =>\n !!anchor &&\n !!latestMessageCreatedAt &&\n decodeUlidTime(anchor) < Date.parse(latestMessageCreatedAt)\n\ninterface ConversationScreenTitleProps extends HeaderTitleProps {\n conversation_id: number\n badge?: ConversationBadgeResource\n deleted?: boolean\n muted?: boolean\n}\n\nexport const ConversationScreenTitle = ({\n conversation_id,\n badge,\n children,\n style,\n deleted,\n muted,\n}: ConversationScreenTitleProps) => {\n const styles = usePressableHeaderStyle()\n const navigation = useNavigation()\n const resourceType = badge?.pcoResourceType || ''\n const productName = badge?.appName\n const name = badge?.text || undefined\n\n return (\n <PlatformPressable\n testID=\"conversation-details-button\"\n accessibilityHint=\"Opens details about members and settings\"\n style={styles.container}\n onPress={() => {\n if (deleted) return\n\n navigation.navigate('ConversationDetails', { conversation_id })\n }}\n >\n <View style={styles.titleWrapper}>\n <View style={styles.titleTextContainer}>\n <HeaderTitle maxFontSizeMultiplier={1} style={style}>\n {children}\n </HeaderTitle>\n </View>\n {muted && <Icon name=\"general.bellMuted\" size={12} />}\n {!deleted && <Icon name=\"general.downChevron\" size={12} />}\n </View>\n <Badge\n variant=\"metaSubtle\"\n productLogoName={productName}\n label={resourceType}\n metaLabel={name}\n style={styles.badge}\n maxFontSizeMultiplier={1}\n />\n </PlatformPressable>\n )\n}\n\nconst usePressableHeaderStyle = () => {\n const { width } = useWindowDimensions()\n const slotReserve = useHeaderSlotReserve()\n const headerContainerStyle = { maxWidth: width - slotReserve * 2 }\n\n return StyleSheet.create({\n container: {\n alignItems: Platform.select({ android: 'flex-start', default: 'center' }),\n flex: 1,\n ...headerContainerStyle,\n },\n titleWrapper: {\n alignItems: 'center',\n columnGap: 4,\n flexDirection: 'row',\n flexShrink: 1,\n },\n titleTextContainer: {\n flexShrink: 1,\n minWidth: 0,\n },\n badge: {\n alignSelf: Platform.select({ android: 'flex-start', default: 'center' }),\n marginTop: 2,\n },\n })\n}\n\nconst useStyles = () => {\n const navigationTheme = useNavigationTheme()\n const { bottom } = useSafeAreaInsets()\n\n return StyleSheet.create({\n container: {\n flex: 1,\n justifyContent: 'center',\n backgroundColor: navigationTheme.colors.card,\n paddingBottom: bottom,\n },\n emptyState: {\n flex: 1,\n justifyContent: 'center',\n },\n })\n}\n\n/**\n * useEnsureConversationsRouteExists\n */\nconst useEnsureConversationsRouteExists = () => {\n const navigation = useNavigation()\n const { params } = useRoute<RouteProp<ConversationScreenProps['route']>>()\n\n useEffect(() => {\n const navigationState = navigation.getState()\n const routes = navigationState?.routes || []\n const conversationsRoute = routes.find(r => r.name === 'Conversations')\n\n if (conversationsRoute) return\n\n navigation.dispatch(state => {\n return CommonActions.reset({\n ...state,\n routes: [\n { name: 'Conversations', params: { chat_group_graph_id: params?.chat_group_graph_id } },\n ...routes,\n ],\n index: state.index + 1,\n })\n })\n }, [navigation, params?.chat_group_graph_id])\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"conversation_screen.js","names":["HeaderTitle","PlatformPressable","CommonActions","useNavigation","useTheme","useNavigationTheme","useRoute","React","startTransition","useCallback","useEffect","useRef","useState","Platform","StyleSheet","useWindowDimensions","View","useSafeAreaInsets","Badge","Icon","AnchorNotFoundBoundary","ConversationStartBanner","JumpToBottomButton","MessageForm","MessageList","ConversationDisabledBanner","LeaderMessagesDisabledBanner","MemberMessagesDisabledBanner","TypingIndicator","KeyboardView","useHeaderSlotReserve","BlankState","ConversationContextProvider","useMessageAvailableMembersAction","useConversation","useConversationJoltEvents","useConversationMessages","useConversationMessagesJoltEvents","useFetchNewerMessages","useFetchNewerOnForeground","useHeldBackMessages","useMarkLatestMessageRead","analyticsEvents","normalizeAnalyticsMetadata","usePublishProductAnalyticsEvent","useRestAwayFromDismissEdge","useVideoModerationJoltEvents","gatedMessageCache","getMessagesQueryKey","decodeUlidTime","jsx","_jsx","jsxs","_jsxs","ConversationScreen","t0","$","_c","route","conversation_id","reply_root_id","initial_message_id","params","t1","data","conversation","t2","lastMessageCreatedAt","isBeforeLatestMessage","anchor","setAnchor","t3","Symbol","for","exitAnchoredMode","t4","dropAnchor","t5","t6","conversation_show_opened","t7","t8","t9","children","ConversationScreenContent","t10","currentPageReplyRootId","messagesQueryKey","onExitAnchoredMode","styles","useStyles","navigation","editing_message_id","reply_root_author_name","anchored","messages","fetchNextPage","hasNextPage","fetchPreviousPage","hasPreviousPage","isFetchingPreviousPage","queryKey","behindLatest","caughtUp","showJumpToBottomButton","setShowJumpToBottomButton","readingHistory","newestMessageId","id","fetchNewer","onSkippedNewMessage","conversationId","acceptNewMessages","replyRootId","messageCache","markHandledByMessageForm","useEnsureConversationsRouteExists","enabled","t11","t12","noMessages","length","repliesDisabled","memberAbility","badges","title","canReply","showLeaderDisabledReplyBanner","t13","t14","m","String","find","currentlyEditingMessage","split","replyRootAuthorFirstName","replyHeaderTitle","muted","conversationMembership","listRef","hasDragged","setHasDragged","holdListPosition","t15","OS","restOffset","onLayout","onContentSizeChange","onMomentumScrollEnd","onScrollEndDrag","t16","current","scrollToOffset","offset","handleReturnToBottom","t17","t18","jumpToLatest","t19","event","offsetY","nativeEvent","contentOffset","y","trackScroll","t20","loadNewerMessages","t21","deleted","setParams","badge","t22","t23","t24","Imagery","name","t25","Content","Heading","t26","goBack","Root","Button","onPress","accessibilityHint","accessibilityRole","t27","container","style","emptyState","hasMessages","onEndReached","onScrollBeginDrag","undefined","onStartReached","onStartReachedThreshold","maintainVisibleContentPosition","minIndexForVisible","visible","t28","t29","ConversationBottomBar","t30","t31","onFlaggedInMessageForm","onBeforeSubmit","messageLink","disabled","disabledMessage","message","AttachmentPicker","Commands","TextInput","SubmitButton","latestMessageCreatedAt","Date","parse","ConversationScreenTitle","usePressableHeaderStyle","resourceType","pcoResourceType","productName","appName","text","navigate","maxFontSizeMultiplier","titleTextContainer","size","titleWrapper","variant","testID","width","slotReserve","headerContainerStyle","maxWidth","create","alignItems","select","android","default","flex","columnGap","flexDirection","flexShrink","minWidth","alignSelf","marginTop","navigationTheme","bottom","colors","card","justifyContent","backgroundColor","paddingBottom","chat_group_graph_id","navigationState","getState","routes","conversationsRoute","_temp","dispatch","state","reset","index","r"],"sources":["../../src/screens/conversation_screen.tsx"],"sourcesContent":["import { HeaderTitle, HeaderTitleProps, PlatformPressable } from '@react-navigation/elements'\nimport {\n CommonActions,\n RouteProp,\n StaticScreenProps,\n useNavigation,\n useTheme as useNavigationTheme,\n useRoute,\n} from '@react-navigation/native'\nimport React, { startTransition, useCallback, useEffect, useRef, useState } from 'react'\nimport { FlatList, Platform, StyleSheet, useWindowDimensions, View } from 'react-native'\nimport { useSafeAreaInsets } from 'react-native-safe-area-context'\nimport { Badge, Icon } from '../components'\nimport { AnchorNotFoundBoundary } from '../components/conversation/anchor_not_found_boundary'\nimport { ConversationStartBanner } from '../components/conversation/conversation_start_banner'\nimport { JumpToBottomButton } from '../components/conversation/jump_to_bottom_button'\nimport { MessageForm } from '../components/conversation/message_form'\nimport { MessageList } from '../components/conversation/message_list'\nimport {\n ConversationDisabledBanner,\n LeaderMessagesDisabledBanner,\n MemberMessagesDisabledBanner,\n} from '../components/conversation/messages_disabled_banners'\nimport { TypingIndicator } from '../components/conversation/typing_indicator'\nimport { KeyboardView } from '../components/display/keyboard_view'\nimport { useHeaderSlotReserve } from '../components/display/platform_modal_header_buttons'\nimport BlankState from '../components/primitive/blank_state_primitive'\nimport { ConversationContextProvider } from '../contexts/conversation_context'\nimport { useMessageAvailableMembersAction } from '../hooks/direct_messages/use_message_available_members_action'\nimport { useConversation } from '../hooks/use_conversation'\nimport { useConversationJoltEvents } from '../hooks/use_conversation_jolt_events'\nimport { useConversationMessages } from '../hooks/use_conversation_messages'\nimport { useConversationMessagesJoltEvents } from '../hooks/use_conversation_messages_jolt_events'\nimport { useFetchNewerMessages } from '../hooks/use_fetch_newer_messages'\nimport { useFetchNewerOnForeground } from '../hooks/use_fetch_newer_on_foreground'\nimport { useHeldBackMessages } from '../hooks/use_held_back_messages'\nimport { useMarkLatestMessageRead } from '../hooks/use_mark_latest_message_read'\nimport {\n analyticsEvents,\n normalizeAnalyticsMetadata,\n usePublishProductAnalyticsEvent,\n} from '../hooks/use_product_analytics'\nimport { useRestAwayFromDismissEdge } from '../hooks/use_rest_away_from_dismiss_edge'\nimport { useVideoModerationJoltEvents } from '../hooks/use_video_moderation_jolt_events'\nimport { ConversationResource } from '../types/resources/conversation'\nimport { ConversationBadgeResource } from '../types/resources/conversation_badge'\nimport { MessageResource } from '../types/resources/message'\nimport { gatedMessageCache } from '../utils/gated_message_cache'\nimport { getMessagesQueryKey } from '../utils/request/get_messages'\nimport { decodeUlidTime } from '../utils/ulid'\n\nexport type ConversationRouteProps = {\n conversation_id: number\n reply_root_id?: string | null\n reply_root_author_name?: string\n chat_group_graph_id?: string\n clear_input?: boolean\n editing_message_id?: number | null\n initial_message_id?: string | null\n title?: string\n subtitle?: string\n badge?: ConversationBadgeResource\n deleted?: boolean\n muted?: boolean\n}\n\nexport type ConversationScreenProps = StaticScreenProps<ConversationRouteProps>\n\nexport function ConversationScreen({ route }: ConversationScreenProps) {\n const { conversation_id, reply_root_id, initial_message_id } = route.params\n\n const { data: conversation } = useConversation({ conversation_id })\n const [anchor, setAnchor] = useState(() =>\n isBeforeLatestMessage(initial_message_id, conversation?.lastMessageCreatedAt)\n ? initial_message_id\n : null\n )\n const exitAnchoredMode = useCallback(() => startTransition(() => setAnchor(null)), [])\n const dropAnchor = useCallback(() => setAnchor(null), [])\n\n usePublishProductAnalyticsEvent(analyticsEvents.conversation_show_opened, {\n reply_root_id,\n ...normalizeAnalyticsMetadata(conversation),\n })\n\n return (\n <ConversationContextProvider\n conversationId={conversation_id}\n currentPageReplyRootId={reply_root_id ?? null}\n messagesQueryKey={getMessagesQueryKey({ conversation_id, reply_root_id, anchor })}\n >\n {anchor ? (\n <AnchorNotFoundBoundary onAnchorNotFound={dropAnchor}>\n <ConversationScreenContent\n route={route}\n anchor={anchor}\n onExitAnchoredMode={exitAnchoredMode}\n />\n </AnchorNotFoundBoundary>\n ) : (\n <ConversationScreenContent\n route={route}\n anchor={null}\n onExitAnchoredMode={exitAnchoredMode}\n />\n )}\n </ConversationContextProvider>\n )\n}\n\ninterface ConversationScreenContentProps extends ConversationScreenProps {\n anchor: string | null | undefined\n onExitAnchoredMode: () => void\n}\n\nfunction ConversationScreenContent({\n route,\n anchor,\n onExitAnchoredMode,\n}: ConversationScreenContentProps) {\n const styles = useStyles()\n const navigation = useNavigation()\n const { conversation_id, editing_message_id, reply_root_id, reply_root_author_name } =\n route.params\n const { data: conversation } = useConversation(route.params)\n const anchored = !!anchor\n const {\n messages,\n fetchNextPage,\n hasNextPage,\n fetchPreviousPage,\n hasPreviousPage,\n isFetchingPreviousPage,\n queryKey,\n } = useConversationMessages({ conversation_id, reply_root_id, anchor })\n const behindLatest = anchored && hasPreviousPage\n const caughtUp = !hasPreviousPage\n const [showJumpToBottomButton, setShowJumpToBottomButton] = useState(false)\n const readingHistory = showJumpToBottomButton\n const newestMessageId = messages[0]?.id\n const fetchNewer = useFetchNewerMessages({ conversation_id, reply_root_id, queryKey })\n const { onSkippedNewMessage } = useHeldBackMessages({\n fetchNewer,\n newestMessageId,\n readingHistory,\n caughtUp,\n })\n useConversationJoltEvents({ conversationId: conversation_id })\n useConversationMessagesJoltEvents({\n conversationId: conversation_id,\n replyRootId: reply_root_id ?? null,\n messageCache: gatedMessageCache({\n queryKey,\n acceptNewMessages: caughtUp && !readingHistory,\n onSkippedNewMessage,\n }),\n })\n const { markHandledByMessageForm } = useVideoModerationJoltEvents()\n useEnsureConversationsRouteExists()\n useMarkLatestMessageRead({ conversation, messages, enabled: !behindLatest })\n useFetchNewerOnForeground({ fetchNewer, newestMessageId, enabled: anchored && caughtUp })\n const noMessages = messages.length === 0\n\n const { repliesDisabled, memberAbility, badges, title } = conversation\n const canReply = memberAbility?.canReply\n const showLeaderDisabledReplyBanner = canReply && repliesDisabled\n const currentlyEditingMessage = messages.find(m => String(m.id) === String(editing_message_id))\n const replyRootAuthorFirstName = reply_root_author_name?.split(' ')[0]\n const replyHeaderTitle = replyRootAuthorFirstName\n ? `Reply to ${replyRootAuthorFirstName}`\n : 'Reply'\n // Prefer the membership for optimistic updates.\n const muted = conversation.conversationMembership?.muted ?? conversation.muted\n\n const listRef = useRef<FlatList>(null)\n const [hasDragged, setHasDragged] = useState(false)\n const holdListPosition = behindLatest || readingHistory\n\n const { restOffset, onLayout, onContentSizeChange, onMomentumScrollEnd, onScrollEndDrag } =\n useRestAwayFromDismissEdge({\n listRef,\n enabled: Platform.OS === 'ios',\n })\n\n const handleReturnToBottom = useCallback(() => {\n listRef.current?.scrollToOffset({\n offset: restOffset,\n })\n }, [restOffset])\n\n const exitAnchoredMode = useCallback(() => {\n onExitAnchoredMode()\n handleReturnToBottom()\n }, [handleReturnToBottom, onExitAnchoredMode])\n const jumpToLatest = useCallback(() => {\n setShowJumpToBottomButton(false)\n if (anchored) exitAnchoredMode()\n else handleReturnToBottom()\n }, [anchored, exitAnchoredMode, handleReturnToBottom])\n\n const trackScroll = (event: any) => {\n const offsetY = event.nativeEvent.contentOffset.y\n setShowJumpToBottomButton(offsetY > 200)\n }\n\n const loadNewerMessages = () => {\n if (!hasPreviousPage || isFetchingPreviousPage) return\n\n setHasDragged(false)\n fetchPreviousPage()\n }\n\n useEffect(() => {\n if (reply_root_id) {\n navigation.setParams({\n title: replyHeaderTitle,\n })\n } else {\n navigation.setParams({\n title: title,\n badge: badges?.[0],\n deleted: conversation?.deleted,\n muted,\n })\n }\n }, [navigation, title, badges, conversation?.deleted, reply_root_id, replyHeaderTitle, muted])\n\n if (!conversation || conversation.deleted) {\n return (\n <View style={styles.container}>\n <BlankState.Root>\n <BlankState.Imagery name=\"general.outlinedTextMessage\" />\n <BlankState.Content>\n <BlankState.Heading>This conversation has been deleted</BlankState.Heading>\n </BlankState.Content>\n <BlankState.Button\n onPress={navigation.goBack}\n title=\"Back to conversations\"\n accessibilityHint=\"Navigates back to the conversations list\"\n accessibilityRole=\"link\"\n />\n </BlankState.Root>\n </View>\n )\n }\n\n return (\n <View style={styles.container}>\n <KeyboardView>\n {noMessages ? (\n <View style={styles.emptyState}>\n <ConversationStartBanner conversation={conversation} hasMessages={false} />\n </View>\n ) : (\n <MessageList\n listRef={listRef}\n conversation={conversation}\n conversationId={conversation_id}\n messages={messages}\n replyRootId={reply_root_id}\n anchorMessageId={anchor}\n hasNextPage={hasNextPage}\n onEndReached={() => fetchNextPage()}\n onScroll={trackScroll}\n onLayout={onLayout}\n onContentSizeChange={onContentSizeChange}\n onScrollEndDrag={onScrollEndDrag}\n onMomentumScrollEnd={onMomentumScrollEnd}\n onScrollBeginDrag={anchored ? () => setHasDragged(true) : undefined}\n onStartReached={anchored && hasDragged ? loadNewerMessages : undefined}\n onStartReachedThreshold={anchored ? 0.5 : undefined}\n maintainVisibleContentPosition={\n holdListPosition ? { minIndexForVisible: 0 } : undefined\n }\n />\n )}\n <JumpToBottomButton\n onPress={jumpToLatest}\n visible={behindLatest || showJumpToBottomButton}\n />\n {!noMessages && <TypingIndicator />}\n {showLeaderDisabledReplyBanner && <LeaderMessagesDisabledBanner />}\n <ConversationBottomBar\n conversation={conversation}\n canReply={canReply}\n replyRootAuthorFirstName={replyRootAuthorFirstName}\n replyRootId={reply_root_id}\n currentlyEditingMessage={currentlyEditingMessage}\n onFlaggedInMessageForm={markHandledByMessageForm}\n onBeforeSubmit={jumpToLatest}\n />\n </KeyboardView>\n </View>\n )\n}\n\ninterface ConversationBottomBarProps {\n conversation: ConversationResource\n canReply: boolean | undefined\n replyRootAuthorFirstName: string | undefined\n replyRootId: string | null | undefined\n currentlyEditingMessage: MessageResource | undefined\n onFlaggedInMessageForm?: (id: string) => void\n onBeforeSubmit?: () => void\n}\n\nfunction ConversationBottomBar({\n conversation,\n canReply,\n replyRootAuthorFirstName,\n replyRootId,\n currentlyEditingMessage,\n onFlaggedInMessageForm,\n onBeforeSubmit,\n}: ConversationBottomBarProps) {\n const messageLink = useMessageAvailableMembersAction(conversation)\n\n if (conversation.disabled)\n return (\n <ConversationDisabledBanner\n message={conversation.disabledMessage ?? null}\n messageLink={messageLink}\n />\n )\n if (!canReply) return <MemberMessagesDisabledBanner />\n return (\n <MessageForm.Root\n replyRootAuthorFirstName={replyRootAuthorFirstName}\n conversation={conversation}\n replyRootId={replyRootId}\n currentlyEditingMessage={currentlyEditingMessage}\n onFlaggedInMessageForm={onFlaggedInMessageForm}\n onBeforeSubmit={onBeforeSubmit}\n key={\n currentlyEditingMessage\n ? `edit-message-form-${currentlyEditingMessage.id}`\n : 'new-message-form'\n }\n >\n <MessageForm.AttachmentPicker />\n <MessageForm.Commands />\n <MessageForm.TextInput />\n <MessageForm.SubmitButton />\n </MessageForm.Root>\n )\n}\n\nconst isBeforeLatestMessage = (anchor?: string | null, latestMessageCreatedAt?: string) =>\n !!anchor &&\n !!latestMessageCreatedAt &&\n decodeUlidTime(anchor) < Date.parse(latestMessageCreatedAt)\n\ninterface ConversationScreenTitleProps extends HeaderTitleProps {\n conversation_id: number\n badge?: ConversationBadgeResource\n deleted?: boolean\n muted?: boolean\n}\n\nexport const ConversationScreenTitle = ({\n conversation_id,\n badge,\n children,\n style,\n deleted,\n muted,\n}: ConversationScreenTitleProps) => {\n const styles = usePressableHeaderStyle()\n const navigation = useNavigation()\n const resourceType = badge?.pcoResourceType || ''\n const productName = badge?.appName\n const name = badge?.text || undefined\n\n return (\n <PlatformPressable\n testID=\"conversation-details-button\"\n accessibilityHint=\"Opens details about members and settings\"\n style={styles.container}\n onPress={() => {\n if (deleted) return\n\n navigation.navigate('ConversationDetails', { conversation_id })\n }}\n >\n <View style={styles.titleWrapper}>\n <View style={styles.titleTextContainer}>\n <HeaderTitle maxFontSizeMultiplier={1} style={style}>\n {children}\n </HeaderTitle>\n </View>\n {muted && <Icon name=\"general.bellMuted\" size={12} />}\n {!deleted && <Icon name=\"general.downChevron\" size={12} />}\n </View>\n <Badge\n variant=\"metaSubtle\"\n productLogoName={productName}\n label={resourceType}\n metaLabel={name}\n style={styles.badge}\n maxFontSizeMultiplier={1}\n />\n </PlatformPressable>\n )\n}\n\nconst usePressableHeaderStyle = () => {\n const { width } = useWindowDimensions()\n const slotReserve = useHeaderSlotReserve()\n const headerContainerStyle = { maxWidth: width - slotReserve * 2 }\n\n return StyleSheet.create({\n container: {\n alignItems: Platform.select({ android: 'flex-start', default: 'center' }),\n flex: 1,\n ...headerContainerStyle,\n },\n titleWrapper: {\n alignItems: 'center',\n columnGap: 4,\n flexDirection: 'row',\n flexShrink: 1,\n },\n titleTextContainer: {\n flexShrink: 1,\n minWidth: 0,\n },\n badge: {\n alignSelf: Platform.select({ android: 'flex-start', default: 'center' }),\n marginTop: 2,\n },\n })\n}\n\nconst useStyles = () => {\n const navigationTheme = useNavigationTheme()\n const { bottom } = useSafeAreaInsets()\n\n return StyleSheet.create({\n container: {\n flex: 1,\n justifyContent: 'center',\n backgroundColor: navigationTheme.colors.card,\n paddingBottom: bottom,\n },\n emptyState: {\n flex: 1,\n justifyContent: 'center',\n },\n })\n}\n\n/**\n * useEnsureConversationsRouteExists\n */\nconst useEnsureConversationsRouteExists = () => {\n const navigation = useNavigation()\n const { params } = useRoute<RouteProp<ConversationScreenProps['route']>>()\n\n useEffect(() => {\n const navigationState = navigation.getState()\n const routes = navigationState?.routes || []\n const conversationsRoute = routes.find(r => r.name === 'Conversations')\n\n if (conversationsRoute) return\n\n navigation.dispatch(state => {\n return CommonActions.reset({\n ...state,\n routes: [\n { name: 'Conversations', params: { chat_group_graph_id: params?.chat_group_graph_id } },\n ...routes,\n ],\n index: state.index + 1,\n })\n })\n }, [navigation, params?.chat_group_graph_id])\n}\n"],"mappings":"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","ignoreList":[]}
@@ -6,7 +6,6 @@ export declare function updateCacheWithIndividualMessage(queryClient: QueryClien
6
6
  export declare function updateCacheReplyRoots(queryClient: QueryClient, queryKey: unknown[], root: MessageResource): void;
7
7
  export declare function updateCacheWithReaction(queryClient: QueryClient, queryKey: unknown[], event: JoltReactionEvent, currentPersonId: number): void;
8
8
  export declare function isTemporaryMessageId(messageId?: string | null): boolean;
9
- export declare function newestPersistedMessageId(messages: MessageResource[]): string | undefined;
10
9
  export declare function isNewMessage(message?: MessageResource): boolean;
11
10
  export declare function getThreadedMessagesQueryKey(conversationId: number, replyRootId: string): import("../..").RequestQueryKey;
12
11
  export declare function mergeMessageUpdate(record: MessageResource, current?: MessageResource): MessageResource;
@@ -1 +1 @@
1
- {"version":3,"file":"messages_cache.d.ts","sourceRoot":"","sources":["../../../src/utils/cache/messages_cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAEjE,OAAO,EAA8B,eAAe,EAAE,MAAM,aAAa,CAAA;AACzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAU3D,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,OAAO,EAAE,EACnB,OAAO,EAAE,eAAe,EACxB,KAAK,EAAE,iBAAiB,GAAG,iBAAiB,QA8B7C;AAID,wBAAgB,gCAAgC,CAC9C,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,OAAO,EAAE,EACnB,OAAO,EAAE,eAAe,QAgBzB;AAED,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,OAAO,EAAE,EACnB,IAAI,EAAE,eAAe,QAWtB;AAED,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,OAAO,EAAE,EACnB,KAAK,EAAE,iBAAiB,EACxB,eAAe,EAAE,MAAM,QAuCxB;AAGD,wBAAgB,oBAAoB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAEvE;AACD,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,eAAe,EAAE,GAAG,MAAM,GAAG,SAAS,CAExF;AACD,wBAAgB,YAAY,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAE/D;AAED,wBAAgB,2BAA2B,CAAC,cAAc,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,mCAMtF;AAED,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,eAAe,EACvB,OAAO,CAAC,EAAE,eAAe,GACxB,eAAe,CAWjB"}
1
+ {"version":3,"file":"messages_cache.d.ts","sourceRoot":"","sources":["../../../src/utils/cache/messages_cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAEjE,OAAO,EAA8B,eAAe,EAAE,MAAM,aAAa,CAAA;AACzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAU3D,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,OAAO,EAAE,EACnB,OAAO,EAAE,eAAe,EACxB,KAAK,EAAE,iBAAiB,GAAG,iBAAiB,QA8B7C;AAID,wBAAgB,gCAAgC,CAC9C,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,OAAO,EAAE,EACnB,OAAO,EAAE,eAAe,QAgBzB;AAED,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,OAAO,EAAE,EACnB,IAAI,EAAE,eAAe,QAWtB;AAED,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,OAAO,EAAE,EACnB,KAAK,EAAE,iBAAiB,EACxB,eAAe,EAAE,MAAM,QAuCxB;AAGD,wBAAgB,oBAAoB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAEvE;AACD,wBAAgB,YAAY,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAE/D;AAED,wBAAgB,2BAA2B,CAAC,cAAc,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,mCAMtF;AAED,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,eAAe,EACvB,OAAO,CAAC,EAAE,eAAe,GACxB,eAAe,CAWjB"}
@@ -96,9 +96,6 @@ export function updateCacheWithReaction(queryClient, queryKey, event, currentPer
96
96
  export function isTemporaryMessageId(messageId) {
97
97
  return !!messageId && messageId.endsWith('-temp');
98
98
  }
99
- export function newestPersistedMessageId(messages) {
100
- return messages.find(message => !isTemporaryMessageId(message.id))?.id;
101
- }
102
99
  export function isNewMessage(message) {
103
100
  return !message?.id || isTemporaryMessageId(message.id);
104
101
  }
@@ -1 +1 @@
1
- {"version":3,"file":"messages_cache.js","names":["getRequestQueryKey","transformReactionEventDataToReactionCountResource","getMessagesRequestArgs","updateAllRecordsInPagesData","updateOrCreateRecordInPagesData","updateRecordInPagesData","deleteRecordInPagesData","updateCacheWithMessage","queryClient","queryKey","message","event","setQueryData","prev","dataAfterTempRemoval","mine","idempotentKey","data","record","matchFn","existingMessage","isTemporaryMessageId","id","processRecord","current","mergeMessageUpdate","updateCacheWithIndividualMessage","links","meta","updateCacheReplyRoots","root","replyRoot","updateCacheWithReaction","currentPersonId","message_sort_key","oldMessage","reactionCounts","foundMatch","newReactionCounts","map","reactionCount","value","oldData","newReactionCount","count","messageId","endsWith","newestPersistedMessageId","messages","find","isNewMessage","getThreadedMessagesQueryKey","conversationId","replyRootId","requestArgs","conversation_id","reply_root_id"],"sources":["../../../src/utils/cache/messages_cache.ts"],"sourcesContent":["import { InfiniteData, QueryClient } from '@tanstack/react-query'\nimport { getRequestQueryKey } from '../../hooks/use_suspense_api'\nimport { ApiCollection, ApiResource, MessageResource } from '../../types'\nimport { JoltReactionEvent } from '../../types/jolt_events'\nimport { transformReactionEventDataToReactionCountResource } from '../jolt/transform_reaction_event_data_to_reaction_count_resource'\nimport { getMessagesRequestArgs } from '../request/get_messages'\nimport {\n updateAllRecordsInPagesData,\n updateOrCreateRecordInPagesData,\n updateRecordInPagesData,\n} from './page_mutations'\nimport { deleteRecordInPagesData } from './page_mutations'\n\nexport function updateCacheWithMessage(\n queryClient: QueryClient,\n queryKey: unknown[],\n message: MessageResource,\n event: 'message.created' | 'message.updated'\n) {\n queryClient.setQueryData<MessagesQueryData>(queryKey, prev => {\n if (event === 'message.created') {\n // Before adding the new message, remove its pending temporary counterpart.\n // The Jolt echo can arrive before the HTTP response has swapped it out.\n let dataAfterTempRemoval = prev\n if (prev && message.mine && message.idempotentKey) {\n dataAfterTempRemoval = deleteRecordInPagesData({\n data: prev,\n record: message,\n matchFn: existingMessage =>\n isTemporaryMessageId(existingMessage.id) &&\n existingMessage.idempotentKey === message.idempotentKey,\n })\n }\n\n return updateOrCreateRecordInPagesData({\n data: dataAfterTempRemoval,\n record: message,\n processRecord: (record, current) => mergeMessageUpdate(record, current),\n })\n } else {\n return updateRecordInPagesData({\n data: prev,\n record: message,\n processRecord: (record, current) => mergeMessageUpdate(record, current),\n })\n }\n })\n}\n\ntype IndividualMessageQueryData = ApiResource<MessageResource>\n\nexport function updateCacheWithIndividualMessage(\n queryClient: QueryClient,\n queryKey: unknown[],\n message: MessageResource\n) {\n queryClient.setQueryData<IndividualMessageQueryData>(queryKey, prev => {\n if (!prev) {\n return {\n data: message,\n links: {},\n meta: {},\n }\n }\n\n return {\n ...prev,\n data: mergeMessageUpdate(message, prev.data),\n }\n })\n}\n\nexport function updateCacheReplyRoots(\n queryClient: QueryClient,\n queryKey: unknown[],\n root: MessageResource\n) {\n queryClient.setQueryData<MessagesQueryData>(queryKey, prev =>\n updateAllRecordsInPagesData({\n data: prev,\n processRecord: message =>\n message.replyRoot?.id === root.id\n ? { ...message, replyRoot: mergeMessageUpdate(root, message.replyRoot) }\n : message,\n })\n )\n}\n\nexport function updateCacheWithReaction(\n queryClient: QueryClient,\n queryKey: unknown[],\n event: JoltReactionEvent,\n currentPersonId: number\n) {\n const message = { id: event.data.data.message_sort_key } as MessageResource\n queryClient.setQueryData<MessagesQueryData>(queryKey, prev =>\n updateRecordInPagesData({\n data: prev,\n record: message,\n processRecord: (record, oldMessage) => {\n const reactionCounts = oldMessage.reactionCounts || []\n let foundMatch = false\n let newReactionCounts = reactionCounts.map(reactionCount => {\n if (reactionCount.value === event.data.data.value) {\n foundMatch = true\n return transformReactionEventDataToReactionCountResource({\n data: event.data.data,\n oldData: reactionCount,\n event: event.event,\n currentPersonId,\n })\n }\n return reactionCount\n })\n\n if (!foundMatch) {\n const newReactionCount = transformReactionEventDataToReactionCountResource({\n data: event.data.data,\n event: event.event,\n currentPersonId,\n })\n\n if (newReactionCount?.count) {\n newReactionCounts = [...newReactionCounts, newReactionCount]\n }\n }\n\n return { ...oldMessage, reactionCounts: newReactionCounts }\n },\n })\n )\n}\n\ntype MessagesQueryData = InfiniteData<ApiCollection<MessageResource>>\nexport function isTemporaryMessageId(messageId?: string | null): boolean {\n return !!messageId && messageId.endsWith('-temp')\n}\nexport function newestPersistedMessageId(messages: MessageResource[]): string | undefined {\n return messages.find(message => !isTemporaryMessageId(message.id))?.id\n}\nexport function isNewMessage(message?: MessageResource): boolean {\n return !message?.id || isTemporaryMessageId(message.id)\n}\n\nexport function getThreadedMessagesQueryKey(conversationId: number, replyRootId: string) {\n const requestArgs = getMessagesRequestArgs({\n conversation_id: conversationId,\n reply_root_id: replyRootId,\n })\n return getRequestQueryKey(requestArgs)\n}\n\nexport function mergeMessageUpdate(\n record: MessageResource,\n current?: MessageResource\n): MessageResource {\n if (!current) {\n return record\n }\n\n return {\n ...current,\n ...record,\n // Preserve reactions from cache - they're managed via separate reaction events\n reactionCounts: current.reactionCounts || [],\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"messages_cache.js","names":["getRequestQueryKey","transformReactionEventDataToReactionCountResource","getMessagesRequestArgs","updateAllRecordsInPagesData","updateOrCreateRecordInPagesData","updateRecordInPagesData","deleteRecordInPagesData","updateCacheWithMessage","queryClient","queryKey","message","event","setQueryData","prev","dataAfterTempRemoval","mine","idempotentKey","data","record","matchFn","existingMessage","isTemporaryMessageId","id","processRecord","current","mergeMessageUpdate","updateCacheWithIndividualMessage","links","meta","updateCacheReplyRoots","root","replyRoot","updateCacheWithReaction","currentPersonId","message_sort_key","oldMessage","reactionCounts","foundMatch","newReactionCounts","map","reactionCount","value","oldData","newReactionCount","count","messageId","endsWith","isNewMessage","getThreadedMessagesQueryKey","conversationId","replyRootId","requestArgs","conversation_id","reply_root_id"],"sources":["../../../src/utils/cache/messages_cache.ts"],"sourcesContent":["import { InfiniteData, QueryClient } from '@tanstack/react-query'\nimport { getRequestQueryKey } from '../../hooks/use_suspense_api'\nimport { ApiCollection, ApiResource, MessageResource } from '../../types'\nimport { JoltReactionEvent } from '../../types/jolt_events'\nimport { transformReactionEventDataToReactionCountResource } from '../jolt/transform_reaction_event_data_to_reaction_count_resource'\nimport { getMessagesRequestArgs } from '../request/get_messages'\nimport {\n updateAllRecordsInPagesData,\n updateOrCreateRecordInPagesData,\n updateRecordInPagesData,\n} from './page_mutations'\nimport { deleteRecordInPagesData } from './page_mutations'\n\nexport function updateCacheWithMessage(\n queryClient: QueryClient,\n queryKey: unknown[],\n message: MessageResource,\n event: 'message.created' | 'message.updated'\n) {\n queryClient.setQueryData<MessagesQueryData>(queryKey, prev => {\n if (event === 'message.created') {\n // Before adding the new message, remove its pending temporary counterpart.\n // The Jolt echo can arrive before the HTTP response has swapped it out.\n let dataAfterTempRemoval = prev\n if (prev && message.mine && message.idempotentKey) {\n dataAfterTempRemoval = deleteRecordInPagesData({\n data: prev,\n record: message,\n matchFn: existingMessage =>\n isTemporaryMessageId(existingMessage.id) &&\n existingMessage.idempotentKey === message.idempotentKey,\n })\n }\n\n return updateOrCreateRecordInPagesData({\n data: dataAfterTempRemoval,\n record: message,\n processRecord: (record, current) => mergeMessageUpdate(record, current),\n })\n } else {\n return updateRecordInPagesData({\n data: prev,\n record: message,\n processRecord: (record, current) => mergeMessageUpdate(record, current),\n })\n }\n })\n}\n\ntype IndividualMessageQueryData = ApiResource<MessageResource>\n\nexport function updateCacheWithIndividualMessage(\n queryClient: QueryClient,\n queryKey: unknown[],\n message: MessageResource\n) {\n queryClient.setQueryData<IndividualMessageQueryData>(queryKey, prev => {\n if (!prev) {\n return {\n data: message,\n links: {},\n meta: {},\n }\n }\n\n return {\n ...prev,\n data: mergeMessageUpdate(message, prev.data),\n }\n })\n}\n\nexport function updateCacheReplyRoots(\n queryClient: QueryClient,\n queryKey: unknown[],\n root: MessageResource\n) {\n queryClient.setQueryData<MessagesQueryData>(queryKey, prev =>\n updateAllRecordsInPagesData({\n data: prev,\n processRecord: message =>\n message.replyRoot?.id === root.id\n ? { ...message, replyRoot: mergeMessageUpdate(root, message.replyRoot) }\n : message,\n })\n )\n}\n\nexport function updateCacheWithReaction(\n queryClient: QueryClient,\n queryKey: unknown[],\n event: JoltReactionEvent,\n currentPersonId: number\n) {\n const message = { id: event.data.data.message_sort_key } as MessageResource\n queryClient.setQueryData<MessagesQueryData>(queryKey, prev =>\n updateRecordInPagesData({\n data: prev,\n record: message,\n processRecord: (record, oldMessage) => {\n const reactionCounts = oldMessage.reactionCounts || []\n let foundMatch = false\n let newReactionCounts = reactionCounts.map(reactionCount => {\n if (reactionCount.value === event.data.data.value) {\n foundMatch = true\n return transformReactionEventDataToReactionCountResource({\n data: event.data.data,\n oldData: reactionCount,\n event: event.event,\n currentPersonId,\n })\n }\n return reactionCount\n })\n\n if (!foundMatch) {\n const newReactionCount = transformReactionEventDataToReactionCountResource({\n data: event.data.data,\n event: event.event,\n currentPersonId,\n })\n\n if (newReactionCount?.count) {\n newReactionCounts = [...newReactionCounts, newReactionCount]\n }\n }\n\n return { ...oldMessage, reactionCounts: newReactionCounts }\n },\n })\n )\n}\n\ntype MessagesQueryData = InfiniteData<ApiCollection<MessageResource>>\nexport function isTemporaryMessageId(messageId?: string | null): boolean {\n return !!messageId && messageId.endsWith('-temp')\n}\nexport function isNewMessage(message?: MessageResource): boolean {\n return !message?.id || isTemporaryMessageId(message.id)\n}\n\nexport function getThreadedMessagesQueryKey(conversationId: number, replyRootId: string) {\n const requestArgs = getMessagesRequestArgs({\n conversation_id: conversationId,\n reply_root_id: replyRootId,\n })\n return getRequestQueryKey(requestArgs)\n}\n\nexport function mergeMessageUpdate(\n record: MessageResource,\n current?: MessageResource\n): MessageResource {\n if (!current) {\n return record\n }\n\n return {\n ...current,\n ...record,\n // Preserve reactions from cache - they're managed via separate reaction events\n reactionCounts: current.reactionCounts || [],\n }\n}\n"],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@planningcenter/chat-react-native",
3
- "version": "4.2.1-qa-staging.4",
3
+ "version": "4.2.1-qa-staging.3",
4
4
  "description": "",
5
5
  "repository": {
6
6
  "type": "git",
@@ -33,7 +33,7 @@
33
33
  "dependencies": {
34
34
  "@fortawesome/fontawesome-svg-core": "^7.2.0",
35
35
  "@fortawesome/react-native-fontawesome": "^0.3.2",
36
- "@planningcenter/emoji-keyboard": "4.2.1-qa-staging.4",
36
+ "@planningcenter/emoji-keyboard": "4.2.1-qa-staging.3",
37
37
  "lodash-inflection": "^1.5.0"
38
38
  },
39
39
  "peerDependencies": {
@@ -84,5 +84,5 @@
84
84
  "sf-symbols-typescript": "^2.2.0",
85
85
  "typescript": "~6.0.3"
86
86
  },
87
- "gitHead": "1afcd60f0a1a2840897f18200201b71fe4c18b0f"
87
+ "gitHead": "5a997b1865ce5d2f022cbd294812ef27726ad8b2"
88
88
  }
@@ -45,7 +45,6 @@ import { useVideoModerationJoltEvents } from '../hooks/use_video_moderation_jolt
45
45
  import { ConversationResource } from '../types/resources/conversation'
46
46
  import { ConversationBadgeResource } from '../types/resources/conversation_badge'
47
47
  import { MessageResource } from '../types/resources/message'
48
- import { newestPersistedMessageId } from '../utils/cache/messages_cache'
49
48
  import { gatedMessageCache } from '../utils/gated_message_cache'
50
49
  import { getMessagesQueryKey } from '../utils/request/get_messages'
51
50
  import { decodeUlidTime } from '../utils/ulid'
@@ -138,7 +137,7 @@ function ConversationScreenContent({
138
137
  const caughtUp = !hasPreviousPage
139
138
  const [showJumpToBottomButton, setShowJumpToBottomButton] = useState(false)
140
139
  const readingHistory = showJumpToBottomButton
141
- const newestMessageId = newestPersistedMessageId(messages)
140
+ const newestMessageId = messages[0]?.id
142
141
  const fetchNewer = useFetchNewerMessages({ conversation_id, reply_root_id, queryKey })
143
142
  const { onSkippedNewMessage } = useHeldBackMessages({
144
143
  fetchNewer,
@@ -1,7 +1,7 @@
1
1
  import { InfiniteData, QueryClient } from '@tanstack/react-query'
2
2
  import type { ApiCollection, MessageResource } from '../../../types'
3
3
  import type { PersonResource } from '../../../types/resources/person'
4
- import { newestPersistedMessageId, updateCacheWithMessage } from '../messages_cache'
4
+ import { updateCacheWithMessage } from '../messages_cache'
5
5
 
6
6
  type MessagesQueryData = InfiniteData<ApiCollection<MessageResource>>
7
7
 
@@ -87,16 +87,3 @@ describe('updateCacheWithMessage on message.created', () => {
87
87
  expect(idsInCache(queryClient)).toEqual(['01F', '01B-temp', '01A-temp'])
88
88
  })
89
89
  })
90
-
91
- describe('newestPersistedMessageId', () => {
92
- it('skips optimistic rows so a failed send cannot become the catch-up cursor', () => {
93
- const messages = [message({ id: '01ZZZ-temp' }), message({ id: '01B' }), message({ id: '01A' })]
94
-
95
- expect(newestPersistedMessageId(messages)).toBe('01B')
96
- })
97
-
98
- it('is undefined when nothing has been persisted', () => {
99
- expect(newestPersistedMessageId([message({ id: '01ZZZ-temp' })])).toBeUndefined()
100
- expect(newestPersistedMessageId([])).toBeUndefined()
101
- })
102
- })
@@ -135,9 +135,6 @@ type MessagesQueryData = InfiniteData<ApiCollection<MessageResource>>
135
135
  export function isTemporaryMessageId(messageId?: string | null): boolean {
136
136
  return !!messageId && messageId.endsWith('-temp')
137
137
  }
138
- export function newestPersistedMessageId(messages: MessageResource[]): string | undefined {
139
- return messages.find(message => !isTemporaryMessageId(message.id))?.id
140
- }
141
138
  export function isNewMessage(message?: MessageResource): boolean {
142
139
  return !message?.id || isTemporaryMessageId(message.id)
143
140
  }