@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 +8 -0
- package/lib/screens/inbox/components/DialogsListItem.js +1 -19
- package/lib/screens/inbox/components/DialogsListItem.js.map +1 -1
- package/lib/screens/inbox/containers/ConversationView.js +180 -44
- package/lib/screens/inbox/containers/ConversationView.js.map +1 -1
- package/package.json +4 -4
- package/src/screens/inbox/components/DialogsListItem.tsx +17 -17
- package/src/screens/inbox/containers/ConversationView.tsx +228 -99
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
|
|
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 {
|
|
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
|
|
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
|
|
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:
|
|
386
|
+
id: fileId,
|
|
364
387
|
url: selectedImage,
|
|
365
|
-
name: ((
|
|
388
|
+
name: ((_a3 = imagesToUpload[0]) == null ? void 0 : _a3.name) || "image.jpg",
|
|
366
389
|
extension: "jpg",
|
|
367
390
|
mimeType: "image/jpeg",
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
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 = (
|
|
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:
|
|
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: (
|
|
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
|
|
690
|
+
var _a3, _b3, _c2, _d2, _e;
|
|
568
691
|
const date = new Date(msg.createdAt);
|
|
569
692
|
let imageUrl = null;
|
|
570
|
-
if (
|
|
571
|
-
const
|
|
572
|
-
if (
|
|
573
|
-
|
|
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: ((
|
|
582
|
-
name: `${((
|
|
583
|
-
avatar: ((
|
|
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: (
|
|
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",
|