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

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.
Files changed (54) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/lib/compute.js +2 -3
  3. package/lib/index.js.map +1 -1
  4. package/lib/queries/inboxQueries.js +77 -0
  5. package/lib/queries/inboxQueries.js.map +1 -0
  6. package/lib/routes.json +2 -3
  7. package/lib/screens/inbox/DialogThreadMessages.js +3 -7
  8. package/lib/screens/inbox/DialogThreadMessages.js.map +1 -1
  9. package/lib/screens/inbox/DialogThreads.js +3 -7
  10. package/lib/screens/inbox/DialogThreads.js.map +1 -1
  11. package/lib/screens/inbox/components/DialogsListItem.js +47 -46
  12. package/lib/screens/inbox/components/DialogsListItem.js.map +1 -1
  13. package/lib/screens/inbox/components/GiftedChatInboxComponent.js +313 -0
  14. package/lib/screens/inbox/components/GiftedChatInboxComponent.js.map +1 -0
  15. package/lib/screens/inbox/components/ServiceDialogsListItem.js +72 -57
  16. package/lib/screens/inbox/components/ServiceDialogsListItem.js.map +1 -1
  17. package/lib/screens/inbox/components/SlackMessageContainer/SlackBubble.js +115 -14
  18. package/lib/screens/inbox/components/SlackMessageContainer/SlackBubble.js.map +1 -1
  19. package/lib/screens/inbox/components/SubscriptionHandler.js +24 -0
  20. package/lib/screens/inbox/components/SubscriptionHandler.js.map +1 -0
  21. package/lib/screens/inbox/containers/ConversationView.js +640 -493
  22. package/lib/screens/inbox/containers/ConversationView.js.map +1 -1
  23. package/lib/screens/inbox/containers/Dialogs.js +100 -181
  24. package/lib/screens/inbox/containers/Dialogs.js.map +1 -1
  25. package/lib/screens/inbox/containers/ThreadConversationView.js +659 -245
  26. package/lib/screens/inbox/containers/ThreadConversationView.js.map +1 -1
  27. package/lib/screens/inbox/containers/ThreadsView.js +3 -3
  28. package/lib/screens/inbox/containers/ThreadsView.js.map +1 -1
  29. package/lib/screens/inbox/hooks/useInboxMessages.js +31 -0
  30. package/lib/screens/inbox/hooks/useInboxMessages.js.map +1 -0
  31. package/package.json +4 -4
  32. package/src/index.ts +2 -0
  33. package/src/queries/inboxQueries.ts +298 -0
  34. package/src/queries/index.d.ts +2 -0
  35. package/src/queries/index.ts +1 -0
  36. package/src/screens/inbox/DialogThreadMessages.tsx +3 -11
  37. package/src/screens/inbox/DialogThreads.tsx +3 -7
  38. package/src/screens/inbox/components/Actionsheet.tsx +30 -0
  39. package/src/screens/inbox/components/DialogsListItem.tsx +89 -148
  40. package/src/screens/inbox/components/ExpandableInput.tsx +460 -0
  41. package/src/screens/inbox/components/ExpandableInputActionSheet.tsx +518 -0
  42. package/src/screens/inbox/components/GiftedChatInboxComponent.tsx +411 -0
  43. package/src/screens/inbox/components/ServiceDialogsListItem.tsx +202 -221
  44. package/src/screens/inbox/components/SlackInput.tsx +23 -0
  45. package/src/screens/inbox/components/SlackMessageContainer/SlackBubble.tsx +216 -30
  46. package/src/screens/inbox/components/SubscriptionHandler.tsx +41 -0
  47. package/src/screens/inbox/components/SupportServiceDialogsListItem.tsx +6 -7
  48. package/src/screens/inbox/containers/ConversationView.tsx +1109 -669
  49. package/src/screens/inbox/containers/Dialogs.tsx +198 -342
  50. package/src/screens/inbox/containers/SupportServiceDialogs.tsx +2 -2
  51. package/src/screens/inbox/containers/ThreadConversationView.tsx +1141 -402
  52. package/src/screens/inbox/containers/ThreadsView.tsx +5 -5
  53. package/src/screens/inbox/hooks/useInboxMessages.ts +34 -0
  54. package/src/screens/inbox/machines/threadsMachine.ts +2 -2
