@messenger-box/platform-mobile 10.0.3-alpha.36 → 10.0.3-alpha.37
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 +4 -0
- package/lib/screens/inbox/components/CachedImage/index.js +125 -93
- package/lib/screens/inbox/components/CachedImage/index.js.map +1 -1
- package/lib/screens/inbox/components/DialogsListItem.js +75 -271
- package/lib/screens/inbox/components/DialogsListItem.js.map +1 -1
- package/lib/screens/inbox/components/ServiceDialogsListItem.js +184 -415
- package/lib/screens/inbox/components/ServiceDialogsListItem.js.map +1 -1
- package/lib/screens/inbox/components/SlackMessageContainer/SlackBubble.js +0 -2
- package/lib/screens/inbox/components/SlackMessageContainer/SlackBubble.js.map +1 -1
- package/lib/screens/inbox/containers/ConversationView.js +478 -944
- package/lib/screens/inbox/containers/ConversationView.js.map +1 -1
- package/lib/screens/inbox/containers/Dialogs.js +212 -628
- package/lib/screens/inbox/containers/Dialogs.js.map +1 -1
- package/lib/screens/inbox/containers/ThreadConversationView.js +409 -1364
- package/lib/screens/inbox/containers/ThreadConversationView.js.map +1 -1
- package/package.json +3 -3
- package/src/screens/inbox/components/CachedImage/index.tsx +191 -140
- package/src/screens/inbox/components/DialogsListItem.tsx +104 -368
- package/src/screens/inbox/components/ServiceDialogsListItem.tsx +69 -377
- package/src/screens/inbox/components/SlackMessageContainer/SlackBubble.tsx +2 -4
- package/src/screens/inbox/containers/ConversationView.tsx +660 -1060
- package/src/screens/inbox/containers/ConversationView.tsx.bk +1467 -0
- package/src/screens/inbox/containers/Dialogs.tsx +301 -763
- package/src/screens/inbox/containers/ThreadConversationView.tsx +661 -1887
- package/lib/screens/inbox/components/workflow/dialogs-list-item-xstate.js +0 -175
- package/lib/screens/inbox/components/workflow/dialogs-list-item-xstate.js.map +0 -1
- package/lib/screens/inbox/components/workflow/service-dialogs-list-item-xstate.js +0 -191
- package/lib/screens/inbox/components/workflow/service-dialogs-list-item-xstate.js.map +0 -1
- package/lib/screens/inbox/containers/workflow/conversation-xstate.js +0 -380
- package/lib/screens/inbox/containers/workflow/conversation-xstate.js.map +0 -1
- package/lib/screens/inbox/containers/workflow/dialogs-xstate.js +0 -211
- package/lib/screens/inbox/containers/workflow/dialogs-xstate.js.map +0 -1
- package/lib/screens/inbox/containers/workflow/thread-conversation-xstate.js +0 -438
- package/lib/screens/inbox/containers/workflow/thread-conversation-xstate.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConversationView.js","sources":["../../../../src/screens/inbox/containers/ConversationView.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport {\n Avatar,\n AvatarFallbackText,\n AvatarImage,\n Box,\n Button,\n ButtonText,\n HStack,\n Icon,\n Image,\n Spinner,\n Text,\n} from '@admin-layout/gluestack-ui-mobile';\nimport { Platform, TouchableHighlight, SafeAreaView, View } from 'react-native';\nimport { useFocusEffect, useIsFocused, useNavigation } from '@react-navigation/native';\nimport { navigationRef } from '@common-stack/client-react';\nimport { useSelector } from 'react-redux';\nimport { orderBy, startCase, uniqBy } from 'lodash-es';\nimport * as ImagePicker from 'expo-image-picker';\nimport { encode as atob } from 'base-64';\nimport { Ionicons, MaterialCommunityIcons } from '@expo/vector-icons';\nimport { Actions, GiftedChat, IMessage, MessageText, Send, Composer, InputToolbar } from 'react-native-gifted-chat';\nimport { PreDefinedRole, RoomType, IExpoNotificationData, IFileInfo } from 'common';\nimport {\n OnChatMessageAddedDocument as CHAT_MESSAGE_ADDED,\n useMessagesQuery,\n useSendExpoNotificationOnPostMutation,\n useSendMessagesMutation,\n useViewChannelDetailQuery,\n useAddDirectChannelMutation,\n} from 'common/graphql';\nimport { useUploadFilesNative } from '@messenger-box/platform-client';\nimport { objectId } from '@messenger-box/core';\nimport { userSelector } from '@adminide-stack/user-auth0-client';\nimport { format, isToday, isYesterday } from 'date-fns';\nimport { ImageViewerModal, SlackMessage } from '../components/SlackMessageContainer';\nimport CachedImage from '../components/CachedImage';\nimport { config } from '../config';\nimport {\n conversationXstate,\n Actions as ConversationActions,\n BaseState,\n MainState,\n} from './workflow/conversation-xstate';\nimport colors from 'tailwindcss/colors';\n\n// Define an extended interface for ImagePickerAsset with url property\ninterface ExtendedImagePickerAsset extends ImagePicker.ImagePickerAsset {\n url?: string;\n fileName?: string;\n mimeType?: string;\n}\n\nconst {\n MESSAGES_PER_PAGE,\n CALL_TO_ACTION_BOX_BGCOLOR,\n CALL_TO_ACTION_PATH,\n CALL_TO_ACTION_BUTTON_BORDERCOLOR,\n CALL_TO_ACTION_TEXT_COLOR,\n} = config;\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\ninterface ISubscriptionHandlerProps {\n subscribeToNewMessages: () => any;\n channelId: string;\n}\n\ninterface IMessageProps extends IMessage {\n type: string;\n propsConfiguration?: any;\n replies?: any;\n isShowThreadMessage?: boolean;\n}\n\nexport interface AlertMessageAttachmentsInterface {\n title: string;\n isTitleHtml: boolean;\n icon: string;\n callToAction: {\n title: string;\n link: string;\n };\n}\n\n// Create a safer version of useMachine to handle potential errors\nfunction useSafeMachine(machine) {\n // Define the state type\n interface SafeStateType {\n context: {\n channelId: any;\n channelMessages: any[];\n totalCount: number;\n skip: number;\n loading: boolean;\n loadingOldMessages: boolean;\n error: any;\n selectedImage: string;\n files: any[];\n images: any[];\n messageText: string;\n imageLoading: boolean;\n };\n value: string;\n matches?: (stateValue: string) => boolean;\n }\n\n // Initialize with default state\n const [state, setState] = useState<SafeStateType>({\n context: {\n channelId: null,\n channelMessages: [],\n totalCount: 0,\n skip: 0,\n loading: false,\n loadingOldMessages: false,\n error: null,\n selectedImage: '',\n files: [],\n images: [],\n messageText: '',\n imageLoading: false,\n },\n value: 'idle',\n });\n\n // Create a safe send function\n const send = useCallback((event) => {\n try {\n // Log event for debugging\n console.log('Event received:', event.type);\n\n // Handle specific events manually\n if (event.type === ConversationActions.INITIAL_CONTEXT) {\n setState((prev) => ({\n ...prev,\n context: {\n ...prev.context,\n channelId: event.data?.channelId || null,\n },\n value: BaseState.FetchMessages,\n }));\n } else if (event.type === ConversationActions.SET_CHANNEL_MESSAGES) {\n setState((prev) => ({\n ...prev,\n context: {\n ...prev.context,\n channelMessages: event.data?.messages || [],\n totalCount: event.data?.totalCount || 0,\n loading: false,\n loadingOldMessages: false,\n },\n value: 'active',\n }));\n } else if (event.type === ConversationActions.CLEAR_MESSAGES) {\n setState((prev) => ({\n ...prev,\n context: {\n ...prev.context,\n channelMessages: [],\n totalCount: 0,\n },\n }));\n } else if (event.type === ConversationActions.SET_MESSAGE_TEXT) {\n setState((prev) => ({\n ...prev,\n context: {\n ...prev.context,\n messageText: event.data?.messageText || '',\n },\n }));\n } else if (event.type === ConversationActions.FETCH_MORE_MESSAGES) {\n setState((prev) => ({\n ...prev,\n context: {\n ...prev.context,\n loadingOldMessages: true,\n },\n value: MainState.FetchMoreMessages,\n }));\n } else if (event.type === ConversationActions.SET_IMAGE) {\n setState((prev) => ({\n ...prev,\n context: {\n ...prev.context,\n selectedImage: event.data?.image || '',\n images: event.data?.images || [],\n imageLoading: false,\n },\n }));\n } else if (event.type === ConversationActions.CLEAR_IMAGE) {\n setState((prev) => ({\n ...prev,\n context: {\n ...prev.context,\n selectedImage: '',\n images: [],\n },\n }));\n } else if (event.type === ConversationActions.START_LOADING) {\n setState((prev) => ({\n ...prev,\n context: {\n ...prev.context,\n loading: true,\n },\n }));\n } else if (event.type === ConversationActions.STOP_LOADING) {\n setState((prev) => ({\n ...prev,\n context: {\n ...prev.context,\n loading: false,\n },\n }));\n } else if (event.type === ConversationActions.SEND_MESSAGE) {\n setState((prev) => ({\n ...prev,\n context: {\n ...prev.context,\n loading: true,\n },\n value: MainState.SendMessage,\n }));\n } else if (event.type === ConversationActions.SEND_MESSAGE_WITH_FILE) {\n setState((prev) => ({\n ...prev,\n context: {\n ...prev.context,\n loading: true,\n },\n value: MainState.SendMessageWithFile,\n }));\n } else if (event.type === ConversationActions.CREATE_DIRECT_CHANNEL) {\n setState((prev) => ({\n ...prev,\n context: {\n ...prev.context,\n loading: true,\n },\n value: MainState.CreateDirectChannel,\n }));\n } else if (event.type === 'SEND_MESSAGE_SUCCESS' || event.type === 'SEND_MESSAGE_WITH_FILE_SUCCESS') {\n setState((prev) => ({\n ...prev,\n context: {\n ...prev.context,\n loading: false,\n messageText: '',\n images: [],\n selectedImage: '',\n },\n value: 'active',\n }));\n } else if (event.type === 'CREATE_DIRECT_CHANNEL_SUCCESS') {\n setState((prev) => ({\n ...prev,\n context: {\n ...prev.context,\n loading: false,\n channelId: event.data?.channelId || prev.context.channelId,\n messageText: '',\n },\n value: BaseState.FetchMessages,\n }));\n } else if (event.type === 'FETCH_MORE_MESSAGES_SUCCESS') {\n setState((prev) => {\n const newMessages = event.data?.messages || [];\n return {\n ...prev,\n context: {\n ...prev.context,\n loadingOldMessages: false,\n channelMessages: uniqBy([...prev.context.channelMessages, ...newMessages], ({ id }) => id),\n },\n value: 'active',\n };\n });\n } else if (event.type === 'ERROR') {\n setState((prev) => ({\n ...prev,\n context: {\n ...prev.context,\n loading: false,\n loadingOldMessages: false,\n error: event.data?.message || 'Unknown error',\n },\n value: 'error',\n }));\n }\n } catch (error) {\n console.error('Error in send function:', error);\n }\n }, []);\n\n // Add a custom matches function to the state\n const stateWithMatches = useMemo(() => {\n return {\n ...state,\n matches: (checkState) => {\n return state.value === checkState;\n },\n };\n }, [state]);\n\n // Return as a tuple to match useMachine API\n return [stateWithMatches, send] as const;\n}\n\nconst ConversationViewComponent = ({ channelId: ChannelId, role, isShowThreadMessage, ...rest }: any) => {\n const [channelToTop, setChannelToTop] = useState(0);\n\n // Create a ref to track if component is mounted\n const isMountedRef = useRef(true);\n\n // Use our safer custom implementation instead of the problematic useMachine\n const [state, send] = useSafeMachine(conversationXstate);\n\n // Define safe functions first to avoid \"used before declaration\" errors\n const safeContext = useCallback(() => {\n try {\n return state?.context || {};\n } catch (error) {\n console.error('Error accessing state.context:', error);\n return {};\n }\n }, [state]);\n\n const safeContextProperty = useCallback(\n (property, defaultValue = null) => {\n try {\n return state?.context?.[property] ?? defaultValue;\n } catch (error) {\n console.error(`Error accessing state.context.${property}:`, error);\n return defaultValue;\n }\n },\n [state],\n );\n\n const safeMatches = useCallback(\n (stateValue) => {\n try {\n return state?.matches?.(stateValue) || false;\n } catch (error) {\n console.error(`Error calling state.matches with ${stateValue}:`, error);\n return false;\n }\n },\n [state],\n );\n\n const safeSend = useCallback(\n (event) => {\n try {\n console.log('🛠️ Safe send event:', event.type);\n send(event);\n\n // For important events like SET_CHANNEL_MESSAGES, verify they worked\n if (event.type === ConversationActions.SET_CHANNEL_MESSAGES) {\n // Add a verification step to ensure state was updated\n setTimeout(() => {\n // Don't log for every check to avoid console spam\n if (state.context.channelMessages.length === 0 && event.data?.messages?.length > 0) {\n console.warn('🛠️ SET_CHANNEL_MESSAGES did not update state - messages still empty');\n }\n }, 100);\n }\n } catch (error) {\n console.error('🛠️ Error in safeSend:', error, 'Event type:', event.type);\n // Try direct state update as fallback for critical events\n if (event.type === ConversationActions.SET_CHANNEL_MESSAGES && event.data?.messages) {\n console.log('🛠️ Attempting fallback for SET_CHANNEL_MESSAGES');\n try {\n // Direct update as fallback\n send({\n type: 'DIRECT_STATE_UPDATE',\n data: event.data,\n });\n } catch (fallbackError) {\n console.error('🛠️ Even fallback failed:', fallbackError);\n }\n }\n }\n },\n [send, state.context.channelMessages.length],\n );\n\n // Immediately set initial context if needed\n useEffect(() => {\n if (ChannelId) {\n console.log('Setting initial channel ID on mount:', ChannelId);\n try {\n send({\n type: ConversationActions.INITIAL_CONTEXT,\n data: { channelId: ChannelId },\n });\n } catch (error) {\n console.error('Error sending initial context:', error);\n }\n }\n }, []);\n\n // Use a ref to track the current machine snapshot for safer access\n const stateRef = useRef(state);\n\n // Keep the ref updated with the latest snapshot\n useEffect(() => {\n stateRef.current = state;\n }, [state]);\n\n // Avoid referencing state.context directly in places that might cause undefined errors\n const safeGetContext = useCallback(() => {\n if (stateRef.current && stateRef.current.context) {\n return stateRef.current.context;\n }\n // Return default values if context is undefined\n return {\n channelId: null,\n channelMessages: [],\n totalCount: 0,\n skip: 0,\n loading: false,\n loadingOldMessages: false,\n error: null,\n selectedImage: '',\n files: [],\n images: [],\n messageText: '',\n imageLoading: false,\n };\n }, []);\n\n // Use cleanup function to prevent setting state after unmount\n useEffect(() => {\n return () => {\n isMountedRef.current = false;\n };\n }, []);\n\n const auth: any = useSelector(userSelector);\n const currentRoute = navigationRef.isReady() ? navigationRef?.getCurrentRoute() : null;\n const navigation = useNavigation<any>();\n const [selectedImage, setImage] = useState<string>('');\n const [isShowImageViewer, setImageViewer] = useState<boolean>(false);\n const [imageObject, setImageObject] = useState<any>({});\n const messageRootListRef = useRef<any>(null);\n const isFocused = useIsFocused();\n\n const [addDirectChannel] = useAddDirectChannelMutation();\n const { startUpload } = useUploadFilesNative();\n const [sendMsg] = useSendMessagesMutation();\n const [sendExpoNotificationOnPostMutation] = useSendExpoNotificationOnPostMutation();\n\n const {\n data,\n loading: messageLoading,\n refetch,\n fetchMore: fetchMoreMessages,\n subscribeToMore,\n }: any = useMessagesQuery({\n variables: {\n channelId: state.context.channelId?.toString(),\n parentId: null,\n limit: MESSAGES_PER_PAGE,\n skip: state.context.skip,\n },\n skip: !state.context.channelId,\n fetchPolicy: 'cache-and-network',\n nextFetchPolicy: 'cache-first',\n refetchWritePolicy: 'merge',\n onCompleted: (queryData) => {\n console.log('MESSAGE QUERY COMPLETED:', queryData);\n if (queryData?.messages?.data) {\n console.log(\n 'Raw message data from query:',\n JSON.stringify(queryData.messages.data).substring(0, 100) + '...',\n );\n console.log('Message count from query:', queryData.messages.data.length);\n console.log('Total count from query:', queryData.messages.totalCount);\n\n // DIRECT STATE UPDATE: Immediately update state to ensure messages are displayed\n if (queryData.messages.data.length > 0) {\n console.log('🔄 IMMEDIATE STATE UPDATE with messages:', queryData.messages.data.length);\n safeSend({\n type: ConversationActions.SET_CHANNEL_MESSAGES,\n data: {\n messages: queryData.messages.data,\n totalCount: queryData.messages.totalCount,\n },\n });\n }\n }\n },\n onError: (error) => {\n console.error('MESSAGE QUERY ERROR:', error);\n // Report error to state machine\n safeSend({ type: 'ERROR', data: { message: String(error) } });\n },\n });\n // console.log('🔄 MESSAGE QUERY COMPLETED:', JSON.stringify(data));\n // Modify the fetchMessagesDirectly function to use safe access\n const fetchMessagesDirectly = useCallback(async () => {\n const channelId = safeGetContext().channelId;\n if (!channelId) {\n console.warn('Cannot fetch messages: No channel ID');\n return;\n }\n\n try {\n console.log('💫 FETCHING messages for channel:', channelId);\n\n // Use loading state to prevent duplicate fetches\n send({ type: ConversationActions.START_LOADING });\n\n const response = await refetch({\n channelId: channelId.toString(),\n parentId: null,\n limit: MESSAGES_PER_PAGE,\n skip: 0,\n });\n\n if (response?.data?.messages) {\n const { data: messages, totalCount } = response.data.messages;\n\n if (messages && messages.length > 0) {\n // Batch update to reduce renders\n safeSend({\n type: ConversationActions.SET_CHANNEL_MESSAGES,\n data: { messages, totalCount },\n });\n } else {\n console.warn('No messages found for channel', channelId);\n // Still clear loading state\n send({ type: ConversationActions.STOP_LOADING });\n }\n } else {\n console.warn('Query returned no messages data');\n send({ type: ConversationActions.STOP_LOADING });\n }\n } catch (error) {\n console.error('ERROR fetching messages:', error);\n send({ type: ConversationActions.STOP_LOADING });\n }\n }, [safeGetContext, refetch, safeSend]);\n\n const fetchMoreMessagesImpl = useCallback(async () => {\n try {\n const response = await fetchMoreMessages({\n variables: {\n channelId: state.context.channelId?.toString(),\n parentId: null,\n skip: state.context.channelMessages.length,\n },\n });\n\n if (!response?.data?.messages?.data) {\n return { error: 'No messages returned' };\n }\n\n return { messages: response.data.messages.data };\n } catch (error) {\n return { error: String(error) };\n }\n }, [state.context.channelId, state.context.channelMessages.length, fetchMoreMessages]);\n\n const sendMessageImpl = useCallback(async () => {\n try {\n const notificationData: IExpoNotificationData = {\n url: config.INBOX_MESSEGE_PATH,\n params: { channelId: state.context.channelId, hideTabBar: true },\n screen: 'DialogMessages',\n other: { sound: Platform.OS === 'android' ? undefined : 'default' },\n };\n\n const response = await sendMsg({\n variables: {\n channelId: state.context.channelId,\n content: state.context.messageText,\n notificationParams: notificationData,\n },\n });\n\n return { message: response.data?.sendMessage };\n } catch (error) {\n return { error: String(error) };\n }\n }, [state.context.channelId, state.context.messageText, sendMsg]);\n\n // Fix the image selection process to ensure proper format for upload\n const onSelectImages = async () => {\n safeSend({ type: ConversationActions.START_LOADING });\n\n try {\n console.log('Starting image picker...');\n let imageSource = await ImagePicker.launchImageLibraryAsync({\n mediaTypes: ImagePicker.MediaTypeOptions.Images,\n allowsEditing: true,\n aspect: [4, 3],\n quality: 0.8,\n base64: true,\n exif: false,\n });\n\n if (!imageSource?.canceled) {\n console.log(\n 'Image selected. Asset details:',\n JSON.stringify({\n uri: imageSource?.assets?.[0]?.uri?.substring(0, 30) + '...',\n width: imageSource?.assets?.[0]?.width,\n height: imageSource?.assets?.[0]?.height,\n hasBase64: !!imageSource?.assets?.[0]?.base64,\n hasUri: !!imageSource?.assets?.[0]?.uri,\n }),\n );\n\n // Get the asset\n const selectedAsset = imageSource?.assets?.[0];\n if (!selectedAsset) {\n console.error('No asset found in selected image');\n safeSend({ type: ConversationActions.STOP_LOADING });\n return;\n }\n\n // Create a base64 image string for preview\n const base64Data = selectedAsset.base64;\n const previewImage = base64Data ? `data:image/jpeg;base64,${base64Data}` : selectedAsset.uri;\n\n // Format the asset for upload service requirements\n const asset: ExtendedImagePickerAsset = {\n ...selectedAsset,\n url: selectedAsset.uri,\n fileName: selectedAsset.fileName || `image_${Date.now()}.jpg`,\n mimeType: 'image/jpeg',\n };\n\n console.log('Prepared image asset for upload:', {\n hasUrl: !!asset.url,\n hasFileName: !!asset.fileName,\n hasMimeType: !!asset.mimeType,\n previewAvailable: !!previewImage,\n });\n\n // Update state with the new image\n safeSend({\n type: ConversationActions.SET_IMAGE,\n data: {\n image: previewImage,\n images: [asset], // Replace existing images with the new one\n },\n });\n\n console.log('Image state updated successfully');\n } else {\n console.log('Image selection cancelled');\n safeSend({ type: ConversationActions.STOP_LOADING });\n }\n } catch (error) {\n console.error('Error selecting image:', error);\n safeSend({ type: ConversationActions.STOP_LOADING });\n }\n };\n\n // Update the sendMessageWithFileImpl function to fix image uploads\n const sendMessageWithFileImpl = useCallback(async () => {\n try {\n console.log('Executing sendMessageWithFileImpl');\n\n // Generate a unique post ID for the message\n const postId = objectId();\n console.log('Generated postId for file upload:', postId);\n\n // Prepare notification data\n const notificationData: IExpoNotificationData = {\n url: config.INBOX_MESSEGE_PATH,\n params: { channelId: state.context.channelId, hideTabBar: true },\n screen: 'DialogMessages',\n other: { sound: Platform.OS === 'android' ? undefined : 'default' },\n };\n\n // Safety check for images\n if (!state.context.images || state.context.images.length === 0) {\n console.error('No images found in state');\n return { error: 'No images available to upload' };\n }\n\n // Format the images for upload if needed\n const imagesToUpload = state.context.images.map((img) => {\n // Ensure the image has all required properties\n return {\n ...img,\n uri: img.uri || img.url, // Use either uri or url\n type: 'image/jpeg',\n name: img.fileName || `image_${Date.now()}.jpg`,\n };\n });\n\n console.log(\n 'Formatted images for upload:',\n imagesToUpload.map((img) => ({\n hasUri: !!img.uri,\n hasUrl: !!img.url,\n hasName: !!img.name,\n hasType: !!img.type,\n hasFileName: !!img.fileName,\n uri: img.uri?.substring(0, 30) + '...',\n })),\n );\n\n // Upload the files\n console.log('Starting file upload...');\n const uploadResponse = await startUpload({\n file: imagesToUpload,\n saveUploadedFile: {\n variables: { postId },\n },\n createUploadLink: {\n variables: { postId },\n },\n });\n\n console.log(\n 'Upload response received:',\n uploadResponse?.data ? 'Has data' : 'No data',\n 'Error:',\n uploadResponse?.error ? uploadResponse.error : 'None',\n );\n\n if (uploadResponse?.error) {\n console.error('Upload error:', uploadResponse.error);\n return { error: String(uploadResponse.error) };\n }\n\n // Get uploaded file IDs\n const uploadedFiles = uploadResponse.data as unknown as IFileInfo[];\n console.log(\n 'Uploaded files:',\n uploadedFiles\n ? JSON.stringify(uploadedFiles.map((f) => ({ id: f.id, url: f.url?.substring(0, 30) + '...' })))\n : 'null',\n );\n\n const files = uploadedFiles?.map((f: any) => f.id) ?? null;\n\n console.log('Files uploaded successfully. File IDs:', files);\n\n // Send the message with the uploaded files\n console.log('Sending message with files:', {\n postId,\n channelId: state.context.channelId,\n content: state.context.messageText || ' ',\n hasFiles: !!files,\n fileCount: files?.length || 0,\n });\n\n const response = await sendMsg({\n variables: {\n postId,\n channelId: state.context.channelId,\n content: state.context.messageText || ' ', // Use a space if no text\n files,\n notificationParams: notificationData,\n },\n });\n\n if (response?.data?.sendMessage) {\n console.log('Message with file sent successfully:', response.data.sendMessage.id);\n\n // Log the file data from the response to verify it's being returned correctly\n if (response.data.sendMessage.files?.data) {\n console.log(\n '📷 Message response file data:',\n JSON.stringify({\n fileCount: response.data.sendMessage.files.data.length,\n fileUrl: response.data.sendMessage.files.data[0]?.url?.substring(0, 30) + '...',\n }),\n );\n }\n\n // Clear the images after successful send\n setTimeout(() => {\n safeSend({ type: ConversationActions.CLEAR_IMAGE });\n }, 100);\n } else {\n console.error('Failed to send message with file:', response?.errors);\n }\n\n return { message: response.data?.sendMessage };\n } catch (error) {\n console.error('Error in sendMessageWithFileImpl:', error);\n return { error: String(error) };\n }\n }, [state.context.channelId, state.context.messageText, state.context.images, startUpload, sendMsg, safeSend]);\n\n const createDirectChannelImpl = useCallback(async () => {\n try {\n if (\n !rest?.isCreateNewChannel ||\n rest?.newChannelData?.type !== RoomType?.Direct ||\n !rest?.newChannelData?.userIds?.length\n ) {\n return { error: 'Invalid channel data' };\n }\n\n const response = await addDirectChannel({\n variables: {\n receiver: [...(rest?.newChannelData?.userIds ?? [])],\n displayName: 'DIRECT CHANNEL',\n },\n });\n\n if (!response?.data?.createDirectChannel?.id) {\n return { error: 'Failed to create channel' };\n }\n\n const newChannelId = response.data.createDirectChannel.id;\n\n const notificationData: IExpoNotificationData = {\n url: config.INBOX_MESSEGE_PATH,\n params: { channelId: newChannelId, hideTabBar: true },\n screen: 'DialogMessages',\n other: { sound: Platform.OS === 'android' ? undefined : 'default' },\n };\n\n await sendMsg({\n variables: {\n channelId: newChannelId,\n content: state.context.messageText,\n notificationParams: notificationData,\n },\n });\n\n return { channelId: newChannelId };\n } catch (error) {\n return { error: String(error) };\n }\n }, [rest, state.context.messageText, addDirectChannel, sendMsg]);\n\n // Remove the implementation inside this effect\n useEffect(() => {\n // We've moved these implementations to useCallback hooks above\n }, [state.value, sendMsg, refetch, fetchMoreMessages, addDirectChannel, startUpload, rest, state.context]);\n\n React.useEffect(() => {\n return () => {\n send({ type: ConversationActions.CLEAR_MESSAGES });\n };\n }, []);\n\n useFocusEffect(\n React.useCallback(() => {\n if (state.context.channelId) {\n send({ type: ConversationActions.INITIAL_CONTEXT, data: { channelId: state.context.channelId } });\n }\n return () => {\n send({ type: ConversationActions.CLEAR_MESSAGES });\n };\n }, [state.context.channelId, isFocused]),\n );\n\n React.useEffect(() => {\n const currentChannelId = ChannelId || currentRoute?.params?.channelId;\n if (currentChannelId) {\n console.log('Setting initial channel ID:', currentChannelId);\n send({ type: ConversationActions.INITIAL_CONTEXT, data: { channelId: currentChannelId } });\n }\n }, [ChannelId, currentRoute]);\n\n React.useEffect(() => {\n if (state.context.selectedImage) {\n send({ type: ConversationActions.STOP_LOADING });\n }\n }, [state.context.selectedImage]);\n\n useEffect(() => {\n if (data?.messages?.data) {\n console.log('📩 QUERY DATA CHANGED - Messages received:', data.messages.data.length);\n const { data: messages, totalCount: messageTotalCount } = data.messages;\n\n if (messages && messages.length > 0) {\n console.log('📩 QUERY DATA - Setting channel messages, count:', messages.length);\n\n // Use timeout to ensure this doesn't conflict with other state updates\n setTimeout(() => {\n // Directly update the state machine with new messages\n safeSend({\n type: ConversationActions.SET_CHANNEL_MESSAGES,\n data: {\n messages: uniqBy([...messages, ...state.context.channelMessages], ({ id }) => id),\n totalCount: messageTotalCount,\n },\n });\n\n // Verify the update was processed properly\n setTimeout(() => {\n const currentMessagesCount = state.context.channelMessages?.length || 0;\n console.log('📩 STATE UPDATE VERIFICATION - Current message count:', currentMessagesCount);\n\n if (currentMessagesCount === 0) {\n console.warn('⚠️ STATE NOT UPDATED after message data received - triggering fallback');\n // Direct fallback approach\n safeSend({\n type: ConversationActions.SET_CHANNEL_MESSAGES,\n data: {\n messages: messages,\n totalCount: messageTotalCount,\n },\n });\n }\n }, 500);\n }, 0);\n\n // Debug: Log the first message to verify data format\n if (messages[0]) {\n const sample = messages[0];\n console.log(\n '📩 SAMPLE MESSAGE:',\n JSON.stringify({\n id: sample.id,\n message: sample.message,\n author: {\n id: sample.author?.id,\n name: `${sample.author?.givenName} ${sample.author?.familyName}`,\n },\n createdAt: sample.createdAt,\n }),\n );\n }\n }\n }\n }, [data, safeSend]);\n\n // Optimize onFetchOld by adding debounce logic\n const onFetchOld = useCallback(() => {\n // Prevent multiple rapid calls\n if (fetchOldDebounceRef.current) return;\n\n // Check if we need to fetch more messages\n if (\n state?.context?.totalCount > state?.context?.channelMessages?.length &&\n !state?.context?.loadingOldMessages\n ) {\n // Set debounce\n fetchOldDebounceRef.current = true;\n\n // Send fetch event\n send({ type: ConversationActions.FETCH_MORE_MESSAGES });\n\n // Clear debounce after a timeout\n setTimeout(() => {\n fetchOldDebounceRef.current = false;\n }, 1000);\n }\n }, [state?.context?.totalCount, state?.context?.channelMessages, state?.context?.loadingOldMessages]);\n\n // Add debounce ref\n const fetchOldDebounceRef = useRef(false);\n\n const isCloseToTop = ({ layoutMeasurement, contentOffset, contentSize }) => {\n const paddingToTop = 60;\n return contentSize.height - layoutMeasurement.height - paddingToTop <= contentOffset.y;\n };\n\n const dataURLtoFile = (dataurl: any, filename: any) => {\n var arr = dataurl.split(','),\n mime = arr[0].match(/:(.*?);/)[1],\n bstr = atob(arr[1]),\n n = bstr.length,\n u8arr = new Uint8Array(n);\n while (n--) {\n u8arr[n] = bstr.charCodeAt(n);\n }\n return new File([u8arr], filename, { type: mime });\n };\n\n // Fix the render send function to ensure it works for image-only messages\n const renderSend = useCallback(\n (props) => {\n // Enable the send button if there's text OR we have images\n const hasContent = !!props.text || state?.context?.images?.length > 0;\n const canSend = (state?.context?.channelId || rest?.isCreateNewChannel) && hasContent;\n\n return (\n <Send\n {...props}\n disabled={!canSend}\n containerStyle={{\n justifyContent: 'center',\n alignItems: 'center',\n height: 40,\n width: 44,\n marginRight: 4,\n marginBottom: 0,\n marginLeft: 4,\n }}\n >\n <View style={{ padding: 4 }}>\n <MaterialCommunityIcons\n name=\"send-circle\"\n size={32}\n color={canSend ? colors.blue[500] : colors.gray[400]}\n />\n </View>\n </Send>\n );\n },\n [state?.context?.channelId, state?.context?.images, rest?.isCreateNewChannel],\n );\n\n // Fix the handleSend function to properly handle image-only messages\n const handleSend = useCallback(\n async (messages) => {\n // Extract message text from GiftedChat messages array\n const messageText = messages && messages.length > 0 ? messages[0]?.text || ' ' : ' ';\n console.log('Sending message:', messageText);\n console.log('Images:', state.context.images?.length);\n\n // Check if we can send a message (channel exists or we're creating one)\n if (!state.context.channelId && !rest?.isCreateNewChannel) {\n console.log('Cannot send - no channel');\n return;\n }\n\n // Allow sending if we have text OR images (image-only messages are valid)\n const hasText = !!messageText && messageText !== ' ';\n const hasImages = state.context.images && state.context.images.length > 0;\n\n if (!hasText && !hasImages) {\n console.log('Nothing to send - no text or images');\n return;\n }\n\n // Set the message text in the state (even if empty for image-only messages)\n safeSend({ type: ConversationActions.SET_MESSAGE_TEXT, data: { messageText } });\n\n // Handle direct channel creation if needed\n if (rest?.isCreateNewChannel && !state.context.channelId) {\n if (rest?.newChannelData?.type === RoomType?.Direct) {\n safeSend({ type: ConversationActions.CREATE_DIRECT_CHANNEL });\n }\n return;\n }\n\n // Send message with or without image based on state\n if (hasImages) {\n console.log('Sending message with file');\n safeSend({ type: ConversationActions.SEND_MESSAGE_WITH_FILE });\n } else {\n console.log('Sending text-only message');\n safeSend({ type: ConversationActions.SEND_MESSAGE });\n }\n },\n [state.context.channelId, state.context.images, rest?.isCreateNewChannel, rest?.newChannelData?.type, safeSend],\n );\n\n // Update fetchMessagesWithFallback to not use fallback state\n const fetchMessagesWithFallback = useCallback(async () => {\n if (!state.context.channelId) return;\n\n try {\n console.log('🔄 DIRECT FETCH: Using direct approach for channel:', state.context.channelId);\n\n const response = await refetch({\n channelId: state.context.channelId?.toString(),\n parentId: null,\n limit: MESSAGES_PER_PAGE,\n skip: 0,\n });\n\n if (response?.data?.messages?.data) {\n const messages = response.data.messages.data;\n console.log('✅ DIRECT FETCH: Got messages:', messages.length);\n\n // Skip fallback and send directly to state machine\n send({\n type: ConversationActions.SET_CHANNEL_MESSAGES,\n data: {\n messages,\n totalCount: response.data.messages.totalCount,\n },\n });\n }\n } catch (error) {\n console.error('❌ DIRECT FETCH ERROR:', error);\n }\n }, [state.context.channelId, refetch]);\n\n // Auto-trigger fallback if needed\n useEffect(() => {\n let timeoutId: NodeJS.Timeout;\n\n if (state.context.channelId && state.context.channelMessages.length === 0) {\n timeoutId = setTimeout(() => {\n console.log('⚠️ ACTIVATING FALLBACK - XState not updating after timeout');\n fetchMessagesWithFallback();\n }, 3000); // Wait 3 seconds for normal flow to work\n }\n\n return () => {\n if (timeoutId) clearTimeout(timeoutId);\n };\n }, [state.context.channelId, state.context.channelMessages, fetchMessagesWithFallback]);\n\n // Optimize the messageList calculation for better performance\n const messageList = useMemo(() => {\n // Only recalculate when these dependencies change\n console.log('🔄 CALCULATING MESSAGE LIST - Optimized version');\n\n // Short-circuit if no messages to process\n if (!state?.context?.channelMessages || state.context.channelMessages.length === 0) {\n console.log('No messages to process');\n return [];\n }\n\n // Use a more efficient approach - pre-filter messages once\n const filteredMessages = uniqBy(state.context.channelMessages, ({ id }) => id);\n\n // Skip processing if no filtered messages\n if (filteredMessages.length === 0) {\n return [];\n }\n\n // Transform messages only once and return\n return orderBy(filteredMessages, ['createdAt'], ['desc']).map((msg) => {\n const date = new Date(msg.createdAt);\n\n // Extract image URL from files data\n let imageUrl = null;\n if (msg.files?.data && msg.files.data.length > 0) {\n const fileData = msg.files.data[0];\n if (fileData && fileData.url) {\n imageUrl = fileData.url;\n }\n }\n\n // Create message in a more direct way\n return {\n _id: msg.id,\n text: msg.message,\n createdAt: date,\n user: {\n _id: msg.author?.id || '',\n name: `${msg.author?.givenName || ''} ${msg.author?.familyName || ''}`,\n avatar: msg.author?.picture || '',\n },\n image: imageUrl,\n sent: msg?.isDelivered,\n received: msg?.isRead,\n type: msg?.type,\n propsConfiguration: msg?.propsConfiguration,\n replies: msg?.replies ?? [],\n isShowThreadMessage,\n };\n });\n }, [state?.context?.channelMessages, isShowThreadMessage]);\n\n // Memoize the renderMessageText function\n const renderMessageText = useCallback(\n (props: any) => {\n const { currentMessage } = props;\n const lastReply: any =\n currentMessage?.replies?.data?.length > 0 ? currentMessage?.replies?.data?.[0] : null;\n\n if (currentMessage.type === 'ALERT') {\n const attachment = currentMessage?.propsConfiguration?.contents?.attachment;\n let action: string = '';\n let actionId: any = '';\n let params: any = {};\n\n if (attachment?.callToAction?.extraParams) {\n const extraParams: any = attachment?.callToAction?.extraParams;\n const route: any = extraParams?.route ?? null;\n let path: any = null;\n let param: any = null;\n if (role && role == PreDefinedRole.Guest) {\n path = route?.guest?.name ? route?.guest?.name ?? null : null;\n param = route?.guest?.params ? route?.guest?.params ?? null : null;\n } else if (role && role == PreDefinedRole.Owner) {\n path = route?.host?.name ? route?.host?.name ?? null : null;\n param = route?.host?.params ? route?.host?.params ?? null : null;\n } else {\n path = route?.host?.name ? route?.host?.name ?? null : null;\n param = route?.host?.params ? route?.host?.params ?? null : null;\n }\n\n action = path;\n params = { ...param };\n } else if (attachment?.callToAction?.link) {\n action = CALL_TO_ACTION_PATH;\n actionId = attachment?.callToAction?.link.split('/').pop();\n params = { reservationId: actionId };\n }\n\n return (\n <>\n {attachment?.callToAction && action ? (\n <Box className={`bg-[${CALL_TO_ACTION_BOX_BGCOLOR}] rounded-[15] pb-2`}>\n <Button\n variant={'outline'}\n size={'sm'}\n className={`border-[${CALL_TO_ACTION_BUTTON_BORDERCOLOR}]`}\n onPress={() => action && params && navigation.navigate(action, params)}\n >\n <ButtonText className={`color-[${CALL_TO_ACTION_TEXT_COLOR}]`}>\n {attachment.callToAction.title}\n </ButtonText>\n </Button>\n <MessageText\n {...props}\n textStyle={{\n left: { marginLeft: 5, color: CALL_TO_ACTION_TEXT_COLOR, paddingHorizontal: 2 },\n }}\n />\n </Box>\n ) : (\n <TouchableHighlight\n underlayColor={'#c0c0c0'}\n style={{ width: '100%' }}\n onPress={() => {\n if (currentMessage?.isShowThreadMessage)\n navigation.navigate(config.THREAD_MESSEGE_PATH, {\n channelId: state?.context?.channelId,\n title: 'Message',\n postParentId: currentMessage?._id,\n isPostParentIdThread: true,\n });\n }}\n >\n <>\n <MessageText {...props} textStyle={{ left: { marginLeft: 5 } }} />\n {currentMessage?.replies?.data?.length > 0 && (\n <HStack space={'sm'} className=\"px-1 items-center\">\n <HStack>\n {currentMessage?.replies?.data\n ?.filter(\n (v: any, i: any, a: any) =>\n a.findIndex((t: any) => t?.author?.id === v?.author?.id) ===\n i,\n )\n ?.slice(0, 2)\n ?.reverse()\n ?.map((p: any, i: Number) => (\n <Avatar\n key={'conversations-view-key-' + i}\n size={'sm'}\n className=\"bg-transparent\"\n >\n <AvatarFallbackText>\n {startCase(p?.author?.username?.charAt(0))}\n </AvatarFallbackText>\n <AvatarImage\n alt=\"user image\"\n style={{\n borderRadius: 6,\n borderWidth: 2,\n borderColor: '#fff',\n }}\n source={{\n uri: p?.author?.picture,\n }}\n />\n </Avatar>\n ))}\n </HStack>\n <Text style={{ fontSize: 12 }} className=\"font-bold color-blue-800\">\n {currentMessage?.replies?.totalCount}{' '}\n {currentMessage?.replies?.totalCount == 1 ? 'reply' : 'replies'}\n </Text>\n <Text style={{ fontSize: 12 }} className=\"font-bold color-gray-500\">\n {lastReply ? createdAtText(lastReply?.createdAt) : ''}\n </Text>\n </HStack>\n )}\n </>\n </TouchableHighlight>\n )}\n </>\n );\n } else {\n return (\n <TouchableHighlight\n underlayColor={'#c0c0c0'}\n style={{ width: '100%' }}\n onPress={() => {\n if (currentMessage?.isShowThreadMessage)\n navigation.navigate(config.THREAD_MESSEGE_PATH, {\n channelId: state?.context?.channelId,\n title: 'Message',\n postParentId: currentMessage?._id,\n isPostParentIdThread: true,\n });\n }}\n >\n <>\n <MessageText {...props} textStyle={{ left: { marginLeft: 5 } }} />\n {currentMessage?.replies?.data?.length > 0 && (\n <HStack space={'sm'} className=\"px-1 items-center\">\n <HStack>\n {currentMessage?.replies?.data\n ?.filter(\n (v: any, i: any, a: any) =>\n a.findIndex((t: any) => t?.author?.id === v?.author?.id) === i,\n )\n ?.slice(0, 2)\n ?.reverse()\n ?.map((p: any, i: Number) => (\n <Avatar\n key={'conversation-replies-key-' + i}\n className=\"bg-transparent\"\n size={'sm'}\n >\n <AvatarFallbackText>\n {startCase(p?.author?.username?.charAt(0))}\n </AvatarFallbackText>\n <AvatarImage\n alt=\"user image\"\n style={{ borderRadius: 6, borderWidth: 2, borderColor: '#fff' }}\n source={{\n uri: p?.author?.picture,\n }}\n />\n </Avatar>\n ))}\n </HStack>\n <Text style={{ fontSize: 12 }} className=\"font-bold color-blue-800\">\n {currentMessage?.replies?.totalCount}{' '}\n {currentMessage?.replies?.totalCount == 1 ? 'reply' : 'replies'}\n </Text>\n <Text style={{ fontSize: 12 }} className=\"font-bold color-gray-500\">\n {lastReply ? createdAtText(lastReply?.createdAt) : ''}\n </Text>\n </HStack>\n )}\n </>\n </TouchableHighlight>\n );\n }\n },\n [navigation, state?.context?.channelId, role],\n );\n\n const renderActions = (props) => {\n return (\n <Actions\n {...props}\n options={{\n ['Choose from Library']: onSelectImages,\n ['Cancel']: () => {}, // Add this option to make the sheet dismissible\n }}\n optionTintColor=\"#000000\"\n cancelButtonIndex={1} // Set the Cancel option as the cancel button\n icon={() => (\n <Box\n style={{\n width: 32,\n height: 32,\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n <Ionicons name=\"image\" size={24} color={colors.blue[500]} />\n </Box>\n )}\n containerStyle={{\n alignItems: 'center',\n justifyContent: 'center',\n marginLeft: 8,\n marginBottom: 0,\n }}\n />\n );\n };\n\n // Create a more visible and reliable image preview with cancel button\n const renderAccessory = useCallback(\n (props) => {\n const selectedImage = safeContextProperty('selectedImage', '');\n\n if (!selectedImage) {\n return null;\n }\n\n return (\n <View\n style={{\n height: 50,\n padding: 3,\n backgroundColor: 'white',\n borderTopWidth: 1,\n borderTopColor: '#e0e0e0',\n flexDirection: 'row',\n alignItems: 'center',\n margin: 0,\n paddingBottom: 0,\n paddingTop: 5,\n position: 'absolute',\n bottom: 0,\n left: 0,\n right: 0,\n zIndex: 999,\n }}\n >\n <View\n style={{\n flex: 1,\n flexDirection: 'row',\n alignItems: 'center',\n paddingHorizontal: 15,\n }}\n >\n <Image\n key={state?.context?.selectedImage}\n alt={'selected image'}\n source={{ uri: state?.context?.selectedImage }}\n style={{\n width: 36,\n height: 36,\n borderRadius: 5,\n marginRight: 15,\n }}\n size={'xs'}\n />\n\n <TouchableHighlight\n underlayColor=\"#dddddd\"\n onPress={() => safeSend({ type: ConversationActions.CLEAR_IMAGE })}\n style={{\n backgroundColor: '#f44336',\n paddingVertical: 2,\n paddingHorizontal: 5,\n borderRadius: 5,\n marginLeft: 10,\n elevation: 3,\n shadowColor: '#000',\n shadowOffset: { width: 0, height: 1 },\n shadowOpacity: 0.3,\n shadowRadius: 2,\n }}\n >\n <Text style={{ color: 'white', fontWeight: 'bold' }}>X</Text>\n </TouchableHighlight>\n </View>\n </View>\n );\n },\n [state?.context?.selectedImage, safeSend],\n );\n\n const setImageViewerObject = (obj: any, v: boolean) => {\n setImageObject(obj);\n setImageViewer(v);\n };\n\n const modalContent = React.useMemo(() => {\n if (!imageObject) return <></>;\n const { image, _id } = imageObject;\n return (\n <CachedImage\n style={{ width: '100%', height: '100%' }}\n resizeMode={'cover'}\n cacheKey={`${_id}-slack-bubble-imageKey`}\n source={{\n uri: image,\n expiresIn: 86400,\n }}\n alt={'image'}\n />\n );\n }, [imageObject]);\n\n const renderMessage = useCallback(\n (props: any) => {\n // Use memo to prevent unnecessary re-renders of each message\n return (\n <SlackMessage {...props} isShowImageViewer={isShowImageViewer} setImageViewer={setImageViewerObject} />\n );\n },\n [isShowImageViewer],\n );\n\n let onScroll = false;\n\n // Optimize onMomentumScrollBegin for better scroll performance\n const onMomentumScrollBegin = async ({ nativeEvent }: any) => {\n // Set scroll state\n onScroll = true;\n\n // Use the debounced fetch function to prevent excessive calls\n if (isCloseToTop(nativeEvent)) {\n onFetchOld();\n }\n };\n\n const onEndReached = () => {\n console.log('on end reached');\n if (!onScroll) return;\n onScroll = false;\n };\n\n // Add debug logging to help diagnose the issue\n useEffect(() => {\n console.log('Current channel ID:', state.context.channelId);\n console.log('Current state:', state.value);\n console.log('Channel messages count:', state.context.channelMessages.length);\n }, [state.context.channelId, state.value, state.context.channelMessages]);\n\n // Fix the infinite update loop in useEffect monitoring state changes\n useEffect(() => {\n // Only trigger effect if we have a specific state to handle\n // Check if function exists and if we're in a valid state before calling implementation functions\n if (state && typeof state.matches === 'function') {\n if (state.matches(BaseState.FetchMessages)) {\n console.log('In FetchMessages state, attempting to fetch messages');\n // Use a ref to track if we've already fetched for this state update\n if (!fetchInProgressRef.current) {\n fetchInProgressRef.current = true;\n fetchMessagesDirectly().finally(() => {\n fetchInProgressRef.current = false;\n });\n }\n } else if (state.matches(MainState.FetchMoreMessages)) {\n if (!fetchMoreInProgressRef.current) {\n fetchMoreInProgressRef.current = true;\n fetchMoreMessagesImpl().then((result) => {\n if (result.error) {\n console.error('Error fetching more messages:', result.error);\n safeSend({ type: 'ERROR', data: { message: result.error } });\n } else {\n safeSend({ type: 'FETCH_MORE_MESSAGES_SUCCESS', data: result });\n }\n fetchMoreInProgressRef.current = false;\n });\n }\n } else if (state.matches(MainState.SendMessage)) {\n if (!sendInProgressRef.current) {\n sendInProgressRef.current = true;\n sendMessageImpl().then((result) => {\n if (result.error) {\n console.error('Error sending message:', result.error);\n safeSend({ type: 'ERROR', data: { message: result.error } });\n } else {\n safeSend({ type: 'SEND_MESSAGE_SUCCESS', data: result });\n }\n sendInProgressRef.current = false;\n });\n }\n } else if (state.matches(MainState.SendMessageWithFile)) {\n if (!sendFileInProgressRef.current) {\n sendFileInProgressRef.current = true;\n sendMessageWithFileImpl().then((result) => {\n if (result.error) {\n console.error('Error sending message with file:', result.error);\n safeSend({ type: 'ERROR', data: { message: result.error } });\n } else {\n safeSend({ type: 'SEND_MESSAGE_WITH_FILE_SUCCESS', data: result });\n }\n sendFileInProgressRef.current = false;\n });\n }\n } else if (state.matches(MainState.CreateDirectChannel)) {\n if (!createChannelInProgressRef.current) {\n createChannelInProgressRef.current = true;\n createDirectChannelImpl().then((result) => {\n if (result.error) {\n console.error('Error creating direct channel:', result.error);\n safeSend({ type: 'ERROR', data: { message: result.error } });\n } else {\n safeSend({ type: 'CREATE_DIRECT_CHANNEL_SUCCESS', data: result });\n }\n createChannelInProgressRef.current = false;\n });\n }\n }\n }\n }, [\n state?.value,\n fetchMessagesDirectly,\n fetchMoreMessagesImpl,\n sendMessageImpl,\n sendMessageWithFileImpl,\n createDirectChannelImpl,\n safeSend,\n ]);\n\n // Add refs to prevent duplicate operations\n const fetchInProgressRef = useRef(false);\n const fetchMoreInProgressRef = useRef(false);\n const sendInProgressRef = useRef(false);\n const sendFileInProgressRef = useRef(false);\n const createChannelInProgressRef = useRef(false);\n\n // Fix subscription handler to prevent infinite updates\n const renderChatFooter = useCallback(() => {\n return (\n <>\n <ImageViewerModal\n isVisible={isShowImageViewer}\n setVisible={setImageViewer}\n modalContent={modalContent}\n />\n <SubscriptionHandler\n channelId={state?.context?.channelId?.toString()}\n subscribeToNewMessages={() =>\n subscribeToMore({\n document: CHAT_MESSAGE_ADDED,\n variables: {\n channelId: state?.context?.channelId?.toString(),\n },\n updateQuery: (prev, { subscriptionData }: any) => {\n try {\n // Log for debugging\n console.log(\n '🔔 Subscription data received for channel:',\n state?.context?.channelId,\n );\n\n // Check if we have valid subscription data\n if (!subscriptionData?.data?.chatMessageAdded) {\n console.log('🔔 No valid message in subscription data');\n return prev;\n }\n\n const newMessage = subscriptionData.data.chatMessageAdded;\n console.log('🔔 New message received:', newMessage.id);\n\n // Check if we already have this message to avoid duplicates\n const currentMessages = prev?.messages?.data || [];\n if (currentMessages.some((msg) => msg.id === newMessage.id)) {\n console.log('🔔 Message already in cache, skipping update');\n return prev;\n }\n\n // Capture the new message in state directly\n setTimeout(() => {\n try {\n // Update state machine directly\n console.log('🔔 Directly updating state machine with new message');\n safeSend({\n type: ConversationActions.SET_CHANNEL_MESSAGES,\n data: {\n messages: [...state.context.channelMessages, newMessage],\n totalCount: (state.context.totalCount || 0) + 1,\n },\n });\n } catch (error) {\n console.error('🔔 Error updating state with subscription data:', error);\n }\n }, 0);\n\n // Update Apollo cache\n const updatedData = {\n ...prev,\n messages: {\n ...prev.messages,\n data: [...currentMessages, newMessage],\n totalCount: (prev?.messages?.totalCount || 0) + 1,\n },\n };\n\n console.log('🔔 Returning updated query data with new messages');\n return updatedData;\n } catch (error) {\n console.error('🔔 Error in subscription updateQuery:', error);\n return prev;\n }\n },\n })\n }\n />\n </>\n );\n }, [\n isShowImageViewer,\n modalContent,\n state?.context?.channelId,\n state?.context?.channelMessages,\n subscribeToMore,\n safeSend,\n ]);\n\n // Add optimized listViewProps to reduce re-renders and improve list performance\n const listViewProps = useMemo(\n () => ({\n onEndReached: onEndReached,\n onEndReachedThreshold: 0.5,\n onMomentumScrollBegin: onMomentumScrollBegin,\n removeClippedSubviews: true, // Improve performance by unmounting components when not visible\n initialNumToRender: 10, // Reduce initial render amount\n maxToRenderPerBatch: 7, // Reduce number in each render batch\n windowSize: 7, // Reduce the window size\n updateCellsBatchingPeriod: 50, // Batch cell updates to improve scrolling\n keyExtractor: (item) => item._id, // Add explicit key extractor\n }),\n [onEndReached, onMomentumScrollBegin],\n );\n\n // Add a loader for when more messages are being loaded\n const renderLoadEarlier = useCallback(() => {\n return state?.context?.loadingOldMessages ? (\n <View\n style={{\n padding: 10,\n backgroundColor: 'rgba(255,255,255,0.8)',\n borderRadius: 10,\n marginTop: 10,\n }}\n >\n <Spinner size=\"small\" color=\"#3b82f6\" />\n </View>\n ) : null;\n }, [state?.context?.loadingOldMessages]);\n\n // Add renderInputToolbar function\n const renderInputToolbar = useCallback((props) => {\n return (\n <InputToolbar\n {...props}\n containerStyle={{\n backgroundColor: 'white',\n borderTopWidth: 1,\n borderTopColor: colors.gray[200],\n paddingHorizontal: 4,\n paddingVertical: 0,\n paddingTop: 2,\n marginBottom: 0,\n marginTop: 0,\n }}\n primaryStyle={{\n alignItems: 'center',\n }}\n />\n );\n }, []);\n\n // Return optimized component with performance improvements\n return (\n <View\n style={{\n flex: 1,\n backgroundColor: 'white',\n }}\n >\n {state?.matches && state.matches(BaseState.FetchMessages) && <Spinner color={'#3b82f6'} />}\n\n <GiftedChat\n ref={messageRootListRef}\n wrapInSafeArea={true}\n renderLoading={() => <Spinner color={'#3b82f6'} />}\n messages={messageList}\n listViewProps={{\n ...listViewProps,\n contentContainerStyle: {\n paddingBottom: 10,\n },\n keyboardShouldPersistTaps: 'handled',\n }}\n onSend={handleSend}\n text={safeContextProperty('messageText', ' ') || ' '}\n onInputTextChanged={(text) =>\n safeSend({ type: ConversationActions.SET_MESSAGE_TEXT, data: { messageText: text } })\n }\n renderFooter={() =>\n safeContextProperty('loading') || safeContextProperty('imageLoading') ? (\n <Spinner color={'#3b82f6'} />\n ) : null\n }\n scrollToBottom\n user={{\n _id: auth?.id || '',\n }}\n isTyping={false} // Setting to false to reduce animations\n alwaysShowSend={true} // Always show send button regardless of text content\n renderSend={renderSend}\n renderMessageText={renderMessageText}\n renderInputToolbar={renderInputToolbar}\n minInputToolbarHeight={50}\n renderActions={safeContextProperty('channelId') && renderActions}\n renderAccessory={!!state?.context?.selectedImage ? renderAccessory : undefined}\n renderMessage={renderMessage}\n renderChatFooter={renderChatFooter}\n renderLoadEarlier={renderLoadEarlier}\n loadEarlier={state?.context?.totalCount > state?.context?.channelMessages?.length}\n isLoadingEarlier={state?.context?.loadingOldMessages}\n bottomOffset={Platform.OS === 'ios' ? 10 : 0} // Reduce bottom offset\n textInputProps={{\n style: {\n borderWidth: 1,\n borderColor: colors.gray[300],\n backgroundColor: '#f8f8f8',\n borderRadius: 20,\n minHeight: 36,\n maxHeight: 80,\n color: '#000',\n padding: 8,\n paddingHorizontal: 15,\n fontSize: 16,\n flex: 1,\n marginVertical: 2,\n marginBottom: 0,\n },\n multiline: true,\n returnKeyType: 'default',\n enablesReturnKeyAutomatically: true,\n placeholderTextColor: colors.gray[400],\n }}\n minComposerHeight={36}\n maxComposerHeight={100}\n isKeyboardInternallyHandled={true}\n placeholder=\"Type a message...\"\n lightboxProps={{\n underlayColor: 'transparent',\n springConfig: { tension: 90000, friction: 90000 },\n disabled: true,\n }}\n infiniteScroll={false} // Disable automatic loading\n />\n </View>\n );\n};\n\nconst SubscriptionHandler = ({ subscribeToNewMessages, channelId }: ISubscriptionHandlerProps) => {\n // Store the channelId in a ref to track changes\n const channelIdRef = useRef(channelId);\n\n useEffect(() => {\n // Don't set up subscription if there's no channel ID\n if (!channelId) {\n console.log('⚠️ No channel ID for subscription');\n return;\n }\n\n console.log('🔄 Setting up NEW subscription for channel:', channelId);\n\n // Call the subscribe function and store the unsubscribe function\n const unsubscribe = subscribeToNewMessages();\n\n // Update the ref with the current channelId\n channelIdRef.current = channelId;\n\n // Return cleanup function\n return () => {\n if (unsubscribe && typeof unsubscribe === 'function') {\n console.log('🔄 Cleaning up subscription for channel:', channelIdRef.current);\n unsubscribe();\n }\n };\n }, [channelId, subscribeToNewMessages]);\n\n return null;\n};\n\n// Export with React.memo to prevent unnecessary re-renders\nexport const ConversationView = React.memo(ConversationViewComponent, (prevProps, nextProps) => {\n // Only re-render if these critical props change\n return (\n prevProps.channelId === nextProps.channelId &&\n prevProps.role === nextProps.role &&\n prevProps.isShowThreadMessage === nextProps.isShowThreadMessage\n );\n});\n"],"names":["ConversationActions","_a","_b","_c","_d","_e","_f","_g","_h","_i","_j","_k","_l","React","_m","_n","_o","_p","_q","_r","_s","Actions","selectedImage","SlackMessage","CHAT_MESSAGE_ADDED"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ConversationView.js","sources":["../../../../src/screens/inbox/containers/ConversationView.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport {\n Avatar,\n AvatarFallbackText,\n AvatarImage,\n Box,\n Button,\n ButtonText,\n HStack,\n Icon,\n Image,\n Spinner,\n Text,\n Skeleton,\n} from '@admin-layout/gluestack-ui-mobile';\nimport { Platform, TouchableHighlight, SafeAreaView, View } from 'react-native';\nimport { useFocusEffect, useIsFocused, useNavigation } from '@react-navigation/native';\nimport { navigationRef } from '@common-stack/client-react';\nimport { useSelector } from 'react-redux';\nimport { orderBy, startCase, uniqBy } from 'lodash-es';\nimport * as ImagePicker from 'expo-image-picker';\nimport { encode as atob } from 'base-64';\nimport { Ionicons, MaterialCommunityIcons } from '@expo/vector-icons';\nimport { Actions, GiftedChat, IMessage, MessageText, Send, Composer, InputToolbar } from 'react-native-gifted-chat';\nimport { PreDefinedRole, RoomType, IExpoNotificationData, IFileInfo, FileRefType, PostTypeEnum } from 'common';\nimport {\n OnChatMessageAddedDocument as CHAT_MESSAGE_ADDED,\n useMessagesQuery,\n useSendExpoNotificationOnPostMutation,\n useSendMessagesMutation,\n useViewChannelDetailQuery,\n useAddDirectChannelMutation,\n MessagesDocument,\n} from 'common/graphql';\nimport { useUploadFilesNative } from '@messenger-box/platform-client';\nimport { objectId } from '@messenger-box/core';\nimport { userSelector } from '@adminide-stack/user-auth0-client';\nimport { format, isToday, isYesterday } from 'date-fns';\nimport { ImageViewerModal, SlackMessage } from '../components/SlackMessageContainer';\nimport CachedImage from '../components/CachedImage';\nimport { config } from '../config';\nimport colors from 'tailwindcss/colors';\nimport { v4 as uuidv4 } from 'uuid';\n\n// Define an extended interface for ImagePickerAsset with url property\ninterface ExtendedImagePickerAsset extends ImagePicker.ImagePickerAsset {\n url?: string;\n fileName?: string;\n mimeType?: string;\n}\n\nconst {\n MESSAGES_PER_PAGE,\n CALL_TO_ACTION_BOX_BGCOLOR,\n CALL_TO_ACTION_PATH,\n CALL_TO_ACTION_BUTTON_BORDERCOLOR,\n CALL_TO_ACTION_TEXT_COLOR,\n} = config;\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\ninterface ISubscriptionHandlerProps {\n subscribeToNewMessages: () => any;\n channelId: string;\n}\n\ninterface IMessageProps extends IMessage {\n type: string;\n propsConfiguration?: any;\n replies?: any;\n isShowThreadMessage?: boolean;\n}\n\nexport interface AlertMessageAttachmentsInterface {\n title: string;\n isTitleHtml: boolean;\n icon: string;\n callToAction: {\n title: string;\n link: string;\n };\n}\n\n// Fix for the optimistic response types\ntype OptimisticPropsConfig = {\n __typename: 'MachineConfiguration';\n resource: string;\n};\n\nconst ConversationViewComponent = ({ channelId: initialChannelId, role, isShowThreadMessage, ...rest }: any) => {\n // Core state management using React hooks instead of XState\n const [channelId, setChannelId] = useState<string | null>(initialChannelId || null);\n const [messageText, setMessageText] = useState('');\n const [skip, setSkip] = useState(0);\n const [loading, setLoading] = useState(false);\n const [loadingOldMessages, setLoadingOldMessages] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [selectedImage, setSelectedImage] = useState<string>('');\n const [images, setImages] = useState<any[]>([]);\n const [isShowImageViewer, setImageViewer] = useState<boolean>(false);\n const [imageObject, setImageObject] = useState<any>({});\n\n // Create refs for various operations\n const messageRootListRef = useRef<any>(null);\n const isMounted = useRef(true);\n const fetchOldDebounceRef = useRef(false);\n\n // Navigation and auth\n const auth: any = useSelector(userSelector);\n const currentRoute = navigationRef.isReady() ? navigationRef?.getCurrentRoute() : null;\n const navigation = useNavigation<any>();\n const isFocused = useIsFocused();\n\n // Apollo mutations\n const [addDirectChannel] = useAddDirectChannelMutation();\n const { startUpload } = useUploadFilesNative();\n const [sendMsg] = useSendMessagesMutation();\n const [sendExpoNotificationOnPostMutation] = useSendExpoNotificationOnPostMutation();\n\n // Apollo query for messages\n const {\n data,\n loading: messageLoading,\n refetch,\n fetchMore: fetchMoreMessages,\n subscribeToMore,\n } = useMessagesQuery({\n variables: {\n channelId: channelId?.toString(),\n parentId: null,\n limit: MESSAGES_PER_PAGE,\n skip: skip,\n },\n skip: !channelId,\n fetchPolicy: 'cache-and-network',\n nextFetchPolicy: 'cache-first',\n refetchWritePolicy: 'merge',\n notifyOnNetworkStatusChange: true,\n onCompleted: (queryData) => {\n // MESSAGE QUERY COMPLETED\n },\n onError: (error) => {\n setError(String(error));\n },\n });\n\n // Extract messages from the query data\n const channelMessages = useMemo(() => {\n return data?.messages?.data || [];\n }, [data?.messages?.data]);\n\n // Get total message count\n const totalCount = useMemo(() => {\n return data?.messages?.totalCount || 0;\n }, [data?.messages?.totalCount]);\n\n // Clear messages when component unmounts\n useEffect(() => {\n return () => {\n isMounted.current = false;\n };\n }, []);\n\n // Update channelId from props or navigation params\n useEffect(() => {\n const currentChannelId = initialChannelId || currentRoute?.params?.channelId;\n if (currentChannelId) {\n setChannelId(currentChannelId);\n }\n }, [initialChannelId, currentRoute]);\n\n // Focus/unfocus behavior\n useFocusEffect(\n React.useCallback(() => {\n if (channelId) {\n // Refresh messages when screen comes into focus\n refetch();\n }\n return () => {\n // Nothing needed on unfocus\n };\n }, [channelId, isFocused, refetch]),\n );\n\n // Loading state for image selection\n useEffect(() => {\n if (selectedImage) {\n setLoading(false);\n }\n }, [selectedImage]);\n\n // Fetch more messages function\n const fetchMoreMessagesImpl = useCallback(async () => {\n try {\n setLoadingOldMessages(true);\n const response = await fetchMoreMessages({\n variables: {\n channelId: channelId?.toString(),\n parentId: null,\n skip: channelMessages.length,\n },\n // updateQuery: (prev, { fetchMoreResult }) => {\n // if (!fetchMoreResult || !fetchMoreResult.messages) return prev;\n\n // // Create a new array of all messages deduped by ID\n // const combinedMessages = [...prev.messages.data, ...fetchMoreResult.messages.data].filter(\n // (message, index, self) => index === self.findIndex((m) => m.id === message.id),\n // );\n\n // return {\n // ...prev,\n // messages: {\n // ...prev.messages,\n // data: combinedMessages,\n // totalCount: fetchMoreResult.messages.totalCount,\n // __typename: prev.messages.__typename,\n // },\n // };\n // },\n });\n\n setLoadingOldMessages(false);\n if (!response?.data?.messages?.data) {\n return { error: 'No messages returned' };\n }\n\n return { messages: response.data.messages.data };\n } catch (error) {\n setLoadingOldMessages(false);\n setError(String(error));\n return { error: String(error) };\n }\n }, [channelId, channelMessages.length, fetchMoreMessages]);\n\n // Send message function\n const sendMessageImpl = useCallback(async () => {\n try {\n // Store the current message text and clear input immediately for better UX\n const currentMessageText = messageText;\n setMessageText('');\n\n const notificationData: IExpoNotificationData = {\n url: config.INBOX_MESSEGE_PATH,\n params: { channelId, hideTabBar: true },\n screen: 'DialogMessages',\n other: { sound: Platform.OS === 'android' ? undefined : 'default' },\n };\n\n // Create optimistic message with consistent structure\n const messageId = objectId();\n const optimisticMessage = {\n __typename: 'Post' as const,\n id: messageId,\n message: currentMessageText,\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n author: {\n __typename: 'UserAccount' as const,\n id: auth?.id,\n givenName: auth?.givenName || '',\n familyName: auth?.familyName || '',\n picture: auth?.picture || '',\n username: auth?.username || '',\n email: auth?.email || '',\n alias: [] as string[],\n tokens: [],\n },\n isDelivered: true,\n isRead: false,\n type: 'TEXT' as any,\n parentId: null,\n fromServer: false,\n channel: {\n __typename: 'Channel' as const,\n id: channelId,\n },\n propsConfiguration: {\n __typename: 'MachineConfiguration' as const,\n resource: '' as any, // Cast to any to bypass the URI type check\n },\n props: {},\n files: {\n __typename: 'FilesInfo' as const,\n data: [],\n totalCount: 0,\n },\n replies: {\n __typename: 'Messages' as const,\n data: [],\n totalCount: 0,\n },\n };\n\n const response = await sendMsg({\n variables: {\n channelId,\n content: currentMessageText,\n notificationParams: notificationData,\n },\n optimisticResponse: {\n __typename: 'Mutation',\n sendMessage: optimisticMessage,\n },\n });\n\n return { message: response.data?.sendMessage };\n } catch (error) {\n setLoading(false);\n setError(String(error));\n return { error: String(error) };\n }\n }, [channelId, messageText, sendMsg, auth]);\n\n // Image selection handler\n const onSelectImages = async () => {\n setLoading(true);\n\n try {\n let imageSource = await ImagePicker.launchImageLibraryAsync({\n mediaTypes: ImagePicker.MediaTypeOptions.Images,\n allowsEditing: true,\n aspect: [4, 3],\n quality: 0.8,\n base64: true,\n exif: false,\n });\n\n if (!imageSource?.canceled) {\n // Get the asset\n const selectedAsset = imageSource?.assets?.[0];\n if (!selectedAsset) {\n setLoading(false);\n return;\n }\n\n // Create a base64 image string for preview\n const base64Data = selectedAsset.base64;\n const previewImage = base64Data ? `data:image/jpeg;base64,${base64Data}` : selectedAsset.uri;\n\n // Format the asset for upload service requirements\n const asset: ExtendedImagePickerAsset = {\n ...selectedAsset,\n url: selectedAsset.uri,\n fileName: selectedAsset.fileName || `image_${Date.now()}.jpg`,\n mimeType: 'image/jpeg',\n };\n\n // Update state with the new image\n setSelectedImage(previewImage);\n setImages([asset]);\n } else {\n setLoading(false);\n }\n } catch (error) {\n setLoading(false);\n }\n };\n\n // Add a state variable to track which message should show the skeleton\n const [uploadingMessageId, setUploadingMessageId] = useState<string | null>(null);\n\n // Send message with file function - update to set and clear uploadingMessageId\n const sendMessageWithFileImpl = useCallback(async () => {\n try {\n // For file uploads, we still need loading state since we need to wait for the file upload\n setLoading(true);\n\n // Generate a unique post ID for the message\n const postId = objectId();\n\n // Set the message ID that should show the skeleton\n setUploadingMessageId(postId);\n\n // Prepare notification data\n const notificationData: IExpoNotificationData = {\n url: config.INBOX_MESSEGE_PATH,\n params: { channelId, hideTabBar: true },\n screen: 'DialogMessages',\n other: { sound: Platform.OS === 'android' ? undefined : 'default' },\n };\n\n // Safety check for images\n if (!images || images.length === 0) {\n setLoading(false);\n setUploadingMessageId(null);\n return { error: 'No images available to upload' };\n }\n\n // Format the images for upload if needed\n const imagesToUpload = images.map((img) => {\n // Ensure the image has all required properties\n return {\n ...img,\n uri: img.uri || img.url, // Use either uri or url\n type: 'image/jpeg',\n name: img.fileName || `image_${Date.now()}.jpg`,\n };\n });\n\n // Store current message text and clear inputs immediately for better UX\n const currentMessageText = messageText;\n setMessageText('');\n\n // Create file info for optimistic response\n const optimisticFileInfo = {\n __typename: 'FileInfo' as const,\n id: objectId(),\n url: selectedImage,\n name: imagesToUpload[0]?.name || 'image.jpg',\n extension: 'jpg',\n mimeType: 'image/jpeg',\n size: 0,\n refType: FileRefType.Post,\n height: imagesToUpload[0]?.height || 0,\n width: imagesToUpload[0]?.width || 0,\n };\n\n // Create optimistic message with file\n const optimisticMessage = {\n __typename: 'Post' as const,\n id: postId,\n message: currentMessageText || ' ',\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n author: {\n __typename: 'UserAccount' as const,\n id: auth?.id,\n givenName: auth?.givenName || '',\n familyName: auth?.familyName || '',\n picture: auth?.picture || '',\n username: auth?.username || '',\n email: auth?.email || '',\n alias: [] as string[],\n tokens: [],\n },\n isDelivered: true,\n isRead: false,\n type: 'TEXT' as any,\n parentId: null,\n fromServer: false,\n channel: {\n __typename: 'Channel' as const,\n id: channelId,\n },\n propsConfiguration: {\n __typename: 'MachineConfiguration' as const,\n resource: '' as any, // Cast to any to bypass the URI type check\n },\n props: {},\n files: {\n __typename: 'FilesInfo' as const,\n data: [\n {\n __typename: 'FileInfo' as const,\n id: objectId(),\n url: selectedImage,\n name: imagesToUpload[0]?.name || 'image.jpg',\n extension: 'jpg',\n mimeType: 'image/jpeg',\n size: 0,\n refType: FileRefType.Post,\n height: imagesToUpload[0]?.height || 0,\n width: imagesToUpload[0]?.width || 0,\n },\n ] as any,\n totalCount: 1,\n },\n replies: {\n __typename: 'Messages' as const,\n data: [],\n totalCount: 0,\n },\n };\n\n // Upload the files\n const uploadResponse = await startUpload({\n file: imagesToUpload,\n saveUploadedFile: {\n variables: { postId },\n },\n createUploadLink: {\n variables: { postId },\n },\n });\n\n if (uploadResponse?.error) {\n setLoading(false);\n setUploadingMessageId(null);\n return { error: String(uploadResponse.error) };\n }\n\n // Get uploaded file IDs\n const uploadedFiles = uploadResponse.data as unknown as IFileInfo[];\n const files = uploadedFiles?.map((f: any) => f.id) ?? null;\n\n // Send the message with the uploaded files\n const response = await sendMsg({\n variables: {\n postId,\n channelId,\n content: currentMessageText || ' ', // Use a space if no text\n files,\n notificationParams: notificationData,\n },\n optimisticResponse: {\n __typename: 'Mutation',\n sendMessage: optimisticMessage,\n },\n });\n\n if (response?.data?.sendMessage) {\n // Clear the images after successful send\n setSelectedImage('');\n setImages([]);\n }\n\n setLoading(false);\n setUploadingMessageId(null);\n return { message: response.data?.sendMessage };\n } catch (error) {\n setLoading(false);\n setUploadingMessageId(null);\n setError(String(error));\n return { error: String(error) };\n }\n }, [channelId, messageText, images, selectedImage, startUpload, sendMsg, auth]);\n\n // Create direct channel implementation\n const createDirectChannelImpl = useCallback(async () => {\n try {\n setLoading(true);\n if (\n !rest?.isCreateNewChannel ||\n rest?.newChannelData?.type !== RoomType?.Direct ||\n !rest?.newChannelData?.userIds?.length\n ) {\n setLoading(false);\n return { error: 'Invalid channel data' };\n }\n\n // Store current message text\n const currentMessageText = messageText;\n // Clear message text immediately for better UX\n setMessageText('');\n\n const response = await addDirectChannel({\n variables: {\n receiver: [...(rest?.newChannelData?.userIds ?? [])],\n displayName: 'DIRECT CHANNEL',\n },\n });\n\n if (!response?.data?.createDirectChannel?.id) {\n setLoading(false);\n return { error: 'Failed to create channel' };\n }\n\n const newChannelId = response.data.createDirectChannel.id;\n setChannelId(newChannelId);\n\n const notificationData: IExpoNotificationData = {\n url: config.INBOX_MESSEGE_PATH,\n params: { channelId: newChannelId, hideTabBar: true },\n screen: 'DialogMessages',\n other: { sound: Platform.OS === 'android' ? undefined : 'default' },\n };\n\n // Create unique message ID for optimistic response\n const messageId = objectId();\n\n // Fix the createDirectChannelImpl optimisticMessage with all required fields\n const optimisticMessage = {\n __typename: 'Post' as const,\n id: messageId,\n message: currentMessageText,\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n author: {\n __typename: 'UserAccount' as const,\n id: auth?.id,\n givenName: auth?.givenName || '',\n familyName: auth?.familyName || '',\n picture: auth?.picture || '',\n username: auth?.username || '',\n email: auth?.email || '',\n alias: [] as string[],\n tokens: [],\n },\n isDelivered: true,\n isRead: false,\n type: 'TEXT' as any,\n parentId: null,\n fromServer: false,\n channel: {\n __typename: 'Channel' as const,\n id: newChannelId,\n },\n propsConfiguration: {\n __typename: 'MachineConfiguration' as const,\n resource: '' as any, // Cast to any to bypass the URI type check\n },\n props: {},\n files: {\n __typename: 'FilesInfo' as const,\n data: [],\n totalCount: 0,\n },\n replies: {\n __typename: 'Messages' as const,\n data: [],\n totalCount: 0,\n },\n };\n\n // Send message in the new channel\n await sendMsg({\n variables: {\n channelId: newChannelId,\n content: currentMessageText,\n notificationParams: notificationData,\n },\n optimisticResponse: {\n __typename: 'Mutation',\n sendMessage: optimisticMessage,\n },\n });\n\n setLoading(false);\n return { channelId: newChannelId };\n } catch (error) {\n setLoading(false);\n setError(String(error));\n return { error: String(error) };\n }\n }, [rest, messageText, addDirectChannel, sendMsg, auth]);\n\n // Optimize onFetchOld by adding debounce logic\n const onFetchOld = useCallback(() => {\n // Prevent multiple rapid calls\n if (fetchOldDebounceRef.current) return;\n\n // Check if we need to fetch more messages\n if (totalCount > channelMessages.length && !loadingOldMessages) {\n // Set debounce\n fetchOldDebounceRef.current = true;\n\n // Fetch more messages\n fetchMoreMessagesImpl();\n\n // Clear debounce after a timeout\n setTimeout(() => {\n fetchOldDebounceRef.current = false;\n }, 1000);\n }\n }, [totalCount, channelMessages.length, loadingOldMessages, fetchMoreMessagesImpl]);\n\n const isCloseToTop = ({ layoutMeasurement, contentOffset, contentSize }) => {\n const paddingToTop = 60;\n return contentSize.height - layoutMeasurement.height - paddingToTop <= contentOffset.y;\n };\n\n // Transform the message data for GiftedChat\n const messageList = useMemo(() => {\n // Short-circuit if no messages to process\n if (!channelMessages || channelMessages.length === 0) {\n return [];\n }\n\n // Use a more efficient approach - pre-filter messages once\n const filteredMessages = uniqBy(channelMessages, ({ id }) => id);\n\n // Skip processing if no filtered messages\n if (filteredMessages.length === 0) {\n return [];\n }\n\n // Transform messages only once and return\n return orderBy(filteredMessages, ['createdAt'], ['desc']).map((msg) => {\n const date = new Date(msg.createdAt);\n\n // Extract image URL from files data\n let imageUrl = null;\n if (msg.files?.data && msg.files.data.length > 0) {\n const fileData = msg.files.data[0];\n if (fileData && fileData.url) {\n imageUrl = fileData.url;\n }\n }\n\n // Create message in a more direct way\n return {\n _id: msg.id,\n text: msg.message,\n createdAt: date,\n user: {\n _id: msg.author?.id || '',\n name: `${msg.author?.givenName || ''} ${msg.author?.familyName || ''}`,\n avatar: msg.author?.picture || '',\n },\n image: imageUrl,\n sent: msg?.isDelivered,\n received: msg?.isRead,\n type: msg?.type,\n propsConfiguration: msg?.propsConfiguration,\n replies: msg?.replies ?? [],\n isShowThreadMessage,\n };\n });\n }, [channelMessages, isShowThreadMessage]);\n\n // Render the send button\n const renderSend = useCallback(\n (props) => {\n // Enable the send button if there's text OR we have images\n const hasContent = !!props.text || images?.length > 0;\n const canSend = (channelId || rest?.isCreateNewChannel) && hasContent;\n\n return (\n <Send\n {...props}\n disabled={!canSend}\n containerStyle={{\n justifyContent: 'center',\n alignItems: 'center',\n height: 40,\n width: 44,\n marginRight: 4,\n marginBottom: 0,\n marginLeft: 4,\n }}\n >\n <View style={{ padding: 4 }}>\n <MaterialCommunityIcons\n name=\"send-circle\"\n size={32}\n color={canSend ? colors.blue[500] : colors.gray[400]}\n />\n </View>\n </Send>\n );\n },\n [channelId, images, rest?.isCreateNewChannel],\n );\n\n // Handle send for messages\n const handleSend = useCallback(\n async (messages) => {\n // Extract message text from GiftedChat messages array\n const newMessageText = messages && messages.length > 0 ? messages[0]?.text || ' ' : ' ';\n\n // Check if we can send a message (channel exists or we're creating one)\n if (!channelId && !rest?.isCreateNewChannel) {\n return;\n }\n\n // Allow sending if we have text OR images (image-only messages are valid)\n const hasText = !!newMessageText && newMessageText !== ' ';\n const hasImages = images && images.length > 0;\n\n if (!hasText && !hasImages) {\n return;\n }\n\n // Update the message text state - now handled in send functions for better UX\n setMessageText(newMessageText);\n\n // Handle direct channel creation if needed\n if (rest?.isCreateNewChannel && !channelId) {\n if (rest?.newChannelData?.type === RoomType?.Direct) {\n createDirectChannelImpl();\n }\n return;\n }\n\n // Send message with or without image based on state\n if (hasImages) {\n sendMessageWithFileImpl();\n } else {\n sendMessageImpl();\n }\n },\n [\n channelId,\n images,\n rest?.isCreateNewChannel,\n rest?.newChannelData?.type,\n createDirectChannelImpl,\n sendMessageWithFileImpl,\n sendMessageImpl,\n ],\n );\n\n // Render message text with customizations for alerts and replies\n const renderMessageText = useCallback(\n (props: any) => {\n const { currentMessage } = props;\n const lastReply: any =\n currentMessage?.replies?.data?.length > 0 ? currentMessage?.replies?.data?.[0] : null;\n\n if (currentMessage.type === 'ALERT') {\n const attachment = currentMessage?.propsConfiguration?.contents?.attachment;\n let action: string = '';\n let actionId: any = '';\n let params: any = {};\n\n if (attachment?.callToAction?.extraParams) {\n const extraParams: any = attachment?.callToAction?.extraParams;\n const route: any = extraParams?.route ?? null;\n let path: any = null;\n let param: any = null;\n if (role && role == PreDefinedRole.Guest) {\n path = route?.guest?.name ? route?.guest?.name ?? null : null;\n param = route?.guest?.params ? route?.guest?.params ?? null : null;\n } else if (role && role == PreDefinedRole.Owner) {\n path = route?.host?.name ? route?.host?.name ?? null : null;\n param = route?.host?.params ? route?.host?.params ?? null : null;\n } else {\n path = route?.host?.name ? route?.host?.name ?? null : null;\n param = route?.host?.params ? route?.host?.params ?? null : null;\n }\n\n action = path;\n params = { ...param };\n } else if (attachment?.callToAction?.link) {\n action = CALL_TO_ACTION_PATH;\n actionId = attachment?.callToAction?.link.split('/').pop();\n params = { reservationId: actionId };\n }\n\n return (\n <>\n {attachment?.callToAction && action ? (\n <Box className={`bg-[${CALL_TO_ACTION_BOX_BGCOLOR}] rounded-[15] pb-2`}>\n <Button\n variant={'outline'}\n size={'sm'}\n className={`border-[${CALL_TO_ACTION_BUTTON_BORDERCOLOR}]`}\n onPress={() => action && params && navigation.navigate(action, params)}\n >\n <ButtonText className={`color-[${CALL_TO_ACTION_TEXT_COLOR}]`}>\n {attachment.callToAction.title}\n </ButtonText>\n </Button>\n <MessageText\n {...props}\n textStyle={{\n left: { marginLeft: 5, color: CALL_TO_ACTION_TEXT_COLOR, paddingHorizontal: 2 },\n }}\n />\n </Box>\n ) : (\n <TouchableHighlight\n underlayColor={'#c0c0c0'}\n style={{ width: '100%' }}\n onPress={() => {\n if (currentMessage?.isShowThreadMessage)\n navigation.navigate(config.THREAD_MESSEGE_PATH, {\n channelId: channelId,\n title: 'Message',\n postParentId: currentMessage?._id,\n isPostParentIdThread: true,\n });\n }}\n >\n <>\n <MessageText {...props} textStyle={{ left: { marginLeft: 5 } }} />\n {currentMessage?.replies?.data?.length > 0 && (\n <HStack space={'sm'} className=\"px-1 items-center\">\n <HStack>\n {currentMessage?.replies?.data\n ?.filter(\n (v: any, i: any, a: any) =>\n a.findIndex((t: any) => t?.author?.id === v?.author?.id) ===\n i,\n )\n ?.slice(0, 2)\n ?.reverse()\n ?.map((p: any, i: Number) => (\n <Avatar\n key={'conversations-view-key-' + i}\n size={'sm'}\n className=\"bg-transparent\"\n >\n <AvatarFallbackText>\n {startCase(p?.author?.username?.charAt(0))}\n </AvatarFallbackText>\n <AvatarImage\n alt=\"user image\"\n style={{\n borderRadius: 6,\n borderWidth: 2,\n borderColor: '#fff',\n }}\n source={{\n uri: p?.author?.picture,\n }}\n />\n </Avatar>\n ))}\n </HStack>\n <Text style={{ fontSize: 12 }} className=\"font-bold color-blue-800\">\n {currentMessage?.replies?.totalCount}{' '}\n {currentMessage?.replies?.totalCount == 1 ? 'reply' : 'replies'}\n </Text>\n <Text style={{ fontSize: 12 }} className=\"font-bold color-gray-500\">\n {lastReply ? createdAtText(lastReply?.createdAt) : ''}\n </Text>\n </HStack>\n )}\n </>\n </TouchableHighlight>\n )}\n </>\n );\n } else {\n return (\n <TouchableHighlight\n underlayColor={'#c0c0c0'}\n style={{ width: '100%' }}\n onPress={() => {\n if (currentMessage?.isShowThreadMessage)\n navigation.navigate(config.THREAD_MESSEGE_PATH, {\n channelId: channelId,\n title: 'Message',\n postParentId: currentMessage?._id,\n isPostParentIdThread: true,\n });\n }}\n >\n <>\n <MessageText {...props} textStyle={{ left: { marginLeft: 5 } }} />\n {currentMessage?.replies?.data?.length > 0 && (\n <HStack space={'sm'} className=\"px-1 items-center\">\n <HStack>\n {currentMessage?.replies?.data\n ?.filter(\n (v: any, i: any, a: any) =>\n a.findIndex((t: any) => t?.author?.id === v?.author?.id) === i,\n )\n ?.slice(0, 2)\n ?.reverse()\n ?.map((p: any, i: Number) => (\n <Avatar\n key={'conversation-replies-key-' + i}\n className=\"bg-transparent\"\n size={'sm'}\n >\n <AvatarFallbackText>\n {startCase(p?.author?.username?.charAt(0))}\n </AvatarFallbackText>\n <AvatarImage\n alt=\"user image\"\n style={{ borderRadius: 6, borderWidth: 2, borderColor: '#fff' }}\n source={{\n uri: p?.author?.picture,\n }}\n />\n </Avatar>\n ))}\n </HStack>\n <Text style={{ fontSize: 12 }} className=\"font-bold color-blue-800\">\n {currentMessage?.replies?.totalCount}{' '}\n {currentMessage?.replies?.totalCount == 1 ? 'reply' : 'replies'}\n </Text>\n <Text style={{ fontSize: 12 }} className=\"font-bold color-gray-500\">\n {lastReply ? createdAtText(lastReply?.createdAt) : ''}\n </Text>\n </HStack>\n )}\n </>\n </TouchableHighlight>\n );\n }\n },\n [navigation, channelId, role],\n );\n\n // Render action buttons (including image upload)\n const renderActions = (props) => {\n return (\n <Actions\n {...props}\n options={{\n ['Choose from Library']: onSelectImages,\n ['Cancel']: () => {}, // Add this option to make the sheet dismissible\n }}\n optionTintColor=\"#000000\"\n cancelButtonIndex={1} // Set the Cancel option as the cancel button\n icon={() => (\n <Box\n style={{\n width: 32,\n height: 32,\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n <Ionicons name=\"image\" size={24} color={colors.blue[500]} />\n </Box>\n )}\n containerStyle={{\n alignItems: 'center',\n justifyContent: 'center',\n marginLeft: 8,\n marginBottom: 0,\n }}\n />\n );\n };\n\n // Create a more visible and reliable image preview with cancel button\n const renderAccessory = useCallback(() => {\n if (!selectedImage) {\n return null;\n }\n\n return (\n <View\n style={{\n height: 70,\n backgroundColor: 'white',\n borderTopWidth: 1,\n borderTopColor: '#e0e0e0',\n flexDirection: 'row',\n alignItems: 'center',\n margin: 0,\n padding: 0,\n paddingVertical: 0,\n position: 'absolute',\n bottom: Platform.OS === 'ios' ? 105 : 95, // Position well above the input area\n left: 0,\n right: 0,\n zIndex: 1,\n elevation: 3,\n shadowColor: '#000',\n shadowOffset: { width: 0, height: -1 },\n shadowOpacity: 0.05,\n shadowRadius: 2,\n }}\n >\n <View\n style={{\n flex: 1,\n flexDirection: 'row',\n alignItems: 'center',\n paddingLeft: 15,\n paddingRight: 5,\n }}\n >\n <View\n style={{\n width: 56,\n height: 56,\n marginRight: 15,\n borderRadius: 4,\n backgroundColor: colors.gray[200],\n overflow: 'hidden',\n borderWidth: 1,\n borderColor: '#e0e0e0',\n }}\n >\n <Image\n key={selectedImage}\n alt={'selected image'}\n source={{ uri: selectedImage }}\n style={{\n width: '100%',\n height: '100%',\n }}\n size={'md'}\n />\n {loading && (\n <View\n style={{\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n backgroundColor: 'rgba(255, 255, 255, 0.7)',\n justifyContent: 'center',\n alignItems: 'center',\n }}\n >\n <Spinner size=\"small\" color={colors.blue[500]} />\n </View>\n )}\n </View>\n\n <View style={{ flex: 1 }}>\n <Text style={{ fontSize: 14, fontWeight: '400', color: colors.gray[800] }}>\n {images[0]?.fileName || 'image_' + new Date().getTime() + '.jpg'}\n </Text>\n <Text style={{ fontSize: 12, color: colors.gray[500], marginTop: 2 }}>\n {loading ? 'Preparing...' : 'Ready to send'}\n </Text>\n </View>\n\n <TouchableHighlight\n underlayColor={'rgba(0,0,0,0.1)'}\n onPress={() => {\n setSelectedImage('');\n setImages([]);\n }}\n style={{\n backgroundColor: colors.red[500],\n borderRadius: 24,\n width: 36,\n height: 36,\n alignItems: 'center',\n justifyContent: 'center',\n marginRight: 10,\n }}\n >\n <Ionicons name=\"close\" size={20} color=\"white\" />\n </TouchableHighlight>\n </View>\n </View>\n );\n }, [selectedImage, loading, images]);\n\n const setImageViewerObject = (obj: any, v: boolean) => {\n setImageObject(obj);\n setImageViewer(v);\n };\n\n const modalContent = React.useMemo(() => {\n if (!imageObject || !imageObject.image) return null;\n const { image, _id } = imageObject;\n\n return (\n <CachedImage\n style={{ width: '100%', height: '100%' }}\n resizeMode={'cover'}\n cacheKey={`${_id}-modal-imageKey`}\n source={{\n uri: image,\n expiresIn: 86400,\n }}\n alt={'image'}\n />\n );\n }, [imageObject]);\n\n // Create a skeleton component for message bubbles with images\n const renderMessage = useCallback(\n (props: any) => {\n // Check if this message ID matches the uploading message ID\n const isUploading = props.currentMessage._id === uploadingMessageId && loading;\n\n if (isUploading && props.currentMessage.image) {\n // Return a custom message skeleton during upload\n return (\n <View\n style={{\n padding: 10,\n marginBottom: 10,\n marginRight: 10,\n alignSelf: 'flex-end',\n borderRadius: 15,\n backgroundColor: colors.gray[100],\n maxWidth: '80%',\n }}\n >\n {props.currentMessage.text && props.currentMessage.text.trim() !== '' && (\n <Box\n style={{\n height: 15,\n borderRadius: 4,\n backgroundColor: colors.gray[200],\n overflow: 'hidden',\n marginBottom: 8,\n }}\n >\n <Skeleton variant=\"rounded\" style={{ flex: 1 }} />\n </Box>\n )}\n <Box\n style={{\n height: 150,\n width: 150,\n borderRadius: 10,\n backgroundColor: colors.gray[200],\n overflow: 'hidden',\n }}\n >\n <Skeleton variant=\"rounded\" style={{ flex: 1 }} />\n </Box>\n </View>\n );\n }\n\n // Use memo to prevent unnecessary re-renders of each message\n return (\n <SlackMessage {...props} isShowImageViewer={isShowImageViewer} setImageViewer={setImageViewerObject} />\n );\n },\n [isShowImageViewer, uploadingMessageId, loading],\n );\n\n let onScroll = false;\n\n // Optimize onMomentumScrollBegin for better scroll performance\n const onMomentumScrollBegin = async ({ nativeEvent }: any) => {\n // Set scroll state\n onScroll = true;\n\n // Use the debounced fetch function to prevent excessive calls\n if (isCloseToTop(nativeEvent)) {\n onFetchOld();\n }\n };\n\n const onEndReached = () => {\n if (!onScroll) return;\n onScroll = false;\n };\n\n // Add a loader for when more messages are being loaded\n const renderLoadEarlier = useCallback(() => {\n return loadingOldMessages ? (\n <View\n style={{\n padding: 10,\n backgroundColor: 'rgba(255,255,255,0.8)',\n borderRadius: 10,\n marginTop: 10,\n }}\n >\n <Spinner size=\"small\" color=\"#3b82f6\" />\n </View>\n ) : null;\n }, [loadingOldMessages]);\n\n // Add renderInputToolbar function\n const renderInputToolbar = useCallback((props) => {\n return (\n <InputToolbar\n {...props}\n containerStyle={{\n backgroundColor: 'white',\n borderTopWidth: 1,\n borderTopColor: colors.gray[200],\n paddingHorizontal: 4,\n paddingVertical: 0,\n paddingTop: 2,\n marginBottom: 0,\n marginTop: 0,\n }}\n primaryStyle={{\n alignItems: 'center',\n }}\n />\n );\n }, []);\n\n // Create a memoized ImageViewerModal component\n const imageViewerModal = useMemo(\n () => (\n <ImageViewerModal isVisible={isShowImageViewer} setVisible={setImageViewer} modalContent={modalContent} />\n ),\n [isShowImageViewer, modalContent],\n );\n\n // Create a memoized subscription handler component\n const subscriptionHandler = useMemo(\n () => (\n <SubscriptionHandler\n channelId={channelId?.toString()}\n subscribeToNewMessages={() =>\n subscribeToMore({\n document: CHAT_MESSAGE_ADDED,\n variables: {\n channelId: channelId?.toString(),\n },\n // updateQuery: (prev, { subscriptionData }: any) => {\n // try {\n // // Check if we have valid subscription data\n // if (!subscriptionData?.data?.chatMessageAdded) {\n // return prev;\n // }\n\n // const newMessage = subscriptionData.data.chatMessageAdded;\n\n // // Check if message is from current user - skip update as it's handled by optimistic UI\n // if (newMessage.author?.id === auth?.id) {\n // return prev;\n // }\n\n // // Check if we already have this message to avoid duplicates\n // const currentMessages = prev?.messages?.data || [];\n // if (currentMessages.some((msg) => msg.id === newMessage.id)) {\n // return prev;\n // }\n\n // // Update Apollo cache\n // const updatedData = {\n // ...prev,\n // messages: {\n // ...prev.messages,\n // data: [newMessage, ...currentMessages],\n // totalCount: (prev?.messages?.totalCount || 0) + 1,\n // },\n // };\n\n // return updatedData;\n // } catch (error) {\n // return prev;\n // }\n // },\n })\n }\n />\n ),\n [channelId, subscribeToMore, auth?.id],\n );\n\n // Create a memoized renderChatFooter function\n const renderChatFooter = useCallback(() => {\n return (\n <>\n {imageViewerModal}\n {subscriptionHandler}\n </>\n );\n }, [imageViewerModal, subscriptionHandler]);\n\n // Add optimized listViewProps to reduce re-renders and improve list performance\n const listViewProps = useMemo(\n () => ({\n onEndReached: onEndReached,\n onEndReachedThreshold: 0.5,\n onMomentumScrollBegin: onMomentumScrollBegin,\n removeClippedSubviews: true, // Improve performance by unmounting components when not visible\n initialNumToRender: 10, // Reduce initial render amount\n maxToRenderPerBatch: 7, // Reduce number in each render batch\n windowSize: 7, // Reduce the window size\n updateCellsBatchingPeriod: 50, // Batch cell updates to improve scrolling\n keyExtractor: (item) => item._id, // Add explicit key extractor\n }),\n [onEndReached, onMomentumScrollBegin],\n );\n\n // Return optimized component with performance improvements\n return (\n <View\n style={{\n flex: 1,\n backgroundColor: 'white',\n position: 'relative',\n }}\n >\n {messageLoading && <Spinner color={'#3b82f6'} />}\n\n {/* Render the image preview directly in the container so it's properly positioned */}\n {selectedImage ? renderAccessory() : null}\n\n <GiftedChat\n ref={messageRootListRef}\n wrapInSafeArea={true}\n renderLoading={() => <Spinner color={'#3b82f6'} />}\n messages={messageList}\n listViewProps={{\n ...listViewProps,\n contentContainerStyle: {\n paddingBottom: selectedImage ? 90 : 0, // Add padding at the bottom when image is selected\n },\n }}\n onSend={handleSend}\n text={messageText || ' '}\n onInputTextChanged={(text) => setMessageText(text)}\n renderFooter={() => (loading && !images.length ? <Spinner color={'#3b82f6'} /> : null)}\n scrollToBottom\n user={{\n _id: auth?.id || '',\n }}\n isTyping={false} // Setting to false to reduce animations\n alwaysShowSend={true} // Always show send button regardless of text content\n renderSend={renderSend}\n renderMessageText={renderMessageText}\n renderInputToolbar={renderInputToolbar}\n minInputToolbarHeight={50}\n renderActions={channelId && renderActions}\n renderMessage={renderMessage}\n renderChatFooter={renderChatFooter}\n renderLoadEarlier={renderLoadEarlier}\n loadEarlier={totalCount > channelMessages.length}\n isLoadingEarlier={loadingOldMessages}\n bottomOffset={Platform.OS === 'ios' ? (selectedImage ? 90 : 10) : 0} // Adjust bottom offset based on image preview\n textInputProps={{\n style: {\n borderWidth: 1,\n borderColor: colors.gray[300],\n backgroundColor: '#f8f8f8',\n borderRadius: 20,\n minHeight: 36,\n maxHeight: 80,\n color: '#000',\n padding: 8,\n paddingHorizontal: 15,\n fontSize: 16,\n flex: 1,\n marginVertical: 2,\n marginBottom: 0,\n },\n multiline: true,\n returnKeyType: 'default',\n enablesReturnKeyAutomatically: true,\n placeholderTextColor: colors.gray[400],\n }}\n minComposerHeight={36}\n maxComposerHeight={100}\n isKeyboardInternallyHandled={true}\n placeholder=\"Type a message...\"\n lightboxProps={{\n underlayColor: 'transparent',\n springConfig: { tension: 90000, friction: 90000 },\n disabled: true,\n }}\n infiniteScroll={false} // Disable automatic loading\n />\n </View>\n );\n};\n\nconst SubscriptionHandler = ({ subscribeToNewMessages, channelId }: ISubscriptionHandlerProps) => {\n // Store the channelId in a ref to track changes\n const channelIdRef = useRef(channelId);\n\n useEffect(() => {\n // Don't set up subscription if there's no channel ID\n if (!channelId) {\n return;\n }\n\n // Call the subscribe function and store the unsubscribe function\n const unsubscribe = subscribeToNewMessages();\n\n // Update the ref with the current channelId\n channelIdRef.current = channelId;\n\n // Return cleanup function\n return () => {\n if (unsubscribe && typeof unsubscribe === 'function') {\n unsubscribe();\n }\n };\n }, [channelId, subscribeToNewMessages]);\n\n return null;\n};\n\n// Export with React.memo to prevent unnecessary re-renders\nexport const ConversationView = React.memo(ConversationViewComponent, (prevProps, nextProps) => {\n // Only re-render if these critical props change\n return (\n prevProps.channelId === nextProps.channelId &&\n prevProps.role === nextProps.role &&\n prevProps.isShowThreadMessage === nextProps.isShowThreadMessage\n );\n});\n"],"names":["_a","_b","error","React","_c","_d","SlackMessage","CHAT_MESSAGE_ADDED"],"mappings":"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"}
|