@messenger-box/platform-mobile 10.0.3-alpha.37 → 10.0.3-alpha.40

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 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.40](https://github.com/cdmbase/messenger-box/compare/v10.0.3-alpha.39...v10.0.3-alpha.40) (2025-05-14)
7
+
8
+ **Note:** Version bump only for package @messenger-box/platform-mobile
9
+
10
+ ## [10.0.3-alpha.38](https://github.com/CDEBase/messenger-box/compare/v10.0.3-alpha.37...v10.0.3-alpha.38) (2025-04-25)
11
+
12
+ **Note:** Version bump only for package @messenger-box/platform-mobile
13
+
6
14
  ## [10.0.3-alpha.37](https://github.com/CDEBase/messenger-box/compare/v10.0.3-alpha.36...v10.0.3-alpha.37) (2025-04-25)
7
15
 
8
16
  **Note:** Version bump only for package @messenger-box/platform-mobile
@@ -42,16 +42,6 @@ const LastMessageComponent = ({
42
42
  }
43
43
  };
44
44
  }, [channelId, subscribeToNewMessages]);
45
- React__default.useEffect(() => {
46
- var _a2, _b2, _c, _d;
47
- console.log(`LastMessageComponent rendered for channel ${channelId}:`, {
48
- hasLastMessage: !!lastMessage,
49
- messageId: lastMessage == null ? void 0 : lastMessage.id,
50
- messageText: ((_a2 = lastMessage == null ? void 0 : lastMessage.message) == null ? void 0 : _a2.substring(0, 20)) + (((_b2 = lastMessage == null ? void 0 : lastMessage.message) == null ? void 0 : _b2.length) > 20 ? "..." : ""),
51
- date: (lastMessage == null ? void 0 : lastMessage.createdAt) ? new Date(lastMessage.createdAt).toISOString() : "none",
52
- hasFiles: ((_d = (_c = lastMessage == null ? void 0 : lastMessage.files) == null ? void 0 : _c.data) == null ? void 0 : _d.length) > 0
53
- });
54
- }, [lastMessage, channelId]);
55
45
  const count = 30;
56
46
  const channelTitle = (title == null ? void 0 : title.slice(0, count)) + ((title == null ? void 0 : title.length) > count ? "..." : "") || "";
57
47
  let displayMessage = "No messages yet";
