@messenger-box/platform-mobile 10.0.3-alpha.33 → 10.0.3-alpha.36

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,4 +1,4 @@
1
- import React__default,{useRef,useCallback,useState,useMemo}from'react';import {HStack,Box,Text,Pressable,Avatar,AvatarFallbackText,AvatarImage}from'@admin-layout/gluestack-ui-mobile';import {isToday,isYesterday,format}from'date-fns';import {useFocusEffect}from'@react-navigation/native';import {useThreadMessagesQuery,OnThreadCreatedUpdatedDocument}from'common/graphql';import {startCase}from'lodash-es';import colors from'tailwindcss/colors';import {Actions,BaseState}from'./workflow/service-dialogs-list-item-xstate.js';var __defProp = Object.defineProperty;
1
+ import React__default,{useRef,useCallback,useState,useMemo}from'react';import {HStack,Box,Text,Pressable,Avatar,AvatarFallbackText,AvatarImage}from'@admin-layout/gluestack-ui-mobile';import {isToday,isYesterday,format}from'date-fns';import {useFocusEffect}from'@react-navigation/native';import {useThreadMessagesQuery,OnThreadChatMessageAddedDocument,OnThreadCreatedUpdatedDocument}from'common/graphql';import {startCase}from'lodash-es';import colors from'tailwindcss/colors';import {Actions,BaseState}from'./workflow/service-dialogs-list-item-xstate.js';var __defProp = Object.defineProperty;
2
2
  var __defProps = Object.defineProperties;
3
3
  var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
4
4
  var __getOwnPropSymbols = Object.getOwnPropertySymbols;
