@messenger-box/platform-mobile 10.0.3-alpha.34 → 10.0.3-alpha.37
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +8 -0
- package/lib/screens/inbox/components/CachedImage/index.js +125 -93
- package/lib/screens/inbox/components/CachedImage/index.js.map +1 -1
- package/lib/screens/inbox/components/DialogsListItem.js +80 -256
- package/lib/screens/inbox/components/DialogsListItem.js.map +1 -1
- package/lib/screens/inbox/components/ServiceDialogsListItem.js +222 -324
- package/lib/screens/inbox/components/ServiceDialogsListItem.js.map +1 -1
- package/lib/screens/inbox/components/SlackMessageContainer/SlackBubble.js +0 -2
- package/lib/screens/inbox/components/SlackMessageContainer/SlackBubble.js.map +1 -1
- package/lib/screens/inbox/containers/ConversationView.js +487 -888
- package/lib/screens/inbox/containers/ConversationView.js.map +1 -1
- package/lib/screens/inbox/containers/Dialogs.js +243 -547
- package/lib/screens/inbox/containers/Dialogs.js.map +1 -1
- package/lib/screens/inbox/containers/ThreadConversationView.js +409 -1364
- package/lib/screens/inbox/containers/ThreadConversationView.js.map +1 -1
- package/package.json +4 -4
- package/src/screens/inbox/components/CachedImage/index.tsx +191 -140
- package/src/screens/inbox/components/DialogsListItem.tsx +112 -345
- package/src/screens/inbox/components/ServiceDialogsListItem.tsx +316 -437
- package/src/screens/inbox/components/SlackMessageContainer/SlackBubble.tsx +2 -4
- package/src/screens/inbox/containers/ConversationView.tsx +676 -993
- package/src/screens/inbox/containers/ConversationView.tsx.bk +1467 -0
- package/src/screens/inbox/containers/Dialogs.tsx +345 -636
- package/src/screens/inbox/containers/ThreadConversationView.tsx +661 -1887
- package/lib/screens/inbox/components/workflow/dialogs-list-item-xstate.js +0 -175
- package/lib/screens/inbox/components/workflow/dialogs-list-item-xstate.js.map +0 -1
- package/lib/screens/inbox/components/workflow/service-dialogs-list-item-xstate.js +0 -191
- package/lib/screens/inbox/components/workflow/service-dialogs-list-item-xstate.js.map +0 -1
- package/lib/screens/inbox/containers/workflow/conversation-xstate.js +0 -380
- package/lib/screens/inbox/containers/workflow/conversation-xstate.js.map +0 -1
- package/lib/screens/inbox/containers/workflow/dialogs-xstate.js +0 -211
- package/lib/screens/inbox/containers/workflow/dialogs-xstate.js.map +0 -1
- package/lib/screens/inbox/containers/workflow/thread-conversation-xstate.js +0 -438
- package/lib/screens/inbox/containers/workflow/thread-conversation-xstate.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"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} from '@admin-layout/gluestack-ui-mobile';\nimport { Platform, Linking, SafeAreaView, View, TouchableHighlight, Alert } 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, Composer, InputToolbar } from 'react-native-gifted-chat';\nimport { IPost, IPostThread, PreDefinedRole, IExpoNotificationData, IFileInfo } from 'common';\nimport {\n OnThreadChatMessageAddedDocument as CHAT_MESSAGE_ADDED,\n useCreatePostThreadMutation,\n useOnThreadChatMessageAddedSubscription,\n useSendExpoNotificationOnPostMutation,\n useSendThreadMessageMutation,\n useThreadMessagesLazyQuery,\n useGetPostThreadLazyQuery,\n} from 'common/graphql';\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 {\n threadConversationXstate,\n Actions as ThreadActions,\n BaseState,\n MainState,\n} from './workflow/thread-conversation-xstate';\n\n// Define an extended interface for ImagePickerAsset with url property\ninterface ExtendedImagePickerAsset extends ImagePicker.ImagePickerAsset {\n url?: string;\n fileName?: string;\n mimeType?: string;\n}\n\nconst {\n MESSAGES_PER_PAGE,\n CALL_TO_ACTION_BOX_BGCOLOR,\n CALL_TO_ACTION_PATH,\n CALL_TO_ACTION_BUTTON_BORDERCOLOR,\n CALL_TO_ACTION_TEXT_COLOR,\n} = config;\n\nconst createdAtText = (value: string) => {\n if (!value) return '';\n\n try {\n // Validate the date before processing\n const timestamp = new Date(value).getTime();\n if (isNaN(timestamp)) {\n console.warn(`Invalid date value in createdAtText: ${value}`);\n return 'Unknown date';\n }\n\n let date = new Date(value);\n if (isToday(date)) return 'Today';\n if (isYesterday(date)) return 'Yesterday';\n return format(date, 'MMM dd, yyyy');\n } catch (error) {\n console.error(`Error processing date in createdAtText: ${value}`, error);\n return 'Unknown date';\n }\n};\n\n// Create a safer version of useMachine to handle potential errors\nfunction useSafeMachine(machine) {\n // Define the state type\n interface SafeStateType {\n context: {\n channelId: any;\n postParentId: any;\n role: any;\n threadMessages: any[];\n totalCount: number;\n skip: number;\n loading: boolean;\n loadingOldMessages: boolean;\n error: any;\n selectedImage: string;\n files: any[];\n images: any[];\n messageText: string;\n imageLoading: boolean;\n postThread: any;\n threadPost: any[];\n isScrollToBottom: boolean;\n };\n value: string;\n matches?: (stateValue: string) => boolean;\n }\n\n // Initialize with default state\n const [state, setState] = useState<SafeStateType>({\n context: {\n channelId: null,\n postParentId: null,\n role: null,\n threadMessages: [],\n totalCount: 0,\n skip: 0,\n loading: false,\n loadingOldMessages: false,\n error: null,\n selectedImage: '',\n files: [],\n images: [],\n messageText: '',\n imageLoading: false,\n postThread: null,\n threadPost: [],\n isScrollToBottom: false,\n },\n value: 'idle',\n });\n\n // Create a safe send function\n const send = useCallback((event) => {\n try {\n // Log event for debugging\n console.log('Thread Event received:', event.type);\n\n // Handle specific events manually\n if (event.type === ThreadActions.INITIAL_CONTEXT) {\n setState((prev) => ({\n ...prev,\n context: {\n ...prev.context,\n channelId: event.data?.channelId || null,\n postParentId: event.data?.postParentId || null,\n role: event.data?.role || null,\n },\n value: BaseState.FetchThreadMessages,\n }));\n } else if (event.type === ThreadActions.SET_THREAD_MESSAGES) {\n setState((prev) => ({\n ...prev,\n context: {\n ...prev.context,\n threadMessages: event.data?.messages || [],\n totalCount: event.data?.totalCount || 0,\n loading: false,\n loadingOldMessages: false,\n threadPost: event.data?.threadPost || [],\n postThread: event.data?.postThread || null,\n },\n value: 'active',\n }));\n } else if (event.type === ThreadActions.CLEAR_MESSAGES) {\n setState((prev) => ({\n ...prev,\n context: {\n ...prev.context,\n threadMessages: [],\n totalCount: 0,\n },\n }));\n } else if (event.type === ThreadActions.SET_MESSAGE_TEXT) {\n setState((prev) => ({\n ...prev,\n context: {\n ...prev.context,\n messageText: event.data?.messageText || '',\n },\n }));\n } else if (event.type === ThreadActions.FETCH_MORE_MESSAGES) {\n setState((prev) => ({\n ...prev,\n context: {\n ...prev.context,\n loadingOldMessages: true,\n },\n value: MainState.FetchMoreMessages,\n }));\n } else if (event.type === ThreadActions.SET_IMAGE) {\n setState((prev) => ({\n ...prev,\n context: {\n ...prev.context,\n selectedImage: event.data?.image || '',\n images: event.data?.images || [],\n files: event.data?.files || [],\n imageLoading: false,\n },\n }));\n } else if (event.type === ThreadActions.CLEAR_IMAGE) {\n setState((prev) => ({\n ...prev,\n context: {\n ...prev.context,\n selectedImage: '',\n images: [],\n files: [],\n },\n }));\n } else if (event.type === ThreadActions.START_LOADING) {\n setState((prev) => ({\n ...prev,\n context: {\n ...prev.context,\n loading: true,\n },\n }));\n } else if (event.type === ThreadActions.STOP_LOADING) {\n setState((prev) => ({\n ...prev,\n context: {\n ...prev.context,\n loading: false,\n loadingOldMessages:\n event.data?.loadingOldMessages === false ? false : prev.context.loadingOldMessages,\n },\n }));\n } else if (event.type === ThreadActions.SEND_THREAD_MESSAGE) {\n console.log('Sending message event with text:', event.data?.messageText);\n setState((prev) => ({\n ...prev,\n context: {\n ...prev.context,\n loading: true,\n // Keep the message text until we're done sending\n messageText: event.data?.messageText || prev.context.messageText,\n },\n value: MainState.SendThreadMessage,\n }));\n } else if (event.type === ThreadActions.SEND_THREAD_MESSAGE_WITH_FILE) {\n console.log('Sending message with file event, text:', event.data?.messageText);\n setState((prev) => ({\n ...prev,\n context: {\n ...prev.context,\n loading: true,\n // Keep the message text until we're done sending\n messageText: event.data?.messageText || prev.context.messageText,\n },\n value: MainState.SendThreadMessageWithFile,\n }));\n } else if (\n event.type === 'SEND_THREAD_MESSAGE_SUCCESS' ||\n event.type === 'SEND_THREAD_MESSAGE_WITH_FILE_SUCCESS'\n ) {\n console.log('Handling send success event:', event.type, 'with message:', event.data?.message?.id);\n setState((prev) => {\n // Make sure we have the message data\n if (!event.data?.message) {\n console.warn('Send success event without message data');\n return {\n ...prev,\n context: {\n ...prev.context,\n loading: false,\n messageText: '', // Clear input\n images: [],\n selectedImage: '',\n files: [],\n },\n value: 'active',\n };\n }\n\n // Add the new message to our threadMessages\n const newMessage = event.data.message;\n const updatedMessages = [newMessage, ...prev.context.threadMessages];\n\n console.log('Updated thread messages list after send, now has', updatedMessages.length, 'messages');\n\n return {\n ...prev,\n context: {\n ...prev.context,\n loading: false,\n messageText: '', // Always clear input text after sending\n images: [],\n selectedImage: '',\n files: [],\n threadMessages: updatedMessages,\n totalCount: prev.context.totalCount + 1,\n },\n value: 'active',\n };\n });\n } else if (event.type === 'FETCH_MORE_MESSAGES_SUCCESS') {\n setState((prev) => {\n const newMessages = event.data?.messages || [];\n const apiTotalCount = event.data?.totalCount;\n console.log(\n `Merging ${newMessages.length} older messages with ${prev.context.threadMessages.length} existing messages`,\n );\n\n if (newMessages.length > 0) {\n try {\n console.log(\n 'First new message date:',\n !isNaN(new Date(newMessages[0].createdAt).getTime())\n ? new Date(newMessages[0].createdAt).toISOString()\n : 'Invalid date',\n );\n console.log(\n 'Last new message date:',\n !isNaN(new Date(newMessages[newMessages.length - 1].createdAt).getTime())\n ? new Date(newMessages[newMessages.length - 1].createdAt).toISOString()\n : 'Invalid date',\n );\n } catch (error) {\n console.error('Error logging new message dates:', error);\n }\n }\n\n if (prev.context.threadMessages.length > 0) {\n try {\n console.log(\n 'First existing message date:',\n !isNaN(new Date(prev.context.threadMessages[0].createdAt).getTime())\n ? new Date(prev.context.threadMessages[0].createdAt).toISOString()\n : 'Invalid date',\n );\n console.log(\n 'Last existing message date:',\n !isNaN(\n new Date(\n prev.context.threadMessages[prev.context.threadMessages.length - 1].createdAt,\n ).getTime(),\n )\n ? new Date(\n prev.context.threadMessages[prev.context.threadMessages.length - 1].createdAt,\n ).toISOString()\n : 'Invalid date',\n );\n } catch (error) {\n console.error('Error logging existing message dates:', error);\n }\n }\n\n // If no new messages returned but total count says there should be more\n if (newMessages.length === 0 && prev.context.totalCount > prev.context.threadMessages.length) {\n console.log('No new messages found despite totalCount indicating more should exist');\n\n // Adjust totalCount to match reality\n return {\n ...prev,\n context: {\n ...prev.context,\n loadingOldMessages: false,\n totalCount: prev.context.threadMessages.length,\n },\n value: 'active',\n };\n }\n\n // Make sure we don't add duplicate messages\n const combinedMessages = uniqBy([...prev.context.threadMessages, ...newMessages], 'id');\n\n // GiftedChat expects messages sorted by date (newest first)\n const sortedMessages = orderBy(\n combinedMessages,\n [\n (msg) => {\n try {\n // Safely access and convert date\n return !isNaN(new Date(msg.createdAt).getTime())\n ? new Date(msg.createdAt).getTime()\n : 0; // Default to oldest if invalid\n } catch (error) {\n console.error(`Error sorting message by date: ${msg.id}`, error);\n return 0; // Default to oldest if error\n }\n },\n ],\n ['desc'],\n );\n\n // Use the total count from the API response if available, otherwise keep the current count\n const newTotalCount =\n typeof apiTotalCount === 'number'\n ? apiTotalCount\n : Math.max(sortedMessages.length, prev.context.totalCount);\n\n console.log(\n `Total messages after merge and sort: ${sortedMessages.length}, totalCount: ${newTotalCount}`,\n );\n\n return {\n ...prev,\n context: {\n ...prev.context,\n loadingOldMessages: false,\n threadMessages: sortedMessages,\n totalCount: newTotalCount,\n },\n value: 'active',\n };\n });\n } else if (event.type === 'ERROR') {\n setState((prev) => ({\n ...prev,\n context: {\n ...prev.context,\n loading: false,\n loadingOldMessages: false,\n error: event.data?.message || 'Unknown error',\n },\n value: 'error',\n }));\n }\n } catch (error) {\n console.error('Error in thread conversation send function:', error);\n }\n }, []);\n\n // Add a custom matches function to the state\n const stateWithMatches = useMemo(() => {\n return {\n ...state,\n matches: (checkState) => {\n return state.value === checkState;\n },\n };\n }, [state]);\n\n // Return as a tuple to match useMachine API\n return [stateWithMatches, send] as const;\n}\n\ninterface IMessageProps extends IMessage {\n type: string;\n propsConfiguration?: any;\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\nconst ThreadConversationViewComponent = ({ channelId, postParentId, isPostParentIdThread, role }: any): JSX.Element => {\n const { params } = useRoute<any>();\n const [channelToTop, setChannelToTop] = useState(0);\n\n // Create a ref to track if component is mounted\n const isMountedRef = useRef(true);\n\n // Use our safer custom implementation instead of the problematic useMachine\n const [state, send] = useSafeMachine(threadConversationXstate);\n\n // Define safe functions first to avoid \"used before declaration\" errors\n const safeContext = useCallback(() => {\n try {\n return state?.context || {};\n } catch (error) {\n console.error('Error accessing state.context:', error);\n return {};\n }\n }, [state]);\n\n const safeContextProperty = useCallback(\n (property, defaultValue = null) => {\n try {\n return state?.context?.[property] ?? defaultValue;\n } catch (error) {\n console.error(`Error accessing state.context.${property}:`, error);\n return defaultValue;\n }\n },\n [state],\n );\n\n const safeMatches = useCallback(\n (stateValue) => {\n try {\n return state?.matches?.(stateValue) || false;\n } catch (error) {\n console.error(`Error calling state.matches with ${stateValue}:`, error);\n return false;\n }\n },\n [state],\n );\n\n const safeSend = useCallback(\n (event) => {\n try {\n send(event);\n } catch (error) {\n console.error('Error sending event to state machine:', error, event);\n }\n },\n [send],\n );\n\n // Use a ref to track the current machine snapshot for safer access\n const stateRef = useRef(state);\n\n // Keep the ref updated with the latest snapshot\n useEffect(() => {\n stateRef.current = state;\n }, [state]);\n\n const auth: any = useSelector(userSelector);\n const [selectedImage, setImage] = useState<string>('');\n const navigation = useNavigation<any>();\n const [files, setFiles] = useState<File[]>([]);\n const [images, setImages] = useState<ImagePicker.ImagePickerAsset[]>([]);\n const [isShowImageViewer, setImageViewer] = useState<boolean>(false);\n const [imageObject, setImageObject] = useState<any>({});\n const [parentId, setParentId] = useState<any>(postParentId);\n const [expoTokens, setExpoTokens] = useState<any[]>([]);\n const threadMessageListRef = useRef<any>(null);\n\n // const [sendThreadMessage] = useSendThreadMessageMutation();\n const [sendThreadMessage] = useCreatePostThreadMutation();\n const [sendExpoNotificationOnPostMutation] = useSendExpoNotificationOnPostMutation();\n const { startUpload } = useUploadFilesNative();\n\n const [\n getThreadMessages,\n { data, loading: threadLoading, fetchMore: fetchMoreMessages, refetch: refetchThreadMessages, subscribeToMore },\n ] = useGetPostThreadLazyQuery({ fetchPolicy: 'cache-and-network' });\n\n // Add a function to force refresh all messages\n const forceRefreshMessages = useCallback(() => {\n console.log('Force refreshing all messages');\n\n // Clear the current messages first\n safeSend({\n type: ThreadActions.CLEAR_MESSAGES,\n });\n\n // Then trigger a refetch\n if (channelId && parentId) {\n safeSend({\n type: ThreadActions.START_LOADING,\n data: { loading: true },\n });\n\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: 50, // Use larger limit that proved to work\n },\n })\n .then(({ data }) => {\n if (data?.getPostThread) {\n const threads: any = data.getPostThread;\n const threadPost = threads?.post ?? [];\n const threadReplies = threads?.replies ?? [];\n const messageTotalCount = threads?.replyCount ?? 0;\n const messages = [...threadReplies];\n\n console.log(\n `Force refresh complete. Got ${messages.length} messages of ${messageTotalCount} total`,\n );\n\n safeSend({\n type: ThreadActions.SET_THREAD_MESSAGES,\n data: {\n messages,\n totalCount: messageTotalCount,\n threadPost: threadPost,\n postThread: threads,\n },\n });\n }\n })\n .catch((error) => {\n console.error('Error during force refresh:', error);\n safeSend({\n type: 'ERROR',\n data: { message: error.message },\n });\n });\n }\n }, [channelId, parentId, getThreadMessages, safeSend]);\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 headerRight: () => (\n <Button className=\"bg-transparent active:bg-gray-200 mr-2\" onPress={forceRefreshMessages}>\n <MaterialIcons size={20} name=\"refresh\" color={'black'} />\n </Button>\n ),\n });\n\n // Set initial context when focused\n if (channelId && postParentId) {\n safeSend({\n type: ThreadActions.INITIAL_CONTEXT,\n data: {\n channelId,\n postParentId,\n role,\n },\n });\n }\n\n setParentId(postParentId);\n\n return () => {\n safeSend({ type: ThreadActions.CLEAR_MESSAGES });\n };\n }, [postParentId, forceRefreshMessages]),\n );\n\n // Effect for when in FetchThreadMessages state\n useEffect(() => {\n if (safeMatches(BaseState.FetchThreadMessages)) {\n fetchThreadMessages();\n }\n }, [state.value]);\n\n // Effect for when in FetchMoreMessages state\n useEffect(() => {\n if (safeMatches(MainState.FetchMoreMessages)) {\n onFetchOld();\n }\n }, [state.value]);\n\n // Effect for when in SendThreadMessage state\n useEffect(() => {\n if (safeMatches(MainState.SendThreadMessage)) {\n const messageText = safeContextProperty('messageText', '');\n console.log('Sending message from state transition, text:', messageText);\n sendThreadMessageHandler(messageText);\n }\n }, [state.value]);\n\n // Effect for when in SendThreadMessageWithFile state\n useEffect(() => {\n if (safeMatches(MainState.SendThreadMessageWithFile)) {\n const messageText = safeContextProperty('messageText', '');\n const images = safeContextProperty('images', []);\n sendThreadMessageWithFileHandler(messageText, images);\n }\n }, [state.value]);\n\n // Fetch thread messages function\n const fetchThreadMessages = useCallback(() => {\n if (channelId && parentId) {\n if (__DEV__) console.log('Initial fetch of thread messages using larger limit (50)');\n\n // Set loading state\n safeSend({\n type: ThreadActions.START_LOADING,\n data: { loading: true },\n });\n\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: 50, // Use larger limit that proved to work\n },\n })\n .then(({ data }) => {\n if (data?.getPostThread) {\n const threads: any = data.getPostThread;\n const threadPost = threads?.post ?? [];\n const threadReplies = threads?.replies ?? [];\n const messageTotalCount = threads?.replyCount ?? 0;\n const messages = [...threadReplies];\n\n if (__DEV__)\n console.log(\n `Initial fetch complete. Got ${messages.length} messages of ${messageTotalCount} total`,\n );\n\n // Use batch updates to reduce render cycles\n safeSend({\n type: ThreadActions.SET_THREAD_MESSAGES,\n data: {\n messages,\n totalCount: messageTotalCount,\n threadPost: threadPost,\n postThread: threads,\n },\n });\n }\n })\n .catch((error) => {\n safeSend({\n type: 'ERROR',\n data: { message: error.message },\n });\n });\n }\n }, [channelId, parentId, role, getThreadMessages, safeSend]);\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 = [...threadReplies];\n\n safeSend({\n type: ThreadActions.SET_THREAD_MESSAGES,\n data: {\n messages,\n totalCount: messeageTotalCount,\n threadPost: threadPost,\n postThread: threads,\n },\n });\n }\n }, [data]);\n\n React.useEffect(() => {\n if (safeContextProperty('selectedImage')) {\n safeSend({ type: ThreadActions.STOP_LOADING });\n }\n }, [safeContextProperty('selectedImage')]);\n\n // Add a safety timeout to clear loading state if it gets stuck\n React.useEffect(() => {\n const isLoading = safeContextProperty('loadingOldMessages', false);\n\n if (isLoading) {\n console.log('Message loading timeout safety started');\n const timeoutId = setTimeout(() => {\n // Check if we're still loading after 10 seconds\n if (safeContextProperty('loadingOldMessages', false)) {\n console.log('Message loading timed out - resetting state');\n safeSend({\n type: ThreadActions.STOP_LOADING,\n data: { loadingOldMessages: false },\n });\n }\n }, 10000); // 10 second timeout\n\n return () => clearTimeout(timeoutId);\n }\n }, [safeContextProperty('loadingOldMessages')]);\n\n // Add a safety counter to detect and fix incorrect message counts automatically\n const failedLoadAttemptsRef = useRef(0);\n\n // Track failed attempts to load more messages\n const registerLoadAttemptResult = useCallback((success: boolean) => {\n if (!success) {\n failedLoadAttemptsRef.current += 1;\n console.log(`Failed load attempt registered, count: ${failedLoadAttemptsRef.current}`);\n } else {\n // Reset counter on successful load\n failedLoadAttemptsRef.current = 0;\n }\n }, []);\n\n // Watch for failed load attempts and auto-fix the count after 3 consecutive failures\n React.useEffect(() => {\n const isLoading = safeContextProperty('loadingOldMessages', false);\n const totalCount = safeContextProperty('totalCount', 0);\n const messagesCount = safeContextProperty('threadMessages', []).length;\n\n // If we're not loading and there's a discrepancy in message counts\n if (!isLoading && totalCount > messagesCount) {\n // If we've had 3 consecutive failed attempts, fix the count\n if (failedLoadAttemptsRef.current >= 2) {\n console.log(\n `Auto-fixing incorrect message count after ${\n failedLoadAttemptsRef.current + 1\n } failed load attempts`,\n );\n console.log(`Adjusting totalCount from ${totalCount} to ${messagesCount}`);\n\n safeSend({\n type: ThreadActions.SET_THREAD_MESSAGES,\n data: {\n messages: safeContextProperty('threadMessages', []),\n totalCount: messagesCount,\n threadPost: safeContextProperty('threadPost', []),\n postThread: safeContextProperty('postThread', null),\n },\n });\n\n // Reset the counter\n failedLoadAttemptsRef.current = 0;\n }\n }\n }, [safeContextProperty('loadingOldMessages'), safeContextProperty('threadMessages')]);\n\n const scrollToBottom = React.useCallback(() => {\n if (threadMessageListRef?.current) {\n threadMessageListRef.current.scrollToBottom();\n }\n }, [threadMessageListRef]);\n\n const isCloseToTop = useCallback(({ layoutMeasurement, contentOffset, contentSize }) => {\n // We consider being \"close to top\" when scrolled to top 15% of visible area\n const visibleHeight = layoutMeasurement.height;\n const topThreshold = Math.min(80, visibleHeight * 0.15);\n return contentOffset.y <= topThreshold;\n }, []);\n\n const handleScrollToTop = useCallback(\n ({ nativeEvent }: any) => {\n // Check if we're near the top of the list\n if (isCloseToTop(nativeEvent)) {\n const isLoading = safeContextProperty('loadingOldMessages', false);\n const totalCount = safeContextProperty('totalCount', 0);\n const currentCount = safeContextProperty('threadMessages', []).length;\n const hasMoreMessages = totalCount > currentCount;\n\n if (__DEV__)\n console.log(\n `Scroll near top - Loading state: ${isLoading}, Messages: ${currentCount}/${totalCount}, Has more: ${hasMoreMessages}`,\n );\n\n if (!isLoading && hasMoreMessages) {\n if (__DEV__) console.log('Near top of list - loading older messages');\n safeSend({ type: ThreadActions.FETCH_MORE_MESSAGES });\n }\n }\n },\n [isCloseToTop, safeContextProperty, safeSend],\n );\n\n const handleEndReached = () => {\n // This triggers when scrolled to the bottom\n console.log('Reached end of message list');\n };\n\n const onSelectImages = async () => {\n try {\n safeSend({ type: ThreadActions.START_LOADING });\n\n const imageSource = await ImagePicker.launchImageLibraryAsync({\n mediaTypes: ImagePicker.MediaTypeOptions.Images,\n allowsEditing: true,\n aspect: [4, 3],\n quality: 0.8, // Reduced from 1 for better performance\n base64: true,\n allowsMultipleSelection: false, // Set to true if you want to support multiple images\n });\n\n if (imageSource.canceled) {\n console.log('Image selection was canceled');\n safeSend({ type: ThreadActions.STOP_LOADING });\n return;\n }\n\n if (!imageSource.assets || imageSource.assets.length === 0 || !imageSource.assets[0]?.base64) {\n console.error('No valid image data received');\n safeSend({\n type: 'ERROR',\n data: { message: 'No valid image data received' },\n });\n return;\n }\n\n // Get the first asset\n const asset = imageSource.assets[0];\n\n // Derive file extension from mime type or default to jpg\n const fileExtension = asset.mimeType ? asset.mimeType.split('/').pop() || 'jpg' : 'jpg';\n\n // Create a more descriptive filename with timestamp\n const filename = `image_${Date.now()}.${fileExtension}`;\n\n // Create data URL with proper mime type\n const mimeType = asset.mimeType || 'image/jpeg';\n const image = `data:${mimeType};base64,${asset.base64}`;\n\n // Create file-like object suitable for React Native\n const fileData = {\n uri: asset.uri,\n type: mimeType,\n name: filename,\n base64: asset.base64,\n };\n\n console.log(`Selected image: ${filename}, type: ${mimeType}`);\n\n safeSend({\n type: ThreadActions.SET_IMAGE,\n data: {\n image,\n files: [fileData],\n images: [asset as ImagePicker.ImagePickerAsset],\n },\n });\n } catch (error) {\n console.error('Error selecting image:', error);\n safeSend({\n type: 'ERROR',\n data: { message: error.message || 'Failed to select image' },\n });\n }\n };\n\n // Define message sending handlers\n const sendThreadMessageHandler = useCallback(\n async (message: string) => {\n console.log('Sending message:', message);\n\n if (!channelId) {\n console.error('No channelId provided');\n return;\n }\n\n // Allow empty messages with spaces or blank content - GiftedChat sometimes sends these\n // But use the actual message if available\n const messageContent = message?.trim() || ' ';\n console.log('Using message content for sending:', messageContent);\n\n const postId = objectId();\n console.log('Generated postId:', postId);\n\n safeSend({ type: ThreadActions.START_LOADING });\n\n try {\n console.log('Sending mutation with variables:', {\n channelId,\n postThreadId: safeContextProperty('postThread')?.id,\n postParentId: !parentId || parentId == 0 ? null : parentId,\n message: messageContent,\n });\n\n const result = await sendThreadMessage({\n variables: {\n channelId,\n postThreadId: safeContextProperty('postThread') && safeContextProperty('postThread')?.id,\n postParentId: !parentId || parentId == 0 ? null : parentId,\n threadMessageInput: {\n content: messageContent,\n role,\n },\n },\n update: (cache, { data, errors }: any) => {\n console.log('Send message update callback - data:', data, 'errors:', errors);\n\n if (!data || errors) {\n console.error('Send message failed:', errors);\n safeSend({ type: ThreadActions.STOP_LOADING });\n return;\n }\n\n console.log('Message sent successfully:', data?.createPostThread?.lastMessage);\n\n // Add the new message to our local state\n const newMessage = data?.createPostThread?.lastMessage;\n\n // Reset the message text and add the new message\n safeSend({\n type: 'SEND_THREAD_MESSAGE_SUCCESS',\n data: {\n message: newMessage,\n messageText: '', // Clear the message text now\n },\n });\n\n if (!parentId || parentId == 0) {\n console.log('Setting new parentId:', data?.createPostThread?.lastMessage?.id);\n setParentId(data?.createPostThread?.lastMessage?.id);\n }\n\n setChannelToTop(channelToTop + 1);\n\n const lastMessageId = data?.createPostThread?.lastMessage?.id;\n sendPushNotification(lastMessageId, channelId, parentId, data?.createPostThread?.data?.id);\n },\n });\n\n console.log('Send mutation result:', result);\n } catch (error) {\n console.error('Error sending message:', error);\n safeSend({\n type: 'ERROR',\n data: { message: error.message || 'Failed to send message' },\n });\n }\n },\n [channelId, parentId, state.context, role],\n );\n\n const sendThreadMessageWithFileHandler = useCallback(\n async (message: string, images: any[]) => {\n console.log('Sending message with file:', message, 'Images:', images.length);\n\n if (!channelId) {\n console.error('No channelId provided');\n return;\n }\n\n if (images.length === 0) {\n console.error('No images to send');\n return;\n }\n\n // Allow empty message content for file uploads\n // But use the actual message if available\n const messageContent = message?.trim() || ' ';\n console.log('Using message content for file send:', messageContent);\n\n const postId = objectId();\n console.log('Generated postId for file upload:', postId);\n\n try {\n // Prepare image assets in the format expected by the upload service\n const preparedImages = images.map((img) => ({\n uri: img.uri,\n type: img.mimeType || 'image/jpeg',\n name: img.fileName || `image_${Date.now()}.jpg`,\n base64: img.base64,\n width: img.width || 0,\n height: img.height || 0,\n })) as ImagePicker.ImagePickerAsset[];\n\n console.log('Starting file upload with prepared images:', preparedImages.length);\n\n const uploadResponse = await startUpload({\n file: preparedImages,\n saveUploadedFile: {\n variables: {\n postId,\n },\n },\n createUploadLink: {\n variables: {\n postId,\n },\n },\n });\n\n if (uploadResponse?.error) {\n console.error('File upload failed:', uploadResponse.error);\n safeSend({ type: ThreadActions.STOP_LOADING });\n return;\n }\n\n const uploadedFiles = uploadResponse.data as unknown as IFileInfo[];\n console.log('Files uploaded successfully:', uploadedFiles?.length);\n\n if (uploadResponse.data) {\n const files = uploadedFiles?.map((f: any) => f.id) ?? null;\n console.log('File IDs for message:', files);\n\n console.log('Sending message with attached files');\n const result = await sendThreadMessage({\n variables: {\n postId,\n channelId,\n postThreadId: safeContextProperty('postThread') && safeContextProperty('postThread')?.id,\n postParentId: !parentId || parentId == 0 ? null : parentId,\n threadMessageInput: {\n content: messageContent,\n files,\n role,\n },\n },\n update: (cache, { data, errors }: any) => {\n console.log('Send message with file update callback - data:', data, 'errors:', errors);\n\n if (!data || errors) {\n console.error('Send message with file failed:', errors);\n safeSend({ type: ThreadActions.STOP_LOADING });\n return;\n }\n\n console.log('Message with file sent successfully:', data?.createPostThread?.lastMessage);\n\n // Add the new message to our local state\n const newMessage = data?.createPostThread?.lastMessage;\n\n safeSend({\n type: 'SEND_THREAD_MESSAGE_WITH_FILE_SUCCESS',\n data: {\n message: newMessage,\n messageText: '', // Clear the message text now\n },\n });\n\n if (!parentId || parentId == 0) {\n console.log('Setting new parentId:', data?.createPostThread?.lastMessage?.id);\n setParentId(data?.createPostThread?.lastMessage?.id);\n }\n\n setChannelToTop(channelToTop + 1);\n\n const lastMessageId = data?.createPostThread?.lastMessage?.id;\n sendPushNotification(lastMessageId, channelId, parentId, data?.createPostThread?.data?.id);\n },\n });\n\n console.log('Send with file mutation result:', result);\n }\n } catch (error) {\n console.error('Error sending message with file:', error);\n safeSend({\n type: 'ERROR',\n data: { message: error.message || 'Failed to send message with file' },\n });\n }\n },\n [channelId, parentId, state.context, role, startUpload],\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 // Optimize messageList memo to avoid unnecessary recalculations\n const messageList = useMemo(() => {\n const threadMessages = safeContextProperty('threadMessages', []);\n // Avoid excessive logging in production\n if (__DEV__) console.log(`Creating message list from ${threadMessages.length} thread messages`);\n\n if (!threadMessages?.length) return [];\n\n // We need to convert the threadMessages into the format expected by GiftedChat\n // Use a Set to track IDs and prevent duplicates\n const messageIds = new Set();\n\n const res = threadMessages\n .filter((msg) => {\n // Skip duplicate IDs\n if (!msg.id || messageIds.has(msg.id)) return false;\n messageIds.add(msg.id);\n return true;\n })\n .map((msg) => {\n // Generate a unique _id if needed by combining id and createdAt\n const uniqueId = msg.id || `${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n\n // Safely create a Date object with validation\n let messageDate;\n try {\n // Check if createdAt is a valid date string\n if (msg.createdAt && !isNaN(new Date(msg.createdAt).getTime())) {\n messageDate = new Date(msg.createdAt);\n } else {\n // Use current time as fallback if date is invalid\n messageDate = new Date();\n }\n } catch (error) {\n messageDate = new Date(); // Fallback to current time\n }\n\n // Extract image URL from files data\n let imageUrl = null;\n if (msg.files?.data && msg.files.data.length > 0) {\n const fileData = msg.files.data[0];\n if (fileData && fileData.url) {\n imageUrl = fileData.url;\n }\n }\n\n // Get the message text without adding \"File attachment\" for image-only messages\n let messageText = msg.message || '';\n\n return {\n _id: uniqueId,\n text: messageText,\n createdAt: messageDate,\n 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 type: msg?.type || '',\n image: imageUrl,\n sent: msg?.isDelivered || true,\n received: msg?.isRead || false,\n propsConfiguration: msg?.propsConfiguration,\n };\n });\n\n // Sort messages by date (newest first as required by GiftedChat)\n // Use a safer getTime() approach with error handling\n return orderBy(\n res,\n [\n (msg) => {\n try {\n return msg.createdAt instanceof Date ? msg.createdAt.getTime() : new Date().getTime();\n } catch (error) {\n return 0; // Fallback to a default value\n }\n },\n ],\n ['desc'],\n );\n }, [safeContextProperty('threadMessages'), auth]);\n\n // Optimize render functions with memoization\n const renderSend = useCallback(\n (props) => {\n // Check if there's an image selected\n const hasImage = safeContextProperty('selectedImage', '') !== '';\n\n // Enable send button if there's text OR an image\n const isDisabled = !hasImage && (!props.text || props.text.trim().length === 0);\n\n return (\n <Send\n {...props}\n containerStyle={{\n alignItems: 'center',\n justifyContent: 'center',\n marginHorizontal: 4,\n marginBottom: 0,\n }}\n disabled={isDisabled}\n >\n <Box\n style={{\n width: 32,\n height: 32,\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n <MaterialCommunityIcons\n name=\"send-circle\"\n size={30}\n color={isDisabled ? colors.gray[400] : colors.blue[500]}\n />\n </Box>\n </Send>\n );\n },\n [safeContextProperty],\n );\n\n const renderActions = useCallback(\n (props) => {\n return (\n <Actions\n {...props}\n options={{\n ['Choose from Library']: onSelectImages,\n ['Cancel']: () => {}, // Add this option to make the sheet dismissible\n }}\n optionTintColor=\"#000000\"\n cancelButtonIndex={1} // Set the Cancel option as the cancel button\n icon={() => (\n <Box\n style={{\n width: 32,\n height: 32,\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n <Ionicons name=\"image\" size={24} color={colors.blue[500]} />\n </Box>\n )}\n containerStyle={{\n alignItems: 'center',\n justifyContent: 'center',\n marginLeft: 8,\n marginBottom: 0,\n }}\n />\n );\n },\n [onSelectImages],\n );\n\n const renderAccessory = useCallback(\n (props) => {\n const selectedImage = safeContextProperty('selectedImage', '');\n\n if (!selectedImage) {\n return null;\n }\n\n return (\n <View\n style={{\n height: 80,\n padding: 10,\n backgroundColor: 'white',\n borderTopWidth: 1,\n borderTopColor: '#e0e0e0',\n flexDirection: 'row',\n alignItems: 'center',\n }}\n >\n <View\n style={{\n flex: 1,\n flexDirection: 'row',\n alignItems: 'center',\n paddingHorizontal: 20,\n }}\n >\n <Image\n key={state?.context?.selectedImage}\n alt={'selected image'}\n source={{ uri: state?.context?.selectedImage }}\n size={'xs'}\n style={{\n width: 5,\n height: 5,\n borderRadius: 5,\n marginRight: 20,\n }}\n />\n\n <TouchableHighlight\n underlayColor=\"#dddddd\"\n onPress={() => safeSend({ type: ThreadActions.CLEAR_IMAGE })}\n style={{\n backgroundColor: '#f44336',\n paddingVertical: 2,\n paddingHorizontal: 5,\n borderRadius: 5,\n marginLeft: 10,\n elevation: 3,\n shadowColor: '#000',\n shadowOffset: { width: 0, height: 1 },\n shadowOpacity: 0.3,\n shadowRadius: 2,\n }}\n >\n <Text style={{ color: 'white', fontWeight: 'bold' }}>X</Text>\n </TouchableHighlight>\n </View>\n </View>\n );\n },\n [state?.context?.selectedImage, safeSend],\n );\n\n const renderInputToolbar = useCallback((props) => {\n return (\n <InputToolbar\n {...props}\n containerStyle={{\n backgroundColor: 'white',\n borderTopWidth: 1,\n borderTopColor: colors.gray[200],\n paddingHorizontal: 4,\n paddingVertical: 4,\n }}\n primaryStyle={{\n alignItems: 'center',\n }}\n />\n );\n }, []);\n\n const setImageViewerObject = (obj: any, v: boolean) => {\n setImageObject(obj);\n setImageViewer(v);\n };\n\n // Add back the renderMessageText function (memoized)\n const renderMessageText = useCallback(\n (props: any) => {\n const { currentMessage } = props;\n\n // For ALERT type messages with call to action\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 }\n // For file attachment messages, don't show the \"File attachment\" text\n else if (currentMessage.text === '📎 File attachment') {\n // Return null to not render any text for these messages\n return null;\n }\n // Default text rendering\n else {\n return <MessageText {...props} textStyle={{ left: { marginLeft: 5 } }} />;\n }\n },\n [role, navigation],\n );\n\n const renderMessage = useCallback(\n (props: any) => {\n return (\n <SlackMessage {...props} isShowImageViewer={isShowImageViewer} setImageViewer={setImageViewerObject} />\n );\n },\n [isShowImageViewer, setImageViewerObject],\n );\n\n const modalContent = React.useMemo(() => {\n if (!imageObject) return <></>;\n const { image, _id } = imageObject;\n return (\n <CachedImage\n style={{ width: '100%', height: '100%' }}\n resizeMode={'cover'}\n cacheKey={`${_id}-slack-bubble-imageKey`}\n source={{\n uri: image,\n expiresIn: 86400,\n }}\n alt={'image'}\n />\n );\n }, [imageObject]);\n\n // Define a memo that provides the current message text from state\n const currentMessageText = useMemo(() => {\n const text = safeContextProperty('messageText', '') || ' ';\n return text;\n }, [safeContextProperty('messageText')]);\n\n // Add a function to load messages with specific skip value for debugging\n const forceLoadMessages = useCallback(\n (skipValue: number) => {\n console.log(`Force loading messages with explicit skip=${skipValue}, limit=50`);\n\n if (channelId && parentId) {\n safeSend({\n type: ThreadActions.START_LOADING,\n data: { loading: true },\n });\n\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 skip: skipValue,\n limit: 50, // Use larger limit that proved to work\n },\n })\n .then(({ data }) => {\n if (data?.getPostThread) {\n const threads: any = data.getPostThread;\n const threadPost = threads?.post ?? [];\n const threadReplies = threads?.replies ?? [];\n const messageTotalCount = threads?.replyCount ?? 0;\n const messages = [...threadReplies];\n\n console.log(\n `Force load with skip=${skipValue} complete. Got ${messages.length} messages of ${messageTotalCount} total`,\n );\n\n safeSend({\n type: ThreadActions.SET_THREAD_MESSAGES,\n data: {\n messages,\n totalCount: messageTotalCount,\n threadPost: threadPost,\n postThread: threads,\n },\n });\n }\n })\n .catch((error) => {\n console.error('Error during force load:', error);\n safeSend({\n type: 'ERROR',\n data: { message: error.message },\n });\n });\n }\n },\n [channelId, parentId, getThreadMessages, safeSend],\n );\n\n // Optimize the onFetchOld function to be more efficient\n const onFetchOld = useCallback(() => {\n const totalCount = safeContextProperty('totalCount', 0);\n const threadMessages = safeContextProperty('threadMessages', []);\n const isLoading = safeContextProperty('loadingOldMessages', false);\n\n if (totalCount <= threadMessages.length || isLoading) {\n // Make sure we're not stuck in loading state\n if (isLoading) {\n safeSend({\n type: ThreadActions.STOP_LOADING,\n data: { loadingOldMessages: false },\n });\n }\n if (__DEV__) console.log('No more messages to load or already loading');\n return;\n }\n\n if (__DEV__) console.log('Loading more messages - current count:', threadMessages.length, 'of', totalCount);\n\n // Set the loading state specifically for old messages\n safeSend({\n type: ThreadActions.FETCH_MORE_MESSAGES,\n data: { loadingOldMessages: true },\n });\n\n // Use simple, consistent approach: Skip=0, Limit=50\n if (__DEV__) console.log('Using proven approach: Skip=0, Limit=50');\n\n // Create query variables once\n const queryVariables = {\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: 50,\n skip: 0,\n };\n\n if (__DEV__) console.log('Query variables:', JSON.stringify(queryVariables));\n\n fetchMoreMessages({\n variables: queryVariables,\n })\n .then((res: any) => {\n if (__DEV__) console.log('API response received with status:', res ? 'success' : 'empty');\n\n if (res?.data?.getPostThread) {\n const threads: any = res?.data?.getPostThread;\n const threadReplies = threads?.replies ?? [];\n const actualTotalCount = threads?.replyCount ?? 0;\n\n if (__DEV__) {\n console.log('API response details:');\n console.log('- replyCount:', threads?.replyCount);\n console.log('- replies array length:', threadReplies.length);\n }\n\n if (threadReplies.length > 0) {\n // Compare with our existing messages to find the ones we're missing\n const existingIds = new Set(threadMessages.map((msg) => msg.id));\n const newUniqueMessages = threadReplies.filter((msg) => !existingIds.has(msg.id));\n\n if (__DEV__)\n console.log(\n `Found ${newUniqueMessages.length} unique new messages out of ${threadReplies.length} received`,\n );\n\n // If no new unique messages, it means we already have everything\n if (newUniqueMessages.length === 0) {\n if (__DEV__) console.log('No new unique messages found, adjusting total count');\n\n // Register this as a failed load attempt\n registerLoadAttemptResult(false);\n\n // Adjust total count to match what we have\n safeSend({\n type: ThreadActions.SET_THREAD_MESSAGES,\n data: {\n messages: threadMessages,\n totalCount: threadMessages.length,\n threadPost: safeContextProperty('threadPost', []),\n postThread: safeContextProperty('postThread', null),\n },\n });\n return;\n }\n\n // Register success since we found new messages\n registerLoadAttemptResult(true);\n\n if (__DEV__) console.log(`Adding ${newUniqueMessages.length} new messages to thread`);\n\n safeSend({\n type: 'FETCH_MORE_MESSAGES_SUCCESS',\n data: {\n messages: newUniqueMessages,\n totalCount: actualTotalCount,\n loadingOldMessages: false,\n },\n });\n } else {\n if (__DEV__) console.log('No thread replies returned when loading more messages');\n registerLoadAttemptResult(false);\n\n // Adjust total count to match what we have, since server says there are no more messages\n safeSend({\n type: ThreadActions.SET_THREAD_MESSAGES,\n data: {\n messages: threadMessages,\n totalCount: threadMessages.length,\n threadPost: safeContextProperty('threadPost', []),\n postThread: safeContextProperty('postThread', null),\n },\n });\n }\n } else {\n if (__DEV__) console.log('No thread data returned when loading more messages');\n registerLoadAttemptResult(false);\n safeSend({\n type: ThreadActions.STOP_LOADING,\n data: { loadingOldMessages: false },\n });\n }\n })\n .catch((error: any) => {\n console.error('Error fetching more messages:', error);\n registerLoadAttemptResult(false);\n safeSend({\n type: 'ERROR',\n data: {\n message: error.message,\n loadingOldMessages: false,\n },\n });\n });\n }, [parentId, channelId, role, safeContextProperty, safeSend, fetchMoreMessages, registerLoadAttemptResult]);\n\n return (\n <SafeAreaView style={{ flex: 1 }}>\n {safeContextProperty('loadingOldMessages', false) === true && (\n <Box className=\"absolute top-10 left-0 right-0 z-10 items-center\">\n <Box className=\"bg-blue-500/20 rounded-full px-4 py-2 flex-row items-center\">\n <Spinner color={colors.blue[500]} size=\"small\" />\n <Text className=\"text-sm font-medium color-blue-600 ml-2\">Loading messages...</Text>\n </Box>\n </Box>\n )}\n {!safeContextProperty('loadingOldMessages', false) &&\n safeContextProperty('totalCount', 0) > safeContextProperty('threadMessages', []).length && (\n <Box className=\"absolute top-10 left-0 right-0 z-10 items-center\">\n <HStack space={2} className=\"px-2\">\n <TouchableHighlight\n onPress={() => {\n console.log('Manual load more pressed');\n Alert.alert('Load Options', 'Choose loading method', [\n {\n text: 'Normal Load',\n onPress: () => safeSend({ type: ThreadActions.FETCH_MORE_MESSAGES }),\n },\n {\n text: 'Try Skip=0',\n onPress: () => forceLoadMessages(0),\n },\n {\n text: 'Try Skip=0, Limit=50',\n onPress: () => {\n // Try with a larger limit\n console.log('Force loading with explicit skip=0, limit=50');\n\n safeSend({\n type: ThreadActions.START_LOADING,\n data: { loadingOldMessages: true },\n });\n\n fetchMoreMessages({\n variables: {\n channelId: channelId?.toString(),\n role: role?.toString(),\n postParentId:\n !parentId || parentId == 0 ? null : parentId?.toString(),\n selectedFields:\n 'id channel post replies replyCount lastReplyAt createdAt updatedAt',\n limit: 50, // Try a larger limit\n skip: 0,\n },\n })\n .then((res: any) => {\n console.log(\n 'LARGE LIMIT response:',\n JSON.stringify(res?.data, null, 2),\n );\n\n if (res?.data?.getPostThread) {\n const threads: any = res?.data?.getPostThread;\n const threadReplies = threads?.replies ?? [];\n const actualTotalCount = threads?.replyCount ?? 0;\n\n console.log(\n `Large limit load complete. Got ${threadReplies.length} messages of ${actualTotalCount} total`,\n );\n\n if (threadReplies.length > 0) {\n // Reset our message list with all available messages\n safeSend({\n type: ThreadActions.SET_THREAD_MESSAGES,\n data: {\n messages: threadReplies,\n totalCount: actualTotalCount,\n threadPost: safeContextProperty(\n 'threadPost',\n [],\n ),\n postThread: threads,\n },\n });\n } else {\n // Reset count if no messages found\n safeSend({\n type: ThreadActions.SET_THREAD_MESSAGES,\n data: {\n messages: safeContextProperty(\n 'threadMessages',\n [],\n ),\n totalCount: safeContextProperty(\n 'threadMessages',\n [],\n ).length,\n threadPost: safeContextProperty(\n 'threadPost',\n [],\n ),\n postThread: safeContextProperty(\n 'postThread',\n null,\n ),\n },\n });\n }\n } else {\n safeSend({\n type: ThreadActions.STOP_LOADING,\n data: { loadingOldMessages: false },\n });\n }\n })\n .catch((error) => {\n console.error('Error in large limit load:', error);\n safeSend({\n type: ThreadActions.STOP_LOADING,\n data: { loadingOldMessages: false },\n });\n });\n },\n },\n {\n text: 'Try Direct Fetch',\n onPress: () => {\n // Get current info\n const currentCount = safeContextProperty('threadMessages', []).length;\n const totalCount = safeContextProperty('totalCount', 0);\n const missingCount = totalCount - currentCount;\n\n if (missingCount <= 0) {\n Alert.alert('Info', 'No missing messages to fetch');\n return;\n }\n\n console.log(\n `Attempting direct fetch of missing ${missingCount} messages`,\n );\n\n // Try explicit query with exact parameters\n safeSend({\n type: ThreadActions.START_LOADING,\n data: { loadingOldMessages: true },\n });\n\n // Special query directly for the missing messages\n getThreadMessages({\n variables: {\n channelId: channelId?.toString(),\n role: role?.toString(),\n postParentId:\n !parentId || parentId == 0 ? null : parentId?.toString(),\n selectedFields:\n 'id channel post replies replyCount lastReplyAt createdAt updatedAt',\n limit: missingCount, // Only get the exact number we need\n skip: 0, // Start from the beginning\n },\n })\n .then(({ data }) => {\n console.log(\n 'DIRECT FETCH response:',\n JSON.stringify(data, null, 2),\n );\n\n if (data?.getPostThread) {\n const threads: any = data.getPostThread;\n const threadReplies = threads?.replies ?? [];\n const actualTotalCount = threads?.replyCount ?? 0;\n\n console.log(\n `Direct fetch complete. Got ${threadReplies.length} messages of ${actualTotalCount} total`,\n );\n console.log(\n 'Message IDs:',\n threadReplies.map((msg) => msg.id).join(', '),\n );\n\n // Compare with our existing messages to find the ones we're missing\n const existingIds = new Set(\n safeContextProperty('threadMessages', []).map(\n (msg) => msg.id,\n ),\n );\n const newMessages = threadReplies.filter(\n (msg) => !existingIds.has(msg.id),\n );\n\n console.log(\n `Found ${newMessages.length} new messages that we didn't have before`,\n );\n\n if (newMessages.length > 0) {\n safeSend({\n type: 'FETCH_MORE_MESSAGES_SUCCESS',\n data: {\n messages: newMessages,\n totalCount: actualTotalCount,\n loadingOldMessages: false,\n },\n });\n\n // Show the results\n Alert.alert(\n 'Success',\n `Found ${newMessages.length} new messages`,\n );\n } else {\n // If we didn't find any new messages, adjust the total count\n console.log('No new messages found, adjusting count');\n safeSend({\n type: ThreadActions.SET_THREAD_MESSAGES,\n data: {\n messages: safeContextProperty(\n 'threadMessages',\n [],\n ),\n totalCount: safeContextProperty(\n 'threadMessages',\n [],\n ).length,\n threadPost: safeContextProperty(\n 'threadPost',\n [],\n ),\n postThread: safeContextProperty(\n 'postThread',\n null,\n ),\n },\n });\n\n // Notify the user\n Alert.alert(\n 'Info',\n 'No new messages found. Count has been adjusted.',\n );\n }\n } else {\n Alert.alert('Error', 'Could not fetch thread messages');\n safeSend({\n type: ThreadActions.STOP_LOADING,\n data: { loadingOldMessages: false },\n });\n }\n })\n .catch((error) => {\n console.error('Error in direct fetch:', error);\n Alert.alert(\n 'Error',\n 'Failed to fetch messages: ' + error.message,\n );\n safeSend({\n type: ThreadActions.STOP_LOADING,\n data: { loadingOldMessages: false },\n });\n });\n },\n },\n {\n text: 'Reset Count',\n style: 'destructive',\n onPress: () => {\n console.log('Resetting message count to match reality');\n safeSend({\n type: ThreadActions.SET_THREAD_MESSAGES,\n data: {\n messages: safeContextProperty('threadMessages', []),\n totalCount: safeContextProperty('threadMessages', []).length,\n threadPost: safeContextProperty('threadPost', []),\n postThread: safeContextProperty('postThread', null),\n },\n });\n },\n },\n {\n text: 'Cancel',\n style: 'cancel',\n },\n ]);\n }}\n underlayColor=\"#e6e6e6\"\n >\n <Box className=\"bg-gray-200 rounded-full px-4 py-2 flex-row items-center\">\n <MaterialIcons name=\"arrow-upward\" size={16} color={colors.blue[500]} />\n <Text className=\"text-sm font-medium color-blue-600 ml-2\">\n Load More (\n {safeContextProperty('totalCount', 0) -\n safeContextProperty('threadMessages', []).length}\n )\n </Text>\n </Box>\n </TouchableHighlight>\n\n <TouchableHighlight onPress={forceRefreshMessages} underlayColor=\"#e6e6e6\">\n <Box className=\"bg-gray-200 rounded-full px-4 py-2 flex-row items-center\">\n <MaterialIcons name=\"refresh\" size={16} color={colors.blue[500]} />\n <Text className=\"text-sm font-medium color-blue-600 ml-2\">Refresh All</Text>\n </Box>\n </TouchableHighlight>\n </HStack>\n </Box>\n )}\n {isPostParentIdThread && (\n <>\n {safeContextProperty('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(\n safeContextProperty('threadPost')[0]?.author?.username?.charAt(0),\n )}\n </AvatarFallbackText>\n <AvatarImage\n alt=\"image\"\n style={{\n borderRadius: 6,\n borderWidth: 2,\n borderColor: '#fff',\n }}\n source={{\n uri: safeContextProperty('threadPost')[0]?.author?.picture,\n }}\n />\n </Avatar>\n <Box>\n <Text className=\"font-bold color-black\">\n {safeContextProperty('threadPost')[0]?.author?.givenName ?? ''}{' '}\n {safeContextProperty('threadPost')[0]?.author?.familyName ?? ''}\n </Text>\n <Text className=\"pl-0 color-gray-500\">\n {createdAtText(safeContextProperty('threadPost')[0]?.createdAt)} at{' '}\n {(() => {\n try {\n const createdAt = safeContextProperty('threadPost')[0]?.createdAt;\n if (createdAt && !isNaN(new Date(createdAt).getTime())) {\n return format(new Date(createdAt), 'hh:mm:a');\n } else {\n return 'unknown time';\n }\n } catch (error) {\n console.error('Error formatting thread post time:', error);\n return 'unknown time';\n }\n })()}\n </Text>\n </Box>\n </HStack>\n <HStack space={'sm'} className=\"px-2 items-center\">\n <Text>{safeContextProperty('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 {safeContextProperty('threadPost')[0]?.replies?.totalCount}{' '}\n {safeContextProperty('threadPost')[0]?.replies?.totalCount > 0\n ? 'replies'\n : 'reply'}\n </Text>\n </Box>\n </Box>\n </>\n )}\n </>\n )}\n <GiftedChat\n ref={threadMessageListRef}\n wrapInSafeArea={false}\n renderLoading={() => <Spinner color={colors.blue[500]} />}\n messages={messageList}\n listViewProps={{\n onScroll: handleScrollToTop,\n onEndReached: handleEndReached,\n onEndReachedThreshold: 0.2,\n contentContainerStyle: {\n paddingBottom: 10,\n },\n maintainVisibleContentPosition: {\n minIndexForVisible: 0,\n autoscrollToTopThreshold: 100,\n },\n scrollEventThrottle: 16,\n keyboardDismissMode: 'on-drag',\n keyboardShouldPersistTaps: 'handled',\n // removeClippedSubviews={true}\n }}\n onSend={(messages) => {\n if (!messages || messages.length === 0) {\n console.log('No messages to send');\n return;\n }\n\n // Use the actual message text from the state, not the one from GiftedChat\n // GiftedChat sometimes sends blank messages even when there's text in the input\n const currentInputText = currentMessageText;\n const messageToSend = currentInputText?.trim() || messages[0]?.text?.trim() || ' ';\n\n if (__DEV__) console.log('GiftedChat onSend triggered with text from state:', messageToSend);\n\n // Make sure we update the message text in state\n safeSend({\n type: ThreadActions.SET_MESSAGE_TEXT,\n data: { messageText: '' },\n });\n\n // Then send the message\n if (safeContextProperty('images', []).length > 0) {\n if (__DEV__)\n console.log(\n 'Sending message with file:',\n messageToSend,\n 'Images:',\n safeContextProperty('images', []).length,\n );\n safeSend({\n type: ThreadActions.SEND_THREAD_MESSAGE_WITH_FILE,\n data: { messageText: messageToSend },\n });\n } else {\n if (__DEV__) console.log('Sending text message:', messageToSend);\n safeSend({\n type: ThreadActions.SEND_THREAD_MESSAGE,\n data: { messageText: messageToSend },\n });\n }\n }}\n text={currentMessageText}\n onInputTextChanged={(text) => {\n // Set the text in the state without excessive logging\n safeSend({\n type: ThreadActions.SET_MESSAGE_TEXT,\n data: { messageText: text },\n });\n }}\n renderFooter={() =>\n safeContextProperty('loading', false) && !safeContextProperty('loadingOldMessages', false) ? (\n <Box className=\"w-full py-2 items-center\">\n <Spinner color={colors.blue[500]} />\n </Box>\n ) : safeContextProperty('imageLoading', false) ? (\n <Box className=\"w-full py-2 items-center\">\n <Spinner color={colors.blue[500]} />\n </Box>\n ) : (\n <></>\n )\n }\n scrollToBottom\n loadEarlier={false}\n isLoadingEarlier={false}\n user={{\n _id: auth?.id || '',\n }}\n isTyping={safeContextProperty('loading', false)}\n alwaysShowSend={safeContextProperty('loading', false) ? false : true}\n infiniteScroll={true}\n renderSend={renderSend}\n renderInputToolbar={renderInputToolbar}\n minInputToolbarHeight={50}\n renderActions={renderActions}\n renderAccessory={!!state?.context?.selectedImage ? renderAccessory : undefined}\n renderMessage={renderMessage}\n renderMessageText={renderMessageText}\n maxInputLength={1000}\n placeholder=\"Type a message...\"\n showUserAvatar={true}\n showAvatarForEveryMessage={false}\n inverted={true}\n parsePatterns={(linkStyle) => [\n {\n type: 'url',\n style: { ...linkStyle, color: colors.blue[500] },\n onPress: (url) => Linking.openURL(url),\n },\n {\n type: 'phone',\n style: { ...linkStyle, color: colors.blue[500] },\n onPress: (phone) => Linking.openURL(`tel:${phone}`),\n },\n {\n type: 'email',\n style: { ...linkStyle, color: colors.blue[500] },\n onPress: (email) => Linking.openURL(`mailto:${email}`),\n },\n ]}\n textInputProps={{\n style: {\n borderWidth: 1,\n borderColor: colors.gray[300],\n backgroundColor: '#f8f8f8',\n borderRadius: 20,\n minHeight: 40,\n maxHeight: 80,\n color: '#000',\n padding: 10,\n paddingHorizontal: 20,\n fontSize: 16,\n flex: 1,\n },\n multiline: true,\n returnKeyType: 'default',\n enablesReturnKeyAutomatically: true,\n placeholderTextColor: colors.gray[400],\n }}\n minComposerHeight={44}\n isKeyboardInternallyHandled={true}\n bottomOffset={Platform.OS === 'ios' ? 20 : 0}\n renderChatFooter={() => (\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\n safeSend({\n type: ThreadActions.SET_THREAD_MESSAGES,\n data: {\n messages: uniqBy(\n [...safeContextProperty('threadMessages', []), newMessage],\n ({ id }) => id,\n ),\n totalCount: newReplyCount,\n threadPost: safeContextProperty('threadPost', []),\n postThread: safeContextProperty('postThread', null),\n },\n });\n\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 messagesContainerStyle={messageList?.length == 0 ? { transform: [{ scaleY: -1 }] } : undefined}\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 </SafeAreaView>\n );\n};\n\nconst SubscriptionHandler = ({ subscribeToNewMessages, channelId }: IThreadSubscriptionHandlerProps) => {\n useEffect(() => subscribeToNewMessages(), [channelId]);\n return <></>;\n};\n\nexport const ThreadConversationView = React.memo(ThreadConversationViewComponent);\n// export const ThreadConversationView = ThreadConversationViewComponent;\n"],"names":["ThreadActions","_a","_b","_c","_d","data","React","images","_e","_f","_g","_h","_i","_j","files","channelId","parentId","_k","_l","_m","Actions","selectedImage","_n","_o","_p","_q","_r","_s","_t","_u","params","SlackMessage","CHAT_MESSAGE_ADDED"],"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} from '@admin-layout/gluestack-ui-mobile';\nimport { Platform, TouchableHighlight, View } 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 OnThreadChatMessageAddedDocument as CHAT_MESSAGE_ADDED,\n useCreatePostThreadMutation,\n useOnThreadChatMessageAddedSubscription,\n useSendExpoNotificationOnPostMutation,\n useSendThreadMessageMutation,\n useThreadMessagesLazyQuery,\n useGetPostThreadLazyQuery,\n} from 'common/graphql';\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';\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}\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\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, setImage] = 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\n // const [sendThreadMessage] = useSendThreadMessageMutation();\n const [sendThreadMessage] = useCreatePostThreadMutation();\n const [sendExpoNotificationOnPostMutation] = useSendExpoNotificationOnPostMutation();\n\n const [\n getThreadMessages,\n { data, loading: threadLoading, fetchMore: fetchMoreMessages, refetch: refetchThreadMessages, subscribeToMore },\n ] = useGetPostThreadLazyQuery({ fetchPolicy: 'cache-and-network' });\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 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 })\n .catch((error: any) => {\n setLoadEarlierMsg(false);\n setLoadingOldMessages(false);\n });\n }\n }, [parentId, channelId, totalCount, channelMessages]);\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 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 setImage(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 const handleSend = useCallback(\n async (message: string) => {\n if (!channelId) return;\n if (!message && message !== ' ' && images.length === 0) return;\n\n const postId = objectId();\n const currentDate = new Date();\n\n setUploadingMessageId(postId);\n\n // Create a temporary preview of the image if uploading\n const previewImageData =\n images.length > 0\n ? {\n id: objectId(),\n url: selectedImage,\n name: images[0]?.fileName || 'image.jpg',\n extension: 'jpg',\n mimeType: 'image/jpeg',\n refType: FileRefType.Post,\n height: images[0]?.height || 0,\n width: images[0]?.width || 0,\n }\n : null;\n\n // Create optimistic message with common properties\n const optimisticMessage = {\n id: postId,\n message: message || (images.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,\n isRead: false,\n files: previewImageData\n ? {\n data: [previewImageData],\n totalCount: 1,\n }\n : undefined,\n };\n\n // Add optimistic message to UI immediately\n // setChannelMessages((oldMessages: any) => uniqBy([optimisticMessage, ...oldMessages], ({ id }) => id));\n setMsg('');\n\n try {\n let fileIds: string[] | null = null;\n\n // Handle file uploads if images exist\n if (images && images.length > 0) {\n setLoading(true);\n // Format images for upload\n const imagesToUpload = images.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 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) throw new Error(uploadResponse.error.toString());\n\n const uploadedFiles = uploadResponse.data as unknown as IFileInfo[];\n if (uploadResponse.data) {\n // Clear image related states after successful upload\n setImage('');\n setFiles([]);\n setImages([]);\n\n fileIds = uploadedFiles?.map((f: any) => f.id) ?? null;\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: message,\n files: fileIds,\n role,\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\n // Update the optimistic message to show it's delivered\n setChannelMessages((oldMessages: any) =>\n oldMessages.map((msg: any) => (msg.id === postId ? { ...msg, isDelivered: true } : msg)),\n );\n } catch (error) {\n console.error('Error sending message:', error);\n // Remove the optimistic message if there was an error\n setChannelMessages((oldMessages: any) => oldMessages.filter((msg) => msg.id !== postId));\n } finally {\n setLoading(false);\n setUploadingMessageId(null);\n }\n },\n [auth, channelId, channelToTop, images, parentId, postThread, selectedImage, setChannelMessages],\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 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 (message.image = msg.files?.data[0]?.url),\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((props) => {\n return (\n <Send {...props}>\n <Box>\n <MaterialCommunityIcons\n name=\"send-circle\"\n style={{ marginBottom: 5, marginRight: 5 }}\n size={32}\n color=\"#2e64e5\"\n />\n </Box>\n </Send>\n );\n }, []);\n\n const renderMessageText = 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 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 = (props) => {\n return (\n <Actions\n {...props}\n options={{\n ['Choose from Library']: onSelectImages,\n ['Cancel']: () => {}, // Add this option to make the sheet dismissible\n }}\n optionTintColor=\"#000000\"\n cancelButtonIndex={1} // Set the Cancel option as the cancel button\n icon={() => (\n <Box 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\n // const renderAccessory = useCallback(() => {\n // if (!selectedImage) return null;\n\n // return (\n // <Box className=\"bg-white border-t border-gray-200 px-2 py-2\">\n // <HStack className=\"items-center justify-between\">\n // <HStack space=\"sm\" className=\"items-center\">\n // {imageLoading ? (\n // <Box className=\"w-12 h-12 rounded-md bg-gray-100 overflow-hidden flex items-center justify-center\">\n // <Spinner size=\"small\" color={colors.blue[500]} />\n // </Box>\n // ) : (\n // <Box className=\"relative\">\n // <Image\n // className=\"rounded-md\"\n // key={selectedImage}\n // alt={'Selected image'}\n // source={{ uri: selectedImage }}\n // style={{\n // width: 48,\n // height: 48,\n // borderRadius: 4,\n // }}\n // />\n // <Box className=\"absolute -top-1 -right-1 bg-white rounded-full shadow-sm\">\n // <Button\n // variant=\"link\"\n // size=\"xs\"\n // onPress={() => {\n // setFiles([]);\n // setImage('');\n // setImages([]);\n // }}\n // >\n // <MaterialIcons name=\"cancel\" size={16} color={colors.red[500]} />\n // </Button>\n // </Box>\n // </Box>\n // )}\n // <Text className=\"text-sm text-gray-600 ml-2\">\n // {imageLoading ? 'Processing image...' : 'Ready to send'}\n // </Text>\n // </HStack>\n // </HStack>\n // </Box>\n // );\n // }, [selectedImage, imageLoading]);\n\n const renderAccessory = useCallback(() => {\n if (!selectedImage) {\n return null;\n }\n\n return (\n <View\n style={{\n height: 70,\n backgroundColor: 'white',\n borderTopWidth: 1,\n borderTopColor: '#e0e0e0',\n flexDirection: 'row',\n alignItems: 'center',\n margin: 0,\n padding: 0,\n paddingVertical: 0,\n position: 'absolute',\n bottom: Platform.OS === 'ios' ? 105 : 95, // Position well above the input area\n left: 0,\n right: 0,\n zIndex: 1,\n elevation: 3,\n shadowColor: '#000',\n shadowOffset: { width: 0, height: -1 },\n shadowOpacity: 0.05,\n shadowRadius: 2,\n }}\n >\n <View\n style={{\n flex: 1,\n flexDirection: 'row',\n alignItems: 'center',\n paddingLeft: 15,\n paddingRight: 5,\n }}\n >\n <View\n style={{\n width: 56,\n height: 56,\n marginRight: 15,\n borderRadius: 4,\n backgroundColor: colors.gray[200],\n overflow: 'hidden',\n borderWidth: 1,\n borderColor: '#e0e0e0',\n }}\n >\n <Image\n key={selectedImage}\n alt={'selected image'}\n source={{ uri: selectedImage }}\n style={{\n width: '100%',\n height: '100%',\n }}\n size={'md'}\n />\n {loading && (\n <View\n style={{\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n backgroundColor: 'rgba(255, 255, 255, 0.7)',\n justifyContent: 'center',\n alignItems: 'center',\n }}\n >\n <Spinner size=\"small\" color={colors.blue[500]} />\n </View>\n )}\n </View>\n\n <View style={{ flex: 1 }}>\n <Text style={{ fontSize: 14, fontWeight: '400', color: colors.gray[800] }}>\n {images[0]?.fileName || 'image_' + new Date().getTime() + '.jpg'}\n </Text>\n <Text style={{ fontSize: 12, color: colors.gray[500], marginTop: 2 }}>\n {loading ? 'Preparing...' : 'Ready to send'}\n </Text>\n </View>\n\n <TouchableHighlight\n underlayColor={'rgba(0,0,0,0.1)'}\n onPress={() => {\n setFiles([]);\n setImage('');\n setImages([]);\n }}\n style={{\n backgroundColor: colors.red[500],\n borderRadius: 24,\n width: 36,\n height: 36,\n alignItems: 'center',\n justifyContent: 'center',\n marginRight: 10,\n }}\n >\n <Ionicons name=\"close\" size={20} color=\"white\" />\n </TouchableHighlight>\n </View>\n </View>\n );\n }, [selectedImage, loading, images]);\n 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 renderMessage = useCallback(\n (props: any) => {\n const { currentMessage } = props;\n\n // Check if this message is currently being uploaded\n const isUploading = currentMessage._id === uploadingMessageId && loading;\n\n if (isUploading) {\n return (\n <Box className=\"p-3 mb-2 mr-3 self-end rounded-2xl bg-gray-100 max-w-[80%]\">\n {currentMessage.text && currentMessage.text.trim() !== '' && (\n <Box className=\"h-4 mb-2 rounded bg-gray-200 overflow-hidden\">\n <Skeleton variant=\"rounded\" className=\"flex-1\" />\n </Box>\n )}\n {currentMessage.image && (\n <Box className=\"h-[150px] w-[150px] rounded-lg bg-gray-200 overflow-hidden mt-1\">\n <Box className=\"flex-1 items-center justify-center\">\n <Spinner size=\"small\" color={colors.blue[500]} />\n </Box>\n <Skeleton variant=\"rounded\" className=\"flex-1\" />\n </Box>\n )}\n </Box>\n );\n }\n\n return (\n <SlackMessage {...props} isShowImageViewer={isShowImageViewer} setImageViewer={setImageViewerObject} />\n );\n },\n [uploadingMessageId, loading, isShowImageViewer, setImageViewerObject],\n );\n\n const renderInputToolbar = useCallback((props) => {\n return (\n <InputToolbar\n {...props}\n containerStyle={{\n backgroundColor: 'white',\n borderTopWidth: 1,\n borderTopColor: colors.gray[200],\n paddingHorizontal: 4,\n paddingVertical: 0,\n paddingTop: 2,\n marginBottom: 0,\n marginTop: 0,\n }}\n primaryStyle={{\n alignItems: 'center',\n }}\n />\n );\n }, []);\n\n const renderLoadEarlier = useCallback(() => {\n return loadingOldMessages ? (\n <Box\n style={{\n padding: 10,\n backgroundColor: 'rgba(255,255,255,0.8)',\n borderRadius: 10,\n marginTop: 10,\n }}\n >\n <Spinner size=\"small\" color={colors.blue[500]} />\n </Box>\n ) : null;\n }, [loadingOldMessages]);\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 return (\n <>\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 <GiftedChat\n ref={threadMessageListRef}\n wrapInSafeArea={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 }}\n onSend={(messages) => handleSend(messages[0]?.text ?? ' ')}\n text={msg ? 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 minInputToolbarHeight={50}\n renderActions={renderActions}\n renderAccessory={!!selectedImage ? renderAccessory : undefined}\n renderMessage={renderMessage}\n renderLoadEarlier={renderLoadEarlier}\n loadEarlier={totalCount > channelMessages.length}\n isLoadingEarlier={loadingOldMessages}\n bottomOffset={Platform.OS === 'ios' ? 10 : 0}\n textInputProps={{\n style: {\n borderWidth: 1,\n borderColor: colors.gray[300],\n backgroundColor: '#f8f8f8',\n borderRadius: 20,\n minHeight: 36,\n maxHeight: 80,\n color: '#000',\n padding: 8,\n paddingHorizontal: 15,\n fontSize: 16,\n flex: 1,\n marginVertical: 2,\n marginBottom: 0,\n },\n multiline: true,\n returnKeyType: 'default',\n enablesReturnKeyAutomatically: true,\n placeholderTextColor: colors.gray[400],\n }}\n minComposerHeight={36}\n maxComposerHeight={100}\n placeholder=\"Type a message...\"\n renderChatFooter={() => (\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 messagesContainerStyle={messageList?.length == 0 && { transform: [{ scaleY: -1 }] }}\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 );\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","data","msg","channelId","parentId","_i","_j","_k","_l","_m","_n","_o","_p","_q","_r","_s","params","SlackMessage","CHAT_MESSAGE_ADDED"],"mappings":"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"}
|