@@ -337,18 +327,10 @@ const DialogsListItemComponent = function DialogsListItem2({
337
327
  updateQuery: (prev, {
338
328
  subscriptionData
339
329
  }) => {
340
- var _a3, _b2, _c2, _d2, _e, _f;
330
+ var _a3;
341
331
  if (!subscriptionData.data)
342
332
  return prev;
343
333
  const newMessage2 = (_a3 = subscriptionData == null ? void 0 : subscriptionData.data) == null ? void 0 : _a3.chatMessageAdded;
344
- console.log("New message added (subscription):", {
345
- channelId: channel.id,
346
- messageId: newMessage2.id,
347
- message: ((_b2 = newMessage2.message) == null ? void 0 : _b2.substring(0, 20)) + "...",
348
- hasFiles: ((_d2 = (_c2 = newMessage2 == null ? void 0 : newMessage2.files) == null ? void 0 : _c2.data) == null ? void 0 : _d2.length) > 0,
349
- filesCount: ((_f = (_e = newMessage2 == null ? void 0 : newMessage2.files) == null ? void 0 : _e.data) == null ? void 0 : _f.length) || 0,
350
- timestamp: newMessage2.createdAt || newMessage2.updatedAt
351
- });
352
334
  if (isMountedRef.current) {
353
335
  if (!messages.some((msg) => msg.id === newMessage2.id)) {
354
336
  setMessages((prevMessages) => [...prevMessages, newMessage2]);
@@ -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';\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// 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 // State for component data\n const [loading, setLoading] = useState(false);\n const [title, setTitle] = useState('');\n const [messages, setMessages] = useState([]);\n const [lastMessage, setLastMessage] = useState(null);\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 if (data?.messages?.data) {\n setMessages(data.messages.data);\n\n // Find the newest message\n const sortedMessages = [...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 if (sortedMessages.length > 0) {\n setLastMessage(sortedMessages[0]);\n }\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 // Set mounted state on mount/unmount\n useEffect(() => {\n isMountedRef.current = true;\n return () => {\n isMountedRef.current = false;\n };\n }, []);\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 setLoading(true);\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 setMessages(result.data.messages.data);\n setLastMessage(latestMessage);\n }\n setLoading(false);\n })\n .catch((err) => {\n console.error('Error refreshing dialog state:', err);\n setLoading(false);\n });\n }\n }, [channel?.id, refetchMessages, isMountedRef, parentId]);\n\n // Track if this is the first time the component renders\n const firstRenderRef = useRef(true);\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 setLoading(true);\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 = 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 // Get the most recent message\n const sortedMessages = [...fetchedMessages].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 // Update state with fresh data\n setMessages(fetchedMessages);\n setLastMessage(latestMessage);\n }\n } catch (error) {\n console.error('Error refetching messages on focus:', error);\n } finally {\n if (isMountedRef.current) {\n setLoading(false);\n }\n }\n };\n\n // Execute fetch\n fetchFreshData();\n\n return () => {\n // Cleanup function when unfocused\n };\n }, [channel?.id, refetchMessages, messages, isMountedRef, parentId]),\n );\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 // Get the most recent message\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 // Update state with fresh data\n setMessages(result.data.messages.data);\n setLastMessage(latestMessage);\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, 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 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 setTitle(titleString);\n }\n }, [channelMembers, isMountedRef]);\n\n // Compute title with proper truncation\n const displayTitle = useMemo(() => {\n const length = 30;\n return title.length > length ? title.substring(0, length - 3) + '...' : title;\n }, [title]);\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: messages.length,\n });\n }, [channel?.id, lastMessage, messages.length]);\n\n // Handle new messages from subscription\n useEffect(() => {\n if (newMessage?.chatMessageAdded && channel?.id) {\n const incomingMessage = newMessage.chatMessageAdded;\n\n // Check if we already have this message\n if (messages.some((msg) => msg.id === incomingMessage.id)) {\n console.log('Message already in local state, skipping update:', incomingMessage.id);\n return;\n }\n\n console.log('New message received from subscription:', {\n channelId: channel.id,\n messageId: incomingMessage.id,\n message: incomingMessage.message?.substring(0, 20) + '...',\n timestamp: incomingMessage.createdAt,\n });\n\n // Update messages and last message state\n setMessages((prevMessages) => [...prevMessages, incomingMessage]);\n setLastMessage(incomingMessage);\n }\n }, [newMessage, channel?.id, messages]);\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\n // Check if we already have this message\n if (!messages.some((msg) => msg.id === channel.lastMessage.id)) {\n setMessages((prevMessages) => [...prevMessages, channel.lastMessage]);\n setLastMessage(channel.lastMessage);\n }\n }\n }, [channel?.lastMessage?.id, messages]);\n\n return (\n <Pressable\n onPress={() => onOpen(channel?.id, displayTitle)}\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'}-${messages.length}`}\n title={displayTitle}\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 // Direct optimistic update through local state\n if (isMountedRef.current) {\n // Update messages array with the new message if it doesn't exist\n if (!messages.some((msg) => msg.id === newMessage.id)) {\n setMessages((prevMessages) => [...prevMessages, newMessage]);\n setLastMessage(newMessage);\n }\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","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';\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// 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 // State for component data\n const [loading, setLoading] = useState(false);\n const [title, setTitle] = useState('');\n const [messages, setMessages] = useState([]);\n const [lastMessage, setLastMessage] = useState(null);\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 if (data?.messages?.data) {\n setMessages(data.messages.data);\n\n // Find the newest message\n const sortedMessages = [...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 if (sortedMessages.length > 0) {\n setLastMessage(sortedMessages[0]);\n }\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 // Set mounted state on mount/unmount\n useEffect(() => {\n isMountedRef.current = true;\n return () => {\n isMountedRef.current = false;\n };\n }, []);\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 setLoading(true);\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 setMessages(result.data.messages.data);\n setLastMessage(latestMessage);\n }\n setLoading(false);\n })\n .catch((err) => {\n console.error('Error refreshing dialog state:', err);\n setLoading(false);\n });\n }\n }, [channel?.id, refetchMessages, isMountedRef, parentId]);\n\n // Track if this is the first time the component renders\n const firstRenderRef = useRef(true);\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 setLoading(true);\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 = 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 // Get the most recent message\n const sortedMessages = [...fetchedMessages].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 // Update state with fresh data\n setMessages(fetchedMessages);\n setLastMessage(latestMessage);\n }\n } catch (error) {\n console.error('Error refetching messages on focus:', error);\n } finally {\n if (isMountedRef.current) {\n setLoading(false);\n }\n }\n };\n\n // Execute fetch\n fetchFreshData();\n\n return () => {\n // Cleanup function when unfocused\n };\n }, [channel?.id, refetchMessages, messages, isMountedRef, parentId]),\n );\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 // Get the most recent message\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 // Update state with fresh data\n setMessages(result.data.messages.data);\n setLastMessage(latestMessage);\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, 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 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 setTitle(titleString);\n }\n }, [channelMembers, isMountedRef]);\n\n // Compute title with proper truncation\n const displayTitle = useMemo(() => {\n const length = 30;\n return title.length > length ? title.substring(0, length - 3) + '...' : title;\n }, [title]);\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: messages.length,\n });\n }, [channel?.id, lastMessage, messages.length]);\n\n // Handle new messages from subscription\n useEffect(() => {\n if (newMessage?.chatMessageAdded && channel?.id) {\n const incomingMessage = newMessage.chatMessageAdded;\n\n // Check if we already have this message\n if (messages.some((msg) => msg.id === incomingMessage.id)) {\n console.log('Message already in local state, skipping update:', incomingMessage.id);\n return;\n }\n\n console.log('New message received from subscription:', {\n channelId: channel.id,\n messageId: incomingMessage.id,\n message: incomingMessage.message?.substring(0, 20) + '...',\n timestamp: incomingMessage.createdAt,\n });\n\n // Update messages and last message state\n setMessages((prevMessages) => [...prevMessages, incomingMessage]);\n setLastMessage(incomingMessage);\n }\n }, [newMessage, channel?.id, messages]);\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\n // Check if we already have this message\n if (!messages.some((msg) => msg.id === channel.lastMessage.id)) {\n setMessages((prevMessages) => [...prevMessages, channel.lastMessage]);\n setLastMessage(channel.lastMessage);\n }\n }\n }, [channel?.lastMessage?.id, messages]);\n\n return (\n <Pressable\n onPress={() => onOpen(channel?.id, displayTitle)}\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'}-${messages.length}`}\n title={displayTitle}\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 // Direct optimistic update through local state\n if (isMountedRef.current) {\n // Update messages array with the new message if it doesn't exist\n if (!messages.some((msg) => msg.id === newMessage.id)) {\n setMessages((prevMessages) => [...prevMessages, newMessage]);\n setLastMessage(newMessage);\n }\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","DialogsListItem","_a","_b","_c","_d","CHAT_MESSAGE_ADDED","newMessage"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import React__default,{useState,useRef,useMemo,useEffect,useCallback}from'react';import {Box,Button,ButtonText,HStack,Avatar,AvatarFallbackText,AvatarImage,Text,Image,Spinner,Skeleton}from'@admin-layout/gluestack-ui-mobile';import {Platform,View,TouchableHighlight}from'react-native';import {useNavigation,useIsFocused,useFocusEffect}from'@react-navigation/native';import {navigationRef}from'@common-stack/client-react';import {useSelector}from'react-redux';import {uniqBy,orderBy,startCase}from'lodash-es';import*as ImagePicker from'expo-image-picker';import {MaterialCommunityIcons,Ionicons}from'@expo/vector-icons';import {Send,MessageText,InputToolbar,GiftedChat,Actions}from'react-native-gifted-chat';import {FileRefType,RoomType,PreDefinedRole}from'common';import {useAddDirectChannelMutation,useSendMessagesMutation,useSendExpoNotificationOnPostMutation,useMessagesQuery,OnChatMessageAddedDocument}from'common/graphql';import {useUploadFilesNative}from'@messenger-box/platform-client';import {objectId}from'@messenger-box/core';import {userSelector}from'@adminide-stack/user-auth0-client';import {isToday,isYesterday,format}from'date-fns';import Message from'../components/SlackMessageContainer/SlackMessage.js';import ImageViewerModal from'../components/SlackMessageContainer/ImageViewerModal.js';import CachedImage from'../components/CachedImage/index.js';import {config}from'../config/config.js';import colors from'tailwindcss/colors';var __defProp = Object.defineProperty;
1
+ import React__default,{useState,useRef,useMemo,useEffect,useCallback}from'react';import {Box,Button,ButtonText,HStack,Avatar,AvatarFallbackText,AvatarImage,Text,Image,Spinner,Skeleton}from'@admin-layout/gluestack-ui-mobile';import {Platform,View,TouchableHighlight}from'react-native';import {useNavigation,useIsFocused,useFocusEffect}from'@react-navigation/native';import {navigationRef}from'@common-stack/client-react';import {useSelector}from'react-redux';import {uniqBy,orderBy,startCase}from'lodash-es';import*as ImagePicker from'expo-image-picker';import {MaterialCommunityIcons,Ionicons}from'@expo/vector-icons';import {Send,MessageText,InputToolbar,GiftedChat,Actions}from'react-native-gifted-chat';import {RoomType,PreDefinedRole}from'common';import {useAddDirectChannelMutation,useSendMessagesMutation,useSendExpoNotificationOnPostMutation,useMessagesQuery,MessagesDocument,OnChatMessageAddedDocument}from'common/graphql';import {useUploadFilesNative}from'@messenger-box/platform-client';import {objectId}from'@messenger-box/core';import {userSelector}from'@adminide-stack/user-auth0-client';import {isToday,isYesterday,format}from'date-fns';import Message from'../components/SlackMessageContainer/SlackMessage.js';import ImageViewerModal from'../components/SlackMessageContainer/ImageViewerModal.js';import CachedImage from'../components/CachedImage/index.js';import {config}from'../config/config.js';import colors from'tailwindcss/colors';var __defProp = Object.defineProperty;
2
2
  var __defProps = Object.defineProperties;
3
3
  var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
4
4
  var __getOwnPropSymbols = Object.getOwnPropertySymbols;
@@ -98,8 +98,6 @@ const ConversationViewComponent = (_a) => {
98
98
  nextFetchPolicy: "cache-first",
99
99
  refetchWritePolicy: "merge",
100
100
  notifyOnNetworkStatusChange: true,
101
- onCompleted: (queryData) => {
102
- },
103
101
  onError: (error2) => {
104
102
  setError(String(error2));
105
103
  }
@@ -190,11 +188,11 @@ const ConversationViewComponent = (_a) => {
190
188
  author: {
191
189
  __typename: "UserAccount",
192
190
  id: auth == null ? void 0 : auth.id,
191
+ picture: (auth == null ? void 0 : auth.picture) || "",
193
192
  givenName: (auth == null ? void 0 : auth.givenName) || "",
194
193
  familyName: (auth == null ? void 0 : auth.familyName) || "",
195
- picture: (auth == null ? void 0 : auth.picture) || "",
196
- username: (auth == null ? void 0 : auth.username) || "",
197
194
  email: (auth == null ? void 0 : auth.email) || "",
195
+ username: (auth == null ? void 0 : auth.username) || "",
198
196
  alias: [],
199
197
  tokens: []
200
198
  },
@@ -232,6 +230,42 @@ const ConversationViewComponent = (_a) => {
232
230
  optimisticResponse: {
233
231
  __typename: "Mutation",
234
232
  sendMessage: optimisticMessage
233
+ },
234
+ update: (cache, {
235
+ data: data2
236
+ }) => {
237
+ if (data2 == null ? void 0 : data2.sendMessage) {
238
+ try {
239
+ const existingData = cache.readQuery({
240
+ query: MessagesDocument,
241
+ variables: {
242
+ channelId: channelId == null ? void 0 : channelId.toString(),
243
+ parentId: null,
244
+ limit: MESSAGES_PER_PAGE,
245
+ skip: 0
246
+ }
247
+ });
248
+ if (!existingData)
249
+ return;
250
+ cache.writeQuery({
251
+ query: MessagesDocument,
252
+ variables: {
253
+ channelId: channelId == null ? void 0 : channelId.toString(),
254
+ parentId: null,
255
+ limit: MESSAGES_PER_PAGE,
256
+ skip: 0
257
+ },
258
+ data: {
259
+ messages: __spreadProps(__spreadValues({}, existingData.messages), {
260
+ data: [data2.sendMessage, ...existingData.messages.data],
261
+ totalCount: (existingData.messages.totalCount || 0) + 1
262
+ })
263
+ }
264
+ });
265
+ } catch (error2) {
266
+ console.error("Error updating cache:", error2);
267
+ }
268
+ }
235
269
  }
236
270
  });
237
271
  return {
@@ -281,7 +315,7 @@ const ConversationViewComponent = (_a) => {
281
315
  };
282
316
  const [uploadingMessageId, setUploadingMessageId] = useState(null);
283
317
  const sendMessageWithFileImpl = useCallback(async () => {
284
- var _a3, _b3, _c2, _d2, _e, _f, _g, _h, _i;
318
+ var _a3, _b3, _c2, _d2, _e, _f;
285
319
  try {
286
320
  setLoading(true);
287
321
  const postId = objectId();
@@ -313,18 +347,7 @@ const ConversationViewComponent = (_a) => {
313
347
  });
314
348
  const currentMessageText = messageText;
315
349
  setMessageText("");
316
- const optimisticFileInfo = {
317
- __typename: "FileInfo",
318
- id: objectId(),
319
- url: selectedImage,
320
- name: ((_a3 = imagesToUpload[0]) == null ? void 0 : _a3.name) || "image.jpg",
321
- extension: "jpg",
322
- mimeType: "image/jpeg",
323
- size: 0,
324
- refType: FileRefType.Post,
325
- height: ((_b3 = imagesToUpload[0]) == null ? void 0 : _b3.height) || 0,
326
- width: ((_c2 = imagesToUpload[0]) == null ? void 0 : _c2.width) || 0
327
- };
350
+ const fileId = objectId();
328
351
  const optimisticMessage = {
329
352
  __typename: "Post",
330
353
  id: postId,
@@ -334,11 +357,11 @@ const ConversationViewComponent = (_a) => {
334
357
  author: {
335
358
  __typename: "UserAccount",
336
359
  id: auth == null ? void 0 : auth.id,
360
+ picture: (auth == null ? void 0 : auth.picture) || "",
337
361
  givenName: (auth == null ? void 0 : auth.givenName) || "",
338
362
  familyName: (auth == null ? void 0 : auth.familyName) || "",
339
- picture: (auth == null ? void 0 : auth.picture) || "",
340
- username: (auth == null ? void 0 : auth.username) || "",
341
363
  email: (auth == null ? void 0 : auth.email) || "",
364
+ username: (auth == null ? void 0 : auth.username) || "",
342
365
  alias: [],
343
366
  tokens: []
344
367
  },
@@ -360,15 +383,16 @@ const ConversationViewComponent = (_a) => {
360
383
  __typename: "FilesInfo",
361
384
  data: [{
362
385
  __typename: "FileInfo",
363
- id: objectId(),
386
+ id: fileId,
364
387
  url: selectedImage,
365
- name: ((_d2 = imagesToUpload[0]) == null ? void 0 : _d2.name) || "image.jpg",
388
+ name: ((_a3 = imagesToUpload[0]) == null ? void 0 : _a3.name) || "image.jpg",
366
389
  extension: "jpg",
367
390
  mimeType: "image/jpeg",
368
- size: 0,
369
- refType: FileRefType.Post,
370
- height: ((_e = imagesToUpload[0]) == null ? void 0 : _e.height) || 0,
371
- width: ((_f = imagesToUpload[0]) == null ? void 0 : _f.width) || 0
391
+ height: ((_b3 = imagesToUpload[0]) == null ? void 0 : _b3.height) || 0,
392
+ width: ((_c2 = imagesToUpload[0]) == null ? void 0 : _c2.width) || 0,
393
+ size: ((_d2 = imagesToUpload[0]) == null ? void 0 : _d2.fileSize) || 0,
394
+ refType: "Post",
395
+ ref: postId
372
396
  }],
373
397
  totalCount: 1
374
398
  },
@@ -399,7 +423,26 @@ const ConversationViewComponent = (_a) => {
399
423
  };
400
424
  }
401
425
  const uploadedFiles = uploadResponse.data;
402
- const files = (_g = uploadedFiles == null ? void 0 : uploadedFiles.map((f) => f.id)) != null ? _g : null;
426
+ const files = (_e = uploadedFiles == null ? void 0 : uploadedFiles.map((f) => f.id)) != null ? _e : null;
427
+ const realMessage = __spreadProps(__spreadValues({}, optimisticMessage), {
428
+ files: {
429
+ __typename: "FilesInfo",
430
+ data: uploadedFiles.map((file) => ({
431
+ __typename: "FileInfo",
432
+ id: file.id,
433
+ url: file.url,
434
+ name: file.name,
435
+ extension: file.extension,
436
+ mimeType: file.mimeType,
437
+ height: file.height,
438
+ width: file.width,
439
+ size: file.size,
440
+ refType: file.refType,
441
+ ref: postId
442
+ })),
443
+ totalCount: uploadedFiles.length
444
+ }
445
+ });
403
446
  const response = await sendMsg({
404
447
  variables: {
405
448
  postId,
@@ -410,17 +453,70 @@ const ConversationViewComponent = (_a) => {
410
453
  },
411
454
  optimisticResponse: {
412
455
  __typename: "Mutation",
413
- sendMessage: optimisticMessage
456
+ sendMessage: realMessage
457
+ },
458
+ update: (cache, {
459
+ data: data2
460
+ }) => {
461
+ if (data2 == null ? void 0 : data2.sendMessage) {
462
+ try {
463
+ const existingData = cache.readQuery({
464
+ query: MessagesDocument,
465
+ variables: {
466
+ channelId: channelId == null ? void 0 : channelId.toString(),
467
+ parentId: null,
468
+ limit: MESSAGES_PER_PAGE,
469
+ skip: 0
470
+ }
471
+ });
472
+ if (!existingData)
473
+ return;
474
+ const messageWithFiles = __spreadProps(__spreadValues({}, data2.sendMessage), {
475
+ files: data2.sendMessage.files || {
476
+ __typename: "FilesInfo",
477
+ data: uploadedFiles.map((file) => ({
478
+ __typename: "FileInfo",
479
+ id: file.id,
480
+ url: file.url,
481
+ name: file.name,
482
+ extension: file.extension,
483
+ mimeType: file.mimeType,
484
+ height: file.height,
485
+ width: file.width,
486
+ size: file.size,
487
+ refType: file.refType,
488
+ ref: postId
489
+ })),
490
+ totalCount: uploadedFiles.length
491
+ }
492
+ });
493
+ cache.writeQuery({
494
+ query: MessagesDocument,
495
+ variables: {
496
+ channelId: channelId == null ? void 0 : channelId.toString(),
497
+ parentId: null,
498
+ limit: MESSAGES_PER_PAGE,
499
+ skip: 0
500
+ },
501
+ data: {
502
+ messages: __spreadProps(__spreadValues({}, existingData.messages), {
503
+ data: [messageWithFiles, ...existingData.messages.data],
504
+ totalCount: (existingData.messages.totalCount || 0) + 1
505
+ })
506
+ }
507
+ });
508
+ setSelectedImage("");
509
+ setImages([]);
510
+ } catch (error2) {
511
+ console.error("Error updating cache:", error2);
512
+ }
513
+ }
414
514
  }
415
515
  });
416
- if ((_h = response == null ? void 0 : response.data) == null ? void 0 : _h.sendMessage) {
417
- setSelectedImage("");
418
- setImages([]);
419
- }
420
516
  setLoading(false);
421
517
  setUploadingMessageId(null);
422
518
  return {
423
- message: (_i = response.data) == null ? void 0 : _i.sendMessage
519
+ message: (_f = response.data) == null ? void 0 : _f.sendMessage
424
520
  };
425
521
  } catch (error2) {
426
522
  setLoading(false);
@@ -478,11 +574,11 @@ const ConversationViewComponent = (_a) => {
478
574
  author: {
479
575
  __typename: "UserAccount",
480
576
  id: auth == null ? void 0 : auth.id,
577
+ picture: (auth == null ? void 0 : auth.picture) || "",
481
578
  givenName: (auth == null ? void 0 : auth.givenName) || "",
482
579
  familyName: (auth == null ? void 0 : auth.familyName) || "",
483
- picture: (auth == null ? void 0 : auth.picture) || "",
484
- username: (auth == null ? void 0 : auth.username) || "",
485
580
  email: (auth == null ? void 0 : auth.email) || "",
581
+ username: (auth == null ? void 0 : auth.username) || "",
486
582
  alias: [],
487
583
  tokens: []
488
584
  },
@@ -520,6 +616,33 @@ const ConversationViewComponent = (_a) => {
520
616
  optimisticResponse: {
521
617
  __typename: "Mutation",
522
618
  sendMessage: optimisticMessage
619
+ },
620
+ update: (cache, {
621
+ data: data2
622
+ }) => {
623
+ if (data2 == null ? void 0 : data2.sendMessage) {
624
+ try {
625
+ cache.writeQuery({
626
+ query: MessagesDocument,
627
+ variables: {
628
+ channelId: newChannelId,
629
+ parentId: null,
630
+ limit: MESSAGES_PER_PAGE,
631
+ skip: 0
632
+ },
633
+ data: {
634
+ messages: {
635
+ __typename: "Messages",
636
+ messagesRefId: newChannelId,
637
+ data: [data2.sendMessage],
638
+ totalCount: 1
639
+ }
640
+ }
641
+ });
642
+ } catch (error2) {
643
+ console.error("Error updating cache:", error2);
644
+ }
645
+ }
523
646
  }
524
647
  });
525
648
  setLoading(false);
@@ -564,13 +687,16 @@ const ConversationViewComponent = (_a) => {
564
687
  return [];
565
688
  }
566
689
  return orderBy(filteredMessages, ["createdAt"], ["desc"]).map((msg) => {
567
- var _a3, _b3, _c2, _d2, _e, _f;
690
+ var _a3, _b3, _c2, _d2, _e;
568
691
  const date = new Date(msg.createdAt);
569
692
  let imageUrl = null;
570
- if (((_a3 = msg.files) == null ? void 0 : _a3.data) && msg.files.data.length > 0) {
571
- const fileData = msg.files.data[0];
572
- if (fileData && fileData.url) {
573
- imageUrl = fileData.url;
693
+ if (msg.files && typeof msg.files === "object") {
694
+ const filesData = msg.files.data || (Array.isArray(msg.files) ? msg.files : null);
695
+ if (filesData && filesData.length > 0) {
696
+ const fileData = filesData[0];
697
+ if (fileData && typeof fileData === "object" && fileData.url) {
698
+ imageUrl = fileData.url;
699
+ }
574
700
  }
575
701
  }
576
702
  return {
@@ -578,16 +704,16 @@ const ConversationViewComponent = (_a) => {
578
704
  text: msg.message,
579
705
  createdAt: date,
580
706
  user: {
581
- _id: ((_b3 = msg.author) == null ? void 0 : _b3.id) || "",
582
- name: `${((_c2 = msg.author) == null ? void 0 : _c2.givenName) || ""} ${((_d2 = msg.author) == null ? void 0 : _d2.familyName) || ""}`,
583
- avatar: ((_e = msg.author) == null ? void 0 : _e.picture) || ""
707
+ _id: ((_a3 = msg.author) == null ? void 0 : _a3.id) || "",
708
+ name: `${((_b3 = msg.author) == null ? void 0 : _b3.givenName) || ""} ${((_c2 = msg.author) == null ? void 0 : _c2.familyName) || ""}`,
709
+ avatar: ((_d2 = msg.author) == null ? void 0 : _d2.picture) || ""
584
710
  },
585
711
  image: imageUrl,
586
712
  sent: msg == null ? void 0 : msg.isDelivered,
587
713
  received: msg == null ? void 0 : msg.isRead,
588
714
  type: msg == null ? void 0 : msg.type,
589
715
  propsConfiguration: msg == null ? void 0 : msg.propsConfiguration,
590
- replies: (_f = msg == null ? void 0 : msg.replies) != null ? _f : [],
716
+ replies: (_e = msg == null ? void 0 : msg.replies) != null ? _e : [],
591
717
  isShowThreadMessage
592
718
  };
593
719
  });
@@ -950,6 +1076,16 @@ const ConversationViewComponent = (_a) => {
950
1076
  updateCellsBatchingPeriod: 50,
951
1077
  keyExtractor: (item) => item._id
952
1078
  }), [onEndReached, onMomentumScrollBegin]);
1079
+ useCallback((message, prefix = "Message") => {
1080
+ var _a3, _b3, _c2, _d2, _e, _f, _g, _h, _i;
1081
+ if (__DEV__) {
1082
+ console.log(`${prefix} ID: ${message == null ? void 0 : message.id}, Has files object: ${!!(message == null ? void 0 : message.files)}, Files typename: ${(_a3 = message == null ? void 0 : message.files) == null ? void 0 : _a3.__typename}, Files data exists: ${!!((_b3 = message == null ? void 0 : message.files) == null ? void 0 : _b3.data)}, Files count: ${((_d2 = (_c2 = message == null ? void 0 : message.files) == null ? void 0 : _c2.data) == null ? void 0 : _d2.length) || 0}`);
1083
+ if (((_e = message == null ? void 0 : message.files) == null ? void 0 : _e.data) && ((_g = (_f = message == null ? void 0 : message.files) == null ? void 0 : _f.data) == null ? void 0 : _g.length) > 0) {
1084
+ const file = (_h = message == null ? void 0 : message.files) == null ? void 0 : _h.data[0];
1085
+ console.log(`File[0] ID: ${file == null ? void 0 : file.id}, URL: ${(_i = file == null ? void 0 : file.url) == null ? void 0 : _i.substring(0, 30)}..., Name: ${file == null ? void 0 : file.name}, Type: ${file == null ? void 0 : file.mimeType}`);
1086
+ }
1087
+ }
1088
+ }, []);
953
1089
  return /* @__PURE__ */ React__default.createElement(View, { style: {
954
1090
  flex: 1,
955
1091
  backgroundColor: "white",