@@ -204,17 +204,39 @@ function useSafeMachine(machine) {
204
204
  const ServiceChannelWithLastMessage = React__default.memo(({
205
205
  channel,
206
206
  lastMessage,
207
- subscribeToNewMessages
207
+ subscribeToNewMessages,
208
+ subscribeToChatMessages
208
209
  }) => {
209
210
  var _a, _b, _c, _d, _e;
210
211
  React__default.useEffect(() => {
211
- const unsubscribe = subscribeToNewMessages();
212
+ console.log(`Setting up subscriptions for channel ${channel == null ? void 0 : channel.id}`);
213
+ let threadUnsubscribe;
214
+ let chatUnsubscribe;
215
+ try {
216
+ threadUnsubscribe = subscribeToNewMessages();
217
+ chatUnsubscribe = subscribeToChatMessages();
218
+ } catch (error) {
219
+ console.error(`Error setting up subscriptions for channel ${channel == null ? void 0 : channel.id}:`, error);
220
+ }
212
221
  return () => {
213
- if (unsubscribe && typeof unsubscribe === "function") {
214
- unsubscribe();
222
+ if (threadUnsubscribe && typeof threadUnsubscribe === "function") {
223
+ try {
224
+ console.log(`Cleaning up thread subscription for channel ${channel == null ? void 0 : channel.id}`);
225
+ threadUnsubscribe();
226
+ } catch (error) {
227
+ console.error(`Error cleaning up thread subscription for channel ${channel == null ? void 0 : channel.id}:`, error);
228
+ }
229
+ }
230
+ if (chatUnsubscribe && typeof chatUnsubscribe === "function") {
231
+ try {
232
+ console.log(`Cleaning up chat subscription for channel ${channel == null ? void 0 : channel.id}`);
233
+ chatUnsubscribe();
234
+ } catch (error) {
235
+ console.error(`Error cleaning up chat subscription for channel ${channel == null ? void 0 : channel.id}:`, error);
236
+ }
215
237
  }
216
238
  };
217
- }, [subscribeToNewMessages]);
239
+ }, [subscribeToNewMessages, subscribeToChatMessages, channel == null ? void 0 : channel.id]);
218
240
  React__default.useEffect(() => {
219
241
  var _a2, _b2, _c2;
220
242
  console.log(`ServiceChannelWithLastMessage rendered for channel ${channel == null ? void 0 : channel.id}:`, {
@@ -329,14 +351,17 @@ const ServiceDialogsListItemComponent = function DialogsListItem({
329
351
  React__default.useEffect(() => {
330
352
  if (lastMessage) {
331
353
  const sParentId = (lastMessage == null ? void 0 : lastMessage.parentId) ? lastMessage == null ? void 0 : lastMessage.parentId : lastMessage == null ? void 0 : lastMessage.id;
332
- safeSend({
333
- type: Actions.SET_SERVICE_POST_PARENT_ID,
334
- data: {
335
- servicePostParentId: sParentId
336
- }
337
- });
354
+ if (sParentId !== safeContextProperty("servicePostParentId")) {
355
+ console.log(`Updating servicePostParentId for channel ${channel == null ? void 0 : channel.id} to:`, sParentId);
356
+ safeSend({
357
+ type: Actions.SET_SERVICE_POST_PARENT_ID,
358
+ data: {
359
+ servicePostParentId: sParentId
360
+ }
361
+ });
362
+ }
338
363
  }
339
- }, [lastMessage, safeSend]);
364
+ }, [lastMessage, safeSend, channel == null ? void 0 : channel.id, safeContextProperty]);
340
365
  const creatorAndMembersId = React__default.useMemo(() => {
341
366
  var _a2, _b2, _c2, _d2, _e, _f;
342
367
  if (!(channel == null ? void 0 : channel.members))
@@ -391,7 +416,9 @@ const ServiceDialogsListItemComponent = function DialogsListItem({
391
416
  });
392
417
  }
393
418
  }, [channel == null ? void 0 : channel.id, refetchThreadMessages, safeSend, isMountedRef, role]);
419
+ const [subscriptionsTimestamp, setSubscriptionsTimestamp] = useState(Date.now());
394
420
  useFocusEffect(React__default.useCallback(() => {
421
+ setSubscriptionsTimestamp(Date.now());
395
422
  if (!(channel == null ? void 0 : channel.id))
396
423
  return;
397
424
  console.log("ServiceDialogsListItem focused for channel:", channel == null ? void 0 : channel.id);
@@ -439,49 +466,151 @@ const ServiceDialogsListItemComponent = function DialogsListItem({
439
466
  borderColor: "#fff"
440
467
  }, source: {
441
468
  uri: (_d = channel == null ? void 0 : channel.creator) == null ? void 0 : _d.picture
442
- } }))), /* @__PURE__ */ React__default.createElement(Box, { className: "flex-1" }, /* @__PURE__ */ React__default.createElement(ServiceChannelWithLastMessage, { channel, lastMessage, subscribeToNewMessages: () => {
469
+ } }))), /* @__PURE__ */ React__default.createElement(Box, { className: "flex-1" }, /* @__PURE__ */ React__default.createElement(ServiceChannelWithLastMessage, { key: `channel-${channel == null ? void 0 : channel.id}-${subscriptionsTimestamp}`, channel, lastMessage, subscribeToNewMessages: () => {
443
470
  var _a2;
444
471
  return subscribeToMore({
445
472
  document: OnThreadCreatedUpdatedDocument,
446
473
  variables: {
447
474
  channelId: (_a2 = channel == null ? void 0 : channel.id) == null ? void 0 : _a2.toString(),
448
- postParentId: postParentId ? servicePostParentId : null
475
+ postParentId: postParentId || servicePostParentId || null
449
476
  },
450
477
  updateQuery: (prev, {
451
478
  subscriptionData
452
479
  }) => {
453
480
  var _a3, _b2, _c2, _d2, _e, _f, _g, _h, _i;
454
- if (!subscriptionData.data)
481
+ if (!(subscriptionData == null ? void 0 : subscriptionData.data)) {
482
+ console.log(`No subscription data for channel ${channel == null ? void 0 : channel.id}`);
455
483
  return prev;
456
- const newPostThreadData = (_b2 = (_a3 = subscriptionData == null ? void 0 : subscriptionData.data) == null ? void 0 : _a3.threadCreatedUpdated) == null ? void 0 : _b2.data;
457
- const newMessage = (_d2 = (_c2 = subscriptionData == null ? void 0 : subscriptionData.data) == null ? void 0 : _c2.threadCreatedUpdated) == null ? void 0 : _d2.lastMessage;
458
- console.log("New thread message subscription update:", {
459
- channelId: channel == null ? void 0 : channel.id,
460
- threadId: newPostThreadData == null ? void 0 : newPostThreadData.id,
461
- hasMessage: !!newMessage,
462
- message: ((_e = newMessage == null ? void 0 : newMessage.message) == null ? void 0 : _e.substring(0, 20)) + "..."
463
- });
464
- const data = (_h = (_g = (_f = prev == null ? void 0 : prev.threadMessages) == null ? void 0 : _f.data) == null ? void 0 : _g.map((t) => t.id === (newPostThreadData == null ? void 0 : newPostThreadData.id) ? __spreadProps(__spreadValues({}, t), {
465
- replies: [...t == null ? void 0 : t.replies, newMessage],
466
- replyCount: newPostThreadData == null ? void 0 : newPostThreadData.replyCount,
467
- lastReplyAt: newPostThreadData == null ? void 0 : newPostThreadData.lastReplyAt,
468
- updatedAt: newPostThreadData == null ? void 0 : newPostThreadData.updatedAt
469
- }) : t)) != null ? _h : [];
470
- if (isMountedRef.current) {
471
- safeSend({
472
- type: Actions.UPDATE_THREAD_MESSAGES,
473
- data: {
474
- threadMessages: (data == null ? void 0 : data.length) > 0 ? data : [newPostThreadData],
475
- directLastMessage: newMessage
484
+ }
485
+ try {
486
+ const newPostThreadData = (_b2 = (_a3 = subscriptionData == null ? void 0 : subscriptionData.data) == null ? void 0 : _a3.threadCreatedUpdated) == null ? void 0 : _b2.data;
487
+ const newMessage = (_d2 = (_c2 = subscriptionData == null ? void 0 : subscriptionData.data) == null ? void 0 : _c2.threadCreatedUpdated) == null ? void 0 : _d2.lastMessage;
488
+ if (!newPostThreadData || !newMessage) {
489
+ console.log(`Missing data in subscription for channel ${channel == null ? void 0 : channel.id}`);
490
+ return prev;
491
+ }
492
+ console.log("New thread message subscription update:", {
493
+ channelId: channel == null ? void 0 : channel.id,
494
+ threadId: newPostThreadData == null ? void 0 : newPostThreadData.id,
495
+ hasMessage: !!newMessage,
496
+ message: ((_e = newMessage == null ? void 0 : newMessage.message) == null ? void 0 : _e.substring(0, 20)) + "..."
497
+ });
498
+ const prevThreads = ((_f = prev == null ? void 0 : prev.threadMessages) == null ? void 0 : _f.data) || [];
499
+ const threadExists = prevThreads.some((t) => t.id === (newPostThreadData == null ? void 0 : newPostThreadData.id));
500
+ let updatedThreads;
501
+ if (threadExists) {
502
+ updatedThreads = prevThreads.map((t) => t.id === (newPostThreadData == null ? void 0 : newPostThreadData.id) ? __spreadProps(__spreadValues({}, t), {
503
+ replies: [...(t == null ? void 0 : t.replies) || [], newMessage],
504
+ replyCount: newPostThreadData == null ? void 0 : newPostThreadData.replyCount,
505
+ lastReplyAt: newPostThreadData == null ? void 0 : newPostThreadData.lastReplyAt,
506
+ updatedAt: newPostThreadData == null ? void 0 : newPostThreadData.updatedAt
507
+ }) : t);
508
+ } else {
509
+ updatedThreads = [...prevThreads, newPostThreadData];
510
+ }
511
+ if (isMountedRef.current) {
512
+ safeSend({
513
+ type: Actions.UPDATE_THREAD_MESSAGES,
514
+ data: {
515
+ threadMessages: updatedThreads,
516
+ directLastMessage: newMessage
517
+ }
518
+ });
519
+ }
520
+ return __spreadProps(__spreadValues({}, prev), {
521
+ threadMessages: __spreadProps(__spreadValues({}, prev == null ? void 0 : prev.threadMessages), {
522
+ totalCount: (_i = (_h = newPostThreadData == null ? void 0 : newPostThreadData.totalCount) != null ? _h : (_g = prev == null ? void 0 : prev.threadMessages) == null ? void 0 : _g.totalCount) != null ? _i : 0,
523
+ data: updatedThreads
524
+ })
525
+ });
526
+ } catch (error2) {
527
+ console.error(`Error processing subscription data for channel ${channel == null ? void 0 : channel.id}:`, error2);
528
+ return prev;
529
+ }
530
+ },
531
+ onError: (error2) => {
532
+ console.error(`Thread subscription error for channel ${channel == null ? void 0 : channel.id}:`, error2);
533
+ }
534
+ });
535
+ }, subscribeToChatMessages: () => {
536
+ var _a2;
537
+ return subscribeToMore({
538
+ document: OnThreadChatMessageAddedDocument,
539
+ variables: {
540
+ channelId: (_a2 = channel == null ? void 0 : channel.id) == null ? void 0 : _a2.toString(),
541
+ postParentId: postParentId || servicePostParentId || null
542
+ },
543
+ updateQuery: (prev, {
544
+ subscriptionData
545
+ }) => {
546
+ var _a3, _b2, _c2;
547
+ if (!(subscriptionData == null ? void 0 : subscriptionData.data)) {
548
+ console.log(`No chat message subscription data for channel ${channel == null ? void 0 : channel.id}`);
549
+ return prev;
550
+ }
551
+ try {
552
+ const newMessage = (_a3 = subscriptionData == null ? void 0 : subscriptionData.data) == null ? void 0 : _a3.chatMessageAdded;
553
+ if (!newMessage) {
554
+ console.log(`Missing chat message data in subscription for channel ${channel == null ? void 0 : channel.id}`);
555
+ return prev;
556
+ }
557
+ console.log("New chat message subscription update:", {
558
+ channelId: channel == null ? void 0 : channel.id,
559
+ messageId: newMessage == null ? void 0 : newMessage.id,
560
+ message: ((_b2 = newMessage == null ? void 0 : newMessage.message) == null ? void 0 : _b2.substring(0, 20)) + "..."
561
+ });
562
+ const prevThreads = ((_c2 = prev == null ? void 0 : prev.threadMessages) == null ? void 0 : _c2.data) || [];
563
+ const threadIndex = prevThreads.findIndex((t) => {
564
+ var _a4;
565
+ if (newMessage.parentId && ((_a4 = t.post) == null ? void 0 : _a4.id) === newMessage.parentId) {
566
+ return true;
567
+ }
568
+ if (t.replies && t.replies.some((r) => r.id === newMessage.parentId)) {
569
+ return true;
476
570
  }
571
+ return false;
572
+ });
573
+ if (threadIndex === -1) {
574
+ console.log(`Cannot find thread for chat message in channel ${channel == null ? void 0 : channel.id}`);
575
+ if (isMountedRef.current) {
576
+ safeSend({
577
+ type: Actions.UPDATE_THREAD_MESSAGES,
578
+ data: {
579
+ directLastMessage: newMessage
580
+ }
581
+ });
582
+ }
583
+ return prev;
584
+ }
585
+ const updatedThreads = [...prevThreads];
586
+ const thread = __spreadValues({}, updatedThreads[threadIndex]);
587
+ thread.replies = [...thread.replies || [], newMessage];
588
+ const currentReplyCount = typeof thread.replyCount === "number" ? thread.replyCount : 0;
589
+ thread.replyCount = currentReplyCount + 1;
590
+ thread.lastReplyAt = newMessage.createdAt;
591
+ thread.updatedAt = newMessage.createdAt;
592
+ updatedThreads[threadIndex] = thread;
593
+ if (isMountedRef.current) {
594
+ safeSend({
595
+ type: Actions.UPDATE_THREAD_MESSAGES,
596
+ data: {
597
+ threadMessages: updatedThreads,
598
+ directLastMessage: newMessage
599
+ }
600
+ });
601
+ }
602
+ return __spreadProps(__spreadValues({}, prev), {
603
+ threadMessages: __spreadProps(__spreadValues({}, prev == null ? void 0 : prev.threadMessages), {
604
+ data: updatedThreads
605
+ })
477
606
  });
607
+ } catch (error2) {
608
+ console.error(`Error processing chat message subscription for channel ${channel == null ? void 0 : channel.id}:`, error2);
609
+ return prev;
478
610
  }
479
- return Object.assign({}, prev, {
480
- threadMessages: __spreadProps(__spreadValues({}, prev == null ? void 0 : prev.threadMessages), {
481
- totalCount: (_i = newPostThreadData == null ? void 0 : newPostThreadData.totalCount) != null ? _i : 0,
482
- data: (data == null ? void 0 : data.length) > 0 ? data : [newPostThreadData]
483
- })
484
- });
611
+ },
612
+ onError: (error2) => {
613
+ console.error(`Chat message subscription error for channel ${channel == null ? void 0 : channel.id}:`, error2);
485
614
  }
486
615
  });
487
616
  } }))));
@@ -1 +1 @@
1
- {"version":3,"file":"ServiceDialogsListItem.js","sources":["../../../../src/screens/inbox/components/ServiceDialogsListItem.tsx"],"sourcesContent":["import React, { useMemo, useState, useCallback, useRef } from 'react';\nimport {\n Text,\n Image,\n Pressable,\n HStack,\n Box,\n AvatarGroup,\n Avatar,\n AvatarFallbackText,\n AvatarImage,\n AvatarBadge,\n View,\n} from '@admin-layout/gluestack-ui-mobile';\nimport { format, isToday, isYesterday } from 'date-fns';\nimport { useFocusEffect } from '@react-navigation/native';\nimport { IChannel, IUserAccount } from 'common';\nimport {\n useOnThreadCreatedUpdatedSubscription,\n useOnThreadChatMessageAddedSubscription,\n useThreadMessagesQuery,\n OnThreadCreatedUpdatedDocument as THREAD_CHAT_ADDED,\n OnThreadChatMessageAddedDocument as CHAT_MESSAGE_ADDED,\n} from 'common/graphql';\nimport { startCase } from 'lodash-es';\nimport colors from 'tailwindcss/colors';\nimport { serviceDialogsListItemXstate, Actions, BaseState } from './workflow/service-dialogs-list-item-xstate';\n\n// Helper function to safely create a Date object\nconst safeDate = (dateValue) => {\n if (!dateValue) return null;\n\n try {\n const date = new Date(dateValue);\n // Check if the date is valid by seeing if it returns a valid time value\n if (isNaN(date.getTime())) {\n console.warn('Invalid date value detected:', dateValue);\n return null;\n }\n return date;\n } catch (error) {\n console.warn('Error creating date from value:', dateValue, error);\n return null;\n }\n};\n\nconst createdAtText = (value: string) => {\n if (!value) return '';\n const date = safeDate(value);\n if (!date) return '';\n\n if (isToday(date)) return 'Today';\n if (isYesterday(date)) return 'Yesterday';\n return format(date, 'MMM dd, yyyy');\n};\n\nexport interface IDialogListChannel extends IChannel {\n users: IUserAccount[];\n}\n\nexport interface IDialogListItemProps {\n currentUser?: any;\n users?: any;\n selectedChannelId?: any;\n channel?: any;\n onOpen: (id: any, title: any, postParentId?: any) => void;\n refreshing: boolean;\n role: any;\n}\n\n// Create a safer version of useMachine to handle potential errors\nfunction useSafeMachine(machine) {\n // Define the state type\n interface SafeStateType {\n context: {\n channelId: string | null;\n currentUser: any;\n threadMessages: any[];\n loading: boolean;\n error: string | null;\n title: string;\n role: string;\n servicePostParentId: string | null;\n lastMessage: any;\n };\n value: string;\n matches?: (stateValue: string) => boolean;\n }\n\n // Initialize state with default values to prevent undefined errors\n const [state, setState] = useState<SafeStateType>({\n context: {\n channelId: null,\n currentUser: null,\n threadMessages: [],\n loading: false,\n error: null,\n title: '',\n role: '',\n servicePostParentId: null,\n lastMessage: null,\n },\n value: BaseState.Idle,\n matches: (stateValue) => stateValue === BaseState.Idle,\n });\n\n // Implement a send function that updates state safely\n const send = useCallback((event) => {\n try {\n // Handle specific events manually\n if (event.type === Actions.INITIAL_CONTEXT) {\n setState((prev) => ({\n ...prev,\n context: {\n ...prev.context,\n channelId: event.data?.channelId || null,\n currentUser: event.data?.currentUser || null,\n role: event.data?.role || null,\n loading: true,\n },\n value: BaseState.FetchingThreadMessages,\n }));\n } else if (event.type === Actions.UPDATE_THREAD_MESSAGES) {\n setState((prev) => {\n if (event.data?.threadMessages) {\n // Handling bulk messages (initial load)\n // If a direct last message was provided (from subscription), use it\n if (event.data?.directLastMessage) {\n console.log('Using direct last message from event:', {\n id: event.data.directLastMessage.id,\n message: event.data.directLastMessage.message?.substring(0, 20) + '...',\n });\n\n return {\n ...prev,\n context: {\n ...prev.context,\n threadMessages: event.data.threadMessages,\n lastMessage: event.data.directLastMessage,\n loading: false,\n },\n };\n }\n\n return {\n ...prev,\n context: {\n ...prev.context,\n threadMessages: event.data.threadMessages,\n lastMessage: computeLastMessage(event.data.threadMessages),\n loading: false,\n },\n };\n } else if (event.data?.message) {\n // Handling single message (from subscription)\n const newMessage = event.data.message;\n const updatedMessages = [...prev.context.threadMessages, newMessage];\n\n // Use the new message directly as the last message\n // This ensures immediate update on subscription\n console.log('Setting new message as lastMessage from subscription:', {\n id: newMessage.id,\n message: newMessage.message?.substring(0, 20) + '...',\n date: newMessage.createdAt || newMessage.updatedAt,\n });\n\n return {\n ...prev,\n context: {\n ...prev.context,\n threadMessages: updatedMessages,\n lastMessage: newMessage, // Use the new message directly\n loading: false,\n },\n };\n }\n return prev;\n });\n } else if (event.type === Actions.SET_TITLE) {\n setState((prev) => ({\n ...prev,\n context: {\n ...prev.context,\n title: event.data?.title || '',\n },\n }));\n } else if (event.type === Actions.SET_SERVICE_POST_PARENT_ID) {\n setState((prev) => ({\n ...prev,\n context: {\n ...prev.context,\n servicePostParentId: event.data?.servicePostParentId || null,\n },\n }));\n } else if (event.type === Actions.START_LOADING) {\n setState((prev) => ({\n ...prev,\n context: {\n ...prev.context,\n loading: true,\n },\n }));\n } else if (event.type === Actions.STOP_LOADING) {\n setState((prev) => ({\n ...prev,\n context: {\n ...prev.context,\n loading: false,\n },\n }));\n }\n } catch (error) {\n console.error('Error sending event to state machine:', error);\n }\n }, []);\n\n // Helper function to compute the last message from a list of messages\n const computeLastMessage = (threadMessages) => {\n if (!threadMessages || !threadMessages.length) return null;\n\n // Extract the post and replies from thread messages\n let posts = [];\n let replies = [];\n\n // Helper function to check if a message is an image or contains only image content\n const isTextMessage = (msg) => {\n if (!msg) return false;\n\n // If message is empty or only contains image-specific markers, ignore it\n if (!msg.message || msg.message === '') return false;\n\n // Check if message looks like an image URL or reference\n const isImageMessage =\n msg.message.includes('<img') ||\n msg.message.includes('[Image]') ||\n msg.message.includes('![') ||\n (/\\.(jpeg|jpg|gif|png|bmp|webp)/i.test(msg.message) &&\n (msg.message.includes('http') || msg.message.includes('/images/')));\n\n // Return true only for text messages (not image messages)\n return !isImageMessage;\n };\n\n threadMessages.forEach((thread) => {\n if (thread?.post && isTextMessage(thread.post)) {\n posts.push(thread.post);\n }\n if (thread?.replies?.length) {\n replies = [...replies, ...thread.replies.filter((r) => isTextMessage(r))];\n }\n });\n\n // Combine and sort all messages\n const allMessages = [...posts, ...replies];\n if (!allMessages.length) return null;\n\n // Return the most recent message - use safe date comparison\n return allMessages.reduce((a, b) => {\n const dateA = safeDate(a?.createdAt);\n const dateB = safeDate(b?.createdAt);\n\n // If either date is invalid, prefer the message with valid date\n if (!dateA) return b;\n if (!dateB) return a;\n\n return dateA > dateB ? a : b;\n }, allMessages[0]);\n };\n\n // Add a matches function that works with the current state value\n const stateWithMatches = useMemo(() => {\n return {\n ...state,\n matches: (stateValue) => {\n try {\n return state.value === stateValue;\n } catch (error) {\n console.error(`Error in matches function:`, error);\n return false;\n }\n },\n };\n }, [state]);\n\n // Return as a tuple to match useMachine API\n return [stateWithMatches, send] as const;\n}\n\nconst ServiceChannelWithLastMessage = React.memo(({ channel, lastMessage, subscribeToNewMessages }: any) => {\n React.useEffect(() => {\n // Subscribe and store the unsubscribe function\n const unsubscribe = subscribeToNewMessages();\n return () => {\n // Cleanup subscription on unmount\n if (unsubscribe && typeof unsubscribe === 'function') {\n unsubscribe();\n }\n };\n }, [subscribeToNewMessages]);\n\n // Debug output for component rendering\n React.useEffect(() => {\n console.log(`ServiceChannelWithLastMessage rendered for channel ${channel?.id}:`, {\n hasLastMessage: !!lastMessage,\n messageId: lastMessage?.id,\n messageText: lastMessage?.message?.substring(0, 20) + (lastMessage?.message?.length > 20 ? '...' : ''),\n date: lastMessage?.createdAt ? safeDate(lastMessage.createdAt)?.toISOString() : 'none',\n });\n }, [lastMessage, channel?.id]);\n\n const count = 30;\n const title = channel?.title.slice(0, count) + (channel?.title.length > count ? '...' : '');\n\n // Define message display text\n let displayMessage = 'No messages yet';\n\n if (lastMessage) {\n // Check for file attachments\n const hasFileAttachments = lastMessage.files?.data?.length > 0;\n\n // Check if the message appears to be an image\n const isImageMessage =\n lastMessage.message?.includes('<img') ||\n lastMessage.message?.includes('[Image]') ||\n lastMessage.message?.includes('![') ||\n (/\\.(jpeg|jpg|gif|png|bmp|webp)/i.test(lastMessage.message || '') &&\n ((lastMessage.message || '').includes('http') || (lastMessage.message || '').includes('/images/')));\n\n if (hasFileAttachments) {\n displayMessage = '📎 File attachment';\n } else if (isImageMessage) {\n displayMessage = '[Image]';\n } else if (lastMessage.message && lastMessage.message.trim() !== '') {\n displayMessage = lastMessage.message;\n } else {\n displayMessage = '(Empty message)';\n }\n }\n\n return (\n <HStack space={'sm'} className=\"flex-1 justify-between\">\n <Box className=\"flex-[0.8]\">\n <Text color={colors.gray[600]} className=\"text-base text-wrap flex-wrap font-semibold\">\n {title}\n </Text>\n <Text color={colors.gray[600]} numberOfLines={1}>\n {displayMessage}\n </Text>\n </Box>\n\n <Box className=\"flex-[0.2]\">\n <Text color={colors.gray[500]}>{lastMessage ? createdAtText(lastMessage?.createdAt) : ''}</Text>\n </Box>\n </HStack>\n );\n});\n\n/**\n * TODO:\n * - Get Reservation info: reservation date, status\n * - Add ability to get property information: name, logo\n */\nexport const ServiceDialogsListItemComponent: React.FC<IDialogListItemProps> = function DialogsListItem({\n currentUser,\n // users,\n selectedChannelId,\n channel,\n onOpen,\n refreshing,\n role,\n}) {\n // Create a ref to track if component is mounted\n const isMountedRef = useRef(true);\n // Define safe access functions\n const [state, send] = useSafeMachine(serviceDialogsListItemXstate);\n\n const safeContextProperty = useCallback(\n (property, defaultValue = null) => {\n try {\n return state?.context?.[property] ?? defaultValue;\n } catch (error) {\n console.error(`Error accessing state.context.${property}:`, error);\n return defaultValue;\n }\n },\n [state],\n );\n\n const safeSend = useCallback(\n (event) => {\n try {\n send(event);\n } catch (error) {\n console.error('Error sending event to state machine:', error, event);\n }\n },\n [send],\n );\n\n // Query for thread messages\n const {\n data: threadMessages,\n loading: threadMessageLoading,\n error,\n refetch: refetchThreadMessages,\n subscribeToMore,\n } = useThreadMessagesQuery({\n variables: {\n channelId: channel?.id?.toString(),\n role,\n limit: 2,\n },\n fetchPolicy: 'cache-and-network',\n onCompleted: (data) => {\n console.log(\n `Completed thread messages query for channel ${channel?.id}:`,\n data?.threadMessages?.data?.length ? 'Has messages' : 'No messages',\n );\n },\n onError: (error) => {\n console.error(`Error fetching thread messages for channel ${channel?.id}:`, error);\n },\n });\n\n // Update state when channel or currentUser changes\n React.useEffect(() => {\n if (channel?.id) {\n safeSend({\n type: Actions.INITIAL_CONTEXT,\n data: {\n channelId: channel?.id?.toString(),\n currentUser,\n role,\n },\n });\n\n safeSend({\n type: Actions.SET_TITLE,\n data: {\n title: channel?.title || '',\n },\n });\n }\n\n return () => {\n isMountedRef.current = false;\n };\n }, [channel?.id, currentUser, role, safeSend]);\n\n // Update state when thread messages are loaded or refreshed\n React.useEffect(() => {\n if (threadMessages && isMountedRef.current) {\n console.log(\n `Updating thread messages for channel ${channel?.id}, count:`,\n threadMessages?.threadMessages?.data?.length || 0,\n );\n\n safeSend({\n type: Actions.UPDATE_THREAD_MESSAGES,\n data: {\n threadMessages: threadMessages?.threadMessages?.data || [],\n },\n });\n }\n }, [threadMessages, refreshing, channel?.id, safeSend]);\n\n // Use computed values from state\n const lastMessage = safeContextProperty('lastMessage', null);\n const servicePostParentId = safeContextProperty('servicePostParentId', null);\n\n // Update servicePostParentId when lastMessage changes\n React.useEffect(() => {\n if (lastMessage) {\n const sParentId = lastMessage?.parentId ? lastMessage?.parentId : lastMessage?.id;\n safeSend({\n type: Actions.SET_SERVICE_POST_PARENT_ID,\n data: {\n servicePostParentId: sParentId,\n },\n });\n }\n }, [lastMessage, safeSend]);\n\n const creatorAndMembersId = React.useMemo(() => {\n if (!channel?.members) return null;\n const membersIds: any =\n channel?.members\n ?.filter((m: any) => m !== null && m?.user?.id !== currentUser?.id)\n ?.map((mu: any) => mu?.user?.id) ?? [];\n const creatorId: any = channel?.creator?.id;\n const mergedIds: any = [].concat(membersIds, creatorId) ?? [];\n return mergedIds?.filter((m: any, pos: any) => mergedIds?.indexOf(m) === pos) ?? [];\n }, [channel, currentUser]);\n\n const postParentId = React.useMemo(() => {\n if (!creatorAndMembersId?.length) return null;\n\n return creatorAndMembersId?.length && creatorAndMembersId?.includes(currentUser?.id)\n ? null\n : lastMessage?.parentId\n ? lastMessage?.parentId\n : lastMessage?.id ?? 0;\n }, [creatorAndMembersId, lastMessage, currentUser]);\n\n // Function to force refresh the component state\n const refreshThreadState = useCallback(() => {\n if (channel?.id && isMountedRef.current) {\n console.log('Forcing thread state refresh for channel:', channel?.id);\n // First ensure we're in a loading state to trigger UI updates\n safeSend({ type: Actions.START_LOADING });\n\n // Refetch messages from server\n refetchThreadMessages({\n channelId: channel?.id?.toString(),\n role,\n limit: 2,\n })\n .then((result) => {\n // Update the state with fresh data\n if (result.data?.threadMessages?.data && isMountedRef.current) {\n console.log(\n `Refreshed ${result.data.threadMessages.data.length} thread messages for channel ${channel?.id}`,\n );\n\n safeSend({\n type: Actions.UPDATE_THREAD_MESSAGES,\n data: { threadMessages: result.data.threadMessages.data },\n });\n }\n safeSend({ type: Actions.STOP_LOADING });\n })\n .catch((err) => {\n console.error('Error refreshing thread state:', err);\n safeSend({ type: Actions.STOP_LOADING });\n });\n }\n }, [channel?.id, refetchThreadMessages, safeSend, isMountedRef, role]);\n\n // Refetch messages when screen is focused or refreshing\n useFocusEffect(\n React.useCallback(() => {\n if (!channel?.id) return;\n\n console.log('ServiceDialogsListItem focused for channel:', channel?.id);\n\n // Show loading state\n safeSend({ type: Actions.START_LOADING });\n\n // Use a direct refetch with network-only policy to force fresh data\n const fetchFreshData = async () => {\n try {\n // Force a network-only fetch\n const result = await refetchThreadMessages({\n channelId: channel?.id?.toString(),\n role,\n limit: 2,\n });\n\n // Log the refreshed data\n console.log(\n `FOCUS EFFECT: Refetched ${\n result?.data?.threadMessages?.data?.length || 0\n } messages for channel ${channel?.id}`,\n );\n\n if (result?.data?.threadMessages?.data && isMountedRef.current) {\n // Update state with fresh data\n safeSend({\n type: Actions.UPDATE_THREAD_MESSAGES,\n data: { threadMessages: result.data.threadMessages.data },\n });\n }\n } catch (error) {\n console.error('Error refetching thread messages on focus:', error);\n } finally {\n if (isMountedRef.current) {\n safeSend({ type: Actions.STOP_LOADING });\n }\n }\n };\n\n // Execute fetch\n fetchFreshData();\n\n return () => {\n // Cleanup function when unfocused\n };\n }, [refreshing, channel?.id, refetchThreadMessages, safeSend, role, isMountedRef]),\n );\n\n return (\n <Pressable\n onPress={() => channel?.id !== selectedChannelId && onOpen(channel?.id, channel?.title, postParentId)}\n className=\"flex-1 rounded-md border-gray-200 dark:border-gray-600 dark:bg-gray-700\"\n style={{ borderBottomWidth: 1, borderColor: '#e5e7eb', marginVertical: 0 }}\n >\n <HStack space={'md'} className=\"flex-1 w-[100%] px-2 py-3 items-center\">\n <Box className=\"flex-[0.1] items-start pl-3\">\n <Avatar\n key={'service-channels-key-' + channel?.id}\n size={'sm'}\n className=\"bg-transparent top-0 right-0 z-[1]\"\n >\n <AvatarFallbackText> {startCase(channel?.creator?.username?.charAt(0))}</AvatarFallbackText>\n <AvatarImage\n alt=\"user image\"\n style={{ borderRadius: 6, borderWidth: 2, borderColor: '#fff' }}\n source={{\n uri: channel?.creator?.picture,\n }}\n />\n </Avatar>\n </Box>\n <Box className=\"flex-1\">\n <ServiceChannelWithLastMessage\n channel={channel}\n lastMessage={lastMessage}\n subscribeToNewMessages={() =>\n subscribeToMore({\n document: THREAD_CHAT_ADDED,\n variables: {\n channelId: channel?.id?.toString(),\n postParentId: postParentId ? servicePostParentId : null,\n },\n updateQuery: (prev, { subscriptionData }: any) => {\n if (!subscriptionData.data) return prev;\n\n const newPostThreadData: any = subscriptionData?.data?.threadCreatedUpdated?.data;\n const newMessage: any = subscriptionData?.data?.threadCreatedUpdated?.lastMessage;\n\n console.log('New thread message subscription update:', {\n channelId: channel?.id,\n threadId: newPostThreadData?.id,\n hasMessage: !!newMessage,\n message: newMessage?.message?.substring(0, 20) + '...',\n });\n\n const data =\n prev?.threadMessages?.data?.map((t: any) =>\n t.id === newPostThreadData?.id\n ? {\n ...t,\n replies: [...t?.replies, newMessage],\n replyCount: newPostThreadData?.replyCount,\n lastReplyAt: newPostThreadData?.lastReplyAt,\n updatedAt: newPostThreadData?.updatedAt,\n }\n : t,\n ) ?? [];\n\n // Use the safe state update function\n if (isMountedRef.current) {\n safeSend({\n type: Actions.UPDATE_THREAD_MESSAGES,\n data: {\n threadMessages: data?.length > 0 ? data : [newPostThreadData],\n directLastMessage: newMessage, // Directly set the new message\n },\n });\n }\n\n return Object.assign({}, prev, {\n threadMessages: {\n ...prev?.threadMessages,\n totalCount: newPostThreadData?.totalCount ?? 0,\n data: data?.length > 0 ? data : [newPostThreadData],\n },\n });\n },\n })\n }\n />\n </Box>\n </HStack>\n </Pressable>\n );\n};\n\nexport const ServiceDialogsListItem = React.memo(ServiceDialogsListItemComponent);\n"],"names":["React","_a","_b","_c","error","_d","THREAD_CHAT_ADDED"],"mappings":"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"}
1
+ {"version":3,"file":"ServiceDialogsListItem.js","sources":["../../../../src/screens/inbox/components/ServiceDialogsListItem.tsx"],"sourcesContent":["import React, { useMemo, useState, useCallback, useRef } from 'react';\nimport {\n Text,\n Image,\n Pressable,\n HStack,\n Box,\n AvatarGroup,\n Avatar,\n AvatarFallbackText,\n AvatarImage,\n AvatarBadge,\n View,\n} from '@admin-layout/gluestack-ui-mobile';\nimport { format, isToday, isYesterday } from 'date-fns';\nimport { useFocusEffect } from '@react-navigation/native';\nimport { IChannel, IUserAccount } from 'common';\nimport {\n useOnThreadCreatedUpdatedSubscription,\n useOnThreadChatMessageAddedSubscription,\n useThreadMessagesQuery,\n OnThreadCreatedUpdatedDocument as THREAD_CHAT_ADDED,\n OnThreadChatMessageAddedDocument as CHAT_MESSAGE_ADDED,\n} from 'common/graphql';\nimport { startCase } from 'lodash-es';\nimport colors from 'tailwindcss/colors';\nimport { serviceDialogsListItemXstate, Actions, BaseState } from './workflow/service-dialogs-list-item-xstate';\n\n// Helper function to safely create a Date object\nconst safeDate = (dateValue) => {\n if (!dateValue) return null;\n\n try {\n const date = new Date(dateValue);\n // Check if the date is valid by seeing if it returns a valid time value\n if (isNaN(date.getTime())) {\n console.warn('Invalid date value detected:', dateValue);\n return null;\n }\n return date;\n } catch (error) {\n console.warn('Error creating date from value:', dateValue, error);\n return null;\n }\n};\n\nconst createdAtText = (value: string) => {\n if (!value) return '';\n const date = safeDate(value);\n if (!date) return '';\n\n if (isToday(date)) return 'Today';\n if (isYesterday(date)) return 'Yesterday';\n return format(date, 'MMM dd, yyyy');\n};\n\nexport interface IDialogListChannel extends IChannel {\n users: IUserAccount[];\n}\n\nexport interface IDialogListItemProps {\n currentUser?: any;\n users?: any;\n selectedChannelId?: any;\n channel?: any;\n onOpen: (id: any, title: any, postParentId?: any) => void;\n refreshing: boolean;\n role: any;\n}\n\n// Create a safer version of useMachine to handle potential errors\nfunction useSafeMachine(machine) {\n // Define the state type\n interface SafeStateType {\n context: {\n channelId: string | null;\n currentUser: any;\n threadMessages: any[];\n loading: boolean;\n error: string | null;\n title: string;\n role: string;\n servicePostParentId: string | null;\n lastMessage: any;\n };\n value: string;\n matches?: (stateValue: string) => boolean;\n }\n\n // Initialize state with default values to prevent undefined errors\n const [state, setState] = useState<SafeStateType>({\n context: {\n channelId: null,\n currentUser: null,\n threadMessages: [],\n loading: false,\n error: null,\n title: '',\n role: '',\n servicePostParentId: null,\n lastMessage: null,\n },\n value: BaseState.Idle,\n matches: (stateValue) => stateValue === BaseState.Idle,\n });\n\n // Implement a send function that updates state safely\n const send = useCallback((event) => {\n try {\n // Handle specific events manually\n if (event.type === Actions.INITIAL_CONTEXT) {\n setState((prev) => ({\n ...prev,\n context: {\n ...prev.context,\n channelId: event.data?.channelId || null,\n currentUser: event.data?.currentUser || null,\n role: event.data?.role || null,\n loading: true,\n },\n value: BaseState.FetchingThreadMessages,\n }));\n } else if (event.type === Actions.UPDATE_THREAD_MESSAGES) {\n setState((prev) => {\n if (event.data?.threadMessages) {\n // Handling bulk messages (initial load)\n // If a direct last message was provided (from subscription), use it\n if (event.data?.directLastMessage) {\n console.log('Using direct last message from event:', {\n id: event.data.directLastMessage.id,\n message: event.data.directLastMessage.message?.substring(0, 20) + '...',\n });\n\n return {\n ...prev,\n context: {\n ...prev.context,\n threadMessages: event.data.threadMessages,\n lastMessage: event.data.directLastMessage,\n loading: false,\n },\n };\n }\n\n return {\n ...prev,\n context: {\n ...prev.context,\n threadMessages: event.data.threadMessages,\n lastMessage: computeLastMessage(event.data.threadMessages),\n loading: false,\n },\n };\n } else if (event.data?.message) {\n // Handling single message (from subscription)\n const newMessage = event.data.message;\n const updatedMessages = [...prev.context.threadMessages, newMessage];\n\n // Use the new message directly as the last message\n // This ensures immediate update on subscription\n console.log('Setting new message as lastMessage from subscription:', {\n id: newMessage.id,\n message: newMessage.message?.substring(0, 20) + '...',\n date: newMessage.createdAt || newMessage.updatedAt,\n });\n\n return {\n ...prev,\n context: {\n ...prev.context,\n threadMessages: updatedMessages,\n lastMessage: newMessage, // Use the new message directly\n loading: false,\n },\n };\n }\n return prev;\n });\n } else if (event.type === Actions.SET_TITLE) {\n setState((prev) => ({\n ...prev,\n context: {\n ...prev.context,\n title: event.data?.title || '',\n },\n }));\n } else if (event.type === Actions.SET_SERVICE_POST_PARENT_ID) {\n setState((prev) => ({\n ...prev,\n context: {\n ...prev.context,\n servicePostParentId: event.data?.servicePostParentId || null,\n },\n }));\n } else if (event.type === Actions.START_LOADING) {\n setState((prev) => ({\n ...prev,\n context: {\n ...prev.context,\n loading: true,\n },\n }));\n } else if (event.type === Actions.STOP_LOADING) {\n setState((prev) => ({\n ...prev,\n context: {\n ...prev.context,\n loading: false,\n },\n }));\n }\n } catch (error) {\n console.error('Error sending event to state machine:', error);\n }\n }, []);\n\n // Helper function to compute the last message from a list of messages\n const computeLastMessage = (threadMessages) => {\n if (!threadMessages || !threadMessages.length) return null;\n\n // Extract the post and replies from thread messages\n let posts = [];\n let replies = [];\n\n // Helper function to check if a message is an image or contains only image content\n const isTextMessage = (msg) => {\n if (!msg) return false;\n\n // If message is empty or only contains image-specific markers, ignore it\n if (!msg.message || msg.message === '') return false;\n\n // Check if message looks like an image URL or reference\n const isImageMessage =\n msg.message.includes('<img') ||\n msg.message.includes('[Image]') ||\n msg.message.includes('![') ||\n (/\\.(jpeg|jpg|gif|png|bmp|webp)/i.test(msg.message) &&\n (msg.message.includes('http') || msg.message.includes('/images/')));\n\n // Return true only for text messages (not image messages)\n return !isImageMessage;\n };\n\n threadMessages.forEach((thread) => {\n if (thread?.post && isTextMessage(thread.post)) {\n posts.push(thread.post);\n }\n if (thread?.replies?.length) {\n replies = [...replies, ...thread.replies.filter((r) => isTextMessage(r))];\n }\n });\n\n // Combine and sort all messages\n const allMessages = [...posts, ...replies];\n if (!allMessages.length) return null;\n\n // Return the most recent message - use safe date comparison\n return allMessages.reduce((a, b) => {\n const dateA = safeDate(a?.createdAt);\n const dateB = safeDate(b?.createdAt);\n\n // If either date is invalid, prefer the message with valid date\n if (!dateA) return b;\n if (!dateB) return a;\n\n return dateA > dateB ? a : b;\n }, allMessages[0]);\n };\n\n // Add a matches function that works with the current state value\n const stateWithMatches = useMemo(() => {\n return {\n ...state,\n matches: (stateValue) => {\n try {\n return state.value === stateValue;\n } catch (error) {\n console.error(`Error in matches function:`, error);\n return false;\n }\n },\n };\n }, [state]);\n\n // Return as a tuple to match useMachine API\n return [stateWithMatches, send] as const;\n}\n\nconst ServiceChannelWithLastMessage = React.memo(\n ({ channel, lastMessage, subscribeToNewMessages, subscribeToChatMessages }: any) => {\n React.useEffect(() => {\n console.log(`Setting up subscriptions for channel ${channel?.id}`);\n // Subscribe and store the unsubscribe functions\n let threadUnsubscribe;\n let chatUnsubscribe;\n\n try {\n threadUnsubscribe = subscribeToNewMessages();\n chatUnsubscribe = subscribeToChatMessages();\n } catch (error) {\n console.error(`Error setting up subscriptions for channel ${channel?.id}:`, error);\n }\n\n return () => {\n // Cleanup subscriptions on unmount\n if (threadUnsubscribe && typeof threadUnsubscribe === 'function') {\n try {\n console.log(`Cleaning up thread subscription for channel ${channel?.id}`);\n threadUnsubscribe();\n } catch (error) {\n console.error(`Error cleaning up thread subscription for channel ${channel?.id}:`, error);\n }\n }\n\n if (chatUnsubscribe && typeof chatUnsubscribe === 'function') {\n try {\n console.log(`Cleaning up chat subscription for channel ${channel?.id}`);\n chatUnsubscribe();\n } catch (error) {\n console.error(`Error cleaning up chat subscription for channel ${channel?.id}:`, error);\n }\n }\n };\n }, [subscribeToNewMessages, subscribeToChatMessages, channel?.id]);\n\n // Debug output for component rendering\n React.useEffect(() => {\n console.log(`ServiceChannelWithLastMessage rendered for channel ${channel?.id}:`, {\n hasLastMessage: !!lastMessage,\n messageId: lastMessage?.id,\n messageText: lastMessage?.message?.substring(0, 20) + (lastMessage?.message?.length > 20 ? '...' : ''),\n date: lastMessage?.createdAt ? safeDate(lastMessage.createdAt)?.toISOString() : 'none',\n });\n }, [lastMessage, channel?.id]);\n\n const count = 30;\n const title = channel?.title.slice(0, count) + (channel?.title.length > count ? '...' : '');\n\n // Define message display text\n let displayMessage = 'No messages yet';\n\n if (lastMessage) {\n // Check for file attachments\n const hasFileAttachments = lastMessage.files?.data?.length > 0;\n\n // Check if the message appears to be an image\n const isImageMessage =\n lastMessage.message?.includes('<img') ||\n lastMessage.message?.includes('[Image]') ||\n lastMessage.message?.includes('![') ||\n (/\\.(jpeg|jpg|gif|png|bmp|webp)/i.test(lastMessage.message || '') &&\n ((lastMessage.message || '').includes('http') || (lastMessage.message || '').includes('/images/')));\n\n if (hasFileAttachments) {\n displayMessage = '📎 File attachment';\n } else if (isImageMessage) {\n displayMessage = '[Image]';\n } else if (lastMessage.message && lastMessage.message.trim() !== '') {\n displayMessage = lastMessage.message;\n } else {\n displayMessage = '(Empty message)';\n }\n }\n\n return (\n <HStack space={'sm'} className=\"flex-1 justify-between\">\n <Box className=\"flex-[0.8]\">\n <Text color={colors.gray[600]} className=\"text-base text-wrap flex-wrap font-semibold\">\n {title}\n </Text>\n <Text color={colors.gray[600]} numberOfLines={1}>\n {displayMessage}\n </Text>\n </Box>\n\n <Box className=\"flex-[0.2]\">\n <Text color={colors.gray[500]}>{lastMessage ? createdAtText(lastMessage?.createdAt) : ''}</Text>\n </Box>\n </HStack>\n );\n },\n);\n\n/**\n * TODO:\n * - Get Reservation info: reservation date, status\n * - Add ability to get property information: name, logo\n */\nexport const ServiceDialogsListItemComponent: React.FC<IDialogListItemProps> = function DialogsListItem({\n currentUser,\n // users,\n selectedChannelId,\n channel,\n onOpen,\n refreshing,\n role,\n}) {\n // Create a ref to track if component is mounted\n const isMountedRef = useRef(true);\n // Define safe access functions\n const [state, send] = useSafeMachine(serviceDialogsListItemXstate);\n\n const safeContextProperty = useCallback(\n (property, defaultValue = null) => {\n try {\n return state?.context?.[property] ?? defaultValue;\n } catch (error) {\n console.error(`Error accessing state.context.${property}:`, error);\n return defaultValue;\n }\n },\n [state],\n );\n\n const safeSend = useCallback(\n (event) => {\n try {\n send(event);\n } catch (error) {\n console.error('Error sending event to state machine:', error, event);\n }\n },\n [send],\n );\n\n // Query for thread messages\n const {\n data: threadMessages,\n loading: threadMessageLoading,\n error,\n refetch: refetchThreadMessages,\n subscribeToMore,\n } = useThreadMessagesQuery({\n variables: {\n channelId: channel?.id?.toString(),\n role,\n limit: 2,\n },\n fetchPolicy: 'cache-and-network',\n onCompleted: (data) => {\n console.log(\n `Completed thread messages query for channel ${channel?.id}:`,\n data?.threadMessages?.data?.length ? 'Has messages' : 'No messages',\n );\n },\n onError: (error) => {\n console.error(`Error fetching thread messages for channel ${channel?.id}:`, error);\n },\n });\n\n // Update state when channel or currentUser changes\n React.useEffect(() => {\n if (channel?.id) {\n safeSend({\n type: Actions.INITIAL_CONTEXT,\n data: {\n channelId: channel?.id?.toString(),\n currentUser,\n role,\n },\n });\n\n safeSend({\n type: Actions.SET_TITLE,\n data: {\n title: channel?.title || '',\n },\n });\n }\n\n return () => {\n isMountedRef.current = false;\n };\n }, [channel?.id, currentUser, role, safeSend]);\n\n // Update state when thread messages are loaded or refreshed\n React.useEffect(() => {\n if (threadMessages && isMountedRef.current) {\n console.log(\n `Updating thread messages for channel ${channel?.id}, count:`,\n threadMessages?.threadMessages?.data?.length || 0,\n );\n\n safeSend({\n type: Actions.UPDATE_THREAD_MESSAGES,\n data: {\n threadMessages: threadMessages?.threadMessages?.data || [],\n },\n });\n }\n }, [threadMessages, refreshing, channel?.id, safeSend]);\n\n // Use computed values from state\n const lastMessage = safeContextProperty('lastMessage', null);\n const servicePostParentId = safeContextProperty('servicePostParentId', null);\n\n // Update servicePostParentId when lastMessage changes\n React.useEffect(() => {\n if (lastMessage) {\n const sParentId = lastMessage?.parentId ? lastMessage?.parentId : lastMessage?.id;\n\n if (sParentId !== safeContextProperty('servicePostParentId')) {\n console.log(`Updating servicePostParentId for channel ${channel?.id} to:`, sParentId);\n\n safeSend({\n type: Actions.SET_SERVICE_POST_PARENT_ID,\n data: {\n servicePostParentId: sParentId,\n },\n });\n }\n }\n }, [lastMessage, safeSend, channel?.id, safeContextProperty]);\n\n const creatorAndMembersId = React.useMemo(() => {\n if (!channel?.members) return null;\n const membersIds: any =\n channel?.members\n ?.filter((m: any) => m !== null && m?.user?.id !== currentUser?.id)\n ?.map((mu: any) => mu?.user?.id) ?? [];\n const creatorId: any = channel?.creator?.id;\n const mergedIds: any = [].concat(membersIds, creatorId) ?? [];\n return mergedIds?.filter((m: any, pos: any) => mergedIds?.indexOf(m) === pos) ?? [];\n }, [channel, currentUser]);\n\n const postParentId = React.useMemo(() => {\n if (!creatorAndMembersId?.length) return null;\n\n return creatorAndMembersId?.length && creatorAndMembersId?.includes(currentUser?.id)\n ? null\n : lastMessage?.parentId\n ? lastMessage?.parentId\n : lastMessage?.id ?? 0;\n }, [creatorAndMembersId, lastMessage, currentUser]);\n\n // Function to force refresh the component state\n const refreshThreadState = useCallback(() => {\n if (channel?.id && isMountedRef.current) {\n console.log('Forcing thread state refresh for channel:', channel?.id);\n // First ensure we're in a loading state to trigger UI updates\n safeSend({ type: Actions.START_LOADING });\n\n // Refetch messages from server\n refetchThreadMessages({\n channelId: channel?.id?.toString(),\n role,\n limit: 2,\n })\n .then((result) => {\n // Update the state with fresh data\n if (result.data?.threadMessages?.data && isMountedRef.current) {\n console.log(\n `Refreshed ${result.data.threadMessages.data.length} thread messages for channel ${channel?.id}`,\n );\n\n safeSend({\n type: Actions.UPDATE_THREAD_MESSAGES,\n data: { threadMessages: result.data.threadMessages.data },\n });\n }\n safeSend({ type: Actions.STOP_LOADING });\n })\n .catch((err) => {\n console.error('Error refreshing thread state:', err);\n safeSend({ type: Actions.STOP_LOADING });\n });\n }\n }, [channel?.id, refetchThreadMessages, safeSend, isMountedRef, role]);\n\n // Add a timestamp to track when subscriptions were last set up\n const [subscriptionsTimestamp, setSubscriptionsTimestamp] = useState(Date.now());\n\n // Reset subscriptions when the component gains focus\n useFocusEffect(\n React.useCallback(() => {\n // Force subscription refresh\n setSubscriptionsTimestamp(Date.now());\n\n // Existing focus effect logic...\n if (!channel?.id) return;\n\n console.log('ServiceDialogsListItem focused for channel:', channel?.id);\n\n // Show loading state\n safeSend({ type: Actions.START_LOADING });\n\n // Use a direct refetch with network-only policy to force fresh data\n const fetchFreshData = async () => {\n try {\n // Force a network-only fetch\n const result = await refetchThreadMessages({\n channelId: channel?.id?.toString(),\n role,\n limit: 2,\n });\n\n // Log the refreshed data\n console.log(\n `FOCUS EFFECT: Refetched ${\n result?.data?.threadMessages?.data?.length || 0\n } messages for channel ${channel?.id}`,\n );\n\n if (result?.data?.threadMessages?.data && isMountedRef.current) {\n // Update state with fresh data\n safeSend({\n type: Actions.UPDATE_THREAD_MESSAGES,\n data: { threadMessages: result.data.threadMessages.data },\n });\n }\n } catch (error) {\n console.error('Error refetching thread messages on focus:', error);\n } finally {\n if (isMountedRef.current) {\n safeSend({ type: Actions.STOP_LOADING });\n }\n }\n };\n\n // Execute fetch\n fetchFreshData();\n\n return () => {\n // Cleanup function when unfocused\n };\n }, [refreshing, channel?.id, refetchThreadMessages, safeSend, role, isMountedRef]),\n );\n\n return (\n <Pressable\n onPress={() => channel?.id !== selectedChannelId && onOpen(channel?.id, channel?.title, postParentId)}\n className=\"flex-1 rounded-md border-gray-200 dark:border-gray-600 dark:bg-gray-700\"\n style={{ borderBottomWidth: 1, borderColor: '#e5e7eb', marginVertical: 0 }}\n >\n <HStack space={'md'} className=\"flex-1 w-[100%] px-2 py-3 items-center\">\n <Box className=\"flex-[0.1] items-start pl-3\">\n <Avatar\n key={'service-channels-key-' + channel?.id}\n size={'sm'}\n className=\"bg-transparent top-0 right-0 z-[1]\"\n >\n <AvatarFallbackText> {startCase(channel?.creator?.username?.charAt(0))}</AvatarFallbackText>\n <AvatarImage\n alt=\"user image\"\n style={{ borderRadius: 6, borderWidth: 2, borderColor: '#fff' }}\n source={{\n uri: channel?.creator?.picture,\n }}\n />\n </Avatar>\n </Box>\n <Box className=\"flex-1\">\n <ServiceChannelWithLastMessage\n key={`channel-${channel?.id}-${subscriptionsTimestamp}`}\n channel={channel}\n lastMessage={lastMessage}\n subscribeToNewMessages={() =>\n subscribeToMore({\n document: THREAD_CHAT_ADDED,\n variables: {\n channelId: channel?.id?.toString(),\n postParentId: postParentId || servicePostParentId || null,\n },\n updateQuery: (prev, { subscriptionData }: any) => {\n if (!subscriptionData?.data) {\n console.log(`No subscription data for channel ${channel?.id}`);\n return prev;\n }\n\n try {\n const newPostThreadData: any =\n subscriptionData?.data?.threadCreatedUpdated?.data;\n const newMessage: any =\n subscriptionData?.data?.threadCreatedUpdated?.lastMessage;\n\n if (!newPostThreadData || !newMessage) {\n console.log(`Missing data in subscription for channel ${channel?.id}`);\n return prev;\n }\n\n console.log('New thread message subscription update:', {\n channelId: channel?.id,\n threadId: newPostThreadData?.id,\n hasMessage: !!newMessage,\n message: newMessage?.message?.substring(0, 20) + '...',\n });\n\n // Create a safe copy of the previous data\n const prevThreads = prev?.threadMessages?.data || [];\n\n // Check if this thread already exists\n const threadExists = prevThreads.some(\n (t: any) => t.id === newPostThreadData?.id,\n );\n\n let updatedThreads;\n if (threadExists) {\n // Update existing thread\n updatedThreads = prevThreads.map((t: any) =>\n t.id === newPostThreadData?.id\n ? {\n ...t,\n replies: [...(t?.replies || []), newMessage],\n replyCount: newPostThreadData?.replyCount,\n lastReplyAt: newPostThreadData?.lastReplyAt,\n updatedAt: newPostThreadData?.updatedAt,\n }\n : t,\n );\n } else {\n // Add new thread\n updatedThreads = [...prevThreads, newPostThreadData];\n }\n\n // Use the safe state update function\n if (isMountedRef.current) {\n safeSend({\n type: Actions.UPDATE_THREAD_MESSAGES,\n data: {\n threadMessages: updatedThreads,\n directLastMessage: newMessage, // Directly set the new message\n },\n });\n }\n\n return {\n ...prev,\n threadMessages: {\n ...prev?.threadMessages,\n totalCount:\n newPostThreadData?.totalCount ??\n prev?.threadMessages?.totalCount ??\n 0,\n data: updatedThreads,\n },\n };\n } catch (error) {\n console.error(\n `Error processing subscription data for channel ${channel?.id}:`,\n error,\n );\n return prev;\n }\n },\n onError: (error) => {\n console.error(`Thread subscription error for channel ${channel?.id}:`, error);\n },\n })\n }\n subscribeToChatMessages={() =>\n subscribeToMore({\n document: CHAT_MESSAGE_ADDED,\n variables: {\n channelId: channel?.id?.toString(),\n postParentId: postParentId || servicePostParentId || null,\n },\n updateQuery: (prev, { subscriptionData }: any) => {\n if (!subscriptionData?.data) {\n console.log(`No chat message subscription data for channel ${channel?.id}`);\n return prev;\n }\n\n try {\n const newMessage = subscriptionData?.data?.chatMessageAdded;\n\n if (!newMessage) {\n console.log(\n `Missing chat message data in subscription for channel ${channel?.id}`,\n );\n return prev;\n }\n\n console.log('New chat message subscription update:', {\n channelId: channel?.id,\n messageId: newMessage?.id,\n message: newMessage?.message?.substring(0, 20) + '...',\n });\n\n // Find the thread this message belongs to\n const prevThreads = prev?.threadMessages?.data || [];\n const threadIndex = prevThreads.findIndex((t: any) => {\n // Check if this message belongs to this thread\n if (newMessage.parentId && t.post?.id === newMessage.parentId) {\n return true;\n }\n // Check replies\n if (t.replies && t.replies.some((r: any) => r.id === newMessage.parentId)) {\n return true;\n }\n return false;\n });\n\n if (threadIndex === -1) {\n console.log(\n `Cannot find thread for chat message in channel ${channel?.id}`,\n );\n\n // Even if we can't find the thread, update the UI with the new message\n if (isMountedRef.current) {\n safeSend({\n type: Actions.UPDATE_THREAD_MESSAGES,\n data: {\n directLastMessage: newMessage,\n },\n });\n }\n\n return prev;\n }\n\n // Update the thread with the new message\n const updatedThreads = [...prevThreads];\n const thread = { ...updatedThreads[threadIndex] };\n\n // Add message to replies\n thread.replies = [...(thread.replies || []), newMessage];\n\n // Fix for arithmetic operation type error\n const currentReplyCount =\n typeof thread.replyCount === 'number' ? thread.replyCount : 0;\n thread.replyCount = currentReplyCount + 1;\n\n thread.lastReplyAt = newMessage.createdAt;\n thread.updatedAt = newMessage.createdAt;\n\n updatedThreads[threadIndex] = thread;\n\n // Use the safe state update function\n if (isMountedRef.current) {\n safeSend({\n type: Actions.UPDATE_THREAD_MESSAGES,\n data: {\n threadMessages: updatedThreads,\n directLastMessage: newMessage,\n },\n });\n }\n\n return {\n ...prev,\n threadMessages: {\n ...prev?.threadMessages,\n data: updatedThreads,\n },\n };\n } catch (error) {\n console.error(\n `Error processing chat message subscription for channel ${channel?.id}:`,\n error,\n );\n return prev;\n }\n },\n onError: (error) => {\n console.error(`Chat message subscription error for channel ${channel?.id}:`, error);\n },\n })\n }\n />\n </Box>\n </HStack>\n </Pressable>\n );\n};\n\nexport const ServiceDialogsListItem = React.memo(ServiceDialogsListItemComponent);\n"],"names":["React","_a","_b","_c","error","_d","THREAD_CHAT_ADDED","CHAT_MESSAGE_ADDED"],"mappings":"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"}