@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.
- package/CHANGELOG.md +8 -0
- package/lib/screens/inbox/components/DialogsListItem.js +26 -6
- package/lib/screens/inbox/components/DialogsListItem.js.map +1 -1
- package/lib/screens/inbox/components/ServiceDialogsListItem.js +171 -42
- package/lib/screens/inbox/components/ServiceDialogsListItem.js.map +1 -1
- package/lib/screens/inbox/containers/ConversationView.js +116 -51
- package/lib/screens/inbox/containers/ConversationView.js.map +1 -1
- package/lib/screens/inbox/containers/Dialogs.js +168 -56
- package/lib/screens/inbox/containers/Dialogs.js.map +1 -1
- package/package.json +4 -4
- package/src/screens/inbox/components/DialogsListItem.tsx +31 -0
- package/src/screens/inbox/components/ServiceDialogsListItem.tsx +300 -113
- package/src/screens/inbox/containers/ConversationView.tsx +146 -63
- package/src/screens/inbox/containers/Dialogs.tsx +228 -57
|
@@ -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
|
-
|
|
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 (
|
|
214
|
-
|
|
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
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
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
|
|
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
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
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
|
-
|
|
480
|
-
|
|
481
|
-
|
|
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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"}
|