@@ -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","DialogsListItem","_a","_b","_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 CHAT_MESSAGE_ADDED,\n useChatMessageAddedSubscription,\n useMessagesQuery as useMessagesQueryFromInbox,\n} from '../../../queries/inboxQueries';\nimport { startCase } from 'lodash-es';\nimport colors from 'tailwindcss/colors';\nimport { SubscriptionHandler } from './SubscriptionHandler';\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 visible?: boolean;\n}\n\n// LastMessage component definition\nconst LastMessageComponent = ({ subscribeToNewMessages, title, lastMessage, channelId, subscribeToMore }) => {\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 <>\n <SubscriptionHandler\n subscribeToMore={subscribeToMore}\n document={CHAT_MESSAGE_ADDED}\n variables={{ channelId: channelId?.toString() }}\n updateQuery={undefined} // Provide custom updateQuery if needed\n />\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/**\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 visible = true,\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 // Only run queries/subscriptions if visible\n const shouldQuery = !!channel?.id && visible;\n\n // Query hooks for fetching messages (minimal fields if possible)\n const {\n data: messagesQuery,\n loading: messageLoading,\n refetch: refetchMessages,\n subscribeToMore,\n } = useMessagesQueryFromInbox({\n variables: {\n channelId: channel?.id?.toString(),\n parentId: parentId,\n limit: 10,\n },\n skip: !shouldQuery, // Only run if visible\n fetchPolicy: 'cache-and-network',\n refetchWritePolicy: 'overwrite',\n nextFetchPolicy: 'network-only',\n onCompleted: (data) => {\n if (!shouldQuery) return;\n if (data?.messages?.data) {\n setMessages(data.messages.data);\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 if (sortedMessages.length > 0) {\n setLastMessage(sortedMessages[0]);\n }\n }\n },\n onError: (error) => {\n if (!shouldQuery) return;\n console.error(`Error fetching messages for channel ${channel?.id}:`, error);\n },\n });\n\n // Subscription for new messages (only if visible)\n const { data: newMessage } = useChatMessageAddedSubscription({\n variables: {\n channelId: channel?.id?.toString(),\n },\n skip: !shouldQuery,\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 (shouldQuery && isMountedRef.current) {\n setLoading(true);\n const options = {\n channelId: channel?.id?.toString(),\n parentId: parentId,\n limit: 10,\n };\n refetchMessages(options)\n .then((result) => {\n if (result.data?.messages?.data && isMountedRef.current) {\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 const latestMessage = sortedMessages.length > 0 ? sortedMessages[0] : null;\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 }, [shouldQuery, channel?.id, refetchMessages, 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 // Only run effects if visible\n useEffect(() => {\n if (!shouldQuery) return;\n if (channel?.id && isMountedRef.current) {\n const timer = setTimeout(() => {\n if (isMountedRef.current) {\n refreshDialogState();\n }\n }, 100);\n return () => {\n clearTimeout(timer);\n };\n }\n }, [shouldQuery, channel?.id, refreshDialogState]);\n\n useEffect(() => {\n if (forceRefresh && shouldQuery && channel?.id && isMountedRef.current) {\n const timer = setTimeout(() => {\n if (isMountedRef.current && refetchMessages) {\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 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 const latestMessage = sortedMessages.length > 0 ? sortedMessages[0] : null;\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 return () => clearTimeout(timer);\n }\n }, [shouldQuery, channel?.id, forceRefresh, 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 setTitle(titleString);\n }\n }, [channelMembers]);\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 (!shouldQuery) return;\n if (newMessage?.chatMessageAdded && channel?.id) {\n const incomingMessage = newMessage.chatMessageAdded;\n if (messages.some((msg) => msg.id === incomingMessage.id)) {\n return;\n }\n setMessages((prevMessages) => [...prevMessages, incomingMessage]);\n setLastMessage(incomingMessage);\n }\n }, [shouldQuery, newMessage, channel?.id, messages]);\n\n // Create listener for channel property updates\n useEffect(() => {\n if (!shouldQuery) return;\n if (channel?.lastMessage && channel.lastMessage.id) {\n if (!messages.some((msg) => msg.id === channel.lastMessage.id)) {\n setMessages((prevMessages) => [...prevMessages, channel.lastMessage]);\n setLastMessage(channel.lastMessage);\n }\n }\n }, [shouldQuery, 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 {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 shouldQuery\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 if (isMountedRef.current) {\n if (!messages.some((msg) => msg.id === newMessage.id)) {\n setMessages((prevMessages) => [...prevMessages, newMessage]);\n setLastMessage(newMessage);\n }\n }\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 : undefined\n }\n subscribeToMore={subscribeToMore}\n />\n </Box>\n </HStack>\n </Pressable>\n );\n};\n\nexport const DialogsListItem = React.memo(DialogsListItemComponent);\n"],"names":["React","DialogsListItem","useMessagesQueryFromInbox","_a","_b","_c","_d","newMessage"],"mappings":"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"}
@@ -0,0 +1,313 @@
1
+ import React__default,{forwardRef,useCallback}from'react';import {Platform,View,TouchableOpacity,TextInput,ScrollView,KeyboardAvoidingView,Animated}from'react-native';import {Image,Box,Spinner,Text}from'@admin-layout/gluestack-ui-mobile';import {GiftedChat}from'react-native-gifted-chat';import {MaterialIcons,MaterialCommunityIcons,Ionicons}from'@expo/vector-icons';import colors from'tailwindcss/colors';var __defProp = Object.defineProperty;
2
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
3
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
4
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
5
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
6
+ var __spreadValues = (a, b) => {
7
+ for (var prop in b || (b = {}))
8
+ if (__hasOwnProp.call(b, prop))
9
+ __defNormalProp(a, prop, b[prop]);
10
+ if (__getOwnPropSymbols)
11
+ for (var prop of __getOwnPropSymbols(b)) {
12
+ if (__propIsEnum.call(b, prop))
13
+ __defNormalProp(a, prop, b[prop]);
14
+ }
15
+ return a;
16
+ };
17
+ var __objRest = (source, exclude) => {
18
+ var target = {};
19
+ for (var prop in source)
20
+ if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
21
+ target[prop] = source[prop];
22
+ if (source != null && __getOwnPropSymbols)
23
+ for (var prop of __getOwnPropSymbols(source)) {
24
+ if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
25
+ target[prop] = source[prop];
26
+ }
27
+ return target;
28
+ };
29
+ function getRefCurrent(ref) {
30
+ if (ref && typeof ref === "object" && "current" in ref) {
31
+ return ref.current;
32
+ }
33
+ return null;
34
+ }
35
+ const GiftedChatInboxComponent = forwardRef((props, ref) => {
36
+ const _a = props, {
37
+ messages,
38
+ onSend,
39
+ text,
40
+ onInputTextChanged,
41
+ user,
42
+ images,
43
+ setImages,
44
+ onSelectImages,
45
+ onRemoveImage,
46
+ selectedImage,
47
+ setSelectedImage,
48
+ isUploadingImage,
49
+ loading,
50
+ errorMessage,
51
+ notificationType = "error",
52
+ onCloseError,
53
+ inputToolbarHeight = 56,
54
+ bottomMargin = 0,
55
+ renderMessageText,
56
+ renderActions,
57
+ renderAccessory,
58
+ renderMessage,
59
+ renderInputToolbar,
60
+ renderChatFooter,
61
+ renderLoadEarlier,
62
+ loadEarlier,
63
+ isLoadingEarlier,
64
+ keyboardVerticalOffset = Platform.OS === "ios" ? 64 : 0,
65
+ placeholder = "Jot something down",
66
+ listViewProps,
67
+ wrapInSafeArea = true,
68
+ minComposerHeight = 36,
69
+ maxComposerHeight = 100,
70
+ renderFooter,
71
+ lightboxProps = {
72
+ underlayColor: "transparent",
73
+ springConfig: {
74
+ tension: 9e4,
75
+ friction: 9e4
76
+ },
77
+ disabled: true
78
+ },
79
+ infiniteScroll = false,
80
+ alwaysShowSend = true,
81
+ minInputToolbarHeight = 30,
82
+ textInputProps = {
83
+ multiline: true,
84
+ returnKeyType: "default",
85
+ enablesReturnKeyAutomatically: true,
86
+ placeholderTextColor: colors.gray[400]
87
+ },
88
+ messagesContainerStyle = {
89
+ paddingTop: 8
90
+ },
91
+ renderHeader
92
+ } = _a, rest = __objRest(_a, [
93
+ "messages",
94
+ "onSend",
95
+ "text",
96
+ "onInputTextChanged",
97
+ "user",
98
+ "images",
99
+ "setImages",
100
+ "onSelectImages",
101
+ "onRemoveImage",
102
+ "selectedImage",
103
+ "setSelectedImage",
104
+ "isUploadingImage",
105
+ "loading",
106
+ "errorMessage",
107
+ "notificationType",
108
+ "onCloseError",
109
+ "inputToolbarHeight",
110
+ "bottomMargin",
111
+ "renderMessageText",
112
+ "renderActions",
113
+ "renderAccessory",
114
+ "renderMessage",
115
+ "renderInputToolbar",
116
+ "renderChatFooter",
117
+ "renderLoadEarlier",
118
+ "loadEarlier",
119
+ "isLoadingEarlier",
120
+ "keyboardVerticalOffset",
121
+ "placeholder",
122
+ "listViewProps",
123
+ "wrapInSafeArea",
124
+ "minComposerHeight",
125
+ "maxComposerHeight",
126
+ "renderFooter",
127
+ "lightboxProps",
128
+ "infiniteScroll",
129
+ "alwaysShowSend",
130
+ "minInputToolbarHeight",
131
+ "textInputProps",
132
+ "messagesContainerStyle",
133
+ "renderHeader"
134
+ ]);
135
+ const renderErrorNotification = () => {
136
+ if (!errorMessage)
137
+ return null;
138
+ return /* @__PURE__ */ React__default.createElement(Animated.View, { style: {
139
+ position: "absolute",
140
+ top: 10,
141
+ left: 10,
142
+ right: 10,
143
+ backgroundColor: notificationType === "error" ? "#f44336" : "#ff9800",
144
+ padding: 15,
145
+ borderRadius: 8,
146
+ shadowColor: "#000",
147
+ shadowOffset: {
148
+ width: 0,
149
+ height: 2
150
+ },
151
+ shadowOpacity: 0.25,
152
+ shadowRadius: 3.84,
153
+ elevation: 5,
154
+ zIndex: 1e3
155
+ } }, /* @__PURE__ */ React__default.createElement(View, { style: {
156
+ flexDirection: "row",
157
+ justifyContent: "space-between",
158
+ alignItems: "center"
159
+ } }, /* @__PURE__ */ React__default.createElement(View, null, /* @__PURE__ */ React__default.createElement(Text, { style: {
160
+ color: "white",
161
+ fontWeight: "bold"
162
+ } }, notificationType === "error" ? "Error" : "Warning")), /* @__PURE__ */ React__default.createElement(View, null, /* @__PURE__ */ React__default.createElement(TouchableOpacity, { onPress: onCloseError }, /* @__PURE__ */ React__default.createElement(Ionicons, { name: "close", size: 20, color: "white" })))), /* @__PURE__ */ React__default.createElement(Text, { style: {
163
+ color: "white",
164
+ marginTop: 5
165
+ } }, errorMessage));
166
+ };
167
+ const renderInputToolbarDefault = useCallback((props2) => /* @__PURE__ */ React__default.createElement(View, { style: {
168
+ backgroundColor: "#fff",
169
+ paddingBottom: 4,
170
+ paddingTop: 4
171
+ } }, /* @__PURE__ */ React__default.createElement(View, { style: {
172
+ flexDirection: "row",
173
+ alignItems: "center",
174
+ minHeight: 44,
175
+ maxHeight: 56,
176
+ backgroundColor: "#fff",
177
+ borderRadius: 22,
178
+ marginHorizontal: 8,
179
+ paddingHorizontal: 8,
180
+ borderTopWidth: 1,
181
+ borderTopColor: "#e0e0e0"
182
+ } }, /* @__PURE__ */ React__default.createElement(TouchableOpacity, { onPress: onSelectImages, style: {
183
+ width: 32,
184
+ height: 32,
185
+ borderRadius: 16,
186
+ backgroundColor: "#fff",
187
+ alignItems: "center",
188
+ justifyContent: "center",
189
+ marginRight: 8
190
+ } }, /* @__PURE__ */ React__default.createElement(MaterialIcons, { name: "add", size: 24, color: "#888" })), /* @__PURE__ */ React__default.createElement(TextInput, { ref, style: {
191
+ flex: 1,
192
+ maxHeight: 44,
193
+ backgroundColor: "transparent",
194
+ color: "#444",
195
+ paddingHorizontal: 8,
196
+ paddingVertical: 0,
197
+ alignSelf: "center",
198
+ textAlignVertical: "center"
199
+ }, placeholder: placeholder || "Jot something down", placeholderTextColor: colors.gray[400], multiline: true, value: text, onChangeText: onInputTextChanged }), /* @__PURE__ */ React__default.createElement(
200
+ TouchableOpacity,
201
+ {
202
+ onPress: () => onSend([{
203
+ text
204
+ }]),
205
+ disabled: false,
206
+ style: {
207
+ marginLeft: 8,
208
+ opacity: !text.trim() && images.length === 0 ? 0.5 : 1
209
+ }
210
+ },
211
+ /* @__PURE__ */ React__default.createElement(
212
+ MaterialCommunityIcons,
213
+ {
214
+ name: "send-circle",
215
+ size: 32,
216
+ color: !text.trim() && images.length === 0 ? colors.gray[400] : colors.blue[500]
217
+ }
218
+ )
219
+ )), images && images.length > 0 && /* @__PURE__ */ React__default.createElement(ScrollView, { horizontal: true, showsHorizontalScrollIndicator: false, style: {
220
+ marginTop: 4,
221
+ marginLeft: 8
222
+ } }, images.map((img, index) => /* @__PURE__ */ React__default.createElement(View, { key: `image-preview-${index}`, style: {
223
+ width: 48,
224
+ height: 48,
225
+ marginRight: 8,
226
+ borderRadius: 6,
227
+ overflow: "hidden",
228
+ position: "relative",
229
+ backgroundColor: colors.gray[200]
230
+ } }, /* @__PURE__ */ React__default.createElement(Image, { source: {
231
+ uri: img.uri || img.url
232
+ }, style: {
233
+ width: "100%",
234
+ height: "100%"
235
+ }, alt: `selected image ${index + 1}` }), /* @__PURE__ */ React__default.createElement(TouchableOpacity, { onPress: () => {
236
+ onRemoveImage(index);
237
+ }, style: {
238
+ position: "absolute",
239
+ top: 2,
240
+ right: 2,
241
+ backgroundColor: "rgba(0,0,0,0.6)",
242
+ borderRadius: 10,
243
+ width: 20,
244
+ height: 20,
245
+ alignItems: "center",
246
+ justifyContent: "center"
247
+ } }, /* @__PURE__ */ React__default.createElement(Ionicons, { name: "close", size: 14, color: "white" })))))), [onSelectImages, text, images, isUploadingImage, loading, onSend, onRemoveImage, placeholder, ref]);
248
+ const renderAccessoryDefault = useCallback(() => {
249
+ if (!images.length)
250
+ return null;
251
+ return /* @__PURE__ */ React__default.createElement(Box, { style: {
252
+ position: "relative",
253
+ height: 70,
254
+ backgroundColor: "transparent",
255
+ justifyContent: "center"
256
+ } }, /* @__PURE__ */ React__default.createElement(ScrollView, { horizontal: true, showsHorizontalScrollIndicator: false, style: {
257
+ flexDirection: "row",
258
+ paddingLeft: 15,
259
+ paddingRight: 5
260
+ }, contentContainerStyle: {
261
+ alignItems: "center",
262
+ height: "100%"
263
+ } }, images.map((img, index) => /* @__PURE__ */ React__default.createElement(View, { key: `image-preview-${index}`, style: {
264
+ width: 40,
265
+ height: 40,
266
+ marginRight: 15,
267
+ borderRadius: 4,
268
+ backgroundColor: colors.gray[200],
269
+ overflow: "hidden",
270
+ borderWidth: 1,
271
+ borderColor: "#e0e0e0",
272
+ position: "relative",
273
+ zIndex: 10
274
+ } }, /* @__PURE__ */ React__default.createElement(Image, { source: {
275
+ uri: img.uri || img.url
276
+ }, style: {
277
+ width: "100%",
278
+ height: "100%"
279
+ }, alt: `selected image ${index + 1}` }), /* @__PURE__ */ React__default.createElement(TouchableOpacity, { onPress: () => {
280
+ const newImages = [...images];
281
+ newImages.splice(index, 1);
282
+ setImages(newImages);
283
+ if (newImages.length === 0) {
284
+ setSelectedImage("");
285
+ const inputRef = getRefCurrent(ref);
286
+ if (inputRef && typeof inputRef.focus === "function") {
287
+ inputRef.focus();
288
+ }
289
+ }
290
+ }, style: {
291
+ position: "absolute",
292
+ top: -1,
293
+ right: -1,
294
+ backgroundColor: "rgba(0,0,0,0.6)",
295
+ borderRadius: 12,
296
+ width: 20,
297
+ height: 20,
298
+ alignItems: "center",
299
+ justifyContent: "center",
300
+ zIndex: 9999
301
+ } }, /* @__PURE__ */ React__default.createElement(Ionicons, { name: "close", size: 16, color: "white" }))))));
302
+ }, [images, setImages, setSelectedImage, ref]);
303
+ return /* @__PURE__ */ React__default.createElement(KeyboardAvoidingView, { style: {
304
+ flex: 1,
305
+ justifyContent: "flex-end",
306
+ backgroundColor: "#fff"
307
+ }, behavior: Platform.OS === "ios" ? "padding" : "height", keyboardVerticalOffset }, /* @__PURE__ */ React__default.createElement(View, { style: {
308
+ flex: 1,
309
+ backgroundColor: "#fff",
310
+ position: "relative",
311
+ marginBottom: bottomMargin
312
+ } }, renderErrorNotification(), loading && /* @__PURE__ */ React__default.createElement(Spinner, { color: colors.blue[500] }), /* @__PURE__ */ React__default.createElement(GiftedChat, __spreadValues({ ref, wrapInSafeArea, messages, onSend, text, onInputTextChanged, user, renderMessageText, renderActions: renderActions || null, renderAccessory: renderAccessory || renderAccessoryDefault, renderMessage, renderInputToolbar: renderInputToolbar || renderInputToolbarDefault, renderLoading: props.renderLoading || null, renderChatFooter, renderLoadEarlier, listViewProps, loadEarlier, isLoadingEarlier, bottomOffset: props.bottomOffset || 0, isKeyboardInternallyHandled: props.isKeyboardInternallyHandled || false, renderFooter: () => renderFooter ? renderFooter() : null, minComposerHeight, maxComposerHeight, placeholder: placeholder || "Jot something down", lightboxProps, infiniteScroll, alwaysShowSend, minInputToolbarHeight, textInputProps, messagesContainerStyle, isTyping: props.isTyping || false, renderChatEmpty: props.renderChatEmpty || null }, rest))));
313
+ });export{GiftedChatInboxComponent,GiftedChatInboxComponent as default};//# sourceMappingURL=GiftedChatInboxComponent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GiftedChatInboxComponent.js","sources":["../../../../src/screens/inbox/components/GiftedChatInboxComponent.tsx"],"sourcesContent":["import React, { forwardRef, useCallback, useMemo } from 'react';\nimport { Platform, View, KeyboardAvoidingView, TouchableOpacity, TextInput, ScrollView, Animated } from 'react-native';\nimport { Spinner, Box, Image, HStack, Text } from '@admin-layout/gluestack-ui-mobile';\nimport { GiftedChat, Send } from 'react-native-gifted-chat';\nimport { Ionicons, MaterialCommunityIcons, MaterialIcons } from '@expo/vector-icons';\nimport colors from 'tailwindcss/colors';\n// If you have a SlackMessage component, import it:\n// import SlackMessage from './SlackMessage';\n\nexport interface GiftedChatInboxComponentProps {\n messages: any[];\n onSend: (messages: any[]) => void;\n text: string;\n onInputTextChanged: (text: string) => void;\n user: any;\n images: any[];\n onSelectImages: () => void;\n onRemoveImage: (index: number) => void;\n selectedImage: string;\n setSelectedImage: (img: string) => void;\n isUploadingImage: boolean;\n loading: boolean;\n errorMessage: string;\n notificationType?: string;\n onCloseError?: () => void;\n inputToolbarHeight?: number;\n bottomMargin?: number;\n renderMessageText?: any;\n renderActions?: any;\n renderAccessory?: any;\n renderMessage?: any;\n renderInputToolbar?: any;\n renderChatFooter?: any;\n renderLoadEarlier?: any;\n loadEarlier?: boolean;\n isLoadingEarlier?: boolean;\n totalCount?: number;\n channelMessagesLength?: number;\n keyboardVerticalOffset?: number;\n placeholder?: string;\n listViewProps?: any;\n wrapInSafeArea?: boolean;\n minComposerHeight?: number;\n maxComposerHeight?: number;\n renderFooter?: any;\n lightboxProps?: any;\n infiniteScroll?: boolean;\n alwaysShowSend?: boolean;\n minInputToolbarHeight?: number;\n textInputProps?: any;\n messagesContainerStyle?: any;\n renderHeader?: any;\n [key: string]: any;\n}\n\n// Helper to get the current ref if it's an object\nfunction getRefCurrent(ref: React.ForwardedRef<any>) {\n if (ref && typeof ref === 'object' && 'current' in ref) {\n return ref.current;\n }\n return null;\n}\n\nexport const GiftedChatInboxComponent = forwardRef<any, GiftedChatInboxComponentProps>((props, ref) => {\n const {\n messages,\n onSend,\n text,\n onInputTextChanged,\n user,\n images,\n setImages,\n onSelectImages,\n onRemoveImage,\n selectedImage,\n setSelectedImage,\n isUploadingImage,\n loading,\n errorMessage,\n notificationType = 'error',\n onCloseError,\n inputToolbarHeight = 56,\n bottomMargin = 0,\n renderMessageText,\n renderActions,\n renderAccessory,\n renderMessage,\n renderInputToolbar,\n renderChatFooter,\n renderLoadEarlier,\n loadEarlier,\n isLoadingEarlier,\n keyboardVerticalOffset = Platform.OS === 'ios' ? 64 : 0,\n placeholder = 'Jot something down',\n listViewProps,\n wrapInSafeArea = true,\n minComposerHeight = 36,\n maxComposerHeight = 100,\n renderFooter,\n lightboxProps = {\n underlayColor: 'transparent',\n springConfig: { tension: 90000, friction: 90000 },\n disabled: true,\n },\n infiniteScroll = false,\n alwaysShowSend = true,\n minInputToolbarHeight = 30,\n textInputProps = {\n multiline: true,\n returnKeyType: 'default',\n enablesReturnKeyAutomatically: true,\n placeholderTextColor: colors.gray[400],\n },\n messagesContainerStyle = { paddingTop: 8 },\n renderHeader,\n ...rest\n } = props;\n\n // Error Notification\n const renderErrorNotification = () => {\n if (!errorMessage) return null;\n return (\n <Animated.View\n style={{\n position: 'absolute',\n top: 10,\n left: 10,\n right: 10,\n backgroundColor: notificationType === 'error' ? '#f44336' : '#ff9800',\n padding: 15,\n borderRadius: 8,\n shadowColor: '#000',\n shadowOffset: { width: 0, height: 2 },\n shadowOpacity: 0.25,\n shadowRadius: 3.84,\n elevation: 5,\n zIndex: 1000,\n }}\n >\n <View style={{ flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center' }}>\n <View>\n <Text style={{ color: 'white', fontWeight: 'bold' }}>\n {notificationType === 'error' ? 'Error' : 'Warning'}\n </Text>\n </View>\n <View>\n <TouchableOpacity onPress={onCloseError}>\n <Ionicons name=\"close\" size={20} color=\"white\" />\n </TouchableOpacity>\n </View>\n </View>\n <Text style={{ color: 'white', marginTop: 5 }}>{errorMessage}</Text>\n </Animated.View>\n );\n };\n\n const renderInputToolbarDefault = useCallback(\n (props) => (\n <View style={{ backgroundColor: '#fff', paddingBottom: 4, paddingTop: 4 }}>\n <View\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n minHeight: 44,\n maxHeight: 56,\n backgroundColor: '#fff',\n borderRadius: 22,\n marginHorizontal: 8,\n paddingHorizontal: 8,\n borderTopWidth: 1,\n borderTopColor: '#e0e0e0',\n }}\n >\n <TouchableOpacity\n onPress={onSelectImages}\n style={{\n width: 32,\n height: 32,\n borderRadius: 16,\n backgroundColor: '#fff',\n alignItems: 'center',\n justifyContent: 'center',\n marginRight: 8,\n }}\n >\n <MaterialIcons name=\"add\" size={24} color=\"#888\" />\n </TouchableOpacity>\n <TextInput\n ref={ref}\n style={{\n flex: 1,\n //minHeight: 36,\n maxHeight: 44,\n backgroundColor: 'transparent',\n color: '#444',\n paddingHorizontal: 8,\n paddingVertical: 0,\n alignSelf: 'center',\n textAlignVertical: 'center',\n }}\n placeholder={placeholder || 'Jot something down'}\n placeholderTextColor={colors.gray[400]}\n multiline\n value={text}\n onChangeText={onInputTextChanged}\n />\n <TouchableOpacity\n onPress={() => onSend([{ text: text }])}\n // disabled={(!messageText.trim() && images.length === 0) || isUploadingImage || loading}\n disabled={false}\n style={{\n marginLeft: 8,\n // opacity: (!messageText.trim() && images.length === 0) || isUploadingImage || loading ? 0.5 : 1,\n opacity: !text.trim() && images.length === 0 ? 0.5 : 1,\n }}\n >\n <MaterialCommunityIcons\n name=\"send-circle\"\n size={32}\n color={!text.trim() && images.length === 0 ? colors.gray[400] : colors.blue[500]}\n // color={\n // (!messageText.trim() && images.length === 0) || isUploadingImage || loading\n // ? colors.gray[400]\n // : colors.blue[500]\n // }\n />\n </TouchableOpacity>\n </View>\n {/* Selected Images Row */}\n {images && images.length > 0 && (\n <ScrollView\n horizontal\n showsHorizontalScrollIndicator={false}\n style={{ marginTop: 4, marginLeft: 8 }}\n >\n {images.map((img, index) => (\n <View\n key={`image-preview-${index}`}\n style={{\n width: 48,\n height: 48,\n marginRight: 8,\n borderRadius: 6,\n overflow: 'hidden',\n position: 'relative',\n backgroundColor: colors.gray[200],\n }}\n >\n <Image\n source={{ uri: img.uri || img.url }}\n style={{ width: '100%', height: '100%' }}\n alt={`selected image ${index + 1}`}\n />\n <TouchableOpacity\n onPress={() => {\n onRemoveImage(index);\n }}\n style={{\n position: 'absolute',\n top: 2,\n right: 2,\n backgroundColor: 'rgba(0,0,0,0.6)',\n borderRadius: 10,\n width: 20,\n height: 20,\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n <Ionicons name=\"close\" size={14} color=\"white\" />\n </TouchableOpacity>\n </View>\n ))}\n </ScrollView>\n )}\n </View>\n ),\n [onSelectImages, text, images, isUploadingImage, loading, onSend, onRemoveImage, placeholder, ref],\n );\n\n const renderAccessoryDefault = useCallback(() => {\n if (!images.length) return null;\n return (\n <Box style={{ position: 'relative', height: 70, backgroundColor: 'transparent', justifyContent: 'center' }}>\n <ScrollView\n horizontal\n showsHorizontalScrollIndicator={false}\n style={{\n flexDirection: 'row',\n paddingLeft: 15,\n paddingRight: 5,\n }}\n contentContainerStyle={{\n alignItems: 'center',\n height: '100%',\n }}\n >\n {images.map((img, index) => (\n <View\n key={`image-preview-${index}`}\n style={{\n width: 40,\n height: 40,\n marginRight: 15,\n borderRadius: 4,\n backgroundColor: colors.gray[200],\n overflow: 'hidden',\n borderWidth: 1,\n borderColor: '#e0e0e0',\n position: 'relative',\n zIndex: 10,\n }}\n >\n <Image\n source={{ uri: img.uri || img.url }}\n style={{ width: '100%', height: '100%' }}\n alt={`selected image ${index + 1}`}\n />\n {/* Cross button at top right */}\n <TouchableOpacity\n onPress={() => {\n const newImages = [...images];\n newImages.splice(index, 1);\n setImages(newImages);\n if (newImages.length === 0) {\n setSelectedImage('');\n const inputRef = getRefCurrent(ref);\n if (inputRef && typeof inputRef.focus === 'function') {\n inputRef.focus();\n }\n }\n }}\n style={{\n position: 'absolute',\n top: -1,\n right: -1,\n backgroundColor: 'rgba(0,0,0,0.6)',\n borderRadius: 12,\n width: 20,\n height: 20,\n alignItems: 'center',\n justifyContent: 'center',\n zIndex: 9999,\n }}\n >\n <Ionicons name=\"close\" size={16} color=\"white\" />\n </TouchableOpacity>\n </View>\n ))}\n </ScrollView>\n </Box>\n );\n }, [images, setImages, setSelectedImage, ref]);\n\n return (\n <KeyboardAvoidingView\n style={{ flex: 1, justifyContent: 'flex-end', backgroundColor: '#fff' }}\n behavior={Platform.OS === 'ios' ? 'padding' : 'height'}\n keyboardVerticalOffset={keyboardVerticalOffset}\n >\n <View\n style={{\n flex: 1,\n backgroundColor: '#fff',\n position: 'relative',\n marginBottom: bottomMargin,\n }}\n >\n {renderErrorNotification()}\n {loading && <Spinner color={colors.blue[500]} />}\n <GiftedChat\n ref={ref}\n wrapInSafeArea={wrapInSafeArea}\n messages={messages}\n onSend={onSend}\n text={text}\n onInputTextChanged={onInputTextChanged}\n user={user}\n renderMessageText={renderMessageText}\n renderActions={renderActions || null}\n renderAccessory={renderAccessory || renderAccessoryDefault}\n renderMessage={renderMessage}\n renderInputToolbar={renderInputToolbar || renderInputToolbarDefault}\n renderLoading={props.renderLoading || null}\n renderChatFooter={renderChatFooter}\n renderLoadEarlier={renderLoadEarlier}\n listViewProps={listViewProps}\n loadEarlier={loadEarlier}\n isLoadingEarlier={isLoadingEarlier}\n bottomOffset={props.bottomOffset || 0}\n isKeyboardInternallyHandled={props.isKeyboardInternallyHandled || false}\n renderFooter={() => (renderFooter ? renderFooter() : null)}\n minComposerHeight={minComposerHeight}\n maxComposerHeight={maxComposerHeight}\n placeholder={placeholder || 'Jot something down'}\n lightboxProps={lightboxProps}\n infiniteScroll={infiniteScroll}\n alwaysShowSend={alwaysShowSend}\n minInputToolbarHeight={minInputToolbarHeight}\n textInputProps={textInputProps}\n messagesContainerStyle={messagesContainerStyle}\n isTyping={props.isTyping || false}\n renderChatEmpty={props.renderChatEmpty || null}\n {...rest}\n />\n </View>\n </KeyboardAvoidingView>\n );\n});\n\nexport default GiftedChatInboxComponent;\n"],"names":["React","props"],"mappings":"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"}