@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
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,14 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
## [10.0.3-alpha.36](https://github.com/CDEBase/messenger-box/compare/v10.0.3-alpha.35...v10.0.3-alpha.36) (2025-04-23)
|
|
7
|
+
|
|
8
|
+
**Note:** Version bump only for package @messenger-box/platform-mobile
|
|
9
|
+
|
|
10
|
+
## [10.0.3-alpha.34](https://github.com/CDEBase/messenger-box/compare/v10.0.3-alpha.33...v10.0.3-alpha.34) (2025-04-22)
|
|
11
|
+
|
|
12
|
+
**Note:** Version bump only for package @messenger-box/platform-mobile
|
|
13
|
+
|
|
6
14
|
## [10.0.3-alpha.33](https://github.com/CDEBase/messenger-box/compare/v10.0.3-alpha.32...v10.0.3-alpha.33) (2025-04-17)
|
|
7
15
|
|
|
8
16
|
**Note:** Version bump only for package @messenger-box/platform-mobile
|
|
@@ -195,7 +195,7 @@ const DialogsListItemComponent = function DialogsListItem2({
|
|
|
195
195
|
onOpen,
|
|
196
196
|
forceRefresh
|
|
197
197
|
}) {
|
|
198
|
-
var _a, _b, _c, _d, _e;
|
|
198
|
+
var _a, _b, _c, _d, _e, _f;
|
|
199
199
|
const isMountedRef = useRef(true);
|
|
200
200
|
const parentId = null;
|
|
201
201
|
const [state, send] = useSafeMachine();
|
|
@@ -327,7 +327,7 @@ const DialogsListItemComponent = function DialogsListItem2({
|
|
|
327
327
|
type: Actions.START_LOADING
|
|
328
328
|
});
|
|
329
329
|
const fetchFreshData = async () => {
|
|
330
|
-
var _a2, _b2, _c2, _d2, _e2,
|
|
330
|
+
var _a2, _b2, _c2, _d2, _e2, _f2;
|
|
331
331
|
try {
|
|
332
332
|
const options = {
|
|
333
333
|
channelId: (_a2 = channel == null ? void 0 : channel.id) == null ? void 0 : _a2.toString(),
|
|
@@ -336,7 +336,7 @@ const DialogsListItemComponent = function DialogsListItem2({
|
|
|
336
336
|
};
|
|
337
337
|
const result = await refetchMessages(options);
|
|
338
338
|
console.log(`FOCUS EFFECT: Refetched ${((_d2 = (_c2 = (_b2 = result == null ? void 0 : result.data) == null ? void 0 : _b2.messages) == null ? void 0 : _c2.data) == null ? void 0 : _d2.length) || 0} messages for channel ${channel == null ? void 0 : channel.id}`);
|
|
339
|
-
if (((
|
|
339
|
+
if (((_f2 = (_e2 = result == null ? void 0 : result.data) == null ? void 0 : _e2.messages) == null ? void 0 : _f2.data) && isMountedRef.current) {
|
|
340
340
|
const currentMessages = safeContextProperty("messages", []);
|
|
341
341
|
const fetchedMessages = result.data.messages.data;
|
|
342
342
|
console.log("Data comparison:", {
|
|
@@ -471,12 +471,32 @@ const DialogsListItemComponent = function DialogsListItem2({
|
|
|
471
471
|
messagesCount: safeContextProperty("messages", []).length
|
|
472
472
|
});
|
|
473
473
|
}, [channel == null ? void 0 : channel.id, lastMessage, safeContextProperty]);
|
|
474
|
+
const handleChannelMessage = (channel2, newMessage2) => {
|
|
475
|
+
if (state.context.messages.some((msg) => msg.id === newMessage2.id)) {
|
|
476
|
+
console.log("Message already in local state, skipping update:", newMessage2.id);
|
|
477
|
+
return;
|
|
478
|
+
}
|
|
479
|
+
console.log("Handling subscription message update at channel level:", newMessage2.id);
|
|
480
|
+
safeSend({
|
|
481
|
+
type: Actions.UPDATE_MESSAGES,
|
|
482
|
+
data: {
|
|
483
|
+
directLastMessage: newMessage2,
|
|
484
|
+
messages: [...state.context.messages, newMessage2]
|
|
485
|
+
}
|
|
486
|
+
});
|
|
487
|
+
};
|
|
488
|
+
useEffect(() => {
|
|
489
|
+
if ((channel == null ? void 0 : channel.lastMessage) && channel.lastMessage.id) {
|
|
490
|
+
console.log("Channel has lastMessage property:", channel.lastMessage.id);
|
|
491
|
+
handleChannelMessage(channel, channel.lastMessage);
|
|
492
|
+
}
|
|
493
|
+
}, [(_e = channel == null ? void 0 : channel.lastMessage) == null ? void 0 : _e.id]);
|
|
474
494
|
return /* @__PURE__ */ React__default.createElement(Pressable, { onPress: () => onOpen(channel == null ? void 0 : channel.id, title), className: "flex-1 border-gray-200 rounded-md dark:border-gray-600 dark:bg-gray-700", style: {
|
|
475
495
|
borderBottomWidth: 1,
|
|
476
496
|
borderColor: "#e5e7eb",
|
|
477
497
|
marginVertical: 0,
|
|
478
498
|
paddingHorizontal: 10
|
|
479
|
-
} }, /* @__PURE__ */ React__default.createElement(HStack, { space: "md", className: "flex-1 w-[100%] py-3 items-center" }, /* @__PURE__ */ React__default.createElement(Box, { className: "flex-[0.1] items-start pl-3" }, /* @__PURE__ */ React__default.createElement(AvatarGroup, null, channelMembers && (channelMembers == null ? void 0 : channelMembers.length) > 0 && ((
|
|
499
|
+
} }, /* @__PURE__ */ React__default.createElement(HStack, { space: "md", className: "flex-1 w-[100%] py-3 items-center" }, /* @__PURE__ */ React__default.createElement(Box, { className: "flex-[0.1] items-start pl-3" }, /* @__PURE__ */ React__default.createElement(AvatarGroup, null, channelMembers && (channelMembers == null ? void 0 : channelMembers.length) > 0 && ((_f = channelMembers == null ? void 0 : channelMembers.slice(0, 1)) == null ? void 0 : _f.map((ch, i) => {
|
|
480
500
|
var _a2;
|
|
481
501
|
return /* @__PURE__ */ React__default.createElement(Avatar, { key: "dialogs-list-" + i, size: "sm", className: `bg-transparent top-[${i == 1 ? "4" : "0"}] right-[${i == 1 ? "-2" : "0"}] z-[${i == 1 ? 5 : 1}]` }, /* @__PURE__ */ React__default.createElement(AvatarFallbackText, null, startCase((_a2 = ch == null ? void 0 : ch.username) == null ? void 0 : _a2.charAt(0))), (channelMembers == null ? void 0 : channelMembers.length) > 1 && /* @__PURE__ */ React__default.createElement(AvatarBadge, { style: {
|
|
482
502
|
width: "100%",
|
|
@@ -507,7 +527,7 @@ const DialogsListItemComponent = function DialogsListItem2({
|
|
|
507
527
|
updateQuery: (prev, {
|
|
508
528
|
subscriptionData
|
|
509
529
|
}) => {
|
|
510
|
-
var _a3, _b2, _c2, _d2, _e2,
|
|
530
|
+
var _a3, _b2, _c2, _d2, _e2, _f2;
|
|
511
531
|
if (!subscriptionData.data)
|
|
512
532
|
return prev;
|
|
513
533
|
const newMessage2 = (_a3 = subscriptionData == null ? void 0 : subscriptionData.data) == null ? void 0 : _a3.chatMessageAdded;
|
|
@@ -516,7 +536,7 @@ const DialogsListItemComponent = function DialogsListItem2({
|
|
|
516
536
|
messageId: newMessage2.id,
|
|
517
537
|
message: ((_b2 = newMessage2.message) == null ? void 0 : _b2.substring(0, 20)) + "...",
|
|
518
538
|
hasFiles: ((_d2 = (_c2 = newMessage2 == null ? void 0 : newMessage2.files) == null ? void 0 : _c2.data) == null ? void 0 : _d2.length) > 0,
|
|
519
|
-
filesCount: ((
|
|
539
|
+
filesCount: ((_f2 = (_e2 = newMessage2 == null ? void 0 : newMessage2.files) == null ? void 0 : _e2.data) == null ? void 0 : _f2.length) || 0,
|
|
520
540
|
timestamp: newMessage2.createdAt || newMessage2.updatedAt
|
|
521
541
|
});
|
|
522
542
|
if (isMountedRef.current) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DialogsListItem.js","sources":["../../../../src/screens/inbox/components/DialogsListItem.tsx"],"sourcesContent":["import React, { useMemo, useState, useCallback, useRef, useEffect } 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, SortEnum, IUserAccount } from 'common';\nimport {\n useMessagesQuery,\n useOnChatMessageAddedSubscription,\n OnChatMessageAddedDocument as CHAT_MESSAGE_ADDED,\n useUserAccountQuery,\n} from 'common/graphql';\nimport { startCase } from 'lodash-es';\nimport colors from 'tailwindcss/colors';\nimport { dialogsListItemXstate, Actions, BaseState } from './workflow/dialogs-list-item-xstate';\n\nconst createdAtText = (value: string) => {\n if (!value) return '';\n let date = new Date(value);\n if (isToday(date)) return 'Today';\n if (isYesterday(date)) return 'Yesterday';\n return format(new Date(value), '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) => void;\n forceRefresh?: boolean;\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 messages: any[];\n loading: boolean;\n error: string | null;\n title: string;\n channelMembers: any[];\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 messages: [],\n loading: false,\n error: null,\n title: '',\n channelMembers: [],\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 loading: true,\n },\n value: BaseState.FetchingMessages,\n }));\n } else if (event.type === Actions.UPDATE_MESSAGES) {\n setState((prev) => {\n if (event.data?.messages) {\n // Handling bulk messages (initial load)\n const messages = event.data.messages;\n\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 messages: messages,\n lastMessage: event.data.directLastMessage,\n loading: false,\n },\n };\n }\n\n // Otherwise sort messages by date to find the most recent\n const sortedMessages = [...messages].sort(\n (a, b) =>\n new Date(b?.updatedAt || b?.createdAt).getTime() -\n new Date(a?.updatedAt || a?.createdAt).getTime(),\n );\n\n const newLastMessage = sortedMessages.length > 0 ? sortedMessages[0] : null;\n\n // Log the update for debugging\n if (newLastMessage) {\n console.log('Setting last message from bulk update:', {\n id: newLastMessage.id,\n message: newLastMessage.message?.substring(0, 20) + '...',\n date: newLastMessage.updatedAt || newLastMessage.createdAt,\n });\n }\n\n return {\n ...prev,\n context: {\n ...prev.context,\n messages: messages,\n lastMessage: newLastMessage,\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.messages, 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 messages: 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.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 = (messages) => {\n if (!messages || !messages.length) return null;\n\n // Always sort by dates in descending order (newest first)\n const sortedMessages = [...messages].sort((a, b) => {\n const dateA = new Date(a?.updatedAt || a?.createdAt).getTime();\n const dateB = new Date(b?.updatedAt || b?.createdAt).getTime();\n return dateB - dateA; // Newest first\n });\n\n // Return the most recent message\n const latestMsg = sortedMessages[0];\n\n // Debug log to see if we're selecting the right message\n if (latestMsg) {\n console.log('Selected most recent message:', {\n id: latestMsg.id,\n date: latestMsg.updatedAt || latestMsg.createdAt,\n text: latestMsg.message?.substring(0, 20) + '...',\n });\n }\n\n return latestMsg;\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\n// LastMessage component definition\nconst LastMessageComponent = ({ subscribeToNewMessages, title, lastMessage, channelId }) => {\n // Subscribe to new messages when component mounts\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 }, [channelId, subscribeToNewMessages]);\n\n // Debug output for component rendering\n React.useEffect(() => {\n console.log(`LastMessageComponent rendered for channel ${channelId}:`, {\n hasLastMessage: !!lastMessage,\n messageId: lastMessage?.id,\n messageText: lastMessage?.message?.substring(0, 20) + (lastMessage?.message?.length > 20 ? '...' : ''),\n date: lastMessage?.createdAt ? new Date(lastMessage.createdAt).toISOString() : 'none',\n hasFiles: lastMessage?.files?.data?.length > 0,\n });\n }, [lastMessage, channelId]);\n\n const count = 30;\n const channelTitle = title?.slice(0, count) + (title?.length > count ? '...' : '') || '';\n\n // Define message display text\n let displayMessage = 'No messages yet';\n\n if (lastMessage) {\n if (lastMessage.message && lastMessage.message.trim() !== '') {\n // Show text message\n displayMessage = lastMessage.message;\n } else if (lastMessage.files?.data?.length > 0) {\n // Show message with files\n displayMessage = '📎 File attachment';\n } else {\n // Default for empty message\n displayMessage = '(Empty message)';\n }\n }\n\n // Determine the date/time to display\n const displayDate = lastMessage?.createdAt\n ? createdAtText(lastMessage.createdAt)\n : lastMessage?.updatedAt\n ? createdAtText(lastMessage.updatedAt)\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 {channelTitle}\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]}>{displayDate}</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 DialogsListItemComponent: React.FC<IDialogListItemProps> = function DialogsListItem({\n currentUser,\n // users,\n selectedChannelId,\n channel,\n onOpen,\n forceRefresh,\n}) {\n // Create a ref to track if component is mounted\n const isMountedRef = useRef(true);\n\n // Define parentId early to avoid linter errors\n const parentId: any = null;\n\n // Use our safer custom implementation instead of the problematic useMachine\n const [state, send] = useSafeMachine(dialogsListItemXstate);\n\n // Define safe access functions\n const safeContext = useCallback(() => {\n try {\n return state?.context || {};\n } catch (error) {\n console.error('Error accessing state.context:', error);\n return {};\n }\n }, [state]);\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 hooks for fetching messages\n const {\n data: messagesQuery,\n loading: messageLoading,\n refetch: refetchMessages,\n subscribeToMore,\n } = useMessagesQuery({\n variables: {\n channelId: channel?.id?.toString(),\n parentId: parentId,\n limit: 10,\n },\n fetchPolicy: 'cache-and-network', // Use cache first, then network\n refetchWritePolicy: 'overwrite', // Ensure refetches overwrite existing data\n nextFetchPolicy: 'network-only', // Force subsequent fetches to use network\n onCompleted: (data) => {\n console.log(\n `Completed message query for channel ${channel?.id}:`,\n data?.messages?.data?.length ? 'Has messages' : 'No messages',\n );\n },\n onError: (error) => {\n console.error(`Error fetching messages for channel ${channel?.id}:`, error);\n },\n });\n\n const {\n data: newMessage,\n loading: newMsgLoading,\n error: newMsgError,\n }: any = useOnChatMessageAddedSubscription({\n variables: {\n channelId: channel?.id?.toString(),\n },\n });\n\n // Initialize the state machine with context data\n useEffect(() => {\n if (channel?.id) {\n safeSend({\n type: Actions.INITIAL_CONTEXT,\n data: { channelId: channel.id, currentUser },\n });\n }\n\n // Cleanup function\n return () => {\n isMountedRef.current = false;\n };\n }, [channel?.id, currentUser, safeSend]);\n\n // Function to force refresh the component state\n const refreshDialogState = useCallback(() => {\n if (channel?.id && isMountedRef.current) {\n console.log('Forcing dialog 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 // Set up the options for the query to force network fetch\n const options = {\n channelId: channel?.id?.toString(),\n parentId: parentId,\n limit: 10,\n };\n\n // Refetch messages from server\n refetchMessages(options)\n .then((result) => {\n // Update the state with fresh data\n if (result.data?.messages?.data && isMountedRef.current) {\n console.log(\n `Refreshed ${result.data.messages.data.length} messages for channel ${channel?.id}`,\n );\n\n // Get the most recent message for debug comparison\n const sortedMessages = [...result.data.messages.data].sort(\n (a, b) =>\n new Date(b?.updatedAt || b?.createdAt).getTime() -\n new Date(a?.updatedAt || a?.createdAt).getTime(),\n );\n\n const latestMessage = sortedMessages.length > 0 ? sortedMessages[0] : null;\n\n if (latestMessage) {\n console.log('Latest message after refresh:', {\n id: latestMessage.id,\n message: latestMessage.message?.substring(0, 20) + '...',\n date: latestMessage.createdAt || latestMessage.updatedAt,\n });\n }\n\n safeSend({\n type: Actions.UPDATE_MESSAGES,\n data: { messages: result.data.messages.data },\n });\n }\n safeSend({ type: Actions.STOP_LOADING });\n })\n .catch((err) => {\n console.error('Error refreshing dialog state:', err);\n safeSend({ type: Actions.STOP_LOADING });\n });\n }\n }, [channel?.id, refetchMessages, safeSend, isMountedRef, parentId]);\n\n // Track if this is the first time the component renders\n const firstRenderRef = useRef(true);\n\n // Track the last time we refreshed to prevent too frequent refreshes\n const lastRefreshRef = useRef(0);\n\n // Fix messages not refreshing when coming back from detail screen\n useFocusEffect(\n React.useCallback(() => {\n if (!channel?.id) return;\n\n console.log('DialogsListItem focused for channel:', channel?.id);\n\n // Skip refresh on first render as it's handled by other effects\n if (firstRenderRef.current) {\n console.log('Skipping initial focus refresh for channel:', channel?.id);\n firstRenderRef.current = false;\n return;\n }\n\n // Always force a refetch when coming back to this screen\n console.log('FOCUS EFFECT: Force refetching messages on navigation back 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 // Set up the options for the query to force network fetch\n const options = {\n channelId: channel?.id?.toString(),\n parentId: parentId,\n limit: 10,\n };\n\n // Force a network-only fetch by using refetch without extra options\n // Apollo will use the parent query's fetch policy which we've set to network-only\n const result = await refetchMessages(options);\n\n // Log the refreshed data\n console.log(\n `FOCUS EFFECT: Refetched ${result?.data?.messages?.data?.length || 0} messages for channel ${\n channel?.id\n }`,\n );\n\n if (result?.data?.messages?.data && isMountedRef.current) {\n // Compare with current state to check if we're getting fresh data\n const currentMessages = safeContextProperty('messages', []);\n const fetchedMessages = result.data.messages.data;\n\n // Log comparison to see if we got new data\n console.log('Data comparison:', {\n currentCount: currentMessages.length,\n fetchedCount: fetchedMessages.length,\n isDifferent: JSON.stringify(currentMessages) !== JSON.stringify(fetchedMessages),\n });\n\n // Update state with fresh data\n safeSend({\n type: Actions.UPDATE_MESSAGES,\n data: { messages: fetchedMessages },\n });\n }\n } catch (error) {\n console.error('Error refetching 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 }, [channel?.id, refetchMessages, safeSend, parentId, isMountedRef]),\n );\n\n // Update messages in state when query data is available\n React.useEffect(() => {\n if (messagesQuery?.messages?.data && isMountedRef.current) {\n const messages = messagesQuery.messages.data;\n\n // Count messages with files\n const messagesWithFiles = messages.filter((msg) => msg?.files?.data?.length > 0);\n\n console.log(\n `Updating messages for channel ${channel?.id}, count:`,\n messages.length,\n `(${messagesWithFiles.length} with files)`,\n );\n\n if (messages.length > 0) {\n // Log the first message for debugging\n console.log('First message sample:', {\n id: messages[0].id,\n message: messages[0].message?.substring(0, 20) + '...',\n createdAt: messages[0].createdAt,\n hasFiles: messages[0]?.files?.data?.length > 0,\n });\n }\n\n safeSend({\n type: Actions.UPDATE_MESSAGES,\n data: { messages },\n });\n }\n }, [messagesQuery, safeSend, channel?.id, isMountedRef]);\n\n // Force a refresh on initial mount to ensure we have fresh data\n useEffect(() => {\n if (channel?.id && isMountedRef.current) {\n const timer = setTimeout(() => {\n if (isMountedRef.current) {\n console.log('Initial data refresh for channel:', channel.id);\n refreshDialogState();\n }\n }, 100);\n\n return () => {\n clearTimeout(timer);\n };\n }\n }, [channel?.id, refreshDialogState, isMountedRef]);\n\n // Use forceRefresh prop to trigger immediate refresh\n useEffect(() => {\n if (forceRefresh && channel?.id && isMountedRef.current) {\n console.log(`Force refreshing messages for channel ${channel?.id} due to forceRefresh prop`);\n\n // Set a very slight delay to ensure component is fully mounted\n const timer = setTimeout(() => {\n if (isMountedRef.current && refetchMessages) {\n // Force a full network-only fetch\n refetchMessages({\n channelId: channel?.id?.toString(),\n parentId: parentId,\n limit: 10,\n })\n .then((result) => {\n if (result?.data?.messages?.data && isMountedRef.current) {\n console.log(\n `Force refresh completed for channel ${channel?.id} with ${result.data.messages.data.length} messages`,\n );\n\n // Update messages in state\n safeSend({\n type: Actions.UPDATE_MESSAGES,\n data: { messages: result.data.messages.data },\n });\n }\n })\n .catch((error) => {\n console.error(`Error force refreshing channel ${channel?.id}:`, error);\n });\n }\n }, 50);\n\n return () => clearTimeout(timer);\n }\n }, [channel?.id, forceRefresh, isMountedRef, refetchMessages, safeSend, parentId]);\n\n const channelMembers = useMemo(\n () =>\n channel?.members\n ?.filter((ch: any) => ch?.user?.id != currentUser?.id && ch?.user?.__typename == 'UserAccount')\n ?.map((m: any) => m?.user) ?? null,\n [currentUser, channel],\n );\n\n // Set title in state when channel members change\n useEffect(() => {\n if (channelMembers && isMountedRef.current) {\n const titleString =\n channelMembers\n ?.map((u: any) => u?.givenName + ' ' + (u?.familyName ?? ''))\n ?.filter((mu: any) => mu)\n ?.join(', ') ?? '';\n\n safeSend({\n type: Actions.SET_TITLE,\n data: { title: titleString },\n });\n }\n }, [channelMembers, safeSend, isMountedRef]);\n\n // Compute title with proper truncation\n const title = useMemo(() => {\n const titleString = safeContextProperty('title', '');\n const length = 30;\n return titleString.length > length ? titleString.substring(0, length - 3) + '...' : titleString;\n }, [safeContextProperty]);\n\n // Get the last message directly from state context instead of computing it\n const lastMessage = useMemo(() => {\n const message = safeContextProperty('lastMessage', null);\n // Add dependency on the messages array length to ensure re-render on new messages\n return message;\n }, [safeContextProperty, state.context?.messages?.length]);\n\n // Debug output for the component\n useEffect(() => {\n console.log(`DialogsListItem for channel ${channel?.id}: `, {\n hasLastMessage: !!lastMessage,\n message: lastMessage?.message?.substring(0, 20) + (lastMessage?.message?.length > 20 ? '...' : ''),\n messagesCount: safeContextProperty('messages', []).length,\n });\n }, [channel?.id, lastMessage, safeContextProperty]);\n\n return (\n <Pressable\n onPress={() => onOpen(channel?.id, title)}\n className=\"flex-1 border-gray-200 rounded-md dark:border-gray-600 dark:bg-gray-700\"\n style={{ borderBottomWidth: 1, borderColor: '#e5e7eb', marginVertical: 0, paddingHorizontal: 10 }}\n >\n <HStack space={'md'} className=\"flex-1 w-[100%] py-3 items-center\">\n <Box className=\"flex-[0.1] items-start pl-3\">\n <AvatarGroup>\n {channelMembers &&\n channelMembers?.length > 0 &&\n channelMembers?.slice(0, 1)?.map((ch: any, i: Number) => (\n <Avatar\n key={'dialogs-list-' + i}\n size={'sm'}\n className={`bg-transparent top-[${i == 1 ? '4' : '0'}] right-[${\n i == 1 ? '-2' : '0'\n }] z-[${i == 1 ? 5 : 1}]`}\n >\n <AvatarFallbackText>{startCase(ch?.username?.charAt(0))}</AvatarFallbackText>\n\n {channelMembers?.length > 1 && (\n <AvatarBadge\n style={{\n width: '100%',\n height: '100%',\n backgroundColor: '#e5e7eb',\n borderRadius: 5,\n }}\n className=\"items-center justify-center bg-gray-200 rounded-md\"\n >\n <Text style={{ fontSize: 12, fontWeight: 'bold', color: '#000' }}>\n {channelMembers?.length}\n </Text>\n </AvatarBadge>\n )}\n {channelMembers?.length == 1 && (\n <>\n <AvatarImage\n alt=\"user image\"\n style={{ borderRadius: 6, borderWidth: 2, borderColor: '#fff' }}\n source={{\n uri: ch?.picture,\n }}\n />\n <AvatarBadge style={{ width: 10, height: 10 }} />\n </>\n )}\n </Avatar>\n ))}\n </AvatarGroup>\n </Box>\n <Box className=\"flex-1\">\n <LastMessageComponent\n key={`last-msg-${lastMessage?.id || 'none'}-${safeContextProperty('messages', []).length}`}\n title={title}\n lastMessage={lastMessage}\n channelId={channel?.id}\n subscribeToNewMessages={() =>\n subscribeToMore({\n document: CHAT_MESSAGE_ADDED,\n variables: {\n channelId: channel.id?.toString(),\n },\n updateQuery: (prev, { subscriptionData }: any) => {\n if (!subscriptionData.data) return prev;\n const newMessage: any = subscriptionData?.data?.chatMessageAdded;\n\n // Add debug info for the new message\n console.log('New message added (subscription):', {\n channelId: channel.id,\n messageId: newMessage.id,\n message: newMessage.message?.substring(0, 20) + '...',\n hasFiles: newMessage?.files?.data?.length > 0,\n filesCount: newMessage?.files?.data?.length || 0,\n timestamp: newMessage.createdAt || newMessage.updatedAt,\n });\n\n // Force message update (double approach to ensure it updates)\n if (isMountedRef.current) {\n // Update through state machine directly\n console.log('Updating messages with new subscription message');\n\n // First, update the messages array with the new message\n const currentMessages = safeContextProperty('messages', []);\n const updatedMessages = [...currentMessages, newMessage];\n\n // Then directly set the new message as the last message\n // This ensures the UI updates immediately\n safeSend({\n type: Actions.UPDATE_MESSAGES,\n data: {\n messages: updatedMessages,\n // Directly set this message as the last message\n directLastMessage: newMessage,\n },\n });\n\n // No need for additional refresh - the direct update is enough\n // This prevents unnecessary network requests and UI flicker\n }\n\n // Update the Apollo cache\n const existingMessages: any = prev?.messages;\n const previousData = existingMessages?.data\n ? [...existingMessages.data, newMessage]\n : [];\n const totalMsgCount = existingMessages?.totalCount + 1;\n const merged = {\n ...prev,\n messages: {\n ...existingMessages,\n data: previousData,\n totalCount: totalMsgCount,\n },\n };\n return merged;\n },\n })\n }\n />\n </Box>\n </HStack>\n </Pressable>\n );\n};\n\nexport const DialogsListItem = React.memo(DialogsListItemComponent);\n"],"names":["React","_a","_b","DialogsListItem","_c","_d","_e","CHAT_MESSAGE_ADDED","newMessage"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DialogsListItem.js","sources":["../../../../src/screens/inbox/components/DialogsListItem.tsx"],"sourcesContent":["import React, { useMemo, useState, useCallback, useRef, useEffect } 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, SortEnum, IUserAccount } from 'common';\nimport {\n useMessagesQuery,\n useOnChatMessageAddedSubscription,\n OnChatMessageAddedDocument as CHAT_MESSAGE_ADDED,\n useUserAccountQuery,\n} from 'common/graphql';\nimport { startCase } from 'lodash-es';\nimport colors from 'tailwindcss/colors';\nimport { dialogsListItemXstate, Actions, BaseState } from './workflow/dialogs-list-item-xstate';\n\nconst createdAtText = (value: string) => {\n if (!value) return '';\n let date = new Date(value);\n if (isToday(date)) return 'Today';\n if (isYesterday(date)) return 'Yesterday';\n return format(new Date(value), '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) => void;\n forceRefresh?: boolean;\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 messages: any[];\n loading: boolean;\n error: string | null;\n title: string;\n channelMembers: any[];\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 messages: [],\n loading: false,\n error: null,\n title: '',\n channelMembers: [],\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 loading: true,\n },\n value: BaseState.FetchingMessages,\n }));\n } else if (event.type === Actions.UPDATE_MESSAGES) {\n setState((prev) => {\n if (event.data?.messages) {\n // Handling bulk messages (initial load)\n const messages = event.data.messages;\n\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 messages: messages,\n lastMessage: event.data.directLastMessage,\n loading: false,\n },\n };\n }\n\n // Otherwise sort messages by date to find the most recent\n const sortedMessages = [...messages].sort(\n (a, b) =>\n new Date(b?.updatedAt || b?.createdAt).getTime() -\n new Date(a?.updatedAt || a?.createdAt).getTime(),\n );\n\n const newLastMessage = sortedMessages.length > 0 ? sortedMessages[0] : null;\n\n // Log the update for debugging\n if (newLastMessage) {\n console.log('Setting last message from bulk update:', {\n id: newLastMessage.id,\n message: newLastMessage.message?.substring(0, 20) + '...',\n date: newLastMessage.updatedAt || newLastMessage.createdAt,\n });\n }\n\n return {\n ...prev,\n context: {\n ...prev.context,\n messages: messages,\n lastMessage: newLastMessage,\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.messages, 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 messages: 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.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 = (messages) => {\n if (!messages || !messages.length) return null;\n\n // Always sort by dates in descending order (newest first)\n const sortedMessages = [...messages].sort((a, b) => {\n const dateA = new Date(a?.updatedAt || a?.createdAt).getTime();\n const dateB = new Date(b?.updatedAt || b?.createdAt).getTime();\n return dateB - dateA; // Newest first\n });\n\n // Return the most recent message\n const latestMsg = sortedMessages[0];\n\n // Debug log to see if we're selecting the right message\n if (latestMsg) {\n console.log('Selected most recent message:', {\n id: latestMsg.id,\n date: latestMsg.updatedAt || latestMsg.createdAt,\n text: latestMsg.message?.substring(0, 20) + '...',\n });\n }\n\n return latestMsg;\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\n// LastMessage component definition\nconst LastMessageComponent = ({ subscribeToNewMessages, title, lastMessage, channelId }) => {\n // Subscribe to new messages when component mounts\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 }, [channelId, subscribeToNewMessages]);\n\n // Debug output for component rendering\n React.useEffect(() => {\n console.log(`LastMessageComponent rendered for channel ${channelId}:`, {\n hasLastMessage: !!lastMessage,\n messageId: lastMessage?.id,\n messageText: lastMessage?.message?.substring(0, 20) + (lastMessage?.message?.length > 20 ? '...' : ''),\n date: lastMessage?.createdAt ? new Date(lastMessage.createdAt).toISOString() : 'none',\n hasFiles: lastMessage?.files?.data?.length > 0,\n });\n }, [lastMessage, channelId]);\n\n const count = 30;\n const channelTitle = title?.slice(0, count) + (title?.length > count ? '...' : '') || '';\n\n // Define message display text\n let displayMessage = 'No messages yet';\n\n if (lastMessage) {\n if (lastMessage.message && lastMessage.message.trim() !== '') {\n // Show text message\n displayMessage = lastMessage.message;\n } else if (lastMessage.files?.data?.length > 0) {\n // Show message with files\n displayMessage = '📎 File attachment';\n } else {\n // Default for empty message\n displayMessage = '(Empty message)';\n }\n }\n\n // Determine the date/time to display\n const displayDate = lastMessage?.createdAt\n ? createdAtText(lastMessage.createdAt)\n : lastMessage?.updatedAt\n ? createdAtText(lastMessage.updatedAt)\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 {channelTitle}\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]}>{displayDate}</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 DialogsListItemComponent: React.FC<IDialogListItemProps> = function DialogsListItem({\n currentUser,\n // users,\n selectedChannelId,\n channel,\n onOpen,\n forceRefresh,\n}) {\n // Create a ref to track if component is mounted\n const isMountedRef = useRef(true);\n\n // Define parentId early to avoid linter errors\n const parentId: any = null;\n\n // Use our safer custom implementation instead of the problematic useMachine\n const [state, send] = useSafeMachine(dialogsListItemXstate);\n\n // Define safe access functions\n const safeContext = useCallback(() => {\n try {\n return state?.context || {};\n } catch (error) {\n console.error('Error accessing state.context:', error);\n return {};\n }\n }, [state]);\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 hooks for fetching messages\n const {\n data: messagesQuery,\n loading: messageLoading,\n refetch: refetchMessages,\n subscribeToMore,\n } = useMessagesQuery({\n variables: {\n channelId: channel?.id?.toString(),\n parentId: parentId,\n limit: 10,\n },\n fetchPolicy: 'cache-and-network', // Use cache first, then network\n refetchWritePolicy: 'overwrite', // Ensure refetches overwrite existing data\n nextFetchPolicy: 'network-only', // Force subsequent fetches to use network\n onCompleted: (data) => {\n console.log(\n `Completed message query for channel ${channel?.id}:`,\n data?.messages?.data?.length ? 'Has messages' : 'No messages',\n );\n },\n onError: (error) => {\n console.error(`Error fetching messages for channel ${channel?.id}:`, error);\n },\n });\n\n const {\n data: newMessage,\n loading: newMsgLoading,\n error: newMsgError,\n }: any = useOnChatMessageAddedSubscription({\n variables: {\n channelId: channel?.id?.toString(),\n },\n });\n\n // Initialize the state machine with context data\n useEffect(() => {\n if (channel?.id) {\n safeSend({\n type: Actions.INITIAL_CONTEXT,\n data: { channelId: channel.id, currentUser },\n });\n }\n\n // Cleanup function\n return () => {\n isMountedRef.current = false;\n };\n }, [channel?.id, currentUser, safeSend]);\n\n // Function to force refresh the component state\n const refreshDialogState = useCallback(() => {\n if (channel?.id && isMountedRef.current) {\n console.log('Forcing dialog 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 // Set up the options for the query to force network fetch\n const options = {\n channelId: channel?.id?.toString(),\n parentId: parentId,\n limit: 10,\n };\n\n // Refetch messages from server\n refetchMessages(options)\n .then((result) => {\n // Update the state with fresh data\n if (result.data?.messages?.data && isMountedRef.current) {\n console.log(\n `Refreshed ${result.data.messages.data.length} messages for channel ${channel?.id}`,\n );\n\n // Get the most recent message for debug comparison\n const sortedMessages = [...result.data.messages.data].sort(\n (a, b) =>\n new Date(b?.updatedAt || b?.createdAt).getTime() -\n new Date(a?.updatedAt || a?.createdAt).getTime(),\n );\n\n const latestMessage = sortedMessages.length > 0 ? sortedMessages[0] : null;\n\n if (latestMessage) {\n console.log('Latest message after refresh:', {\n id: latestMessage.id,\n message: latestMessage.message?.substring(0, 20) + '...',\n date: latestMessage.createdAt || latestMessage.updatedAt,\n });\n }\n\n safeSend({\n type: Actions.UPDATE_MESSAGES,\n data: { messages: result.data.messages.data },\n });\n }\n safeSend({ type: Actions.STOP_LOADING });\n })\n .catch((err) => {\n console.error('Error refreshing dialog state:', err);\n safeSend({ type: Actions.STOP_LOADING });\n });\n }\n }, [channel?.id, refetchMessages, safeSend, isMountedRef, parentId]);\n\n // Track if this is the first time the component renders\n const firstRenderRef = useRef(true);\n\n // Track the last time we refreshed to prevent too frequent refreshes\n const lastRefreshRef = useRef(0);\n\n // Fix messages not refreshing when coming back from detail screen\n useFocusEffect(\n React.useCallback(() => {\n if (!channel?.id) return;\n\n console.log('DialogsListItem focused for channel:', channel?.id);\n\n // Skip refresh on first render as it's handled by other effects\n if (firstRenderRef.current) {\n console.log('Skipping initial focus refresh for channel:', channel?.id);\n firstRenderRef.current = false;\n return;\n }\n\n // Always force a refetch when coming back to this screen\n console.log('FOCUS EFFECT: Force refetching messages on navigation back 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 // Set up the options for the query to force network fetch\n const options = {\n channelId: channel?.id?.toString(),\n parentId: parentId,\n limit: 10,\n };\n\n // Force a network-only fetch by using refetch without extra options\n // Apollo will use the parent query's fetch policy which we've set to network-only\n const result = await refetchMessages(options);\n\n // Log the refreshed data\n console.log(\n `FOCUS EFFECT: Refetched ${result?.data?.messages?.data?.length || 0} messages for channel ${\n channel?.id\n }`,\n );\n\n if (result?.data?.messages?.data && isMountedRef.current) {\n // Compare with current state to check if we're getting fresh data\n const currentMessages = safeContextProperty('messages', []);\n const fetchedMessages = result.data.messages.data;\n\n // Log comparison to see if we got new data\n console.log('Data comparison:', {\n currentCount: currentMessages.length,\n fetchedCount: fetchedMessages.length,\n isDifferent: JSON.stringify(currentMessages) !== JSON.stringify(fetchedMessages),\n });\n\n // Update state with fresh data\n safeSend({\n type: Actions.UPDATE_MESSAGES,\n data: { messages: fetchedMessages },\n });\n }\n } catch (error) {\n console.error('Error refetching 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 }, [channel?.id, refetchMessages, safeSend, parentId, isMountedRef]),\n );\n\n // Update messages in state when query data is available\n React.useEffect(() => {\n if (messagesQuery?.messages?.data && isMountedRef.current) {\n const messages = messagesQuery.messages.data;\n\n // Count messages with files\n const messagesWithFiles = messages.filter((msg) => msg?.files?.data?.length > 0);\n\n console.log(\n `Updating messages for channel ${channel?.id}, count:`,\n messages.length,\n `(${messagesWithFiles.length} with files)`,\n );\n\n if (messages.length > 0) {\n // Log the first message for debugging\n console.log('First message sample:', {\n id: messages[0].id,\n message: messages[0].message?.substring(0, 20) + '...',\n createdAt: messages[0].createdAt,\n hasFiles: messages[0]?.files?.data?.length > 0,\n });\n }\n\n safeSend({\n type: Actions.UPDATE_MESSAGES,\n data: { messages },\n });\n }\n }, [messagesQuery, safeSend, channel?.id, isMountedRef]);\n\n // Force a refresh on initial mount to ensure we have fresh data\n useEffect(() => {\n if (channel?.id && isMountedRef.current) {\n const timer = setTimeout(() => {\n if (isMountedRef.current) {\n console.log('Initial data refresh for channel:', channel.id);\n refreshDialogState();\n }\n }, 100);\n\n return () => {\n clearTimeout(timer);\n };\n }\n }, [channel?.id, refreshDialogState, isMountedRef]);\n\n // Use forceRefresh prop to trigger immediate refresh\n useEffect(() => {\n if (forceRefresh && channel?.id && isMountedRef.current) {\n console.log(`Force refreshing messages for channel ${channel?.id} due to forceRefresh prop`);\n\n // Set a very slight delay to ensure component is fully mounted\n const timer = setTimeout(() => {\n if (isMountedRef.current && refetchMessages) {\n // Force a full network-only fetch\n refetchMessages({\n channelId: channel?.id?.toString(),\n parentId: parentId,\n limit: 10,\n })\n .then((result) => {\n if (result?.data?.messages?.data && isMountedRef.current) {\n console.log(\n `Force refresh completed for channel ${channel?.id} with ${result.data.messages.data.length} messages`,\n );\n\n // Update messages in state\n safeSend({\n type: Actions.UPDATE_MESSAGES,\n data: { messages: result.data.messages.data },\n });\n }\n })\n .catch((error) => {\n console.error(`Error force refreshing channel ${channel?.id}:`, error);\n });\n }\n }, 50);\n\n return () => clearTimeout(timer);\n }\n }, [channel?.id, forceRefresh, isMountedRef, refetchMessages, safeSend, parentId]);\n\n const channelMembers = useMemo(\n () =>\n channel?.members\n ?.filter((ch: any) => ch?.user?.id != currentUser?.id && ch?.user?.__typename == 'UserAccount')\n ?.map((m: any) => m?.user) ?? null,\n [currentUser, channel],\n );\n\n // Set title in state when channel members change\n useEffect(() => {\n if (channelMembers && isMountedRef.current) {\n const titleString =\n channelMembers\n ?.map((u: any) => u?.givenName + ' ' + (u?.familyName ?? ''))\n ?.filter((mu: any) => mu)\n ?.join(', ') ?? '';\n\n safeSend({\n type: Actions.SET_TITLE,\n data: { title: titleString },\n });\n }\n }, [channelMembers, safeSend, isMountedRef]);\n\n // Compute title with proper truncation\n const title = useMemo(() => {\n const titleString = safeContextProperty('title', '');\n const length = 30;\n return titleString.length > length ? titleString.substring(0, length - 3) + '...' : titleString;\n }, [safeContextProperty]);\n\n // Get the last message directly from state context instead of computing it\n const lastMessage = useMemo(() => {\n const message = safeContextProperty('lastMessage', null);\n // Add dependency on the messages array length to ensure re-render on new messages\n return message;\n }, [safeContextProperty, state.context?.messages?.length]);\n\n // Debug output for the component\n useEffect(() => {\n console.log(`DialogsListItem for channel ${channel?.id}: `, {\n hasLastMessage: !!lastMessage,\n message: lastMessage?.message?.substring(0, 20) + (lastMessage?.message?.length > 20 ? '...' : ''),\n messagesCount: safeContextProperty('messages', []).length,\n });\n }, [channel?.id, lastMessage, safeContextProperty]);\n\n // Optimize update logic for messages from channel-level subscription\n const handleChannelMessage = (channel, newMessage) => {\n // Check if we already have this message\n if (state.context.messages.some((msg) => msg.id === newMessage.id)) {\n console.log('Message already in local state, skipping update:', newMessage.id);\n return;\n }\n\n console.log('Handling subscription message update at channel level:', newMessage.id);\n\n // Always update with latest message to ensure dialog list stays current\n safeSend({\n type: Actions.UPDATE_MESSAGES,\n data: {\n // Use the directLastMessage option to force immediate UI update\n directLastMessage: newMessage,\n // Also update the messages array\n messages: [...state.context.messages, newMessage],\n },\n });\n };\n\n // Create listener for channel property updates\n useEffect(() => {\n // Check if channel has a lastMessage property (set by parent Dialogs component)\n if (channel?.lastMessage && channel.lastMessage.id) {\n console.log('Channel has lastMessage property:', channel.lastMessage.id);\n handleChannelMessage(channel, channel.lastMessage);\n }\n }, [channel?.lastMessage?.id]);\n\n return (\n <Pressable\n onPress={() => onOpen(channel?.id, title)}\n className=\"flex-1 border-gray-200 rounded-md dark:border-gray-600 dark:bg-gray-700\"\n style={{ borderBottomWidth: 1, borderColor: '#e5e7eb', marginVertical: 0, paddingHorizontal: 10 }}\n >\n <HStack space={'md'} className=\"flex-1 w-[100%] py-3 items-center\">\n <Box className=\"flex-[0.1] items-start pl-3\">\n <AvatarGroup>\n {channelMembers &&\n channelMembers?.length > 0 &&\n channelMembers?.slice(0, 1)?.map((ch: any, i: Number) => (\n <Avatar\n key={'dialogs-list-' + i}\n size={'sm'}\n className={`bg-transparent top-[${i == 1 ? '4' : '0'}] right-[${\n i == 1 ? '-2' : '0'\n }] z-[${i == 1 ? 5 : 1}]`}\n >\n <AvatarFallbackText>{startCase(ch?.username?.charAt(0))}</AvatarFallbackText>\n\n {channelMembers?.length > 1 && (\n <AvatarBadge\n style={{\n width: '100%',\n height: '100%',\n backgroundColor: '#e5e7eb',\n borderRadius: 5,\n }}\n className=\"items-center justify-center bg-gray-200 rounded-md\"\n >\n <Text style={{ fontSize: 12, fontWeight: 'bold', color: '#000' }}>\n {channelMembers?.length}\n </Text>\n </AvatarBadge>\n )}\n {channelMembers?.length == 1 && (\n <>\n <AvatarImage\n alt=\"user image\"\n style={{ borderRadius: 6, borderWidth: 2, borderColor: '#fff' }}\n source={{\n uri: ch?.picture,\n }}\n />\n <AvatarBadge style={{ width: 10, height: 10 }} />\n </>\n )}\n </Avatar>\n ))}\n </AvatarGroup>\n </Box>\n <Box className=\"flex-1\">\n <LastMessageComponent\n key={`last-msg-${lastMessage?.id || 'none'}-${safeContextProperty('messages', []).length}`}\n title={title}\n lastMessage={lastMessage}\n channelId={channel?.id}\n subscribeToNewMessages={() =>\n subscribeToMore({\n document: CHAT_MESSAGE_ADDED,\n variables: {\n channelId: channel.id?.toString(),\n },\n updateQuery: (prev, { subscriptionData }: any) => {\n if (!subscriptionData.data) return prev;\n const newMessage: any = subscriptionData?.data?.chatMessageAdded;\n\n // Add debug info for the new message\n console.log('New message added (subscription):', {\n channelId: channel.id,\n messageId: newMessage.id,\n message: newMessage.message?.substring(0, 20) + '...',\n hasFiles: newMessage?.files?.data?.length > 0,\n filesCount: newMessage?.files?.data?.length || 0,\n timestamp: newMessage.createdAt || newMessage.updatedAt,\n });\n\n // Force message update (double approach to ensure it updates)\n if (isMountedRef.current) {\n // Update through state machine directly\n console.log('Updating messages with new subscription message');\n\n // First, update the messages array with the new message\n const currentMessages = safeContextProperty('messages', []);\n const updatedMessages = [...currentMessages, newMessage];\n\n // Then directly set the new message as the last message\n // This ensures the UI updates immediately\n safeSend({\n type: Actions.UPDATE_MESSAGES,\n data: {\n messages: updatedMessages,\n // Directly set this message as the last message\n directLastMessage: newMessage,\n },\n });\n\n // No need for additional refresh - the direct update is enough\n // This prevents unnecessary network requests and UI flicker\n }\n\n // Update the Apollo cache\n const existingMessages: any = prev?.messages;\n const previousData = existingMessages?.data\n ? [...existingMessages.data, newMessage]\n : [];\n const totalMsgCount = existingMessages?.totalCount + 1;\n const merged = {\n ...prev,\n messages: {\n ...existingMessages,\n data: previousData,\n totalCount: totalMsgCount,\n },\n };\n return merged;\n },\n })\n }\n />\n </Box>\n </HStack>\n </Pressable>\n );\n};\n\nexport const DialogsListItem = React.memo(DialogsListItemComponent);\n"],"names":["React","_a","_b","DialogsListItem","_c","_d","_e","_f","channel","newMessage","CHAT_MESSAGE_ADDED"],"mappings":"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"}
|