@messenger-box/platform-mobile 10.0.3-alpha.74 → 10.0.3-alpha.80
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +8 -0
- package/lib/compute.js.map +1 -1
- package/lib/module.js.map +1 -1
- package/lib/queries/inboxQueries.js.map +1 -1
- package/lib/screens/inbox/DialogMessages.js.map +1 -1
- package/lib/screens/inbox/DialogThreadMessages.js.map +1 -1
- package/lib/screens/inbox/DialogThreads.js.map +1 -1
- package/lib/screens/inbox/Inbox.js.map +1 -1
- package/lib/screens/inbox/components/CachedImage/consts.js.map +1 -1
- package/lib/screens/inbox/components/CachedImage/index.js.map +1 -1
- package/lib/screens/inbox/components/DialogItem.js.map +1 -1
- package/lib/screens/inbox/components/GiftedChatInboxComponent.js.map +1 -1
- package/lib/screens/inbox/components/SlackMessageContainer/ImageViewerModal.js.map +1 -1
- package/lib/screens/inbox/components/SlackMessageContainer/SlackBubble.js.map +1 -1
- package/lib/screens/inbox/components/SlackMessageContainer/SlackMessage.js.map +1 -1
- package/lib/screens/inbox/components/SubscriptionHandler.js.map +1 -1
- package/lib/screens/inbox/components/ThreadsViewItem.js.map +1 -1
- package/lib/screens/inbox/config/config.js.map +1 -1
- package/lib/screens/inbox/containers/ConversationView.js.map +1 -1
- package/lib/screens/inbox/containers/Dialogs.js.map +1 -1
- package/lib/screens/inbox/containers/ThreadConversationView.js +1 -1
- package/lib/screens/inbox/containers/ThreadConversationView.js.map +1 -1
- package/lib/screens/inbox/containers/ThreadsView.js.map +1 -1
- package/lib/screens/inbox/hooks/useInboxMessages.js.map +1 -1
- package/lib/screens/inbox/hooks/useSafeDialogThreadsMachine.js.map +1 -1
- package/lib/screens/inbox/workflow/dialog-threads-xstate.js.map +1 -1
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ThreadConversationView.js","sources":["../../../../src/screens/inbox/containers/ThreadConversationView.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport {\n Center,\n Avatar,\n AvatarFallbackText,\n AvatarImage,\n Box,\n Button,\n ButtonText,\n VStack,\n HStack,\n Icon,\n Image,\n Spinner,\n Text,\n Skeleton,\n Toast,\n ToastTitle,\n ToastDescription,\n useToast,\n Divider,\n} from '@admin-layout/gluestack-ui-mobile';\nimport {\n Platform,\n TouchableHighlight,\n View,\n TouchableOpacity,\n ScrollView,\n Animated,\n Keyboard,\n RefreshControl,\n} from 'react-native';\nimport { useFocusEffect, useNavigation, useRoute } from '@react-navigation/native';\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, MaterialIcons } from '@expo/vector-icons';\nimport { Actions, GiftedChat, IMessage, MessageText, Send, InputToolbar, Composer } from 'react-native-gifted-chat';\nimport {\n IPost,\n IPostThread,\n PreDefinedRole,\n IExpoNotificationData,\n IFileInfo,\n FileRefType,\n PostTypeEnum,\n} from 'common';\nimport {\n CHAT_MESSAGE_ADDED,\n useCreatePostThread,\n useSendExpoNotification,\n useGetPostThreadLazy,\n} from '../../../queries/inboxQueries';\nimport { useUploadFilesNative } from '@messenger-box/platform-client';\nimport { objectId } from '@messenger-box/core';\nimport { format, isToday, isYesterday } from 'date-fns';\nimport { userSelector } from '@adminide-stack/user-auth0-client';\nimport { config } from '../config';\nimport { ImageViewerModal, SlackMessage } from '../components/SlackMessageContainer';\nimport CachedImage from '../components/CachedImage';\nimport colors from 'tailwindcss/colors';\nimport ExpandableInputActionSheet from '../components/ExpandableInputActionSheet';\nimport GiftedChatInboxComponent from '../components/GiftedChatInboxComponent';\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 IMessageProps extends IMessage {\n type: string;\n propsConfiguration?: any;\n images?: string[];\n isOptimistic?: boolean;\n isUploading?: 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\ninterface IThreadSubscriptionHandlerProps {\n subscribeToNewMessages: () => any;\n channelId: string;\n}\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\n// Custom notification component\nconst ErrorNotification = ({ message, onClose }) => {\n const opacity = useRef(new Animated.Value(0)).current;\n\n useEffect(() => {\n // Fade in\n Animated.timing(opacity, {\n toValue: 1,\n duration: 300,\n useNativeDriver: true,\n }).start();\n\n // Auto hide after 4 seconds\n const timer = setTimeout(() => {\n Animated.timing(opacity, {\n toValue: 0,\n duration: 300,\n useNativeDriver: true,\n }).start(() => onClose && onClose());\n }, 4000);\n\n return () => clearTimeout(timer);\n }, []);\n\n return (\n <Animated.View\n style={{\n position: 'absolute',\n top: 10,\n left: 10,\n right: 10,\n backgroundColor: '#f44336',\n padding: 15,\n borderRadius: 8,\n shadowColor: '#000',\n shadowOffset: { width: 0, height: 2 },\n shadowOpacity: 0.25,\n shadowRadius: 3.84,\n elevation: 5,\n zIndex: 1000,\n opacity,\n }}\n >\n <HStack className=\"items-center justify-between\">\n <Text style={{ color: 'white', fontWeight: 'bold' }}>Upload Failed</Text>\n <TouchableOpacity onPress={onClose}>\n <Ionicons name=\"close\" size={20} color=\"white\" />\n </TouchableOpacity>\n </HStack>\n <Text style={{ color: 'white', marginTop: 5 }}>{message}</Text>\n </Animated.View>\n );\n};\n\n// Add a utility function for file validation\nconst isValidFileUrl = (url: string | undefined): boolean => {\n return !!url && typeof url === 'string' && url.length > 0;\n};\n\nconst ThreadConversationViewComponent = ({ channelId, postParentId, isPostParentIdThread, role }: any) => {\n const { params } = useRoute<any>();\n const [channelToTop, setChannelToTop] = useState(0);\n const [channelMessages, setChannelMessages] = useState<any>([]);\n const auth: any = useSelector(userSelector);\n const [totalCount, setTotalCount] = useState<any>(0);\n const [selectedImage, setSelectedImage] = useState<string>('');\n const [loadingOldMessages, setLoadingOldMessages] = useState<boolean>(false);\n const [loadEarlierMsg, setLoadEarlierMsg] = useState(false);\n const navigation = useNavigation<any>();\n const [files, setFiles] = useState<File[]>([]);\n const [images, setImages] = useState<ExtendedImagePickerAsset[]>([]);\n const [msg, setMsg] = useState<string>('');\n const [loading, setLoading] = useState(false);\n const [imageLoading, setImageLoading] = useState(false);\n const [uploadingMessageId, setUploadingMessageId] = useState<string | null>(null);\n const [expoTokens, setExpoTokens] = useState<any[]>([]);\n const [isShowImageViewer, setImageViewer] = useState<boolean>(false);\n const [imageObject, setImageObject] = useState<any>({});\n const [parentId, setParentId] = useState<any>(postParentId);\n const [postThread, setPostThread] = useState<IPostThread>();\n const { startUpload } = useUploadFilesNative();\n const [threadPost, setThreadPost] = useState<any[]>([]);\n const [isScrollToBottom, setIsScrollToBottom] = useState(false);\n const threadMessageListRef = useRef<any>(null);\n const toast = useToast();\n const [errorMessage, setErrorMessage] = useState('');\n\n // Add state for expandable input action sheet\n const [isActionSheetVisible, setActionSheetVisible] = useState(false);\n const [textUpdatedInActionSheet, setTextUpdatedInActionSheet] = useState(false);\n const [lastShownMsg, setLastShownMsg] = useState('');\n const textInputRef = useRef(null);\n\n // const [sendThreadMessage] = useSendThreadMessageMutation();\n const [sendThreadMessage] = useCreatePostThread();\n const [sendExpoNotificationOnPostMutation] = useSendExpoNotification();\n\n const [\n getThreadMessages,\n { data, loading: threadLoading, fetchMore: fetchMoreMessages, refetch: refetchThreadMessages, subscribeToMore },\n ] = useGetPostThreadLazy({ fetchPolicy: 'cache-and-network' });\n\n // Add new state for tracking uploads\n const [pendingUploads, setPendingUploads] = useState<Record<string, any>>({});\n const [uploadErrors, setUploadErrors] = useState<Record<string, string>>({});\n const [isUploadingImage, setIsUploadingImage] = useState(false);\n\n const [refreshing, setRefreshing] = useState(false);\n\n useFocusEffect(\n React.useCallback(() => {\n // navigation?.setOptions({ title: params?.title ?? 'Thread' });\n\n navigation.setOptions({\n title: params?.title ?? 'Thread',\n headerLeft: (props: any) => (\n <Button className=\"bg-transparent active:bg-gray-200 \" onPress={() => navigation.goBack()}>\n <MaterialIcons size={20} name=\"arrow-back-ios\" color={'black'} />\n </Button>\n ),\n });\n if (postParentId) {\n refetchThreadMessages({\n channelId: channelId?.toString(),\n role: role?.toString(),\n postParentId: postParentId?.toString(),\n selectedFields: 'id channel post replies replyCount lastReplyAt createdAt updatedAt',\n limit: MESSAGES_PER_PAGE,\n });\n }\n setParentId(postParentId);\n\n return () => {\n setTotalCount(0);\n setChannelMessages([]);\n setThreadPost([]);\n };\n }, [postParentId]),\n );\n\n useEffect(() => {\n //if (parentId && parentId == 0) {\n if (channelId && parentId) {\n getThreadMessages({\n variables: {\n channelId: channelId?.toString(),\n role: role?.toString(),\n postParentId: !parentId || parentId == 0 ? null : parentId?.toString(),\n selectedFields: 'id channel post replies replyCount lastReplyAt createdAt updatedAt',\n limit: MESSAGES_PER_PAGE,\n },\n });\n }\n }, [parentId]);\n\n React.useEffect(() => {\n if (data?.getPostThread) {\n const threads: any = data.getPostThread;\n const threadPost = threads?.post ?? [];\n const threadReplies = threads?.replies ?? [];\n const messeageTotalCount = threads?.replyCount ?? 0;\n const messages = [threadPost, ...threadReplies];\n\n if (\n (messages && messages.length > 0 && messeageTotalCount > totalCount) ||\n (messages && messages.length > 0 && channelMessages.length === 0)\n ) {\n setThreadMessages(messages, messeageTotalCount);\n }\n }\n if (isScrollToBottom && channelMessages) scrollToBottom();\n // scrollToBottom();\n // if (!isPostParentIdThread) {\n // // setTotalCount((pc: any) => pc + threadTotalCount);\n // setChannelMessages((oldMessages: any) => uniqBy([...threadMessage, ...oldMessages], ({ id }) => id));\n // }\n }, [data, channelMessages, loadingOldMessages, totalCount, isPostParentIdThread, isScrollToBottom]);\n\n const setThreadMessages = (messages: any, messagesTotalCount: number) => {\n setChannelMessages((oldMessages: any) => uniqBy([...messages, ...oldMessages], ({ id }) => id));\n setTotalCount(messagesTotalCount);\n };\n\n React.useEffect(() => {\n if (selectedImage) setImageLoading(false);\n }, [selectedImage]);\n\n const scrollToBottom = React.useCallback(() => {\n if (threadMessageListRef?.current) {\n setIsScrollToBottom(false);\n threadMessageListRef.current.scrollTop = threadMessageListRef.current.scrollHeight;\n }\n }, [threadMessageListRef]);\n\n const onFetchOld = useCallback(() => {\n if (totalCount > channelMessages.length && !loadingOldMessages) {\n setLoadEarlierMsg(true);\n setLoadingOldMessages(true);\n\n fetchMoreMessages({\n variables: {\n channelId: channelId?.toString(),\n role: role?.toString(),\n postParentId: parentId?.toString(),\n selectedFields: 'id channel post replies replyCount lastReplyAt createdAt updatedAt',\n limit: MESSAGES_PER_PAGE,\n skip: channelMessages.length - 1,\n },\n })\n .then((res: any) => {\n if (res?.data?.getPostThread) {\n const threads: any = res?.data?.getPostThread;\n const threadReplies = threads?.replies ?? [];\n const messeageTotalCount = threads?.replyCount ?? 0;\n setThreadMessages(threadReplies, messeageTotalCount);\n }\n })\n .finally(() => {\n setLoadEarlierMsg(false);\n setLoadingOldMessages(false);\n setRefreshing(false);\n })\n .catch((error: any) => {\n setLoadEarlierMsg(false);\n setLoadingOldMessages(false);\n setRefreshing(false);\n });\n } else {\n setRefreshing(false);\n }\n }, [parentId, channelId, totalCount, channelMessages]);\n\n // Pull to refresh handler\n const onRefresh = useCallback(() => {\n setRefreshing(true);\n onFetchOld();\n }, [onFetchOld]);\n\n // const isCloseToTop = ({ layoutMeasurement, contentOffset, contentSize }) => {\n // return contentOffset.y <= 100; // 100px from top\n // };\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 // Add a helper function for removing messages from the UI when uploads fail\n const removeMessageFromUI = useCallback((messageId: string) => {\n // Remove from pending uploads\n setPendingUploads((prev) => {\n const newPending = { ...prev };\n delete newPending[messageId];\n return newPending;\n });\n\n // Also remove any error state\n setUploadErrors((prev) => {\n const newErrors = { ...prev };\n delete newErrors[messageId];\n return newErrors;\n });\n\n // Reset upload state to ensure we don't get stuck with loading indicator\n setIsUploadingImage(false);\n }, []);\n\n // const onSelectImages = async () => {\n // setImageLoading(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 // setImageLoading(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 // setImageLoading(false);\n // } else {\n // setImageLoading(false);\n // }\n // } catch (error) {\n // console.error('Error selecting image:', error);\n // setImageLoading(false);\n // }\n // };\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: false,\n aspect: [4, 3],\n quality: 0.8,\n base64: true,\n exif: false,\n allowsMultipleSelection: true, // Enable multiple selection\n });\n\n if (!imageSource?.canceled) {\n // Get all selected assets\n const selectedAssets = imageSource?.assets || [];\n if (selectedAssets.length === 0) {\n setLoading(false);\n return;\n }\n\n // Process all selected images\n const newImages = selectedAssets.map((selectedAsset) => {\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 return asset;\n });\n\n // Set preview for the first image (for backward compatibility)\n if (newImages.length > 0) {\n const base64Data = newImages[0].base64;\n const previewImage = base64Data ? `data:image/jpeg;base64,${base64Data}` : newImages[0].uri;\n setSelectedImage(previewImage);\n }\n\n // Add new images to existing ones\n setImages((currentImages) => [...currentImages, ...newImages]);\n setLoading(false); // Set loading to false after successful selection\n } else {\n setLoading(false);\n }\n } catch (error) {\n setLoading(false);\n }\n };\n\n // Action sheet handlers\n const showActionSheet = useCallback(() => {\n setLastShownMsg(msg); // Store current message text when opening sheet\n setActionSheetVisible(true);\n }, [msg]);\n\n const handleActionSheetClose = useCallback(() => {\n // Close the sheet\n setActionSheetVisible(false);\n\n // If user didn't make any changes, restore the original message\n if (!textUpdatedInActionSheet) {\n setMsg(lastShownMsg);\n }\n\n // Reset the flag\n setTextUpdatedInActionSheet(false);\n }, [textUpdatedInActionSheet, lastShownMsg]);\n\n const handleActionSheetSend = () => {\n // Send the message using the existing handleSend function\n handleSend(msg);\n\n // Close the action sheet\n setActionSheetVisible(false);\n };\n\n // Add focus/blur handlers for the input field\n useEffect(() => {\n // When showing the action sheet, we should hide the keyboard for the main input\n if (isActionSheetVisible && Platform.OS === 'ios') {\n Keyboard.dismiss();\n }\n }, [isActionSheetVisible]);\n\n // Keep track of whether the input is in focus to help sync UI states\n const [isGiftedInputFocused, setIsGiftedInputFocused] = useState(false);\n\n const handleSend = useCallback(\n async (message: string) => {\n const newMessageText = message && message.length > 0 ? message || ' ' : ' ';\n // Check if we can send a message (channel and thread exists)\n\n if (!channelId) return;\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) return;\n\n // Start loading state\n setLoading(true);\n\n const postId = objectId();\n const currentDate = new Date();\n\n // Store current values before clearing\n const currentMessageText = message || '';\n const currentImages = [...images];\n\n // Clear UI immediately for next message\n setMsg('');\n setSelectedImage('');\n setImages([]);\n setFiles([]);\n\n // Close the action sheet if it's open\n if (isActionSheetVisible) {\n setActionSheetVisible(false);\n }\n\n // Create optimistic message with all images for immediate display\n const optimisticMessage = {\n id: postId,\n message: currentMessageText || (currentImages.length > 0 ? ' ' : ''),\n createdAt: currentDate.toISOString(),\n author: {\n id: auth?.profile?.id,\n givenName: auth?.profile?.given_name,\n familyName: auth?.profile?.family_name,\n picture: auth?.profile?.picture,\n },\n isDelivered: false, // Mark as not delivered yet during upload\n isRead: false,\n isOptimistic: true, // Flag to identify optimistic messages\n files:\n currentImages.length > 0\n ? {\n data: currentImages\n .filter((img) => img && (img.uri || img.url)) // Filter out invalid images\n .map((img) => ({\n id: objectId(),\n url: img.uri || img.url,\n localUri: img.uri || img.url, // Keep local URI for preview\n name: img.fileName || `image_${Date.now()}.jpg`,\n extension: 'jpg',\n mimeType: 'image/jpeg',\n refType: FileRefType.Post,\n height: img.height || 0,\n width: img.width || 0,\n isUploading: true, // Flag to indicate this file is uploading\n })),\n totalCount: currentImages.filter((img) => img && (img.uri || img.url)).length, // Only count valid images\n }\n : undefined,\n };\n\n // Only add optimistic message if there's content to send\n if (\n (optimisticMessage.message && optimisticMessage.message.trim() !== '') ||\n (optimisticMessage.files && optimisticMessage.files.data && optimisticMessage.files.data.length > 0)\n ) {\n setChannelMessages((oldMessages: any) => uniqBy([optimisticMessage, ...oldMessages], ({ id }) => id));\n setIsScrollToBottom(true);\n }\n\n try {\n let fileIds: string[] | null = null;\n\n // Handle file uploads if images exist\n if (currentImages && currentImages.length > 0) {\n // Filter out any invalid images before upload\n const validImages = currentImages.filter((img) => img && (img.uri || img.url));\n\n if (validImages.length === 0) {\n // No valid images to upload, just send the text message\n setIsUploadingImage(false);\n } else {\n setIsUploadingImage(true);\n\n // Format images for upload\n const imagesToUpload = validImages.map((img) => {\n return {\n ...img,\n uri: img.uri || img.url, // Use either uri or url\n type: img.mimeType || 'image/jpeg',\n name: img.fileName || `image_${Date.now()}.jpg`,\n };\n });\n\n // Track upload progress with messageId\n setUploadingMessageId(postId);\n setPendingUploads((prev) => ({\n ...prev,\n [postId]: {\n images: validImages,\n message: currentMessageText,\n },\n }));\n\n const uploadResponse = await startUpload({\n file: imagesToUpload as unknown as ImagePicker.ImagePickerAsset[],\n saveUploadedFile: {\n variables: {\n postId,\n },\n },\n createUploadLink: {\n variables: {\n postId,\n },\n },\n });\n\n if (uploadResponse?.error) {\n throw new Error(uploadResponse.error.toString());\n }\n\n const uploadedFiles = uploadResponse.data as unknown as IFileInfo[];\n if (uploadResponse.data) {\n fileIds = uploadedFiles?.map((f: any) => f.id) ?? null;\n\n // Update message with uploaded file information\n setChannelMessages((oldMessages: any) => {\n return oldMessages.map((msg) => {\n if (msg.id === postId && msg.isOptimistic) {\n // Update the uploaded files with real URLs from server\n return {\n ...msg,\n isOptimistic: false,\n files: {\n ...msg.files,\n data: uploadedFiles\n .filter((file) => isValidFileUrl(file.url))\n .map((file, index) => ({\n ...msg.files.data[index],\n url: file.url,\n isUploading: false,\n })),\n },\n };\n }\n return msg;\n });\n });\n }\n\n // Clear pending upload now that it's complete\n setPendingUploads((prev) => {\n const newPending = { ...prev };\n delete newPending[postId];\n return newPending;\n });\n }\n }\n\n // Send message with Apollo mutation\n await sendThreadMessage({\n variables: {\n postId,\n channelId,\n postThreadId: postThread && postThread?.id,\n postParentId: !parentId || parentId === 0 ? null : parentId,\n threadMessageInput: {\n content: currentMessageText,\n files: fileIds,\n role,\n },\n },\n optimisticResponse: {\n createPostThread: {\n __typename: 'ThreadMessageSent',\n lastMessage: {\n __typename: 'Post',\n id: postId,\n message: currentMessageText || ' ',\n createdAt: new Date().toISOString(),\n author: {\n __typename: 'UserAccount',\n id: auth?.profile?.id,\n givenName: auth?.profile?.given_name,\n familyName: auth?.profile?.family_name,\n picture: auth?.profile?.picture,\n },\n channel: { __typename: 'Channel', id: channelId.toString() },\n } as any, // Type assertion to avoid TypeScript errors\n data: {\n __typename: 'PostThread',\n id: postThread?.id || objectId(),\n },\n },\n },\n update: (cache, { data, errors }: any) => {\n if (!data || errors) return;\n\n setPostThread(data?.createPostThread?.data);\n const lastMessageId = data?.createPostThread?.lastMessage?.id;\n if (!parentId || parentId === 0) {\n setParentId(data?.createPostThread?.lastMessage?.id);\n }\n setChannelToTop(channelToTop + 1);\n\n // Send push notification with message info\n sendPushNotification(lastMessageId, channelId, parentId, data?.createPostThread?.data?.id);\n },\n });\n } catch (error) {\n console.error('Error sending message:', error);\n\n // Format error message based on environment\n let formattedErrorMessage = 'Failed to upload image. Please try again.';\n\n if (__DEV__) {\n // Show detailed error in development\n if (error.name === 'ApolloError') {\n formattedErrorMessage = error.message\n .replace('[ApolloError: ', '')\n .replace(']', '')\n .split(';')[0]; // Take first part of error for clarity\n } else {\n formattedErrorMessage = error.message || 'Unknown error occurred';\n }\n } else {\n // Show friendly message in production\n if (error.message?.includes('network') || error.message?.includes('timeout')) {\n formattedErrorMessage = 'Network error. Please check your connection.';\n } else if (error.message?.includes('permission')) {\n formattedErrorMessage = 'Permission denied for this operation.';\n }\n }\n\n // Show custom error notification\n setErrorMessage(formattedErrorMessage);\n\n // Remove the optimistic message if there was an error\n setChannelMessages((oldMessages: any) => oldMessages.filter((msg) => msg.id !== postId));\n\n // Clean up any pending upload states\n removeMessageFromUI(postId);\n } finally {\n setLoading(false);\n setIsUploadingImage(false);\n setUploadingMessageId(null);\n }\n },\n [\n auth,\n channelId,\n channelToTop,\n images,\n parentId,\n postThread,\n selectedImage,\n setChannelMessages,\n removeMessageFromUI,\n role,\n ],\n );\n\n const sendPushNotification = async (messageId: string, channelId: string, parentId: any, threadId: string) => {\n const notificationData: IExpoNotificationData = {\n url: config.THREAD_MESSEGE_PATH,\n params: { channelId, title: params?.title ?? 'Thread', postParentId: parentId, hideTabBar: true },\n screen: 'DialogThreadMessages',\n thread: { id: threadId },\n other: { sound: Platform.OS === 'android' ? undefined : 'default' },\n };\n if (parentId || parentId == 0) {\n await sendExpoNotificationOnPostMutation({\n variables: {\n postId: messageId?.toString(),\n notificationData,\n },\n });\n }\n };\n\n // Improved messageList function to better handle images\n const messageList = useMemo(() => {\n let currentDate = '';\n let res: any = [];\n const filteredMessages =\n channelMessages && channelMessages?.length > 0 ? uniqBy([...channelMessages], ({ id }: any) => id) : [];\n if (filteredMessages?.length) {\n orderBy(filteredMessages, ['createdAt'], ['desc']).map((msg) => {\n let message: IMessageProps = {\n _id: '',\n text: '',\n createdAt: 0,\n user: {\n _id: '',\n name: '',\n avatar: '',\n },\n type: '',\n };\n const date = new Date(msg.createdAt);\n message._id = msg.id;\n message.text = msg.message;\n message.createdAt = date;\n message.user = {\n _id: msg?.author?.id ?? auth?.profile?.id,\n name:\n msg?.author?.givenName ??\n auth?.profile?.given_name + ' ' + msg?.author?.familyName ??\n auth?.profile?.family_name,\n avatar: msg?.author?.picture ?? auth?.profile?.picture,\n };\n\n // Handle image uploads with proper UI feedback\n message.isOptimistic = msg?.isOptimistic || false;\n message.isUploading = msg.files?.data?.some((file) => file.isUploading) || false;\n\n // Improved image handling - ensure we have valid image URLs\n if (msg.files?.data?.length > 0) {\n // Filter out any invalid files first\n const validFiles = msg.files.data.filter(\n (file) =>\n file && (file.url || file.localUri) && typeof (file.url || file.localUri) === 'string',\n );\n\n if (validFiles.length > 0) {\n // For the first image (used in single image display)\n const firstFile = validFiles[0];\n const imageUrl = firstFile.isUploading\n ? firstFile.localUri || firstFile.url\n : firstFile.url || firstFile.localUri;\n\n if (imageUrl) {\n message.image = imageUrl;\n }\n\n // For multiple images\n if (validFiles.length > 1) {\n message.images = validFiles\n .map((file) =>\n file.isUploading ? file.localUri || file.url : file.url || file.localUri,\n )\n .filter((url) => !!url); // Filter out any undefined or empty URLs\n\n // If no valid URLs after filtering, don't set the images property\n if (message.images.length === 0) {\n delete message.images;\n }\n }\n }\n }\n\n message.sent = msg?.isDelivered;\n message.received = msg?.isRead;\n message.type = msg?.type;\n message.propsConfiguration = msg?.propsConfiguration;\n res.push(message);\n });\n }\n return res?.length > 0 ? uniqBy([...res], ({ _id }: any) => _id) : [];\n //return res;\n }, [channelMessages]);\n\n const renderSend = useCallback(\n (props) => {\n // If action sheet is visible, don't show the default send button\n if (isActionSheetVisible) {\n return null;\n }\n\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 && hasContent;\n const isDisabled = !canSend || isUploadingImage || loading;\n\n return (\n <Send\n {...props}\n disabled={isDisabled}\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 // onSend={(messages, shouldReset) => {\n // // Always use our custom handler to ensure images are handled properly\n // console.log('messages', messages);\n // // handleSend(props.text || ' ');\n // }}\n >\n <View style={{ padding: 4 }}>\n {isUploadingImage || loading ? (\n <Spinner size=\"small\" color={colors.blue[500]} />\n ) : (\n <MaterialCommunityIcons\n name=\"send-circle\"\n size={32}\n color={isDisabled ? colors.gray[400] : colors.blue[500]}\n />\n )}\n </View>\n </Send>\n );\n },\n [channelId, images, isUploadingImage, loading, isActionSheetVisible],\n );\n\n const renderMessageText1 = useCallback(\n (props: any) => {\n const { currentMessage } = props;\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 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 <MessageText {...props} textStyle={{ left: { marginLeft: 5 } }} />\n )}\n </>\n );\n } else {\n return <MessageText {...props} textStyle={{ left: { marginLeft: 5 } }} />;\n }\n },\n [navigation, role],\n );\n\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 // Do not render anything if the message text is empty or only whitespace\n if (!currentMessage?.text || currentMessage.text.trim() === '') {\n return null;\n }\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 // const renderActions = useCallback((props) => {\n // return (\n // <Actions\n // {...props}\n // icon={() => <Ionicons name={'image'} size={30} color={'black'} onPress={onSelectImages} />}\n // />\n // );\n // }, [onSelectImages]);\n\n // Render action buttons (including image upload)\n const renderActions = useCallback(\n (props) => {\n return (\n <Actions\n {...props}\n onPressActionButton={onSelectImages} // Direct action when pressing the button\n options={{\n ['Choose from Library']: () => {\n // Call the same image selection function used in the ActionSheet\n onSelectImages();\n },\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 className=\"w-8 h-8 items-center justify-center\">\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 [onSelectImages],\n );\n\n // Create a more visible and reliable image preview with cancel button\n const renderAccessory = useCallback(() => {\n if (!images.length) return null;\n return (\n <Box style={{ position: 'relative', height: 70, backgroundColor: 'transparent', justifyContent: 'center' }}>\n <ScrollView\n horizontal\n showsHorizontalScrollIndicator={false}\n style={{\n flexDirection: 'row',\n paddingLeft: 15,\n paddingRight: 5,\n }}\n contentContainerStyle={{\n alignItems: 'center',\n height: '100%',\n }}\n >\n {images.map((img, index) => (\n <View\n key={`image-preview-${index}`}\n style={{\n width: 40,\n height: 40,\n marginRight: 15,\n borderRadius: 4,\n backgroundColor: colors.gray[200],\n overflow: 'hidden',\n borderWidth: 1,\n borderColor: '#e0e0e0',\n position: 'relative',\n zIndex: 10,\n }}\n >\n <Image\n alt={`selected image ${index + 1}`}\n source={{ uri: img.uri || img.url }}\n style={{ width: '100%', height: '100%' }}\n size={'md'}\n />\n {/* Cross button at top right */}\n <TouchableOpacity\n onPress={() => {\n const newImages = [...images];\n newImages.splice(index, 1);\n setImages(newImages);\n if (newImages.length === 0) {\n setSelectedImage('');\n }\n }}\n style={{\n position: 'absolute',\n top: -1,\n right: -1,\n backgroundColor: 'rgba(0,0,0,0.6)',\n borderRadius: 12,\n width: 20,\n height: 20,\n alignItems: 'center',\n justifyContent: 'center',\n zIndex: 9999,\n }}\n >\n <Ionicons name=\"close\" size={16} color=\"white\" />\n </TouchableOpacity>\n </View>\n ))}\n </ScrollView>\n </Box>\n );\n }, [images]);\n\n // Add a custom Composer for Slack-like input\n const renderComposer = useCallback(\n (props) => (\n <TouchableOpacity\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n backgroundColor: '#fff',\n minHeight: 48,\n maxHeight: 48,\n paddingHorizontal: 12,\n paddingVertical: 0,\n marginHorizontal: 8,\n flex: 1,\n }}\n activeOpacity={0.7}\n onPress={() => {\n // Use the callback we defined to show the action sheet\n setActionSheetVisible(true);\n }}\n >\n {/* Left + button */}\n <TouchableOpacity\n onPress={(e) => {\n e.stopPropagation(); // Prevent parent TouchableOpacity from triggering\n onSelectImages();\n }}\n style={{\n width: 25,\n height: 25,\n borderRadius: 20,\n backgroundColor: '#f5f5f5',\n alignItems: 'center',\n justifyContent: 'center',\n marginRight: 8,\n }}\n >\n <MaterialIcons name=\"add\" size={20} color=\"#888\" />\n </TouchableOpacity>\n\n {/* Text placeholder - no need for actual input component */}\n <Text\n style={{\n fontSize: 16,\n color: msg ? colors.gray[800] : colors.gray[400],\n flex: 1,\n }}\n numberOfLines={1}\n ellipsizeMode=\"tail\"\n >\n {msg ? msg : 'Jot something down'}\n </Text>\n </TouchableOpacity>\n ),\n [msg, onSelectImages],\n );\n\n const setImageViewerObject = useCallback((obj: any, v: boolean) => {\n setImageObject(obj);\n setImageViewer(v);\n }, []);\n\n const modalContent = 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 renderMessage1 = useCallback(\n (props: any) => {\n const { currentMessage } = props;\n\n // Add special props for handling image upload states\n const customProps = {\n ...props,\n isShowImageViewer: isShowImageViewer,\n setImageViewer: setImageViewerObject,\n // Pass custom flags to indicate uploading/optimistic states\n isUploading: currentMessage.isUploading || false,\n isOptimistic: currentMessage.isOptimistic || false,\n };\n\n // Use SlackMessage component with our enhanced props\n return <SlackMessage {...customProps} />;\n },\n [isShowImageViewer, setImageViewerObject],\n );\n const renderMessage = useCallback(\n (props: any) => {\n // For all messages, use the SlackMessage component directly\n return (\n <SlackMessage {...props} isShowImageViewer={isShowImageViewer} setImageViewer={setImageViewerObject} />\n );\n },\n [isShowImageViewer],\n );\n\n const renderInputToolbar = useCallback(\n (props) => {\n if (isActionSheetVisible) return null;\n\n return (\n <InputToolbar\n {...props}\n containerStyle={{\n backgroundColor: 'transparent',\n padding: 0,\n margin: 0,\n borderTopWidth: 1,\n borderTopColor: colors.gray[200],\n }}\n primaryStyle={{ alignItems: 'center', justifyContent: 'center', flex: 1 }}\n // Add action slot for direct image selection button\n // renderActions={() => (\n // <TouchableOpacity\n // onPress={onSelectImages}\n // style={{\n // padding: 8,\n // marginLeft: 4,\n // marginBottom: Platform.OS === 'ios' ? 0 : 3,\n // }}\n // >\n // <Ionicons name=\"image\" size={24} color={colors.blue[500]} />\n // </TouchableOpacity>\n // )}\n />\n );\n },\n [isActionSheetVisible, onSelectImages],\n );\n\n const renderLoadEarlier = useCallback(() => {\n return loadingOldMessages && !refreshing ? (\n <Box\n style={{\n padding: 10,\n backgroundColor: 'rgba(255,255,255,0.8)',\n borderRadius: 10,\n marginTop: 10,\n alignItems: 'center',\n }}\n >\n <Spinner size=\"small\" color={colors.blue[500]} />\n <Text style={{ fontSize: 12, color: colors.gray[600], marginTop: 4 }}>Loading earlier messages...</Text>\n </Box>\n ) : null;\n }, [loadingOldMessages, refreshing]);\n\n let onScroll = false;\n\n const onMomentumScrollBegin = ({ nativeEvent }: any) => {\n onScroll = true;\n if (!loadingOldMessages && isCloseToTop(nativeEvent) && totalCount > channelMessages?.length) {\n onFetchOld();\n }\n };\n\n const onEndReached = () => {\n if (!onScroll) return;\n onScroll = false;\n };\n\n const renderChatFooter = useCallback(() => {\n return (\n <>\n <ImageViewerModal\n isVisible={isShowImageViewer}\n setVisible={setImageViewer}\n modalContent={modalContent}\n />\n <SubscriptionHandler\n channelId={channelId}\n subscribeToNewMessages={() =>\n subscribeToMore({\n document: CHAT_MESSAGE_ADDED,\n variables: {\n channelId: channelId?.toString(),\n postParentId: !parentId || parentId == 0 ? null : parentId?.toString(),\n },\n updateQuery: (prev, { subscriptionData }: any) => {\n if (!subscriptionData.data) return prev;\n const newMessage: any = subscriptionData?.data?.threadChatMessageAdded;\n const prevReplyCount: any = prev?.getPostThread?.replyCount;\n const newReplyCount = prevReplyCount || 0 + 1;\n const replies = prev?.getPostThread?.replies || [];\n setChannelMessages((oldMessages: any) =>\n uniqBy([...oldMessages, newMessage], ({ id }) => id),\n );\n setTotalCount(newReplyCount);\n return Object.assign({}, prev, {\n getPostThread: {\n ...prev?.getPostThread,\n lastReplyAt: newMessage.createdAt,\n replies: [newMessage, ...replies],\n replyCount: newReplyCount,\n updatedAt: newMessage.createdAt,\n },\n });\n },\n })\n }\n />\n </>\n );\n }, [channelId, isShowImageViewer, modalContent, parentId, setImageViewer, subscribeToMore]);\n\n const handleRemoveImage = useCallback(\n (index: number) => {\n const newImages = [...images];\n newImages.splice(index, 1);\n setImages(newImages);\n if (newImages.length === 0) {\n setSelectedImage('');\n if (textInputRef.current && typeof textInputRef.current.focus === 'function') {\n textInputRef.current.focus();\n }\n }\n },\n [images],\n );\n\n return (\n <View style={{ flex: 1, marginTop: -40 }}>\n {errorMessage ? <ErrorNotification message={errorMessage} onClose={() => setErrorMessage('')} /> : null}\n {loading && <Spinner color={'#3b82f6'} />}\n {isPostParentIdThread && (\n <>\n {threadPost?.length > 0 && (\n <>\n <VStack className=\"px-2 pt-2 pb-0\" space={'sm'}>\n <HStack space={'sm'} className=\"items-center\">\n <Avatar className=\"bg-transparent\" size={'md'}>\n <AvatarFallbackText>\n {startCase(threadPost[0]?.author?.username?.charAt(0))}\n </AvatarFallbackText>\n <AvatarImage\n alt=\"image\"\n style={{\n borderRadius: 6,\n borderWidth: 2,\n borderColor: '#fff',\n }}\n source={{\n uri: threadPost[0]?.author?.picture,\n }}\n />\n </Avatar>\n <Box>\n <Text className=\"font-bold color-black\">\n {threadPost[0]?.author?.givenName ?? ''}{' '}\n {threadPost[0]?.author?.familyName ?? ''}\n </Text>\n <Text className=\"pl-0 color-gray-500\">\n {createdAtText(threadPost[0]?.createdAt)} at{' '}\n {format(new Date(threadPost[0]?.createdAt), 'hh:ss:a')}\n </Text>\n </Box>\n </HStack>\n <HStack space={'sm'} className=\"px-2 items-center\">\n <Text>{threadPost[0]?.message ?? ''}</Text>\n </HStack>\n </VStack>\n\n <Box className=\"py-4\">\n <Box className=\"px-4 py-2 border-t border-b border-gray-200\">\n <Text className=\"font-bold color-gray-600\">\n {threadPost[0]?.replies?.totalCount}{' '}\n {threadPost[0]?.replies?.totalCount > 0 ? 'replies' : 'reply'}\n </Text>\n </Box>\n </Box>\n </>\n )}\n </>\n )}\n <GiftedChatInboxComponent\n ref={threadMessageListRef}\n onRemoveImage={handleRemoveImage}\n images={images}\n onSelectImages={onSelectImages}\n selectedImage={selectedImage}\n setSelectedImage={setSelectedImage}\n isUploadingImage={isUploadingImage}\n loading={loading}\n wrapInSafeArea={true}\n inverted={true}\n renderLoading={() => <Skeleton variant=\"rounded\" style={{ flex: 1 }} />}\n messages={messageList}\n listViewProps={{\n onEndReached: onEndReached,\n onEndReachedThreshold: 0.5,\n onMomentumScrollBegin: onMomentumScrollBegin,\n style: { marginTop: 0 },\n contentContainerStyle: {\n paddingTop: 0,\n paddingBottom: selectedImage ? 90 : 0,\n },\n refreshControl: (\n <RefreshControl\n refreshing={refreshing}\n onRefresh={onRefresh}\n colors={[colors.blue[500]]}\n tintColor={colors.blue[500]}\n title=\"Loading earlier messages...\"\n titleColor={colors.gray[600]}\n />\n ),\n }}\n onSend={(messages) => handleSend(messages[0]?.text ?? ' ')}\n text={msg || ' '}\n onInputTextChanged={(text) => setMsg(text)}\n renderFooter={() => null}\n scrollToBottom\n user={{\n _id: auth?.id || '',\n }}\n placeholder=\"Jot something down\"\n infiniteScroll={true}\n renderSend={renderSend}\n renderMessageText={renderMessageText}\n renderMessage={renderMessage}\n renderLoadEarlier={renderLoadEarlier}\n loadEarlier={totalCount > channelMessages.length}\n isLoadingEarlier={loadingOldMessages}\n textInputProps={{\n multiline: true,\n returnKeyType: 'default',\n enablesReturnKeyAutomatically: true,\n placeholderTextColor: colors.gray[400],\n // Allow direct editing in the main input too for better UX\n editable: true,\n onFocus: () => setIsGiftedInputFocused(true),\n onBlur: () => setIsGiftedInputFocused(false),\n }}\n renderChatFooter={renderChatFooter}\n messagesContainerStyle={{\n ...(messageList?.length == 0 ? { transform: [{ scaleY: -1 }] } : {}),\n // marginTop: -40, // Negative margin to remove the top padding\n paddingTop: 0,\n }}\n // renderChatEmpty={() => (\n // <>\n // {!threadLoading && messageList && messageList?.length == 0 && (\n // <Box className=\"p-5\">\n // <Center className=\"mt-6\">\n // <Ionicons name=\"chatbubbles\" size={30} />\n // <Text>You don't have any message yet!</Text>\n // </Center>\n // </Box>\n // )}\n // </>\n // )}\n />\n {/* <GiftedChat\n ref={threadMessageListRef}\n wrapInSafeArea={true}\n inverted={true}\n renderLoading={() => <Skeleton variant=\"rounded\" style={{ flex: 1 }} />}\n messages={messageList}\n listViewProps={{\n onEndReached: onEndReached,\n onEndReachedThreshold: 0.5,\n onMomentumScrollBegin: onMomentumScrollBegin,\n style: { marginTop: 0 },\n contentContainerStyle: {\n paddingTop: 0,\n paddingBottom: selectedImage ? 90 : 0,\n },\n refreshControl: (\n <RefreshControl\n refreshing={refreshing}\n onRefresh={onRefresh}\n colors={[colors.blue[500]]}\n tintColor={colors.blue[500]}\n title=\"Loading earlier messages...\"\n titleColor={colors.gray[600]}\n />\n ),\n }}\n onSend={(messages) => handleSend(messages[0]?.text ?? ' ')}\n text={msg || ' '}\n onInputTextChanged={(text) => setMsg(text)}\n renderFooter={() => null}\n scrollToBottom\n user={{\n _id: auth?.id || '',\n }}\n isTyping={false}\n alwaysShowSend={true}\n infiniteScroll={true}\n renderSend={renderSend}\n renderMessageText={renderMessageText}\n renderInputToolbar={renderInputToolbar}\n renderComposer={renderComposer}\n minInputToolbarHeight={isActionSheetVisible ? 0 : 56}\n renderAccessory={images.length > 0 ? renderAccessory : null}\n renderMessage={renderMessage}\n renderLoadEarlier={renderLoadEarlier}\n loadEarlier={totalCount > channelMessages.length}\n isLoadingEarlier={loadingOldMessages}\n bottomOffset={Platform.OS === 'ios' ? (selectedImage ? 90 : 10) : 0}\n textInputProps={{\n multiline: true,\n returnKeyType: 'default',\n enablesReturnKeyAutomatically: true,\n placeholderTextColor: colors.gray[400],\n // Allow direct editing in the main input too for better UX\n editable: true,\n onFocus: () => setIsGiftedInputFocused(true),\n onBlur: () => setIsGiftedInputFocused(false),\n }}\n minComposerHeight={36}\n maxComposerHeight={100}\n isKeyboardInternallyHandled={false}\n renderChatFooter={renderChatFooter}\n messagesContainerStyle={{\n ...(messageList?.length == 0 ? { transform: [{ scaleY: -1 }] } : {}),\n // marginTop: -40, // Negative margin to remove the top padding\n paddingTop: 0,\n }}\n renderChatEmpty={() => (\n <>\n {!threadLoading && messageList && messageList?.length == 0 && (\n <Box className=\"p-5\">\n <Center className=\"mt-6\">\n <Ionicons name=\"chatbubbles\" size={30} />\n <Text>You don't have any message yet!</Text>\n </Center>\n </Box>\n )}\n </>\n )}\n lightboxProps={{\n underlayColor: 'transparent',\n springConfig: { tension: 90000, friction: 90000 },\n disabled: true,\n }}\n /> */}\n\n {/* Add the expandable action sheet */}\n {/* {isActionSheetVisible && <Divider />}\n {isActionSheetVisible && (\n <ExpandableInputActionSheet\n isVisible={isActionSheetVisible}\n onClose={handleActionSheetClose}\n onSend={handleActionSheetSend}\n onSelectImages={onSelectImages}\n text={msg}\n onChangeText={(text) => {\n setMsg(text);\n setTextUpdatedInActionSheet(true);\n }}\n textInputRef={textInputRef}\n isSendDisabled={(!msg.trim() && images.length === 0) || isUploadingImage}\n selectedImages={images}\n loading={loading || isUploadingImage}\n onRemoveImage={(index) => {\n const newImages = [...images];\n newImages.splice(index, 1);\n setImages(newImages);\n if (newImages.length === 0) {\n setSelectedImage('');\n }\n }}\n />\n )} */}\n </View>\n );\n};\n\nconst SubscriptionHandler = ({ subscribeToNewMessages, channelId }: IThreadSubscriptionHandlerProps) => {\n useEffect(() => subscribeToNewMessages(), [channelId]);\n return <></>;\n};\n\nexport const ThreadConversationView = ThreadConversationViewComponent;\n// export const ThreadConversationView = React.memo(ThreadConversationViewComponent);\n"],"names":["React","_a","_b","_c","threadPost","_d","_e","_f","_g","_h","_i","_j","_k","_l","msg","data","channelId","parentId","_m","_n","_o","_p","_q","_r","_s","params","SlackMessage"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ThreadConversationView.js","sources":["../../../../src/screens/inbox/containers/ThreadConversationView.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport {\n Center,\n Avatar,\n AvatarFallbackText,\n AvatarImage,\n Box,\n Button,\n ButtonText,\n VStack,\n HStack,\n Icon,\n Image,\n Spinner,\n Text,\n Skeleton,\n Toast,\n ToastTitle,\n ToastDescription,\n useToast,\n Divider,\n} from '@admin-layout/gluestack-ui-mobile';\nimport {\n Platform,\n TouchableHighlight,\n View,\n TouchableOpacity,\n ScrollView,\n Animated,\n Keyboard,\n RefreshControl,\n} from 'react-native';\nimport { useFocusEffect, useNavigation, useRoute } from '@react-navigation/native';\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, MaterialIcons } from '@expo/vector-icons';\nimport { Actions, GiftedChat, IMessage, MessageText, Send, InputToolbar, Composer } from 'react-native-gifted-chat';\nimport {\n IPost,\n IPostThread,\n PreDefinedRole,\n IExpoNotificationData,\n IFileInfo,\n FileRefType,\n PostTypeEnum,\n} from 'common';\nimport {\n CHAT_MESSAGE_ADDED,\n useCreatePostThread,\n useSendExpoNotification,\n useGetPostThreadLazy,\n} from '../../../queries/inboxQueries';\nimport { useUploadFilesNative } from '@messenger-box/platform-client';\nimport { objectId } from '@messenger-box/core';\nimport { format, isToday, isYesterday } from 'date-fns';\nimport { userSelector } from '@adminide-stack/user-auth0-client';\nimport { config } from '../config';\nimport { ImageViewerModal, SlackMessage } from '../components/SlackMessageContainer';\nimport CachedImage from '../components/CachedImage';\nimport colors from 'tailwindcss/colors';\nimport ExpandableInputActionSheet from '../components/ExpandableInputActionSheet';\nimport GiftedChatInboxComponent from '../components/GiftedChatInboxComponent';\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 IMessageProps extends IMessage {\n type: string;\n propsConfiguration?: any;\n images?: string[];\n isOptimistic?: boolean;\n isUploading?: 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\ninterface IThreadSubscriptionHandlerProps {\n subscribeToNewMessages: () => any;\n channelId: string;\n}\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\n// Custom notification component\nconst ErrorNotification = ({ message, onClose }) => {\n const opacity = useRef(new Animated.Value(0)).current;\n\n useEffect(() => {\n // Fade in\n Animated.timing(opacity, {\n toValue: 1,\n duration: 300,\n useNativeDriver: true,\n }).start();\n\n // Auto hide after 4 seconds\n const timer = setTimeout(() => {\n Animated.timing(opacity, {\n toValue: 0,\n duration: 300,\n useNativeDriver: true,\n }).start(() => onClose && onClose());\n }, 4000);\n\n return () => clearTimeout(timer);\n }, []);\n\n return (\n <Animated.View\n style={{\n position: 'absolute',\n top: 10,\n left: 10,\n right: 10,\n backgroundColor: '#f44336',\n padding: 15,\n borderRadius: 8,\n shadowColor: '#000',\n shadowOffset: { width: 0, height: 2 },\n shadowOpacity: 0.25,\n shadowRadius: 3.84,\n elevation: 5,\n zIndex: 1000,\n opacity,\n }}\n >\n <HStack className=\"items-center justify-between\">\n <Text style={{ color: 'white', fontWeight: 'bold' }}>Upload Failed</Text>\n <TouchableOpacity onPress={onClose}>\n <Ionicons name=\"close\" size={20} color=\"white\" />\n </TouchableOpacity>\n </HStack>\n <Text style={{ color: 'white', marginTop: 5 }}>{message}</Text>\n </Animated.View>\n );\n};\n\n// Add a utility function for file validation\nconst isValidFileUrl = (url: string | undefined): boolean => {\n return !!url && typeof url === 'string' && url.length > 0;\n};\n\nconst ThreadConversationViewComponent = ({ channelId, postParentId, isPostParentIdThread, role }: any) => {\n const { params } = useRoute<any>();\n const [channelToTop, setChannelToTop] = useState(0);\n const [channelMessages, setChannelMessages] = useState<any>([]);\n const auth: any = useSelector(userSelector);\n const [totalCount, setTotalCount] = useState<any>(0);\n const [selectedImage, setSelectedImage] = useState<string>('');\n const [loadingOldMessages, setLoadingOldMessages] = useState<boolean>(false);\n const [loadEarlierMsg, setLoadEarlierMsg] = useState(false);\n const navigation = useNavigation<any>();\n const [files, setFiles] = useState<File[]>([]);\n const [images, setImages] = useState<ExtendedImagePickerAsset[]>([]);\n const [msg, setMsg] = useState<string>('');\n const [loading, setLoading] = useState(false);\n const [imageLoading, setImageLoading] = useState(false);\n const [uploadingMessageId, setUploadingMessageId] = useState<string | null>(null);\n const [expoTokens, setExpoTokens] = useState<any[]>([]);\n const [isShowImageViewer, setImageViewer] = useState<boolean>(false);\n const [imageObject, setImageObject] = useState<any>({});\n const [parentId, setParentId] = useState<any>(postParentId);\n const [postThread, setPostThread] = useState<IPostThread>();\n const { startUpload } = useUploadFilesNative();\n const [threadPost, setThreadPost] = useState<any[]>([]);\n const [isScrollToBottom, setIsScrollToBottom] = useState(false);\n const threadMessageListRef = useRef<any>(null);\n const toast = useToast();\n const [errorMessage, setErrorMessage] = useState('');\n\n // Add state for expandable input action sheet\n const [isActionSheetVisible, setActionSheetVisible] = useState(false);\n const [textUpdatedInActionSheet, setTextUpdatedInActionSheet] = useState(false);\n const [lastShownMsg, setLastShownMsg] = useState('');\n const textInputRef = useRef(null);\n\n // const [sendThreadMessage] = useSendThreadMessageMutation();\n const [sendThreadMessage] = useCreatePostThread();\n const [sendExpoNotificationOnPostMutation] = useSendExpoNotification();\n\n const [\n getThreadMessages,\n { data, loading: threadLoading, fetchMore: fetchMoreMessages, refetch: refetchThreadMessages, subscribeToMore },\n ] = useGetPostThreadLazy({ fetchPolicy: 'cache-and-network' });\n\n // Add new state for tracking uploads\n const [pendingUploads, setPendingUploads] = useState<Record<string, any>>({});\n const [uploadErrors, setUploadErrors] = useState<Record<string, string>>({});\n const [isUploadingImage, setIsUploadingImage] = useState(false);\n\n const [refreshing, setRefreshing] = useState(false);\n\n useFocusEffect(\n React.useCallback(() => {\n // navigation?.setOptions({ title: params?.title ?? 'Thread' });\n\n navigation.setOptions({\n title: params?.title ?? 'Thread',\n headerLeft: (props: any) => (\n <Button className=\"bg-transparent active:bg-gray-200 \" onPress={() => navigation.goBack()}>\n <MaterialIcons size={20} name=\"arrow-back-ios\" color={'black'} />\n </Button>\n ),\n });\n if (postParentId) {\n refetchThreadMessages({\n channelId: channelId?.toString(),\n role: role?.toString(),\n postParentId: postParentId?.toString(),\n selectedFields: 'id channel post replies replyCount lastReplyAt createdAt updatedAt',\n limit: MESSAGES_PER_PAGE,\n });\n }\n setParentId(postParentId);\n\n return () => {\n setTotalCount(0);\n setChannelMessages([]);\n setThreadPost([]);\n };\n }, [postParentId]),\n );\n\n useEffect(() => {\n //if (parentId && parentId == 0) {\n if (channelId && parentId) {\n getThreadMessages({\n variables: {\n channelId: channelId?.toString(),\n role: role?.toString(),\n postParentId: !parentId || parentId == 0 ? null : parentId?.toString(),\n selectedFields: 'id channel post replies replyCount lastReplyAt createdAt updatedAt',\n limit: MESSAGES_PER_PAGE,\n },\n });\n }\n }, [parentId]);\n\n React.useEffect(() => {\n if (data?.getPostThread) {\n const threads: any = data.getPostThread;\n const threadPost = threads?.post ?? [];\n const threadReplies = threads?.replies ?? [];\n const messeageTotalCount = threads?.replyCount ?? 0;\n const messages = [threadPost, ...threadReplies];\n\n if (\n (messages && messages.length > 0 && messeageTotalCount > totalCount) ||\n (messages && messages.length > 0 && channelMessages.length === 0)\n ) {\n setThreadMessages(messages, messeageTotalCount);\n }\n }\n if (isScrollToBottom && channelMessages) scrollToBottom();\n // scrollToBottom();\n // if (!isPostParentIdThread) {\n // // setTotalCount((pc: any) => pc + threadTotalCount);\n // setChannelMessages((oldMessages: any) => uniqBy([...threadMessage, ...oldMessages], ({ id }) => id));\n // }\n }, [data, channelMessages, loadingOldMessages, totalCount, isPostParentIdThread, isScrollToBottom]);\n\n const setThreadMessages = (messages: any, messagesTotalCount: number) => {\n setChannelMessages((oldMessages: any) => uniqBy([...messages, ...oldMessages], ({ id }) => id));\n setTotalCount(messagesTotalCount);\n };\n\n React.useEffect(() => {\n if (selectedImage) setImageLoading(false);\n }, [selectedImage]);\n\n const scrollToBottom = React.useCallback(() => {\n if (threadMessageListRef?.current) {\n setIsScrollToBottom(false);\n threadMessageListRef.current.scrollTop = threadMessageListRef.current.scrollHeight;\n }\n }, [threadMessageListRef]);\n\n const onFetchOld = useCallback(() => {\n if (totalCount > channelMessages.length && !loadingOldMessages) {\n setLoadEarlierMsg(true);\n setLoadingOldMessages(true);\n\n fetchMoreMessages({\n variables: {\n channelId: channelId?.toString(),\n role: role?.toString(),\n postParentId: parentId?.toString(),\n selectedFields: 'id channel post replies replyCount lastReplyAt createdAt updatedAt',\n limit: MESSAGES_PER_PAGE,\n skip: channelMessages.length - 1,\n },\n })\n .then((res: any) => {\n if (res?.data?.getPostThread) {\n const threads: any = res?.data?.getPostThread;\n const threadReplies = threads?.replies ?? [];\n const messeageTotalCount = threads?.replyCount ?? 0;\n setThreadMessages(threadReplies, messeageTotalCount);\n }\n })\n .finally(() => {\n setLoadEarlierMsg(false);\n setLoadingOldMessages(false);\n setRefreshing(false);\n })\n .catch((error: any) => {\n setLoadEarlierMsg(false);\n setLoadingOldMessages(false);\n setRefreshing(false);\n });\n } else {\n setRefreshing(false);\n }\n }, [parentId, channelId, totalCount, channelMessages]);\n\n // Pull to refresh handler\n const onRefresh = useCallback(() => {\n setRefreshing(true);\n onFetchOld();\n }, [onFetchOld]);\n\n // const isCloseToTop = ({ layoutMeasurement, contentOffset, contentSize }) => {\n // return contentOffset.y <= 100; // 100px from top\n // };\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 // Add a helper function for removing messages from the UI when uploads fail\n const removeMessageFromUI = useCallback((messageId: string) => {\n // Remove from pending uploads\n setPendingUploads((prev) => {\n const newPending = { ...prev };\n delete newPending[messageId];\n return newPending;\n });\n\n // Also remove any error state\n setUploadErrors((prev) => {\n const newErrors = { ...prev };\n delete newErrors[messageId];\n return newErrors;\n });\n\n // Reset upload state to ensure we don't get stuck with loading indicator\n setIsUploadingImage(false);\n }, []);\n\n // const onSelectImages = async () => {\n // setImageLoading(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 // setImageLoading(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 // setImageLoading(false);\n // } else {\n // setImageLoading(false);\n // }\n // } catch (error) {\n // console.error('Error selecting image:', error);\n // setImageLoading(false);\n // }\n // };\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: false,\n aspect: [4, 3],\n quality: 0.8,\n base64: true,\n exif: false,\n allowsMultipleSelection: true, // Enable multiple selection\n });\n\n if (!imageSource?.canceled) {\n // Get all selected assets\n const selectedAssets = imageSource?.assets || [];\n if (selectedAssets.length === 0) {\n setLoading(false);\n return;\n }\n\n // Process all selected images\n const newImages = selectedAssets.map((selectedAsset) => {\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 return asset;\n });\n\n // Set preview for the first image (for backward compatibility)\n if (newImages.length > 0) {\n const base64Data = newImages[0].base64;\n const previewImage = base64Data ? `data:image/jpeg;base64,${base64Data}` : newImages[0].uri;\n setSelectedImage(previewImage);\n }\n\n // Add new images to existing ones\n setImages((currentImages) => [...currentImages, ...newImages]);\n setLoading(false); // Set loading to false after successful selection\n } else {\n setLoading(false);\n }\n } catch (error) {\n setLoading(false);\n }\n };\n\n // Action sheet handlers\n const showActionSheet = useCallback(() => {\n setLastShownMsg(msg); // Store current message text when opening sheet\n setActionSheetVisible(true);\n }, [msg]);\n\n const handleActionSheetClose = useCallback(() => {\n // Close the sheet\n setActionSheetVisible(false);\n\n // If user didn't make any changes, restore the original message\n if (!textUpdatedInActionSheet) {\n setMsg(lastShownMsg);\n }\n\n // Reset the flag\n setTextUpdatedInActionSheet(false);\n }, [textUpdatedInActionSheet, lastShownMsg]);\n\n const handleActionSheetSend = () => {\n // Send the message using the existing handleSend function\n handleSend(msg);\n\n // Close the action sheet\n setActionSheetVisible(false);\n };\n\n // Add focus/blur handlers for the input field\n useEffect(() => {\n // When showing the action sheet, we should hide the keyboard for the main input\n if (isActionSheetVisible && Platform.OS === 'ios') {\n Keyboard.dismiss();\n }\n }, [isActionSheetVisible]);\n\n // Keep track of whether the input is in focus to help sync UI states\n const [isGiftedInputFocused, setIsGiftedInputFocused] = useState(false);\n\n const handleSend = useCallback(\n async (message: string) => {\n const newMessageText = message && message.length > 0 ? message || ' ' : ' ';\n // Check if we can send a message (channel and thread exists)\n\n if (!channelId) return;\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) return;\n\n // Start loading state\n setLoading(true);\n\n const postId = objectId();\n const currentDate = new Date();\n\n // Store current values before clearing\n const currentMessageText = message || '';\n const currentImages = [...images];\n\n // Clear UI immediately for next message\n setMsg('');\n setSelectedImage('');\n setImages([]);\n setFiles([]);\n\n // Close the action sheet if it's open\n if (isActionSheetVisible) {\n setActionSheetVisible(false);\n }\n\n // Create optimistic message with all images for immediate display\n const optimisticMessage = {\n id: postId,\n message: currentMessageText || (currentImages.length > 0 ? ' ' : ''),\n createdAt: currentDate.toISOString(),\n author: {\n id: auth?.profile?.id,\n givenName: auth?.profile?.given_name,\n familyName: auth?.profile?.family_name,\n picture: auth?.profile?.picture,\n },\n isDelivered: false, // Mark as not delivered yet during upload\n isRead: false,\n isOptimistic: true, // Flag to identify optimistic messages\n files:\n currentImages.length > 0\n ? {\n data: currentImages\n .filter((img) => img && (img.uri || img.url)) // Filter out invalid images\n .map((img) => ({\n id: objectId(),\n url: img.uri || img.url,\n localUri: img.uri || img.url, // Keep local URI for preview\n name: img.fileName || `image_${Date.now()}.jpg`,\n extension: 'jpg',\n mimeType: 'image/jpeg',\n refType: FileRefType.Post,\n height: img.height || 0,\n width: img.width || 0,\n isUploading: true, // Flag to indicate this file is uploading\n })),\n totalCount: currentImages.filter((img) => img && (img.uri || img.url)).length, // Only count valid images\n }\n : undefined,\n };\n\n // Only add optimistic message if there's content to send\n if (\n (optimisticMessage.message && optimisticMessage.message.trim() !== '') ||\n (optimisticMessage.files && optimisticMessage.files.data && optimisticMessage.files.data.length > 0)\n ) {\n setChannelMessages((oldMessages: any) => uniqBy([optimisticMessage, ...oldMessages], ({ id }) => id));\n setIsScrollToBottom(true);\n }\n\n try {\n let fileIds: string[] | null = null;\n\n // Handle file uploads if images exist\n if (currentImages && currentImages.length > 0) {\n // Filter out any invalid images before upload\n const validImages = currentImages.filter((img) => img && (img.uri || img.url));\n\n if (validImages.length === 0) {\n // No valid images to upload, just send the text message\n setIsUploadingImage(false);\n } else {\n setIsUploadingImage(true);\n\n // Format images for upload\n const imagesToUpload = validImages.map((img) => {\n return {\n ...img,\n uri: img.uri || img.url, // Use either uri or url\n type: img.mimeType || 'image/jpeg',\n name: img.fileName || `image_${Date.now()}.jpg`,\n };\n });\n\n // Track upload progress with messageId\n setUploadingMessageId(postId);\n setPendingUploads((prev) => ({\n ...prev,\n [postId]: {\n images: validImages,\n message: currentMessageText,\n },\n }));\n\n const uploadResponse = await startUpload({\n file: imagesToUpload as unknown as ImagePicker.ImagePickerAsset[],\n saveUploadedFile: {\n variables: {\n postId,\n },\n },\n createUploadLink: {\n variables: {\n postId,\n },\n },\n });\n\n if (uploadResponse?.error) {\n throw new Error(uploadResponse.error.toString());\n }\n\n const uploadedFiles = uploadResponse.data as unknown as IFileInfo[];\n if (uploadResponse.data) {\n fileIds = uploadedFiles?.map((f: any) => f.id) ?? null;\n\n // Update message with uploaded file information\n setChannelMessages((oldMessages: any) => {\n return oldMessages.map((msg) => {\n if (msg.id === postId && msg.isOptimistic) {\n // Update the uploaded files with real URLs from server\n return {\n ...msg,\n isOptimistic: false,\n files: {\n ...msg.files,\n data: uploadedFiles\n .filter((file) => isValidFileUrl(file.url))\n .map((file, index) => ({\n ...msg.files.data[index],\n url: file.url,\n isUploading: false,\n })),\n },\n };\n }\n return msg;\n });\n });\n }\n\n // Clear pending upload now that it's complete\n setPendingUploads((prev) => {\n const newPending = { ...prev };\n delete newPending[postId];\n return newPending;\n });\n }\n }\n\n // Send message with Apollo mutation\n await sendThreadMessage({\n variables: {\n postId,\n channelId,\n postThreadId: postThread && postThread?.id,\n postParentId: !parentId || parentId === 0 ? null : parentId,\n threadMessageInput: {\n content: currentMessageText,\n files: fileIds,\n role,\n },\n },\n optimisticResponse: {\n createPostThread: {\n __typename: 'ThreadMessageSent',\n lastMessage: {\n __typename: 'Post',\n id: postId,\n message: currentMessageText || ' ',\n createdAt: new Date().toISOString(),\n author: {\n __typename: 'UserAccount',\n id: auth?.profile?.id,\n givenName: auth?.profile?.given_name,\n familyName: auth?.profile?.family_name,\n picture: auth?.profile?.picture,\n },\n channel: { __typename: 'Channel', id: channelId.toString() },\n } as any, // Type assertion to avoid TypeScript errors\n data: {\n __typename: 'PostThread',\n id: postThread?.id || objectId(),\n },\n },\n },\n update: (cache, { data, errors }: any) => {\n if (!data || errors) return;\n\n setPostThread(data?.createPostThread?.data);\n const lastMessageId = data?.createPostThread?.lastMessage?.id;\n if (!parentId || parentId === 0) {\n setParentId(data?.createPostThread?.lastMessage?.id);\n }\n setChannelToTop(channelToTop + 1);\n\n // Send push notification with message info\n sendPushNotification(lastMessageId, channelId, parentId, data?.createPostThread?.data?.id);\n },\n });\n } catch (error) {\n console.error('Error sending message:', error);\n\n // Format error message based on environment\n let formattedErrorMessage = 'Failed to upload image. Please try again.';\n\n if (__DEV__) {\n // Show detailed error in development\n if (error.name === 'ApolloError') {\n formattedErrorMessage = error.message\n .replace('[ApolloError: ', '')\n .replace(']', '')\n .split(';')[0]; // Take first part of error for clarity\n } else {\n formattedErrorMessage = error.message || 'Unknown error occurred';\n }\n } else {\n // Show friendly message in production\n if (error.message?.includes('network') || error.message?.includes('timeout')) {\n formattedErrorMessage = 'Network error. Please check your connection.';\n } else if (error.message?.includes('permission')) {\n formattedErrorMessage = 'Permission denied for this operation.';\n }\n }\n\n // Show custom error notification\n setErrorMessage(formattedErrorMessage);\n\n // Remove the optimistic message if there was an error\n setChannelMessages((oldMessages: any) => oldMessages.filter((msg) => msg.id !== postId));\n\n // Clean up any pending upload states\n removeMessageFromUI(postId);\n } finally {\n setLoading(false);\n setIsUploadingImage(false);\n setUploadingMessageId(null);\n }\n },\n [\n auth,\n channelId,\n channelToTop,\n images,\n parentId,\n postThread,\n selectedImage,\n setChannelMessages,\n removeMessageFromUI,\n role,\n ],\n );\n\n const sendPushNotification = async (messageId: string, channelId: string, parentId: any, threadId: string) => {\n const notificationData: IExpoNotificationData = {\n url: config.THREAD_MESSEGE_PATH,\n params: { channelId, title: params?.title ?? 'Thread', postParentId: parentId, hideTabBar: true },\n screen: 'DialogThreadMessages',\n thread: { id: threadId },\n other: { sound: Platform.OS === 'android' ? undefined : 'default' },\n };\n if (parentId || parentId == 0) {\n await sendExpoNotificationOnPostMutation({\n variables: {\n postId: messageId?.toString(),\n notificationData,\n },\n });\n }\n };\n\n // Improved messageList function to better handle images\n const messageList = useMemo(() => {\n let currentDate = '';\n let res: any = [];\n const filteredMessages =\n channelMessages && channelMessages?.length > 0 ? uniqBy([...channelMessages], ({ id }: any) => id) : [];\n if (filteredMessages?.length) {\n orderBy(filteredMessages, ['createdAt'], ['desc']).map((msg) => {\n let message: IMessageProps = {\n _id: '',\n text: '',\n createdAt: 0,\n user: {\n _id: '',\n name: '',\n avatar: '',\n },\n type: '',\n };\n const date = new Date(msg.createdAt);\n message._id = msg.id;\n message.text = msg.message;\n message.createdAt = date;\n message.user = {\n _id: msg?.author?.id ?? auth?.profile?.id,\n name:\n msg?.author?.givenName ??\n auth?.profile?.given_name + ' ' + msg?.author?.familyName ??\n auth?.profile?.family_name,\n avatar: msg?.author?.picture ?? auth?.profile?.picture,\n };\n\n // Handle image uploads with proper UI feedback\n message.isOptimistic = msg?.isOptimistic || false;\n message.isUploading = msg.files?.data?.some((file) => file.isUploading) || false;\n\n // Improved image handling - ensure we have valid image URLs\n if (msg.files?.data?.length > 0) {\n // Filter out any invalid files first\n const validFiles = msg.files.data.filter(\n (file) =>\n file && (file.url || file.localUri) && typeof (file.url || file.localUri) === 'string',\n );\n\n if (validFiles.length > 0) {\n // For the first image (used in single image display)\n const firstFile = validFiles[0];\n const imageUrl = firstFile.isUploading\n ? firstFile.localUri || firstFile.url\n : firstFile.url || firstFile.localUri;\n\n if (imageUrl) {\n message.image = imageUrl;\n }\n\n // For multiple images\n if (validFiles.length > 1) {\n message.images = validFiles\n .map((file) =>\n file.isUploading ? file.localUri || file.url : file.url || file.localUri,\n )\n .filter((url) => !!url); // Filter out any undefined or empty URLs\n\n // If no valid URLs after filtering, don't set the images property\n if (message.images.length === 0) {\n delete message.images;\n }\n }\n }\n }\n\n message.sent = msg?.isDelivered;\n message.received = msg?.isRead;\n message.type = msg?.type;\n message.propsConfiguration = msg?.propsConfiguration;\n res.push(message);\n });\n }\n return res?.length > 0 ? uniqBy([...res], ({ _id }: any) => _id) : [];\n //return res;\n }, [channelMessages]);\n\n const renderSend = useCallback(\n (props) => {\n // If action sheet is visible, don't show the default send button\n if (isActionSheetVisible) {\n return null;\n }\n\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 && hasContent;\n const isDisabled = !canSend || isUploadingImage || loading;\n\n return (\n <Send\n {...props}\n disabled={isDisabled}\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 // onSend={(messages, shouldReset) => {\n // // Always use our custom handler to ensure images are handled properly\n // console.log('messages', messages);\n // // handleSend(props.text || ' ');\n // }}\n >\n <View style={{ padding: 4 }}>\n {isUploadingImage || loading ? (\n <Spinner size=\"small\" color={colors.blue[500]} />\n ) : (\n <MaterialCommunityIcons\n name=\"send-circle\"\n size={32}\n color={isDisabled ? colors.gray[400] : colors.blue[500]}\n />\n )}\n </View>\n </Send>\n );\n },\n [channelId, images, isUploadingImage, loading, isActionSheetVisible],\n );\n\n const renderMessageText1 = useCallback(\n (props: any) => {\n const { currentMessage } = props;\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 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 <MessageText {...props} textStyle={{ left: { marginLeft: 5 } }} />\n )}\n </>\n );\n } else {\n return <MessageText {...props} textStyle={{ left: { marginLeft: 5 } }} />;\n }\n },\n [navigation, role],\n );\n\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 // Do not render anything if the message text is empty or only whitespace\n if (!currentMessage?.text || currentMessage.text.trim() === '') {\n return null;\n }\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 // const renderActions = useCallback((props) => {\n // return (\n // <Actions\n // {...props}\n // icon={() => <Ionicons name={'image'} size={30} color={'black'} onPress={onSelectImages} />}\n // />\n // );\n // }, [onSelectImages]);\n\n // Render action buttons (including image upload)\n const renderActions = useCallback(\n (props) => {\n return (\n <Actions\n {...props}\n onPressActionButton={onSelectImages} // Direct action when pressing the button\n options={{\n ['Choose from Library']: () => {\n // Call the same image selection function used in the ActionSheet\n onSelectImages();\n },\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 className=\"w-8 h-8 items-center justify-center\">\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 [onSelectImages],\n );\n\n // Create a more visible and reliable image preview with cancel button\n const renderAccessory = useCallback(() => {\n if (!images.length) return null;\n return (\n <Box style={{ position: 'relative', height: 70, backgroundColor: 'transparent', justifyContent: 'center' }}>\n <ScrollView\n horizontal\n showsHorizontalScrollIndicator={false}\n style={{\n flexDirection: 'row',\n paddingLeft: 15,\n paddingRight: 5,\n }}\n contentContainerStyle={{\n alignItems: 'center',\n height: '100%',\n }}\n >\n {images.map((img, index) => (\n <View\n key={`image-preview-${index}`}\n style={{\n width: 40,\n height: 40,\n marginRight: 15,\n borderRadius: 4,\n backgroundColor: colors.gray[200],\n overflow: 'hidden',\n borderWidth: 1,\n borderColor: '#e0e0e0',\n position: 'relative',\n zIndex: 10,\n }}\n >\n <Image\n alt={`selected image ${index + 1}`}\n source={{ uri: img.uri || img.url }}\n style={{ width: '100%', height: '100%' }}\n size={'md'}\n />\n {/* Cross button at top right */}\n <TouchableOpacity\n onPress={() => {\n const newImages = [...images];\n newImages.splice(index, 1);\n setImages(newImages);\n if (newImages.length === 0) {\n setSelectedImage('');\n }\n }}\n style={{\n position: 'absolute',\n top: -1,\n right: -1,\n backgroundColor: 'rgba(0,0,0,0.6)',\n borderRadius: 12,\n width: 20,\n height: 20,\n alignItems: 'center',\n justifyContent: 'center',\n zIndex: 9999,\n }}\n >\n <Ionicons name=\"close\" size={16} color=\"white\" />\n </TouchableOpacity>\n </View>\n ))}\n </ScrollView>\n </Box>\n );\n }, [images]);\n\n // Add a custom Composer for Slack-like input\n const renderComposer = useCallback(\n (props) => (\n <TouchableOpacity\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n backgroundColor: '#fff',\n minHeight: 48,\n maxHeight: 48,\n paddingHorizontal: 12,\n paddingVertical: 0,\n marginHorizontal: 8,\n flex: 1,\n }}\n activeOpacity={0.7}\n onPress={() => {\n // Use the callback we defined to show the action sheet\n setActionSheetVisible(true);\n }}\n >\n {/* Left + button */}\n <TouchableOpacity\n onPress={(e) => {\n e.stopPropagation(); // Prevent parent TouchableOpacity from triggering\n onSelectImages();\n }}\n style={{\n width: 25,\n height: 25,\n borderRadius: 20,\n backgroundColor: '#f5f5f5',\n alignItems: 'center',\n justifyContent: 'center',\n marginRight: 8,\n }}\n >\n <MaterialIcons name=\"add\" size={20} color=\"#888\" />\n </TouchableOpacity>\n\n {/* Text placeholder - no need for actual input component */}\n <Text\n style={{\n fontSize: 16,\n color: msg ? colors.gray[800] : colors.gray[400],\n flex: 1,\n }}\n numberOfLines={1}\n ellipsizeMode=\"tail\"\n >\n {msg ? msg : 'Jot something down'}\n </Text>\n </TouchableOpacity>\n ),\n [msg, onSelectImages],\n );\n\n const setImageViewerObject = useCallback((obj: any, v: boolean) => {\n setImageObject(obj);\n setImageViewer(v);\n }, []);\n\n const modalContent = 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 renderMessage1 = useCallback(\n (props: any) => {\n const { currentMessage } = props;\n\n // Add special props for handling image upload states\n const customProps = {\n ...props,\n isShowImageViewer: isShowImageViewer,\n setImageViewer: setImageViewerObject,\n // Pass custom flags to indicate uploading/optimistic states\n isUploading: currentMessage.isUploading || false,\n isOptimistic: currentMessage.isOptimistic || false,\n };\n\n // Use SlackMessage component with our enhanced props\n return <SlackMessage {...customProps} />;\n },\n [isShowImageViewer, setImageViewerObject],\n );\n const renderMessage = useCallback(\n (props: any) => {\n // For all messages, use the SlackMessage component directly\n return (\n <SlackMessage {...props} isShowImageViewer={isShowImageViewer} setImageViewer={setImageViewerObject} />\n );\n },\n [isShowImageViewer],\n );\n\n const renderInputToolbar = useCallback(\n (props) => {\n if (isActionSheetVisible) return null;\n\n return (\n <InputToolbar\n {...props}\n containerStyle={{\n backgroundColor: 'transparent',\n padding: 0,\n margin: 0,\n borderTopWidth: 1,\n borderTopColor: colors.gray[200],\n }}\n primaryStyle={{ alignItems: 'center', justifyContent: 'center', flex: 1 }}\n // Add action slot for direct image selection button\n // renderActions={() => (\n // <TouchableOpacity\n // onPress={onSelectImages}\n // style={{\n // padding: 8,\n // marginLeft: 4,\n // marginBottom: Platform.OS === 'ios' ? 0 : 3,\n // }}\n // >\n // <Ionicons name=\"image\" size={24} color={colors.blue[500]} />\n // </TouchableOpacity>\n // )}\n />\n );\n },\n [isActionSheetVisible, onSelectImages],\n );\n\n const renderLoadEarlier = useCallback(() => {\n return loadingOldMessages && !refreshing ? (\n <Box\n style={{\n padding: 10,\n backgroundColor: 'rgba(255,255,255,0.8)',\n borderRadius: 10,\n marginTop: 10,\n alignItems: 'center',\n }}\n >\n <Spinner size=\"small\" color={colors.blue[500]} />\n <Text style={{ fontSize: 12, color: colors.gray[600], marginTop: 4 }}>Loading earlier messages...</Text>\n </Box>\n ) : null;\n }, [loadingOldMessages, refreshing]);\n\n let onScroll = false;\n\n const onMomentumScrollBegin = ({ nativeEvent }: any) => {\n onScroll = true;\n if (!loadingOldMessages && isCloseToTop(nativeEvent) && totalCount > channelMessages?.length) {\n onFetchOld();\n }\n };\n\n const onEndReached = () => {\n if (!onScroll) return;\n onScroll = false;\n };\n\n const renderChatFooter = useCallback(() => {\n return (\n <>\n <ImageViewerModal\n isVisible={isShowImageViewer}\n setVisible={setImageViewer}\n modalContent={modalContent}\n />\n <SubscriptionHandler\n channelId={channelId}\n subscribeToNewMessages={() =>\n subscribeToMore({\n document: CHAT_MESSAGE_ADDED,\n variables: {\n channelId: channelId?.toString(),\n postParentId: !parentId || parentId == 0 ? null : parentId?.toString(),\n },\n updateQuery: (prev, { subscriptionData }: any) => {\n if (!subscriptionData.data) return prev;\n const newMessage: any = subscriptionData?.data?.threadChatMessageAdded;\n const prevReplyCount: any = prev?.getPostThread?.replyCount;\n const newReplyCount = prevReplyCount || 0 + 1;\n const replies = prev?.getPostThread?.replies || [];\n setChannelMessages((oldMessages: any) =>\n uniqBy([...oldMessages, newMessage], ({ id }) => id),\n );\n setTotalCount(newReplyCount);\n return Object.assign({}, prev, {\n getPostThread: {\n ...prev?.getPostThread,\n lastReplyAt: newMessage.createdAt,\n replies: [newMessage, ...replies],\n replyCount: newReplyCount,\n updatedAt: newMessage.createdAt,\n },\n });\n },\n })\n }\n />\n </>\n );\n }, [channelId, isShowImageViewer, modalContent, parentId, setImageViewer, subscribeToMore]);\n\n const handleRemoveImage = useCallback(\n (index: number) => {\n const newImages = [...images];\n newImages.splice(index, 1);\n setImages(newImages);\n if (newImages.length === 0) {\n setSelectedImage('');\n if (textInputRef.current && typeof textInputRef.current.focus === 'function') {\n textInputRef.current.focus();\n }\n }\n },\n [images],\n );\n\n return (\n <View style={{ flex: 1, marginTop: -40 }}>\n {errorMessage ? <ErrorNotification message={errorMessage} onClose={() => setErrorMessage('')} /> : null}\n {loading && <Spinner color={'#3b82f6'} />}\n {isPostParentIdThread && (\n <>\n {threadPost?.length > 0 && (\n <>\n <VStack className=\"px-2 pt-2 pb-0\" space={'sm'}>\n <HStack space={'sm'} className=\"items-center\">\n <Avatar className=\"bg-transparent\" size={'md'}>\n <AvatarFallbackText>\n {startCase(threadPost[0]?.author?.username?.charAt(0))}\n </AvatarFallbackText>\n <AvatarImage\n alt=\"image\"\n style={{\n borderRadius: 6,\n borderWidth: 2,\n borderColor: '#fff',\n }}\n source={{\n uri: threadPost[0]?.author?.picture,\n }}\n />\n </Avatar>\n <Box>\n <Text className=\"font-bold color-black\">\n {threadPost[0]?.author?.givenName ?? ''}{' '}\n {threadPost[0]?.author?.familyName ?? ''}\n </Text>\n <Text className=\"pl-0 color-gray-500\">\n {createdAtText(threadPost[0]?.createdAt)} at{' '}\n {format(new Date(threadPost[0]?.createdAt), 'hh:ss:a')}\n </Text>\n </Box>\n </HStack>\n <HStack space={'sm'} className=\"px-2 items-center\">\n <Text>{threadPost[0]?.message ?? ''}</Text>\n </HStack>\n </VStack>\n\n <Box className=\"py-4\">\n <Box className=\"px-4 py-2 border-t border-b border-gray-200\">\n <Text className=\"font-bold color-gray-600\">\n {threadPost[0]?.replies?.totalCount}{' '}\n {threadPost[0]?.replies?.totalCount > 0 ? 'replies' : 'reply'}\n </Text>\n </Box>\n </Box>\n </>\n )}\n </>\n )}\n <GiftedChatInboxComponent\n ref={threadMessageListRef}\n onRemoveImage={handleRemoveImage}\n images={images}\n onSelectImages={onSelectImages}\n selectedImage={selectedImage}\n setSelectedImage={setSelectedImage}\n isUploadingImage={isUploadingImage}\n loading={loading}\n wrapInSafeArea={true}\n inverted={true}\n renderLoading={() => <Skeleton variant=\"rounded\" style={{ flex: 1 }} />}\n messages={messageList}\n listViewProps={{\n onEndReached: onEndReached,\n onEndReachedThreshold: 0.5,\n onMomentumScrollBegin: onMomentumScrollBegin,\n style: { marginTop: 0 },\n contentContainerStyle: {\n paddingTop: 0,\n paddingBottom: selectedImage ? 90 : 0,\n },\n refreshControl: (\n <RefreshControl\n refreshing={refreshing}\n onRefresh={onRefresh}\n colors={[colors.blue[500]]}\n tintColor={colors.blue[500]}\n title=\"Loading earlier messages...\"\n titleColor={colors.gray[600]}\n />\n ),\n }}\n onSend={(messages) => handleSend(messages[0]?.text ?? ' ')}\n text={msg || ' '}\n onInputTextChanged={(text) => setMsg(text)}\n renderFooter={() => null}\n scrollToBottom\n user={{\n _id: auth?.id || '',\n }}\n placeholder=\"Jot something down\"\n infiniteScroll={true}\n renderSend={renderSend}\n renderMessageText={renderMessageText}\n renderMessage={renderMessage}\n renderLoadEarlier={renderLoadEarlier}\n loadEarlier={totalCount > channelMessages.length}\n isLoadingEarlier={loadingOldMessages}\n textInputProps={{\n multiline: true,\n returnKeyType: 'default',\n enablesReturnKeyAutomatically: true,\n placeholderTextColor: colors.gray[400],\n // Allow direct editing in the main input too for better UX\n editable: true,\n onFocus: () => setIsGiftedInputFocused(true),\n onBlur: () => setIsGiftedInputFocused(false),\n }}\n renderChatFooter={renderChatFooter}\n messagesContainerStyle={{\n ...(messageList?.length == 0 ? { transform: [{ scaleY: -1 }] } : {}),\n // marginTop: -40, // Negative margin to remove the top padding\n paddingTop: 0,\n }}\n // renderChatEmpty={() => (\n // <>\n // {!threadLoading && messageList && messageList?.length == 0 && (\n // <Box className=\"p-5\">\n // <Center className=\"mt-6\">\n // <Ionicons name=\"chatbubbles\" size={30} />\n // <Text>You don't have any message yet!</Text>\n // </Center>\n // </Box>\n // )}\n // </>\n // )}\n />\n {/* <GiftedChat\n ref={threadMessageListRef}\n wrapInSafeArea={true}\n inverted={true}\n renderLoading={() => <Skeleton variant=\"rounded\" style={{ flex: 1 }} />}\n messages={messageList}\n listViewProps={{\n onEndReached: onEndReached,\n onEndReachedThreshold: 0.5,\n onMomentumScrollBegin: onMomentumScrollBegin,\n style: { marginTop: 0 },\n contentContainerStyle: {\n paddingTop: 0,\n paddingBottom: selectedImage ? 90 : 0,\n },\n refreshControl: (\n <RefreshControl\n refreshing={refreshing}\n onRefresh={onRefresh}\n colors={[colors.blue[500]]}\n tintColor={colors.blue[500]}\n title=\"Loading earlier messages...\"\n titleColor={colors.gray[600]}\n />\n ),\n }}\n onSend={(messages) => handleSend(messages[0]?.text ?? ' ')}\n text={msg || ' '}\n onInputTextChanged={(text) => setMsg(text)}\n renderFooter={() => null}\n scrollToBottom\n user={{\n _id: auth?.id || '',\n }}\n isTyping={false}\n alwaysShowSend={true}\n infiniteScroll={true}\n renderSend={renderSend}\n renderMessageText={renderMessageText}\n renderInputToolbar={renderInputToolbar}\n renderComposer={renderComposer}\n minInputToolbarHeight={isActionSheetVisible ? 0 : 56}\n renderAccessory={images.length > 0 ? renderAccessory : null}\n renderMessage={renderMessage}\n renderLoadEarlier={renderLoadEarlier}\n loadEarlier={totalCount > channelMessages.length}\n isLoadingEarlier={loadingOldMessages}\n bottomOffset={Platform.OS === 'ios' ? (selectedImage ? 90 : 10) : 0}\n textInputProps={{\n multiline: true,\n returnKeyType: 'default',\n enablesReturnKeyAutomatically: true,\n placeholderTextColor: colors.gray[400],\n // Allow direct editing in the main input too for better UX\n editable: true,\n onFocus: () => setIsGiftedInputFocused(true),\n onBlur: () => setIsGiftedInputFocused(false),\n }}\n minComposerHeight={36}\n maxComposerHeight={100}\n isKeyboardInternallyHandled={false}\n renderChatFooter={renderChatFooter}\n messagesContainerStyle={{\n ...(messageList?.length == 0 ? { transform: [{ scaleY: -1 }] } : {}),\n // marginTop: -40, // Negative margin to remove the top padding\n paddingTop: 0,\n }}\n renderChatEmpty={() => (\n <>\n {!threadLoading && messageList && messageList?.length == 0 && (\n <Box className=\"p-5\">\n <Center className=\"mt-6\">\n <Ionicons name=\"chatbubbles\" size={30} />\n <Text>You don't have any message yet!</Text>\n </Center>\n </Box>\n )}\n </>\n )}\n lightboxProps={{\n underlayColor: 'transparent',\n springConfig: { tension: 90000, friction: 90000 },\n disabled: true,\n }}\n /> */}\n\n {/* Add the expandable action sheet */}\n {/* {isActionSheetVisible && <Divider />}\n {isActionSheetVisible && (\n <ExpandableInputActionSheet\n isVisible={isActionSheetVisible}\n onClose={handleActionSheetClose}\n onSend={handleActionSheetSend}\n onSelectImages={onSelectImages}\n text={msg}\n onChangeText={(text) => {\n setMsg(text);\n setTextUpdatedInActionSheet(true);\n }}\n textInputRef={textInputRef}\n isSendDisabled={(!msg.trim() && images.length === 0) || isUploadingImage}\n selectedImages={images}\n loading={loading || isUploadingImage}\n onRemoveImage={(index) => {\n const newImages = [...images];\n newImages.splice(index, 1);\n setImages(newImages);\n if (newImages.length === 0) {\n setSelectedImage('');\n }\n }}\n />\n )} */}\n </View>\n );\n};\n\nconst SubscriptionHandler = ({ subscribeToNewMessages, channelId }: IThreadSubscriptionHandlerProps) => {\n useEffect(() => subscribeToNewMessages(), [channelId]);\n return <></>;\n};\n\nexport const ThreadConversationView = ThreadConversationViewComponent;\n// export const ThreadConversationView = React.memo(ThreadConversationViewComponent);\n"],"names":["React","_a","_b","_c","threadPost","_d","_e","_f","_g","_h","_i","_j","_k","_l","msg","data","channelId","parentId","_m","_n","_o","_p","_q","_r","_s","params","SlackMessage"],"mappings":"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"}
|