@messenger-box/platform-mobile 10.0.3-alpha.5 → 10.0.3-alpha.50
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 +92 -0
- package/lib/compute.js +2 -3
- package/lib/compute.js.map +1 -1
- package/lib/index.js.map +1 -1
- package/lib/queries/inboxQueries.js +65 -0
- package/lib/queries/inboxQueries.js.map +1 -0
- package/lib/routes.json +2 -3
- package/lib/screens/inbox/DialogMessages.js +1 -1
- package/lib/screens/inbox/DialogMessages.js.map +1 -1
- package/lib/screens/inbox/DialogThreadMessages.js +4 -8
- package/lib/screens/inbox/DialogThreadMessages.js.map +1 -1
- package/lib/screens/inbox/DialogThreads.js +57 -12
- package/lib/screens/inbox/DialogThreads.js.map +1 -1
- package/lib/screens/inbox/Inbox.js +1 -1
- package/lib/screens/inbox/Inbox.js.map +1 -1
- package/lib/screens/inbox/components/CachedImage/consts.js +1 -1
- package/lib/screens/inbox/components/CachedImage/consts.js.map +1 -1
- package/lib/screens/inbox/components/CachedImage/index.js +168 -46
- package/lib/screens/inbox/components/CachedImage/index.js.map +1 -1
- package/lib/screens/inbox/components/DialogItem.js +169 -0
- package/lib/screens/inbox/components/DialogItem.js.map +1 -0
- package/lib/screens/inbox/components/GiftedChatInboxComponent.js +313 -0
- package/lib/screens/inbox/components/GiftedChatInboxComponent.js.map +1 -0
- package/lib/screens/inbox/components/SlackMessageContainer/SlackBubble.js +147 -31
- package/lib/screens/inbox/components/SlackMessageContainer/SlackBubble.js.map +1 -1
- package/lib/screens/inbox/components/SlackMessageContainer/SlackMessage.js +6 -1
- package/lib/screens/inbox/components/SlackMessageContainer/SlackMessage.js.map +1 -1
- package/lib/screens/inbox/components/SubscriptionHandler.js +24 -0
- package/lib/screens/inbox/components/SubscriptionHandler.js.map +1 -0
- package/lib/screens/inbox/components/ThreadsViewItem.js +66 -55
- package/lib/screens/inbox/components/ThreadsViewItem.js.map +1 -1
- package/lib/screens/inbox/config/config.js +2 -2
- package/lib/screens/inbox/config/config.js.map +1 -1
- package/lib/screens/inbox/containers/ConversationView.js +1111 -434
- package/lib/screens/inbox/containers/ConversationView.js.map +1 -1
- package/lib/screens/inbox/containers/Dialogs.js +193 -80
- package/lib/screens/inbox/containers/Dialogs.js.map +1 -1
- package/lib/screens/inbox/containers/ThreadConversationView.js +725 -216
- package/lib/screens/inbox/containers/ThreadConversationView.js.map +1 -1
- package/lib/screens/inbox/containers/ThreadsView.js +83 -50
- package/lib/screens/inbox/containers/ThreadsView.js.map +1 -1
- package/lib/screens/inbox/hooks/useInboxMessages.js +31 -0
- package/lib/screens/inbox/hooks/useInboxMessages.js.map +1 -0
- package/lib/screens/inbox/hooks/useSafeDialogThreadsMachine.js +108 -0
- package/lib/screens/inbox/hooks/useSafeDialogThreadsMachine.js.map +1 -0
- package/lib/screens/inbox/workflow/dialog-threads-xstate.js +151 -0
- package/lib/screens/inbox/workflow/dialog-threads-xstate.js.map +1 -0
- package/package.json +4 -4
- package/src/compute.ts +5 -6
- package/src/index.ts +2 -0
- package/src/navigation/InboxNavigation.tsx +3 -3
- package/src/queries/inboxQueries.ts +299 -0
- package/src/queries/index.d.ts +2 -0
- package/src/queries/index.ts +1 -0
- package/src/screens/inbox/DialogMessages.tsx +1 -1
- package/src/screens/inbox/DialogThreadMessages.tsx +7 -14
- package/src/screens/inbox/DialogThreads.tsx +55 -61
- package/src/screens/inbox/Inbox.tsx +1 -1
- package/src/screens/inbox/components/Actionsheet.tsx +30 -0
- package/src/screens/inbox/components/CachedImage/consts.ts +4 -3
- package/src/screens/inbox/components/CachedImage/index.tsx +232 -61
- package/src/screens/inbox/components/DialogItem.tsx +306 -0
- package/src/screens/inbox/components/DialogsHeader.tsx +6 -13
- package/src/screens/inbox/components/DialogsListItem.tsx +262 -198
- package/src/screens/inbox/components/ExpandableInput.tsx +460 -0
- package/src/screens/inbox/components/ExpandableInputActionSheet.tsx +518 -0
- package/src/screens/inbox/components/GiftedChatInboxComponent.tsx +411 -0
- package/src/screens/inbox/components/ServiceDialogsListItem.tsx +337 -194
- package/src/screens/inbox/components/SlackInput.tsx +23 -0
- package/src/screens/inbox/components/SlackMessageContainer/SlackBubble.tsx +233 -23
- package/src/screens/inbox/components/SlackMessageContainer/SlackMessage.tsx +1 -1
- package/src/screens/inbox/components/SmartLoader.tsx +61 -0
- package/src/screens/inbox/components/SubscriptionHandler.tsx +41 -0
- package/src/screens/inbox/components/SupportServiceDialogsListItem.tsx +53 -55
- package/src/screens/inbox/components/ThreadsViewItem.tsx +178 -285
- package/src/screens/inbox/components/workflow/dialogs-list-item-xstate.ts +145 -0
- package/src/screens/inbox/components/workflow/service-dialogs-list-item-xstate.ts +159 -0
- package/src/screens/inbox/config/config.ts +2 -2
- package/src/screens/inbox/containers/ConversationView.tsx +1843 -702
- package/src/screens/inbox/containers/ConversationView.tsx.bk +1467 -0
- package/src/screens/inbox/containers/Dialogs.tsx +402 -204
- package/src/screens/inbox/containers/SupportServiceDialogs.tsx +4 -4
- package/src/screens/inbox/containers/ThreadConversationView.tsx +1350 -319
- package/src/screens/inbox/containers/ThreadsView.tsx +105 -193
- package/src/screens/inbox/containers/workflow/apollo/handleResult.ts +20 -0
- package/src/screens/inbox/containers/workflow/conversation-xstate.ts +313 -0
- package/src/screens/inbox/containers/workflow/dialogs-xstate.ts +196 -0
- package/src/screens/inbox/containers/workflow/thread-conversation-xstate.ts +401 -0
- package/src/screens/inbox/hooks/useInboxMessages.ts +34 -0
- package/src/screens/inbox/hooks/useSafeDialogThreadsMachine.ts +136 -0
- package/src/screens/inbox/index.ts +37 -0
- package/src/screens/inbox/machines/threadsMachine.ts +147 -0
- package/src/screens/inbox/workflow/dialog-threads-xstate.ts +163 -0
- package/tsconfig.json +11 -54
- package/lib/screens/inbox/components/DialogsListItem.js +0 -171
- package/lib/screens/inbox/components/DialogsListItem.js.map +0 -1
- package/lib/screens/inbox/components/ServiceDialogsListItem.js +0 -171
- package/lib/screens/inbox/components/ServiceDialogsListItem.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConversationView.js","sources":["../../../../src/screens/inbox/containers/ConversationView.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport {\n Avatar,\n AvatarFallbackText,\n AvatarImage,\n Box,\n Button,\n ButtonText,\n HStack,\n Icon,\n Image,\n Spinner,\n Text,\n} from '@admin-layout/gluestack-ui-mobile';\nimport { Platform, TouchableHighlight } from 'react-native';\nimport { useFocusEffect, useIsFocused, useNavigation } from '@react-navigation/native';\nimport { navigationRef } from '@common-stack/client-react';\nimport { useSelector } from 'react-redux';\nimport { orderBy, startCase, uniqBy } from 'lodash-es';\nimport * as ImagePicker from 'expo-image-picker';\nimport { encode as atob } from 'base-64';\nimport { Ionicons, MaterialCommunityIcons } from '@expo/vector-icons';\nimport { Actions, GiftedChat, IMessage, MessageText, Send } from 'react-native-gifted-chat';\nimport { PreDefinedRole, RoomType, IExpoNotificationData, IFileInfo } from 'common';\nimport {\n OnChatMessageAddedDocument as CHAT_MESSAGE_ADDED,\n useMessagesQuery,\n useSendExpoNotificationOnPostMutation,\n useSendMessagesMutation,\n useViewChannelDetailQuery,\n useAddDirectChannelMutation,\n} from 'common/lib/generated/generated.js';\nimport { useUploadFilesNative } from '@messenger-box/platform-client';\nimport { objectId } from '@messenger-box/core';\nimport { userSelector } from '@adminide-stack/user-auth0-client';\nimport { format, isToday, isYesterday } from 'date-fns';\nimport { ImageViewerModal, SlackMessage } from '../components/SlackMessageContainer';\nimport CachedImage from '../components/CachedImage';\nimport { config } from '../config';\n\nconst {\n MESSAGES_PER_PAGE,\n CALL_TO_ACTION_BOX_BGCOLOR,\n CALL_TO_ACTION_PATH,\n CALL_TO_ACTION_BUTTON_BORDERCOLOR,\n CALL_TO_ACTION_TEXT_COLOR,\n} = config;\n\nconst createdAtText = (value: string) => {\n if (!value) return '';\n let date = new Date(value);\n if (isToday(date)) return 'Today';\n if (isYesterday(date)) return 'Yesterday';\n return format(new Date(value), 'MMM dd, yyyy');\n};\n\ninterface ISubscriptionHandlerProps {\n subscribeToNewMessages: () => any;\n channelId: string;\n}\n\ninterface IMessageProps extends IMessage {\n type: string;\n propsConfiguration?: any;\n replies?: any;\n isShowThreadMessage?: boolean;\n}\n\nexport interface AlertMessageAttachmentsInterface {\n title: string;\n isTitleHtml: boolean;\n icon: string;\n callToAction: {\n title: string;\n link: string;\n };\n}\n\nconst ConversationViewComponent = ({ channelId: ChannelId, role, isShowThreadMessage, ...rest }: 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 currentRoute = navigationRef.isReady() ? navigationRef?.getCurrentRoute() : null;\n const [channelId, setChannelId] = useState<any>(rest?.isCreateNewChannel ? null : ChannelId);\n const [loadingOldMessages, setLoadingOldMessages] = useState<boolean>(false);\n const navigation = useNavigation<any>();\n const [files, setFiles] = useState<File[]>([]);\n const [images, setImages] = useState<ImagePicker.ImagePickerAsset[]>([]);\n const [msg, setMsg] = useState<string>('');\n const [loading, setLoading] = useState(false);\n const [loadEarlierMsg, setLoadEarlierMsg] = useState(false);\n const [imageLoading, setImageLoading] = useState(false);\n const [expoTokens, setExpoTokens] = useState<any[]>([]);\n const [isShowImageViewer, setImageViewer] = useState<boolean>(false);\n const [imageObject, setImageObject] = useState<any>({});\n const [skip, setSkip] = useState(0);\n const messageRootListRef = useRef<any>(null);\n const isFocused = useIsFocused();\n\n const [addDirectChannel, { loading: addDirectChannaleLoading }] = useAddDirectChannelMutation();\n\n const { startUpload } = useUploadFilesNative();\n\n const [sendMsg] = useSendMessagesMutation();\n\n const [sendExpoNotificationOnPostMutation] = useSendExpoNotificationOnPostMutation();\n\n const {\n data,\n loading: messageLoading,\n refetch,\n fetchMore: fetchMoreMessages,\n subscribeToMore,\n }: any = useMessagesQuery({\n variables: {\n channelId: channelId?.toString(),\n parentId: null,\n limit: MESSAGES_PER_PAGE,\n skip: skip,\n },\n skip: !channelId,\n fetchPolicy: 'cache-and-network',\n nextFetchPolicy: 'cache-first',\n refetchWritePolicy: 'merge',\n });\n\n // const {\n // data: channelsDetail,\n // loading: channelLoading,\n // refetch: refetchChannelDetail,\n // } = useViewChannelDetailQuery({\n // variables: {\n // id: channelId?.toString(),\n // },\n // });\n // const { data: users } = useGetAllUsersQuery();\n\n React.useEffect(() => {\n return () => {\n setChannelMessages([]);\n };\n }, []);\n\n useFocusEffect(\n React.useCallback(() => {\n // Do something when the screen is focused\n setSkip(0);\n // refetchChannelDetail({ id: channelId?.toString() });\n if (channelId) {\n refetch({\n channelId: channelId?.toString(),\n parentId: null,\n limit: MESSAGES_PER_PAGE,\n skip: 0,\n }).then(({ data }) => {\n if (!data?.messages) {\n return;\n }\n const { data: messages, totalCount }: any = data.messages;\n setTotalCount(totalCount);\n setChannelMessages(messages);\n });\n }\n return () => {\n // Do something when the screen is unfocused\n // Useful for cleanup functions\n setChannelId(null);\n setTotalCount(0);\n setSkip(0);\n };\n }, [channelId, isFocused]),\n );\n\n React.useEffect(() => {\n const currentChannelId = ChannelId || currentRoute?.params?.channelId;\n setChannelId(currentChannelId);\n }, [ChannelId, currentRoute]);\n\n React.useEffect(() => {\n if (selectedImage) setImageLoading(false);\n }, [selectedImage]);\n\n useEffect(() => {\n if (data?.messages?.data) {\n const { data: messages, totalCount: messeageTotalCount } = data.messages;\n console.log('messeageTotalCount', messeageTotalCount, ' totalCount=', totalCount);\n\n if (\n (messages && messages.length > 0 && messeageTotalCount > totalCount) ||\n (messages && messages.length > 0 && (loadingOldMessages || channelMessages.length === 0))\n ) {\n setChannelMessages((oldMessages: any) => uniqBy([...messages, ...oldMessages], ({ id }) => id));\n setTotalCount(messeageTotalCount);\n }\n\n if (loadingOldMessages && channelMessages) setLoadingOldMessages(false);\n }\n }, [data, loadingOldMessages, channelMessages, totalCount]);\n\n const onFetchOld = useCallback(async () => {\n if (totalCount > channelMessages.length && !loadingOldMessages) {\n setLoadEarlierMsg(true);\n try {\n const response = await fetchMoreMessages({\n variables: {\n channelId: channelId?.toString(),\n parentId: null,\n skip: channelMessages.length,\n },\n });\n if (response?.data) {\n setSkip(channelMessages.length);\n setLoadEarlierMsg(false);\n setLoadingOldMessages(true);\n }\n } catch (error: any) {\n setLoadEarlierMsg(false);\n }\n\n // ?.then((res: any) => {\n // setLoadingOldMessages(true);\n // });\n }\n }, [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 let imageSource: any = await ImagePicker.launchImageLibraryAsync({\n mediaTypes: ImagePicker.MediaTypeOptions.Images,\n allowsEditing: true,\n aspect: [4, 3],\n quality: 1,\n base64: true,\n });\n // if (!imageSource.cancelled) {\n // const image = 'data:image/jpeg;base64,' + imageSource?.base64;\n // setImage(image);\n // const file = dataURLtoFile(image, 'inputImage.jpg');\n // setFiles((files) => files.concat(file));\n // setImages((images) => images.concat(imageSource as ImagePicker.ImageInfo));\n // }\n // if (imageSource.cancelled) setLoading(false);\n\n if (!imageSource.canceled) {\n const image = 'data:image/jpeg;base64,' + imageSource?.assets[0]?.base64;\n setImage(image);\n const file = dataURLtoFile(image, 'inputImage.jpg');\n setFiles((files) => files.concat(file));\n setImages((images) => images.concat(imageSource?.assets[0] as ImagePicker.ImagePickerAsset));\n }\n\n if (imageSource.canceled) setLoading(false);\n };\n\n const createDirectChannel = useCallback(\n (msg: string) => {\n if (\n rest?.isCreateNewChannel &&\n rest?.newChannelData?.type === RoomType?.Direct &&\n rest?.newChannelData?.userIds?.length > 0\n ) {\n addDirectChannel({\n variables: {\n receiver: [...(rest?.newChannelData?.userIds ?? [])],\n displayName: 'DIRECT CHANNEL',\n },\n })\n ?.then(async (res) => {\n if (res?.data?.createDirectChannel?.id) {\n setChannelId(res?.data?.createDirectChannel?.id);\n const notificationData: IExpoNotificationData = {\n url: config.INBOX_MESSEGE_PATH,\n params: { channelId: res?.data?.createDirectChannel?.id, hideTabBar: true },\n screen: 'DialogMessages',\n other: { sound: Platform.OS === 'android' ? undefined : 'default' },\n };\n setLoading(true);\n await sendMsg({\n variables: {\n channelId: res?.data?.createDirectChannel?.id,\n content: msg,\n notificationParams: notificationData,\n },\n update: (cache, { data, errors }: any) => {\n if (!data || errors) {\n setLoading(false);\n return;\n }\n setChannelToTop(channelToTop + 1);\n setLoading(false);\n setMsg('');\n },\n });\n }\n })\n ?.catch((e: any) => console.log('error', JSON.stringify(e)));\n }\n },\n [rest],\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 notificationData: IExpoNotificationData = {\n url: config.INBOX_MESSEGE_PATH,\n params: { channelId, hideTabBar: true },\n screen: 'DialogMessages',\n other: { sound: Platform.OS === 'android' ? undefined : 'default' },\n };\n\n if (images && images.length > 0) {\n const postId = objectId();\n\n setLoading(true);\n const uploadResponse = await startUpload({\n file: images,\n saveUploadedFile: {\n variables: {\n postId,\n },\n },\n createUploadLink: {\n variables: {\n postId,\n },\n },\n });\n if (uploadResponse?.error) setLoading(false);\n const uploadedFiles = uploadResponse.data as unknown as IFileInfo[];\n\n if (uploadResponse.data) {\n setImage('');\n setFiles([]);\n setImages([]);\n //setLoading(false);\n const files = uploadedFiles?.map((f: any) => f.id) ?? null;\n await sendMsg({\n variables: {\n postId,\n channelId,\n content: message,\n files,\n notificationParams: notificationData,\n },\n update: (cache, { data, errors }: any) => {\n if (!data || errors) {\n setLoading(false);\n return;\n }\n //Temporary fix.....//\n const newMessage: any = data?.sendMessage;\n setChannelMessages((oldMessages: any) =>\n uniqBy([...oldMessages, newMessage], ({ id }) => id),\n );\n setTotalCount((t) => t + 1);\n //Temporary fix.....//\n\n setChannelToTop(channelToTop + 1);\n setLoading(false);\n setMsg('');\n },\n });\n }\n } else {\n setLoading(true);\n await sendMsg({\n variables: {\n channelId,\n content: message,\n notificationParams: notificationData,\n },\n update: (cache, { data, errors }: any) => {\n if (!data || errors) {\n setLoading(false);\n return;\n }\n //Temporary fix.....//\n const newMessage: any = data?.sendMessage;\n setChannelMessages((oldMessages: any) => uniqBy([...oldMessages, newMessage], ({ id }) => id));\n setTotalCount((t) => t + 1);\n //Temporary fix.....//\n\n setChannelToTop(channelToTop + 1);\n setLoading(false);\n setMsg('');\n },\n });\n }\n },\n [setChannelMessages, channelId, images, channelToTop, expoTokens],\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 (channelId && filteredMessages?.length > 0) {\n orderBy(channelMessages, ['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,\n name: msg.author.givenName + ' ' + msg.author.familyName,\n avatar: msg.author?.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 message.replies = msg?.replies ?? [];\n message.isShowThreadMessage = isShowThreadMessage;\n res.push(message);\n });\n }\n return res?.length > 0 ? uniqBy([...res], ({ _id }: any) => _id) : [];\n //return res;\n }, [channelMessages, channelId]);\n\n const renderSend = (props) => {\n return (\n <Send {...props} disabled={channelId || rest?.isCreateNewChannel ? false : true}>\n <Box>\n <MaterialCommunityIcons\n name=\"send-circle\"\n style={{ marginBottom: 5, marginRight: 5 }}\n size={32}\n color={channelId || rest?.isCreateNewChannel ? '#2e64e5' : '#b8b2b2'}\n />\n </Box>\n </Send>\n );\n };\n\n const renderMessageText = (props: any) => {\n const { currentMessage } = props;\n const lastReply: any = currentMessage?.replies?.data?.length > 0 ? currentMessage?.replies?.data?.[0] : null;\n\n if (currentMessage.type === 'ALERT') {\n const attachment = currentMessage?.propsConfiguration?.contents?.attachment;\n let action: string = '';\n let actionId: any = '';\n let params: any = {};\n\n if (attachment?.callToAction?.extraParams) {\n const extraParams: any = attachment?.callToAction?.extraParams;\n const route: any = extraParams?.route ?? null;\n let path: any = null;\n let param: any = null;\n if (role && role == PreDefinedRole.Guest) {\n path = route?.guest?.name ? route?.guest?.name ?? null : null;\n param = route?.guest?.params ? route?.guest?.params ?? null : null;\n } else if (role && role == PreDefinedRole.Owner) {\n path = route?.host?.name ? route?.host?.name ?? null : null;\n param = route?.host?.params ? route?.host?.params ?? null : null;\n } else {\n path = route?.host?.name ? route?.host?.name ?? null : null;\n param = route?.host?.params ? route?.host?.params ?? null : null;\n }\n\n action = path;\n params = { ...param };\n } else if (attachment?.callToAction?.link) {\n action = CALL_TO_ACTION_PATH;\n actionId = attachment?.callToAction?.link.split('/').pop();\n params = { reservationId: actionId };\n }\n\n return (\n <>\n {attachment?.callToAction && action ? (\n <Box bg={CALL_TO_ACTION_BOX_BGCOLOR} borderRadius={15} pb={'$2'}>\n <Button\n variant={'outline'}\n size={'sm'}\n borderColor={CALL_TO_ACTION_BUTTON_BORDERCOLOR}\n onPress={() => action && params && navigation.navigate(action, params)}\n // onPress={() => navigation.navigate(action, { reservationId: actionId })}\n >\n <ButtonText color={CALL_TO_ACTION_TEXT_COLOR}>\n {attachment.callToAction.title}\n </ButtonText>\n </Button>\n <MessageText\n {...props}\n textStyle={{\n left: { marginLeft: 5, color: CALL_TO_ACTION_TEXT_COLOR, paddingHorizontal: 2 },\n }}\n />\n </Box>\n ) : (\n <TouchableHighlight\n underlayColor={'#c0c0c0'}\n style={{ width: '100%' }}\n onPress={() => {\n if (currentMessage?.isShowThreadMessage)\n navigation.navigate(config.THREAD_MESSEGE_PATH, {\n channelId: channelId,\n title: 'Message',\n postParentId: currentMessage?._id,\n isPostParentIdThread: true,\n });\n }}\n >\n <>\n <MessageText {...props} textStyle={{ left: { marginLeft: 5 } }} />\n {currentMessage?.replies?.data?.length > 0 && (\n <HStack space={'sm'} px={'$1'} alignItems={'center'}>\n <HStack>\n {currentMessage?.replies?.data\n ?.filter(\n (v: any, i: any, a: any) =>\n a.findIndex((t: any) => t?.author?.id === v?.author?.id) === i,\n )\n ?.slice(0, 2)\n ?.reverse()\n ?.map((p: any, i: Number) => (\n <Avatar\n key={'conversations-view-key-' + i}\n bg={'transparent'}\n size={'sm'}\n >\n <AvatarFallbackText>\n {startCase(p?.author?.username?.charAt(0))}\n </AvatarFallbackText>\n <AvatarImage\n alt=\"user image\"\n style={{\n borderRadius: 6,\n borderWidth: 2,\n borderColor: '#fff',\n }}\n source={{\n uri: p?.author?.picture,\n }}\n />\n </Avatar>\n ))}\n </HStack>\n <Text style={{ fontSize: 12 }} fontWeight={'$bold'} color={'$blue800'}>\n {currentMessage?.replies?.totalCount}{' '}\n {currentMessage?.replies?.totalCount == 1 ? 'reply' : 'replies'}\n </Text>\n <Text style={{ fontSize: 12 }} fontWeight={'$bold'} color={'$trueGray500'}>\n {lastReply ? createdAtText(lastReply?.createdAt) : ''}\n </Text>\n </HStack>\n )}\n </>\n </TouchableHighlight>\n )}\n {/* <MessageText\n {...props}\n textStyle={{ left: { marginLeft: 5, color: CALL_TO_ACTION_TEXT_COLOR, paddingHorizontal: 2 } }}\n /> */}\n </>\n );\n } else {\n return (\n <TouchableHighlight\n underlayColor={'#c0c0c0'}\n style={{ width: '100%' }}\n onPress={() => {\n if (currentMessage?.isShowThreadMessage)\n navigation.navigate(config.THREAD_MESSEGE_PATH, {\n channelId: channelId,\n title: 'Message',\n postParentId: currentMessage?._id,\n isPostParentIdThread: true,\n });\n }}\n >\n <>\n <MessageText {...props} textStyle={{ left: { marginLeft: 5 } }} />\n {currentMessage?.replies?.data?.length > 0 && (\n <HStack space={'sm'} px={'$1'} alignItems={'center'}>\n <HStack>\n {currentMessage?.replies?.data\n ?.filter(\n (v: any, i: any, a: any) =>\n a.findIndex((t: any) => t?.author?.id === v?.author?.id) === i,\n )\n ?.slice(0, 2)\n ?.reverse()\n ?.map((p: any, i: Number) => (\n <Avatar\n key={'conversation-replies-key-' + i}\n bg={'transparent'}\n size={'sm'}\n >\n <AvatarFallbackText>\n {startCase(p?.author?.username?.charAt(0))}\n </AvatarFallbackText>\n <AvatarImage\n alt=\"user image\"\n style={{ borderRadius: 6, borderWidth: 2, borderColor: '#fff' }}\n source={{\n uri: p?.author?.picture,\n }}\n />\n </Avatar>\n ))}\n </HStack>\n <Text style={{ fontSize: 12 }} fontWeight={'$bold'} color={'$blue800'}>\n {currentMessage?.replies?.totalCount}{' '}\n {currentMessage?.replies?.totalCount == 1 ? 'reply' : 'replies'}\n </Text>\n <Text style={{ fontSize: 12 }} fontWeight={'$bold'} color={'$trueGray500'}>\n {lastReply ? createdAtText(lastReply?.createdAt) : ''}\n </Text>\n </HStack>\n )}\n </>\n </TouchableHighlight>\n );\n }\n };\n\n const renderActions = (props) => {\n return (\n <Actions\n {...props}\n icon={() => <Ionicons name={'image'} size={30} color={'black'} onPress={onSelectImages} />}\n />\n );\n };\n\n const renderAccessory = (props) => {\n return (\n <Box>\n {selectedImage !== '' ? (\n <HStack alignItems={'center'}>\n <Image\n ml={'$3'}\n key={selectedImage}\n alt={'image'}\n source={{ uri: selectedImage }}\n size={'xs'}\n />\n <Button\n variant={'solid'}\n bg={'transparent'}\n //colorScheme={'secondary'}\n onPress={() => {\n setFiles([]);\n setImage('');\n setImages([]);\n }}\n >\n <ButtonText color={'$black'}>Cancel</ButtonText>\n </Button>\n </HStack>\n ) : null}\n </Box>\n );\n };\n\n const setImageViewerObject = (obj: any, v: boolean) => {\n setImageObject(obj);\n setImageViewer(v);\n };\n\n const modalContent = React.useMemo(() => {\n if (!imageObject) return <></>;\n const { image, _id } = imageObject;\n return (\n <CachedImage\n style={{ width: '100%', height: '100%' }}\n resizeMode={'cover'}\n // cacheKey={`${_id}-conversation-modal-image-key`}\n cacheKey={`${_id}-slack-bubble-imageKey`}\n source={{\n uri: image,\n //headers: `Authorization: Bearer ${token}`,\n expiresIn: 86400,\n }}\n alt={'image'}\n />\n );\n }, [imageObject]);\n\n const renderMessage = useCallback(\n (props: any) => {\n // const {\n // currentMessage: { text: currText },\n // } = props;\n\n //let messageTextStyle: any;\n\n // Make \"pure emoji\" messages much bigger than plain text.\n // if (currText && emojiUtils.isPureEmojiString(currText)) {\n // messageTextStyle = {\n // fontSize: 28,\n // // Emoji get clipped if lineHeight isn't increased; make it consistent across platforms.\n // lineHeight: Platform.OS === 'android' ? 34 : 30,\n // }\n // }\n\n // return <SlackMessage {...props} messageTextStyle={messageTextStyle} />;\n return (\n <SlackMessage {...props} isShowImageViewer={isShowImageViewer} setImageViewer={setImageViewerObject} />\n );\n },\n [isShowImageViewer],\n );\n\n // const renderMessage = (props: any) => {\n // // const {\n // // currentMessage: { text: currText },\n // // } = props;\n\n // //let messageTextStyle: any;\n\n // // Make \"pure emoji\" messages much bigger than plain text.\n // // if (currText && emojiUtils.isPureEmojiString(currText)) {\n // // messageTextStyle = {\n // // fontSize: 28,\n // // // Emoji get clipped if lineHeight isn't increased; make it consistent across platforms.\n // // lineHeight: Platform.OS === 'android' ? 34 : 30,\n // // }\n // // }\n\n // // return <SlackMessage {...props} messageTextStyle={messageTextStyle} />;\n // return <SlackMessage {...props} isShowImageViewer={isShowImageViewer} setImageViewer={setImageViewerObject} />;\n // };\n\n let onScroll = false;\n\n const onMomentumScrollBegin = async ({ nativeEvent }: any) => {\n onScroll = true;\n console.log('scroll top');\n if (!loadingOldMessages && isCloseToTop(nativeEvent) && totalCount > channelMessages?.length) {\n await onFetchOld();\n }\n };\n\n const onEndReached = () => {\n console.log('on end reached');\n if (!onScroll) return;\n // load messages, show ActivityIndicator\n onScroll = false;\n // setLoadingOldMessages(true);\n };\n\n return (\n <>\n {loadEarlierMsg && <Spinner color={'$blue500'} />}\n\n <GiftedChat\n ref={messageRootListRef}\n wrapInSafeArea={false}\n renderLoading={() => <Spinner color={'$blue500'} />}\n messages={messageList}\n listViewProps={{\n onEndReached: onEndReached,\n onEndReachedThreshold: 0.5,\n onMomentumScrollBegin: onMomentumScrollBegin,\n }}\n // listViewProps={{\n // scrollEventThrottle: 400,\n // onScroll: ({ nativeEvent }) => { console.log('scroll')\n // if (!loadingOldMessages && isCloseToTop(nativeEvent)) {\n // onFetchOld();\n // }\n // }\n // }}\n onSend={(messages) =>\n rest?.isCreateNewChannel && !channelId\n ? rest?.newChannelData?.type === RoomType?.Direct\n ? createDirectChannel(messages[0]?.text ?? ' ')\n : null\n : channelId && handleSend(messages[0]?.text ?? ' ')\n }\n text={msg ? msg : ' '}\n onInputTextChanged={(text) => setMsg(text)}\n renderFooter={() =>\n loading ? <Spinner color={'$blue500'} /> : imageLoading ? <Spinner color={'$blue500'} /> : ''\n }\n scrollToBottom\n user={{\n // _id: currentUser?.id || '',\n _id: auth?.id || '',\n }}\n isTyping={true}\n alwaysShowSend={loading ? false : true}\n //onLoadEarlier={onFetchOld}\n //infiniteScroll={true}\n renderSend={renderSend}\n // loadEarlier={data?.messages?.totalCount > channelMessages.length}\n //isLoadingEarlier={loadEarlierMsg}\n //extraData={{ isLoadingEarlier: loadingOldMessages }}\n // renderLoadEarlier={() =>\n // !loadEarlierMsg && (\n // <Center py={2}>\n // <Button\n // onPress={() => onFetchOld()}\n // variant={'outline'}\n // _text={{ color: 'black', fontSize: 15, fontWeight: 'bold' }}\n // >\n // Load earlier messages\n // </Button>\n // </Center>\n // )\n // }\n renderMessageText={renderMessageText}\n minInputToolbarHeight={50}\n renderActions={channelId && renderActions}\n renderAccessory={renderAccessory}\n renderMessage={renderMessage}\n renderChatFooter={() => (\n <>\n <ImageViewerModal\n isVisible={isShowImageViewer}\n setVisible={setImageViewer}\n modalContent={modalContent}\n />\n <SubscriptionHandler\n channelId={channelId?.toString()}\n subscribeToNewMessages={() =>\n subscribeToMore({\n document: CHAT_MESSAGE_ADDED,\n variables: {\n channelId: channelId?.toString(),\n },\n updateQuery: (prev, { subscriptionData }: any) => {\n if (!subscriptionData.data) return prev;\n setSkip(0);\n const newMessage: any = subscriptionData?.data?.chatMessageAdded;\n const previousData = prev?.messages?.data\n ? [...prev.messages.data, newMessage]\n : [];\n const totalMsgCount = prev?.messages?.totalCount + 1;\n setChannelMessages((oldMessages: any) =>\n uniqBy([...oldMessages, newMessage], ({ id }) => id),\n );\n setTotalCount(totalMsgCount);\n const merged = {\n ...prev,\n messages: {\n ...prev?.messages,\n data: [...(prev?.messages?.data ?? []), newMessage],\n totalCount: totalMsgCount,\n },\n };\n return merged;\n // return Object.assign({}, prev, {\n // messages: {\n // data: [...prev.messages.data, newMessage],\n // totalCount: prev.messages.totalCount + 1,\n // },\n // });\n },\n })\n }\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 }: ISubscriptionHandlerProps) => {\n useEffect(() => subscribeToNewMessages(), [channelId]);\n return <></>;\n};\n\nexport const ConversationView = React.memo(ConversationViewComponent);\n"],"names":["_a","React","data","totalCount","atob","files","images","msg","_b","_c","_d","_e","_f","_g","_h","SlackMessage","CHAT_MESSAGE_ADDED"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ConversationView.js","sources":["../../../../src/screens/inbox/containers/ConversationView.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport {\n Avatar,\n AvatarFallbackText,\n AvatarImage,\n Box,\n Button,\n ButtonText,\n HStack,\n Icon,\n Image,\n Spinner,\n Text,\n Skeleton,\n ScrollView,\n Toast,\n ToastTitle,\n ToastDescription,\n useToast,\n ToastAlert,\n VStack,\n Divider,\n Center,\n} from '@admin-layout/gluestack-ui-mobile';\nimport {\n Platform,\n TouchableHighlight,\n SafeAreaView,\n View,\n TouchableOpacity,\n Animated,\n Text as RNText,\n TextInput,\n KeyboardAvoidingView,\n} from 'react-native';\nimport { useFocusEffect, useIsFocused, useNavigation, useRoute } from '@react-navigation/native';\nimport { navigationRef } from '@common-stack/client-react';\nimport { useSelector, shallowEqual } 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 { PreDefinedRole, RoomType, IExpoNotificationData, IFileInfo, FileRefType, PostTypeEnum } from 'common';\nimport {\n CHAT_MESSAGE_ADDED,\n useChannelDetailQuery,\n useChannelMessagesQuery,\n useSendChannelMessage,\n useAddDirectChannel,\n MESSAGES_DOCUMENT,\n useSendExpoNotification,\n} from '../../../queries/inboxQueries';\nimport { useUploadFilesNative } from '@messenger-box/platform-client';\nimport { objectId } from '@messenger-box/core';\nimport { userSelector } from '@adminide-stack/user-auth0-client';\nimport { format, isToday, isYesterday } from 'date-fns';\nimport { ImageViewerModal, SlackMessage } from '../components/SlackMessageContainer';\nimport CachedImage from '../components/CachedImage';\nimport { config } from '../config';\nimport colors from 'tailwindcss/colors';\nimport ExpandableInputActionSheet from '../components/ExpandableInputActionSheet';\nimport ExpandableInput from '../components/ExpandableInput';\nimport { SubscriptionHandler } from '../components/SubscriptionHandler';\nimport { useInboxMessages } from '../hooks/useInboxMessages';\nimport Reanimated, { useSharedValue, useAnimatedStyle } from 'react-native-reanimated';\nimport Constants from 'expo-constants';\nimport { Keyboard } from 'react-native';\nimport GiftedChatInboxComponent from '../components/GiftedChatInboxComponent';\n\n// Define an extended interface for ImagePickerAsset with url property\ninterface ExtendedImagePickerAsset extends ImagePicker.ImagePickerAsset {\n url?: string;\n fileName?: string;\n mimeType?: string;\n}\n\nconst {\n MESSAGES_PER_PAGE,\n CALL_TO_ACTION_BOX_BGCOLOR,\n CALL_TO_ACTION_PATH,\n CALL_TO_ACTION_BUTTON_BORDERCOLOR,\n CALL_TO_ACTION_TEXT_COLOR,\n} = config;\n\nconst createdAtText = (value: string) => {\n if (!value) return '';\n let date = new Date(value);\n if (isToday(date)) return 'Today';\n if (isYesterday(date)) return 'Yesterday';\n return format(new Date(value), 'MMM dd, yyyy');\n};\n\ninterface ISubscriptionHandlerProps {\n subscribeToNewMessages: () => any;\n channelId: string;\n}\n\ninterface IMessageProps extends IMessage {\n type: string;\n propsConfiguration?: any;\n replies?: any;\n isShowThreadMessage?: boolean;\n images?: string[]; // Add support for multiple images\n}\n\nexport interface AlertMessageAttachmentsInterface {\n title: string;\n isTitleHtml: boolean;\n icon: string;\n callToAction: {\n title: string;\n link: string;\n };\n}\n\n// Fix for the optimistic response types\ntype OptimisticPropsConfig = {\n __typename: 'MachineConfiguration';\n resource: string;\n};\n\n// Custom notification component\nconst ErrorNotification = ({ message, onClose, type = 'error' }) => {\n const opacity = useRef(new Animated.Value(0)).current;\n\n // Choose colors based on type\n const bgColor = type === 'error' ? '#f44336' : '#ff9800';\n const title = type === 'error' ? 'Error' : 'Warning';\n\n useEffect(() => {\n // Fade in\n Animated.timing(opacity, {\n toValue: 1,\n duration: 300,\n useNativeDriver: true,\n }).start();\n\n // Auto hide after 4 seconds\n const timer = setTimeout(() => {\n Animated.timing(opacity, {\n toValue: 0,\n duration: 300,\n useNativeDriver: true,\n }).start(() => onClose && onClose());\n }, 4000);\n\n return () => clearTimeout(timer);\n }, []);\n\n return (\n <Animated.View\n style={{\n position: 'absolute',\n top: 10,\n left: 10,\n right: 10,\n backgroundColor: bgColor,\n padding: 15,\n borderRadius: 8,\n shadowColor: '#000',\n shadowOffset: { width: 0, height: 2 },\n shadowOpacity: 0.25,\n shadowRadius: 3.84,\n elevation: 5,\n zIndex: 1000,\n opacity,\n }}\n >\n <HStack className=\"items-center justify-between\">\n <Text style={{ color: 'white', fontWeight: 'bold' }}>{title}</Text>\n <TouchableOpacity onPress={onClose}>\n <Ionicons name=\"close\" size={20} color=\"white\" />\n </TouchableOpacity>\n </HStack>\n <Text style={{ color: 'white', marginTop: 5 }}>{message}</Text>\n </Animated.View>\n );\n};\n\nconst PADDING_BOTTOM = Platform.OS === 'ios' ? 20 : 0;\n\nfunction useGradualKeyboardAnimation() {\n const height = useSharedValue(PADDING_BOTTOM);\n const isExpoGo = Constants.executionEnvironment === 'storeClient';\n let useKeyboardHandler;\n if (!isExpoGo) {\n useKeyboardHandler = require('react-native-keyboard-controller').useKeyboardHandler;\n }\n if (useKeyboardHandler) {\n useKeyboardHandler(\n {\n onMove: (e) => {\n 'worklet';\n height.value = Math.max(e.height, PADDING_BOTTOM);\n },\n onEnd: (e) => {\n 'worklet';\n height.value = e.height;\n },\n },\n [],\n );\n }\n return { height };\n}\n\nconst ConversationViewComponent = ({ channelId: initialChannelId, role, isShowThreadMessage, ...rest }: any) => {\n // Core state management using React hooks instead of XState\n const { params } = useRoute<any>();\n const [channelId, setChannelId] = useState<string | null>(initialChannelId || null);\n const [messageText, setMessageText] = useState('');\n const [loading, setLoading] = useState(false);\n const [loadingOldMessages, setLoadingOldMessages] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [selectedImage, setSelectedImage] = useState<string>('');\n const [images, setImages] = useState<any[]>([]);\n const [isShowImageViewer, setImageViewer] = useState<boolean>(false);\n const [imageObject, setImageObject] = useState<any>({});\n const [errorMessage, setErrorMessage] = useState('');\n const [notificationType, setNotificationType] = useState('error');\n\n // Add state for expandable action sheet\n const [isActionSheetVisible, setActionSheetVisible] = useState(false);\n // Add state for controlling bottom margin\n const [bottomMargin, setBottomMargin] = useState(0);\n\n // Create refs for various operations\n const messageRootListRef = useRef<any>(null);\n const textInputRef = useRef<any>(null); // Add new ref for the text input\n const isMounted = useRef(true);\n const fetchOldDebounceRef = useRef(false);\n\n // Navigation and auth\n const auth: any = useSelector(userSelector, shallowEqual);\n const currentRoute = navigationRef.isReady() ? navigationRef?.getCurrentRoute() : null;\n const navigation = useNavigation<any>();\n const isFocused = useIsFocused();\n\n // Apollo mutations\n const [addDirectChannel] = useAddDirectChannel();\n const { startUpload } = useUploadFilesNative();\n const [sendMsg] = useSendChannelMessage();\n const [sendExpoNotification] = useSendExpoNotification();\n\n // Add skip state for pagination\n const [skip, setSkip] = useState(0);\n\n // Apollo query for messages\n const {\n data,\n loading: messageLoading,\n error: inboxError,\n refetch,\n subscribe,\n } = useInboxMessages({\n useQueryHook: useChannelMessagesQuery,\n queryVariables: {\n channelId: channelId?.toString(),\n parentId: null,\n limit: MESSAGES_PER_PAGE,\n skip: skip, // Use skip state for pagination\n orgName: params?.orgName,\n },\n subscriptionDocument: CHAT_MESSAGE_ADDED,\n subscriptionVariables: { channelId: channelId?.toString() },\n updateQuery: undefined, // Provide custom updateQuery if needed\n onError: (err) => setError(String(err)),\n });\n\n // Extract messages from the query data\n const channelMessages = useMemo(() => {\n return (data?.messages?.data as any[]) || [];\n }, [data?.messages?.data]);\n\n // Get total message count\n const totalCount = useMemo(() => {\n return data?.messages?.totalCount || 0;\n }, [data?.messages?.totalCount]);\n\n // Clear messages when component unmounts\n useEffect(() => {\n return () => {\n isMounted.current = false;\n };\n }, []);\n\n // Update channelId from props or navigation params\n useEffect(() => {\n const currentChannelId = initialChannelId || currentRoute?.params?.channelId;\n if (currentChannelId) {\n setChannelId(currentChannelId);\n }\n }, [initialChannelId, currentRoute]);\n\n // Focus/unfocus behavior\n useFocusEffect(\n React.useCallback(() => {\n if (channelId) {\n refetch();\n }\n }, [isFocused, refetch]),\n );\n\n // When fetching more messages, update skip\n const fetchMoreMessagesImpl = useCallback(async () => {\n try {\n setLoadingOldMessages(true);\n const response = await refetch({\n channelId: channelId?.toString(),\n parentId: null,\n limit: MESSAGES_PER_PAGE,\n skip: channelMessages.length,\n });\n setSkip(channelMessages.length); // Update skip after fetching\n setLoadingOldMessages(false);\n if (!response?.data?.messages?.data) {\n return { error: 'No messages returned' };\n }\n return { messages: response.data.messages.data };\n } catch (error) {\n setLoadingOldMessages(false);\n setError(String(error));\n return { error: String(error) };\n }\n }, [channelId, channelMessages.length, refetch]);\n\n // Send message function\n const sendMessageImpl = useCallback(async () => {\n try {\n // Store the current message text and clear input immediately for better UX\n const currentMessageText = messageText;\n setMessageText('');\n\n const notificationData: IExpoNotificationData = {\n url: config.INBOX_MESSEGE_PATH,\n params: { channelId, hideTabBar: true },\n screen: 'DialogMessages',\n other: { sound: Platform.OS === 'android' ? undefined : 'default' },\n };\n\n // Create optimistic message with minimal structure required for UI rendering\n const messageId = objectId();\n const optimisticMessage = {\n __typename: 'Post' as const,\n id: messageId,\n message: currentMessageText,\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n author: {\n __typename: 'UserAccount' as const,\n id: auth?.id,\n givenName: auth?.profile?.given_name || '',\n familyName: auth?.profile?.family_name || '',\n email: auth?.profile?.email || '',\n username: auth?.profile?.nickname || '',\n fullName: auth?.profile?.name || '',\n picture: auth?.profile?.picture || '',\n alias: [auth?.authUserId ?? ''] as string[],\n tokens: [],\n },\n isDelivered: true,\n isRead: false,\n type: 'TEXT' as PostTypeEnum,\n parentId: null,\n fromServer: false,\n channel: {\n __typename: 'Channel' as const,\n id: channelId,\n },\n // Required fields that Apollo expects in the cache\n propsConfiguration: {\n __typename: 'MachineConfiguration' as const,\n id: null,\n resource: '' as any,\n contents: null,\n keys: null,\n target: null,\n overrides: null,\n },\n props: {},\n files: {\n __typename: 'FilesInfo' as const,\n data: [],\n totalCount: 0,\n },\n replies: {\n __typename: 'Messages' as const,\n data: [],\n totalCount: 0,\n },\n };\n\n const response = await sendMsg({\n variables: {\n channelId,\n content: currentMessageText,\n notificationParams: notificationData,\n },\n optimisticResponse: {\n __typename: 'Mutation',\n sendMessage: optimisticMessage,\n },\n // Let the type policies handle the cache update automatically\n update: (cache, { data }) => {\n // Only perform cache update if we have valid data\n if (!data?.sendMessage) return;\n\n try {\n // Let Apollo type policies handle merging by using writeQuery\n // This will trigger the merge functions in the type policies\n cache.writeQuery({\n query: MESSAGES_DOCUMENT,\n variables: {\n channelId: channelId?.toString(),\n parentId: null,\n limit: MESSAGES_PER_PAGE,\n skip: 0,\n },\n data: {\n messages: {\n __typename: 'Messages',\n messagesRefId: channelId,\n data: [data.sendMessage],\n totalCount: 1, // Just send the count for this single message\n },\n },\n });\n } catch (error) {\n console.error('Error updating cache:', error);\n\n // Format error for notification\n let errorMsg = 'Failed to update message cache';\n if (__DEV__ && error) {\n // In development, show actual error\n errorMsg = error.message\n ? error.message.replace('[ApolloError: ', '').replace(']', '')\n : 'Cache update failed';\n }\n\n setNotificationType('error');\n setErrorMessage(errorMsg);\n }\n },\n });\n\n // Ensure loader is removed after sending\n setIsUploadingImage(false);\n setLoading(false);\n\n return { message: response.data?.sendMessage };\n } catch (error) {\n setLoading(false);\n setIsUploadingImage(false);\n\n // Format error for notification\n let errorMsg = 'Failed to send message';\n if (__DEV__ && error) {\n // In development, show actual error\n errorMsg = error.message\n ? error.message.replace('[ApolloError: ', '').replace(']', '')\n : 'Message sending failed';\n }\n\n setNotificationType('error');\n setErrorMessage(errorMsg);\n setError(String(error));\n return { error: String(error) };\n }\n }, [channelId, messageText, sendMsg, auth]);\n\n // Image selection handler\n const onSelectImages = async () => {\n setLoading(true);\n\n try {\n let imageSource = await ImagePicker.launchImageLibraryAsync({\n mediaTypes: ImagePicker.MediaTypeOptions.Images,\n allowsEditing: false,\n aspect: [4, 3],\n quality: 0.8,\n base64: true,\n exif: false,\n allowsMultipleSelection: true, // Enable multiple selection\n });\n\n if (!imageSource?.canceled) {\n // Get all selected assets\n const selectedAssets = imageSource?.assets || [];\n if (selectedAssets.length === 0) {\n setLoading(false);\n return;\n }\n\n // Process all selected images\n const newImages = selectedAssets.map((selectedAsset) => {\n // Create a base64 image string for preview\n const base64Data = selectedAsset.base64;\n const previewImage = base64Data ? `data:image/jpeg;base64,${base64Data}` : selectedAsset.uri;\n\n // Format the asset for upload service requirements\n const asset: ExtendedImagePickerAsset = {\n ...selectedAsset,\n url: selectedAsset.uri,\n fileName: selectedAsset.fileName || `image_${Date.now()}.jpg`,\n mimeType: 'image/jpeg',\n };\n\n return asset;\n });\n\n // Set preview for the first image (for backward compatibility)\n if (newImages.length > 0) {\n const base64Data = newImages[0].base64;\n const previewImage = base64Data ? `data:image/jpeg;base64,${base64Data}` : newImages[0].uri;\n setSelectedImage(previewImage);\n }\n\n // Add new images to existing ones\n setImages((currentImages) => [...currentImages, ...newImages]);\n\n // Show action sheet if it's not visible\n if (!isActionSheetVisible) {\n setActionSheetVisible(true);\n }\n } else {\n setLoading(false);\n }\n } catch (error) {\n setLoading(false);\n }\n };\n\n // Add a state variable to track which message should show the skeleton\n const [uploadingMessageId, setUploadingMessageId] = useState<string | null>(null);\n // Add new state for tracking pending uploads\n const [pendingUploads, setPendingUploads] = useState<Record<string, IMessageProps>>({});\n const [uploadErrors, setUploadErrors] = useState<Record<string, string>>({});\n\n // Add new state variable to track image upload status\n const [isUploadingImage, setIsUploadingImage] = useState(false);\n\n // Ensure loader is hidden when all images are removed\n useEffect(() => {\n if (images.length === 0) {\n setIsUploadingImage(false);\n }\n }, [images]);\n\n // Add toast hook for notifications\n const toast = useToast();\n\n // Add a helper function for removing messages from the UI when uploads fail\n const removeMessageFromUI = useCallback((messageId: string) => {\n // Remove from pending uploads\n setPendingUploads((prev) => {\n const newPending = { ...prev };\n delete newPending[messageId];\n return newPending;\n });\n\n // Also remove any error state\n setUploadErrors((prev) => {\n const newErrors = { ...prev };\n delete newErrors[messageId];\n return newErrors;\n });\n\n // Reset upload state to ensure we don't get stuck with loading indicator\n setIsUploadingImage(false);\n }, []);\n\n // Send message with file - fix to ensure images display without loading indicators\n const sendMessageWithFileImpl = useCallback(async () => {\n try {\n // Generate a unique ID for the message\n const postId = objectId();\n\n // Set uploading state to true\n setIsUploadingImage(true);\n\n // Clear all loading states immediately\n setLoading(false);\n setUploadingMessageId(null);\n\n // Safety check for images\n if (!images || images.length === 0) {\n setIsUploadingImage(false);\n setLoading(false);\n return { error: 'No images available to upload' };\n }\n\n // Store current values before clearing\n const currentMessageText = messageText;\n const currentImages = [...images];\n\n // Prepare image URIs for optimistic UI update\n const imageUris = currentImages.map((img) => img.uri || img.url);\n\n // Clear UI immediately for next message\n setMessageText('');\n setSelectedImage('');\n setImages([]);\n\n // Create a client message with all local image URIs\n const clientMessage: IMessageProps = {\n _id: postId,\n text: currentMessageText || ' ',\n createdAt: new Date(),\n user: {\n _id: auth?.id || '',\n name: `${auth?.givenName || ''} ${auth?.familyName || ''}`,\n avatar: auth?.picture || '',\n },\n image: imageUris[0], // First image for compatibility with GiftedChat\n images: imageUris, // All images for our custom renderer\n sent: true,\n received: true,\n pending: false,\n type: 'TEXT',\n replies: { data: [], totalCount: 0 },\n isShowThreadMessage: false,\n };\n\n // Add to displayed messages immediately\n setPendingUploads((prev) => ({ ...prev, [postId]: clientMessage }));\n\n // Prepare notification data\n const notificationData: IExpoNotificationData = {\n url: config.INBOX_MESSEGE_PATH,\n params: { channelId, hideTabBar: true },\n screen: 'DialogMessages',\n other: { sound: Platform.OS === 'android' ? undefined : 'default' },\n };\n\n // Create optimistic message with minimal structure required for UI rendering\n const optimisticMessage = {\n __typename: 'Post' as const,\n id: postId,\n message: currentMessageText || ' ',\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n author: {\n __typename: 'UserAccount' as const,\n id: auth?.id,\n givenName: auth?.profile?.given_name || '',\n familyName: auth?.profile?.family_name || '',\n email: auth?.profile?.email || '',\n username: auth?.profile?.nickname || '',\n fullName: auth?.profile?.name || '',\n picture: auth?.profile?.picture || '',\n alias: [auth?.authUserId ?? ''] as string[],\n tokens: [],\n },\n isDelivered: true,\n isRead: false,\n type: 'TEXT' as PostTypeEnum,\n parentId: null,\n fromServer: false,\n channel: {\n __typename: 'Channel' as const,\n id: channelId,\n },\n // Required fields that Apollo expects in the cache\n propsConfiguration: {\n __typename: 'MachineConfiguration' as const,\n id: null,\n resource: '' as any,\n contents: null,\n keys: null,\n target: null,\n overrides: null,\n },\n props: {},\n files: {\n __typename: 'FilesInfo' as const,\n data: imageUris.map((uri, index) => ({\n __typename: 'FileInfo' as const,\n id: `temp-file-${index}-${postId}`,\n url: uri,\n name: `image-${index}.jpg`,\n extension: 'jpg',\n mimeType: 'image/jpeg',\n size: 0,\n height: 300,\n width: 300,\n channel: null,\n post: null,\n refType: FileRefType.Post,\n })),\n totalCount: imageUris.length,\n },\n replies: {\n __typename: 'Messages' as const,\n data: [],\n totalCount: 0,\n },\n };\n\n // Start background processing without affecting UI\n setTimeout(async () => {\n try {\n // Format images for upload\n const imagesToUpload = currentImages.map((img) => ({\n ...img,\n uri: img.uri || img.url,\n type: img.mimeType || 'image/jpeg',\n name: img.fileName || `image_${Date.now()}.jpg`,\n }));\n\n // Upload the files in background - pass the array of images\n const uploadResponse = await startUpload({\n file: imagesToUpload,\n saveUploadedFile: {\n variables: { postId },\n },\n createUploadLink: {\n variables: { postId },\n },\n });\n\n // If upload fails, show error notification\n if (uploadResponse?.error) {\n console.error('Upload error:', uploadResponse.error);\n\n // Format error message\n let errorMsg = 'Failed to upload image. Please try again.';\n if (__DEV__ && uploadResponse.error) {\n // In development, show actual error\n errorMsg =\n typeof uploadResponse.error === 'string'\n ? uploadResponse.error\n : uploadResponse.error.message || errorMsg;\n }\n\n // Show error notification\n setNotificationType('error');\n setErrorMessage(errorMsg);\n\n // Store error in state\n setUploadErrors((prev) => ({ ...prev, [postId]: errorMsg }));\n\n // Remove the message from UI\n removeMessageFromUI(postId);\n setIsUploadingImage(false);\n setLoading(false);\n return;\n }\n\n // Get uploaded file info\n const uploadedFiles = uploadResponse.data as unknown as IFileInfo[];\n const fileIds = uploadedFiles?.map((f: any) => f.id) ?? null;\n\n // Send the message with uploaded files\n if (fileIds?.length > 0) {\n await sendMsg({\n variables: {\n postId,\n channelId,\n content: currentMessageText || ' ',\n files: fileIds,\n notificationParams: notificationData,\n },\n optimisticResponse: {\n __typename: 'Mutation',\n sendMessage: optimisticMessage,\n },\n update: (cache, { data }) => {\n if (!data?.sendMessage) {\n setIsUploadingImage(false);\n setLoading(false);\n return;\n }\n try {\n // Let Apollo type policies handle the cache update\n cache.writeQuery({\n query: MESSAGES_DOCUMENT,\n variables: {\n channelId: channelId?.toString(),\n parentId: null,\n limit: MESSAGES_PER_PAGE,\n skip: 0,\n },\n data: {\n messages: {\n __typename: 'Messages',\n messagesRefId: channelId,\n data: [data.sendMessage],\n totalCount: 1, // Just one message\n },\n },\n });\n\n // Check if the server response has the actual image\n const serverMessage = data.sendMessage;\n const hasServerImage = serverMessage?.files?.data?.some((file) => file.url);\n\n if (hasServerImage) {\n // Now that server has the image, we can remove client version\n removeMessageFromUI(postId);\n }\n\n setIsUploadingImage(false);\n setLoading(false);\n } catch (error) {\n console.error('Cache update error:', error);\n\n // Format error for notification\n let errorMsg = 'Failed to update message.';\n if (__DEV__ && error) {\n // In development, show actual error\n errorMsg = error.message\n ? error.message.replace('[ApolloError: ', '').replace(']', '')\n : 'Cache update failed';\n }\n\n setNotificationType('error');\n setErrorMessage(errorMsg);\n setIsUploadingImage(false);\n setLoading(false);\n }\n },\n });\n } else {\n setIsUploadingImage(false);\n setLoading(false);\n }\n } catch (error) {\n console.error('Background process error:', error);\n\n // Format error for notification\n let errorMsg = 'Failed to send image. Please try again.';\n if (__DEV__ && error) {\n // In development, show actual error\n errorMsg = error.message\n ? error.message.replace('[ApolloError: ', '').replace(']', '')\n : 'Background process failed';\n }\n\n // Show error notification\n setNotificationType('error');\n setErrorMessage(errorMsg);\n removeMessageFromUI(postId);\n setIsUploadingImage(false);\n setLoading(false);\n }\n }, 0);\n\n // Return success immediately - UI already updated\n return { success: true };\n } catch (error) {\n console.error('Send message error:', error);\n\n // Format error for notification\n let errorMsg = 'Failed to process image. Please try again.';\n if (__DEV__ && error) {\n // In development, show actual error\n errorMsg = error.message\n ? error.message.replace('[ApolloError: ', '').replace(']', '')\n : 'Image processing failed';\n }\n\n // Show error notification\n setNotificationType('error');\n setErrorMessage(errorMsg);\n setError(String(error));\n setIsUploadingImage(false);\n setLoading(false);\n return { error: String(error) };\n }\n }, [channelId, messageText, images, selectedImage, startUpload, sendMsg, auth, removeMessageFromUI]);\n\n // Create direct channel implementation\n const createDirectChannelImpl = useCallback(async () => {\n try {\n setLoading(true);\n if (\n !rest?.isCreateNewChannel ||\n rest?.newChannelData?.type !== RoomType?.Direct ||\n !rest?.newChannelData?.userIds?.length\n ) {\n setLoading(false);\n setNotificationType('error');\n setErrorMessage(__DEV__ ? 'Invalid channel data' : 'Unable to create conversation');\n return { error: 'Invalid channel data' };\n }\n\n // Store current message text\n const currentMessageText = messageText;\n // Clear message text immediately for better UX\n setMessageText('');\n\n const response = await addDirectChannel({\n variables: {\n receiver: [...(rest?.newChannelData?.userIds ?? [])],\n displayName: 'DIRECT CHANNEL',\n },\n });\n\n if (!response?.data?.createDirectChannel?.id) {\n setLoading(false);\n setNotificationType('error');\n setErrorMessage(__DEV__ ? 'Failed to create channel' : 'Unable to create conversation');\n return { error: 'Failed to create channel' };\n }\n\n const newChannelId = response.data.createDirectChannel.id;\n setChannelId(newChannelId);\n\n const notificationData: IExpoNotificationData = {\n url: config.INBOX_MESSEGE_PATH,\n params: { channelId: newChannelId, hideTabBar: true },\n screen: 'DialogMessages',\n other: { sound: Platform.OS === 'android' ? undefined : 'default' },\n };\n\n // Create unique message ID for optimistic response\n const messageId = objectId();\n\n // Create minimal optimistic message\n const optimisticMessage = {\n __typename: 'Post' as const,\n id: messageId,\n message: currentMessageText,\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n author: {\n __typename: 'UserAccount' as const,\n id: auth?.id,\n picture: auth?.picture || '',\n givenName: auth?.givenName || '',\n familyName: auth?.familyName || '',\n email: auth?.email || '',\n username: auth?.username || '',\n alias: [] as string[],\n tokens: auth?.token ? [...auth?.token] : [],\n },\n isDelivered: true,\n isRead: false,\n type: 'TEXT' as PostTypeEnum,\n parentId: null,\n fromServer: false,\n channel: {\n __typename: 'Channel' as const,\n id: newChannelId,\n },\n // Required fields that Apollo expects in the cache\n propsConfiguration: {\n __typename: 'MachineConfiguration' as const,\n id: null,\n resource: '' as any,\n contents: null,\n keys: null,\n target: null,\n overrides: null,\n },\n props: {},\n files: {\n __typename: 'FilesInfo' as const,\n data: [],\n totalCount: 0,\n },\n replies: {\n __typename: 'Messages' as const,\n data: [],\n totalCount: 0,\n },\n };\n\n // Send message in the new channel\n await sendMsg({\n variables: {\n channelId: newChannelId,\n content: currentMessageText,\n notificationParams: notificationData,\n },\n optimisticResponse: {\n __typename: 'Mutation',\n sendMessage: optimisticMessage,\n },\n update: (cache, { data }) => {\n if (!data?.sendMessage) return;\n\n try {\n // For a new channel, simply write the initial message to the cache\n // The type policies will handle it properly\n cache.writeQuery({\n query: MESSAGES_DOCUMENT,\n variables: {\n channelId: newChannelId,\n parentId: null,\n limit: MESSAGES_PER_PAGE,\n skip: 0,\n },\n data: {\n messages: {\n __typename: 'Messages',\n messagesRefId: newChannelId,\n data: [data.sendMessage],\n totalCount: 1,\n },\n },\n });\n } catch (error) {\n console.error('Error updating cache:', error);\n\n // Format error for notification\n let errorMsg = 'Failed to update message cache';\n if (__DEV__ && error) {\n // In development, show actual error\n errorMsg = error.message\n ? error.message.replace('[ApolloError: ', '').replace(']', '')\n : 'Cache update failed';\n }\n\n setNotificationType('error');\n setErrorMessage(errorMsg);\n }\n },\n });\n\n setLoading(false);\n return { channelId: newChannelId };\n } catch (error) {\n setLoading(false);\n\n // Format error for notification\n let errorMsg = 'Failed to create conversation';\n if (__DEV__ && error) {\n // In development, show actual error\n errorMsg = error.message\n ? error.message.replace('[ApolloError: ', '').replace(']', '')\n : 'Channel creation failed';\n }\n\n setNotificationType('error');\n setErrorMessage(errorMsg);\n setError(String(error));\n return { error: String(error) };\n }\n }, [rest, messageText, addDirectChannel, sendMsg, auth]);\n\n // Optimize onFetchOld by adding debounce logic\n const onFetchOld = useCallback(() => {\n // Prevent multiple rapid calls\n if (fetchOldDebounceRef.current) return;\n\n // Check if we need to fetch more messages\n if (totalCount > channelMessages.length && !loadingOldMessages) {\n // Set debounce\n fetchOldDebounceRef.current = true;\n\n // Fetch more messages\n fetchMoreMessagesImpl();\n\n // Clear debounce after a timeout\n setTimeout(() => {\n fetchOldDebounceRef.current = false;\n }, 1000);\n }\n }, [totalCount, channelMessages.length, loadingOldMessages, fetchMoreMessagesImpl]);\n\n const isCloseToTop = ({ layoutMeasurement, contentOffset, contentSize }) => {\n const paddingToTop = 60;\n return contentSize.height - layoutMeasurement.height - paddingToTop <= contentOffset.y;\n };\n\n // Modify the messageList function to ensure local images take precedence\n const messageList = useMemo(() => {\n // Get pending upload messages as array\n const pendingMessages = Object.values(pendingUploads);\n\n // If we have no server messages, just return pending messages\n if (!channelMessages || channelMessages.length === 0) {\n return pendingMessages;\n }\n\n // Filter unique messages\n const filteredMessages = uniqBy(channelMessages, ({ id }) => id);\n\n // Process server messages - skip any that have client versions\n const serverMessages = orderBy(filteredMessages, ['createdAt'], ['desc'])\n .map((msg) => {\n const date = new Date(msg.createdAt);\n\n // Skip messages that are in pendingUploads - client version takes precedence\n if (pendingUploads[msg.id]) {\n return null;\n }\n\n // Extract image URLs from files data\n let imageUrls: string[] = [];\n let primaryImageUrl = null;\n\n if (msg.files && typeof msg.files === 'object') {\n const filesData = msg.files.data || (Array.isArray(msg.files) ? msg.files : null);\n\n if (filesData && filesData.length > 0) {\n // Collect all image URLs\n imageUrls = filesData\n .filter((fileData) => fileData && typeof fileData === 'object' && fileData.url)\n .map((fileData) => fileData.url);\n\n // Set primary image for GiftedChat compatibility\n if (imageUrls.length > 0) {\n primaryImageUrl = imageUrls[0];\n }\n }\n }\n\n // Create formatted message\n return {\n _id: msg.id,\n text: msg.message,\n createdAt: date,\n user: {\n _id: msg.author?.id || '',\n name: `${msg.author?.givenName || ''} ${msg.author?.familyName || ''}`,\n avatar: msg.author?.picture || '',\n },\n image: primaryImageUrl,\n images: imageUrls, // Store all images for custom rendering\n sent: msg?.isDelivered,\n received: msg?.isRead,\n type: msg?.type,\n propsConfiguration: msg?.propsConfiguration,\n replies: msg?.replies ?? [],\n isShowThreadMessage,\n };\n })\n .filter(Boolean); // Remove null entries\n\n // Pending messages take precedence (they have local images)\n return [...pendingMessages, ...serverMessages];\n }, [channelMessages, pendingUploads, isShowThreadMessage]);\n\n // Render the send button\n const renderSend = useCallback(\n (props) => {\n // If action sheet is visible, don't show the default send button\n // if (isActionSheetVisible) {\n // return null;\n // }\n\n // Enable the send button if there's text OR we have images\n const hasContent = !!props.text || images?.length > 0;\n const canSend = (channelId || rest?.isCreateNewChannel) && hasContent;\n // const isDisabled = !canSend || isUploadingImage || loading;\n const isDisabled = !canSend;\n\n return (\n <Send\n {...props}\n //disabled={isDisabled}\n containerStyle={{\n justifyContent: 'center',\n alignItems: 'center',\n height: 40,\n width: 44,\n marginRight: 4,\n marginBottom: 0,\n marginLeft: 4,\n }}\n >\n <View style={{ padding: 4 }}>\n <MaterialCommunityIcons\n name=\"send-circle\"\n size={32}\n color={isDisabled ? colors.gray[400] : colors.blue[500]}\n />\n </View>\n </Send>\n );\n },\n [channelId, images, rest?.isCreateNewChannel, isUploadingImage, loading, isActionSheetVisible],\n );\n\n // Add new handler to open the action sheet\n const openExpandableInput = useCallback(() => {\n console.log('Opening action sheet');\n setActionSheetVisible(true);\n }, []);\n\n // Add a debug useEffect to log when visibility changes\n useEffect(() => {\n console.log('Action sheet visibility:', isActionSheetVisible);\n // Set appropriate bottom margin when action sheet visibility changes\n if (isActionSheetVisible) {\n setBottomMargin(0);\n }\n }, [isActionSheetVisible]);\n\n // Handle removing image from action sheet\n const handleRemoveImage = useCallback(\n (index: number) => {\n const newImages = [...images];\n newImages.splice(index, 1);\n setImages(newImages);\n if (newImages.length === 0) {\n setSelectedImage('');\n if (textInputRef.current && typeof textInputRef.current.focus === 'function') {\n textInputRef.current.focus();\n }\n }\n },\n [images],\n );\n\n // Add a new state to track when the action sheet updates text\n const [textUpdatedInActionSheet, setTextUpdatedInActionSheet] = useState(false);\n\n // Handle when the action sheet is closed\n const handleActionSheetClose = useCallback(() => {\n // Mark that we closed the sheet with potential text update\n setTextUpdatedInActionSheet(true);\n setActionSheetVisible(false);\n // Reset bottom margin to 0 when closing the expandable input\n setBottomMargin(0);\n }, []);\n\n // Handle sending from action sheet\n const handleActionSheetSend = () => {\n if (messageText.trim() || images.length > 0) {\n // Set uploading state to show spinner\n setIsUploadingImage(true);\n\n // Create a message object in the format GiftedChat expects\n const messages = [\n {\n text: messageText,\n user: {\n _id: auth?.id || '',\n },\n createdAt: new Date(),\n },\n ];\n\n // Use the existing handleSend function\n handleSend(messages);\n\n // Close the action sheet\n setActionSheetVisible(false);\n }\n };\n\n // Update this useEffect to more reliably handle text syncing when action sheet closes\n useEffect(() => {\n // If action sheet just closed, ensure main input gets updated text\n if (!isActionSheetVisible && textUpdatedInActionSheet) {\n console.log('Action sheet closed with text:', messageText);\n // Reset the flag\n setTextUpdatedInActionSheet(false);\n\n // Force GiftedChat to recognize the text change by creating a new state update\n const currentText = messageText;\n setMessageText('');\n setTimeout(() => {\n setMessageText(currentText);\n }, 50);\n }\n }, [isActionSheetVisible, textUpdatedInActionSheet]);\n\n // Take a screenshot of the action sheet for debugging\n useEffect(() => {\n if (isActionSheetVisible && Platform.OS === 'ios') {\n console.log('Action sheet is visible, should show the input and options');\n }\n }, [isActionSheetVisible]);\n\n // Handle send for messages\n const handleSend = useCallback(\n async (messages) => {\n // Extract message text from GiftedChat messages array\n const newMessageText = messages && messages.length > 0 ? messages[0]?.text || ' ' : ' ';\n\n // Check if we can send a message (channel exists or we're creating one)\n if (!channelId && !rest?.isCreateNewChannel) {\n return;\n }\n\n // Allow sending if we have text OR images (image-only messages are valid)\n const hasText = !!newMessageText && newMessageText !== ' ';\n const hasImages = images && images.length > 0;\n\n if (!hasText && !hasImages) {\n return;\n }\n\n // Update the message text state - now handled in send functions for better UX\n setMessageText(newMessageText);\n\n // Set uploading state to show spinner\n // setIsUploadingImage(true);\n // setLoading(true);\n\n // Handle direct channel creation if needed\n if (rest?.isCreateNewChannel && !channelId) {\n if (rest?.newChannelData?.type === RoomType?.Direct) {\n await createDirectChannelImpl();\n }\n setIsUploadingImage(false);\n setLoading(false);\n return;\n }\n\n // Send message with or without image based on state\n if (hasImages) {\n await sendMessageWithFileImpl();\n } else {\n await sendMessageImpl();\n }\n\n setIsUploadingImage(false);\n setLoading(false);\n\n // Focus the input field after sending\n setTimeout(() => {\n if (textInputRef.current) {\n textInputRef.current.focus();\n }\n }, 100);\n },\n [\n channelId,\n images,\n rest?.isCreateNewChannel,\n rest?.newChannelData?.type,\n createDirectChannelImpl,\n sendMessageWithFileImpl,\n sendMessageImpl,\n ],\n );\n\n // Render message text with customizations for alerts and replies\n const renderMessageText = useCallback(\n (props: any) => {\n const { currentMessage } = props;\n const lastReply: any =\n currentMessage?.replies?.data?.length > 0 ? currentMessage?.replies?.data?.[0] : null;\n\n // Do not render anything if the message text is empty or only whitespace\n if (!currentMessage?.text || currentMessage.text.trim() === '') {\n return null;\n }\n\n if (currentMessage.type === 'ALERT') {\n const attachment = currentMessage?.propsConfiguration?.contents?.attachment;\n let action: string = '';\n let actionId: any = '';\n let params: any = {};\n\n if (attachment?.callToAction?.extraParams) {\n const extraParams: any = attachment?.callToAction?.extraParams;\n const route: any = extraParams?.route ?? null;\n let path: any = null;\n let param: any = null;\n if (role && role == PreDefinedRole.Guest) {\n path = route?.guest?.name ? route?.guest?.name ?? null : null;\n param = route?.guest?.params ? route?.guest?.params ?? null : null;\n } else if (role && role == PreDefinedRole.Owner) {\n path = route?.host?.name ? route?.host?.name ?? null : null;\n param = route?.host?.params ? route?.host?.params ?? null : null;\n } else {\n path = route?.host?.name ? route?.host?.name ?? null : null;\n param = route?.host?.params ? route?.host?.params ?? null : null;\n }\n\n action = path;\n params = { ...param };\n } else if (attachment?.callToAction?.link) {\n action = CALL_TO_ACTION_PATH;\n actionId = attachment?.callToAction?.link.split('/').pop();\n params = { reservationId: actionId };\n }\n\n return (\n <>\n {attachment?.callToAction && action ? (\n <Box className={`bg-[${CALL_TO_ACTION_BOX_BGCOLOR}] rounded-[15] pb-2`}>\n <MessageText\n {...props}\n containerStyle={{\n left: { paddingLeft: 0, marginLeft: 0 },\n }}\n textStyle={{\n left: { marginLeft: 0 },\n }}\n />\n <Button\n variant={'outline'}\n size={'sm'}\n className={`border-[${CALL_TO_ACTION_BUTTON_BORDERCOLOR}] my-2 rounded-full `}\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 </Box>\n ) : (\n <TouchableHighlight\n underlayColor={'#c0c0c0'}\n style={{ width: '100%' }}\n onPress={() => {\n if (currentMessage?.isShowThreadMessage)\n navigation.navigate(config.THREAD_MESSEGE_PATH, {\n channelId: channelId,\n title: 'Message',\n postParentId: currentMessage?._id,\n isPostParentIdThread: true,\n });\n }}\n >\n <>\n <MessageText {...props} textStyle={{ left: { marginLeft: 5 } }} />\n {currentMessage?.replies?.data?.length > 0 && (\n <HStack space={'sm'} className=\"px-1 items-center\">\n <HStack>\n {currentMessage?.replies?.data\n ?.filter(\n (v: any, i: any, a: any) =>\n a.findIndex((t: any) => t?.author?.id === v?.author?.id) ===\n i,\n )\n ?.slice(0, 2)\n ?.reverse()\n ?.map((p: any, i: Number) => (\n <Avatar\n key={'conversations-view-key-' + i}\n size={'sm'}\n className=\"bg-transparent\"\n >\n <AvatarFallbackText>\n {startCase(p?.author?.username?.charAt(0))}\n </AvatarFallbackText>\n <AvatarImage\n alt=\"user image\"\n style={{\n borderRadius: 6,\n borderWidth: 2,\n borderColor: '#fff',\n }}\n source={{\n uri: p?.author?.picture,\n }}\n />\n </Avatar>\n ))}\n </HStack>\n <Text style={{ fontSize: 12 }} className=\"font-bold color-blue-800\">\n {currentMessage?.replies?.totalCount}{' '}\n {currentMessage?.replies?.totalCount == 1 ? 'reply' : 'replies'}\n </Text>\n <Text style={{ fontSize: 12 }} className=\"font-bold color-gray-500\">\n {lastReply ? createdAtText(lastReply?.createdAt) : ''}\n </Text>\n </HStack>\n )}\n </>\n </TouchableHighlight>\n )}\n </>\n );\n } else {\n return (\n <TouchableHighlight\n underlayColor={'#c0c0c0'}\n style={{ width: '100%' }}\n onPress={() => {\n if (currentMessage?.isShowThreadMessage)\n navigation.navigate(config.THREAD_MESSEGE_PATH, {\n channelId: channelId,\n title: 'Message',\n postParentId: currentMessage?._id,\n isPostParentIdThread: true,\n });\n }}\n >\n <>\n <MessageText {...props} textStyle={{ left: { marginLeft: 5 } }} />\n {currentMessage?.replies?.data?.length > 0 && (\n <HStack space={'sm'} className=\"px-1 items-center\">\n <HStack>\n {currentMessage?.replies?.data\n ?.filter(\n (v: any, i: any, a: any) =>\n a.findIndex((t: any) => t?.author?.id === v?.author?.id) === i,\n )\n ?.slice(0, 2)\n ?.reverse()\n ?.map((p: any, i: Number) => (\n <Avatar\n key={'conversation-replies-key-' + i}\n className=\"bg-transparent\"\n size={'sm'}\n >\n <AvatarFallbackText>\n {startCase(p?.author?.username?.charAt(0))}\n </AvatarFallbackText>\n <AvatarImage\n alt=\"user image\"\n style={{ borderRadius: 6, borderWidth: 2, borderColor: '#fff' }}\n source={{\n uri: p?.author?.picture,\n }}\n />\n </Avatar>\n ))}\n </HStack>\n <Text style={{ fontSize: 12 }} className=\"font-bold color-blue-800\">\n {currentMessage?.replies?.totalCount}{' '}\n {currentMessage?.replies?.totalCount == 1 ? 'reply' : 'replies'}\n </Text>\n <Text style={{ fontSize: 12 }} className=\"font-bold color-gray-500\">\n {lastReply ? createdAtText(lastReply?.createdAt) : ''}\n </Text>\n </HStack>\n )}\n </>\n </TouchableHighlight>\n );\n }\n },\n [navigation, channelId, role],\n );\n\n // Render action buttons (including image upload)\n const renderActions = (props) => {\n return (\n <Actions\n {...props}\n // options={{\n // ['Choose from Library']: onSelectImages,\n // ['Cancel']: () => {}, // Add this option to make the sheet dismissible\n // }}\n optionTintColor=\"#000000\"\n cancelButtonIndex={1} // Set the Cancel option as the cancel button\n icon={() => (\n <TouchableOpacity\n onPress={onSelectImages}\n style={{\n width: 25,\n height: 25,\n borderRadius: 20,\n backgroundColor: '#f5f5f5',\n alignItems: 'center',\n justifyContent: 'center',\n marginRight: 8,\n }}\n >\n <MaterialIcons name=\"add\" size={20} color=\"#888\" />\n </TouchableOpacity>\n // <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: 20,\n marginBottom: 0,\n }}\n />\n );\n };\n\n // Create a more visible and reliable image preview with cancel button\n const renderAccessory = useCallback(() => {\n if (!images.length) return null;\n return (\n <Box style={{ position: 'relative', height: 70, backgroundColor: 'transparent', justifyContent: 'center' }}>\n <ScrollView\n horizontal\n showsHorizontalScrollIndicator={false}\n style={{\n flexDirection: 'row',\n paddingLeft: 15,\n paddingRight: 5,\n }}\n contentContainerStyle={{\n alignItems: 'center',\n height: '100%',\n }}\n >\n {images.map((img, index) => (\n <View\n key={`image-preview-${index}`}\n style={{\n width: 40,\n height: 40,\n marginRight: 15,\n borderRadius: 4,\n backgroundColor: colors.gray[200],\n overflow: 'hidden',\n borderWidth: 1,\n borderColor: '#e0e0e0',\n position: 'relative',\n zIndex: 10,\n }}\n >\n <Image\n source={{ uri: img.uri || img.url }}\n style={{ width: '100%', height: '100%' }}\n alt={`selected image ${index + 1}`}\n />\n {/* Cross button at top right */}\n <TouchableOpacity\n onPress={() => {\n const newImages = [...images];\n newImages.splice(index, 1);\n setImages(newImages);\n if (newImages.length === 0) {\n setSelectedImage('');\n if (textInputRef.current && typeof textInputRef.current.focus === 'function') {\n textInputRef.current.focus();\n }\n }\n }}\n style={{\n position: 'absolute',\n top: -1,\n right: -1,\n backgroundColor: 'rgba(0,0,0,0.6)',\n borderRadius: 12,\n width: 20,\n height: 20,\n alignItems: 'center',\n justifyContent: 'center',\n zIndex: 9999,\n }}\n >\n <Ionicons name=\"close\" size={16} color=\"white\" />\n </TouchableOpacity>\n </View>\n ))}\n </ScrollView>\n </Box>\n );\n }, [images]);\n\n const setImageViewerObject = (obj: any, v: boolean) => {\n setImageObject(obj);\n setImageViewer(v);\n };\n\n const modalContent = React.useMemo(() => {\n if (!imageObject || !imageObject.image) return null;\n const { image, _id } = imageObject;\n\n return (\n <CachedImage\n style={{ width: '100%', height: '100%' }}\n resizeMode={'cover'}\n cacheKey={`${_id}-modal-imageKey`}\n source={{\n uri: image,\n expiresIn: 86400,\n }}\n alt={'image'}\n />\n );\n }, [imageObject]);\n\n // Update the message rendering to show images instantly without loaders\n const renderMessage = useCallback(\n (props: any) => {\n // For all messages, use the SlackMessage component directly\n return (\n <SlackMessage {...props} isShowImageViewer={isShowImageViewer} setImageViewer={setImageViewerObject} />\n );\n },\n [isShowImageViewer],\n );\n\n let onScroll = false;\n\n // Optimize onMomentumScrollBegin for better scroll performance\n const onMomentumScrollBegin = async ({ nativeEvent }: any) => {\n // Set scroll state\n onScroll = true;\n\n // Use the debounced fetch function to prevent excessive calls\n if (isCloseToTop(nativeEvent)) {\n onFetchOld();\n }\n };\n\n const onEndReached = () => {\n if (!onScroll) return;\n onScroll = false;\n };\n\n // Add a loader for when more messages are being loaded\n const renderLoadEarlier = useCallback(() => {\n return loadingOldMessages ? (\n <View\n style={{\n padding: 10,\n backgroundColor: 'rgba(255,255,255,0.8)',\n borderRadius: 10,\n marginTop: 10,\n }}\n >\n <Spinner size=\"small\" color=\"#3b82f6\" />\n </View>\n ) : null;\n }, [loadingOldMessages]);\n\n // Add state for tracking input toolbar height\n const [inputToolbarHeight, setInputToolbarHeight] = useState(30);\n\n // Update renderInputToolbar to use a compact, single-row style for the input area, ensuring it does not expand to fill the screen. The plus button, text input, and send button should be in a rounded row, with selected images in a row below. Use minHeight/maxHeight and proper padding/margin to keep the toolbar compact.\n const renderInputToolbar = useCallback(\n (props) => (\n <View style={{ backgroundColor: '#fff', paddingBottom: 4, paddingTop: 4 }}>\n <View\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n minHeight: 44,\n maxHeight: 56,\n backgroundColor: '#fff',\n borderRadius: 22,\n marginHorizontal: 8,\n paddingHorizontal: 8,\n borderTopWidth: 1,\n borderTopColor: '#e0e0e0',\n }}\n >\n <TouchableOpacity\n onPress={onSelectImages}\n style={{\n width: 32,\n height: 32,\n borderRadius: 16,\n backgroundColor: '#fff',\n alignItems: 'center',\n justifyContent: 'center',\n marginRight: 8,\n }}\n >\n <MaterialIcons name=\"add\" size={24} color=\"#888\" />\n </TouchableOpacity>\n <TextInput\n ref={textInputRef}\n style={{\n flex: 1,\n //minHeight: 36,\n maxHeight: 44,\n backgroundColor: 'transparent',\n color: '#444',\n paddingHorizontal: 8,\n paddingVertical: 0,\n alignSelf: 'center',\n textAlignVertical: 'center',\n }}\n placeholder=\"Jot something down\"\n placeholderTextColor={colors.gray[400]}\n multiline\n value={messageText}\n onChangeText={setMessageText}\n />\n <TouchableOpacity\n onPress={() => handleSend([{ text: messageText }])}\n // disabled={(!messageText.trim() && images.length === 0) || isUploadingImage || loading}\n disabled={false}\n style={{\n marginLeft: 8,\n // opacity: (!messageText.trim() && images.length === 0) || isUploadingImage || loading ? 0.5 : 1,\n opacity: !messageText.trim() && images.length === 0 ? 0.5 : 1,\n }}\n >\n <MaterialCommunityIcons\n name=\"send-circle\"\n size={32}\n color={!messageText.trim() && images.length === 0 ? colors.gray[400] : colors.blue[500]}\n // color={\n // (!messageText.trim() && images.length === 0) || isUploadingImage || loading\n // ? colors.gray[400]\n // : colors.blue[500]\n // }\n />\n </TouchableOpacity>\n </View>\n {/* Selected Images Row */}\n {images && images.length > 0 && (\n <ScrollView\n horizontal\n showsHorizontalScrollIndicator={false}\n style={{ marginTop: 4, marginLeft: 8 }}\n >\n {images.map((img, index) => (\n <View\n key={`image-preview-${index}`}\n style={{\n width: 48,\n height: 48,\n marginRight: 8,\n borderRadius: 6,\n overflow: 'hidden',\n position: 'relative',\n backgroundColor: colors.gray[200],\n }}\n >\n <Image\n source={{ uri: img.uri || img.url }}\n style={{ width: '100%', height: '100%' }}\n alt={`selected image ${index + 1}`}\n />\n <TouchableOpacity\n onPress={() => {\n handleRemoveImage(index);\n // handleRemoveImage already focuses input if needed\n }}\n style={{\n position: 'absolute',\n top: 2,\n right: 2,\n backgroundColor: 'rgba(0,0,0,0.6)',\n borderRadius: 10,\n width: 20,\n height: 20,\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n <Ionicons name=\"close\" size={14} color=\"white\" />\n </TouchableOpacity>\n </View>\n ))}\n </ScrollView>\n )}\n </View>\n ),\n [onSelectImages, messageText, images, isUploadingImage, loading, handleSend, handleRemoveImage],\n );\n\n // Create a memoized ImageViewerModal component\n const imageViewerModal = useMemo(\n () => (\n <ImageViewerModal isVisible={isShowImageViewer} setVisible={setImageViewer} modalContent={modalContent} />\n ),\n [isShowImageViewer, modalContent],\n );\n\n // Create a memoized renderChatFooter function\n const renderChatFooter = useCallback(() => {\n return (\n <>\n {imageViewerModal}\n <SubscriptionHandler\n subscribeToMore={subscribe}\n document={CHAT_MESSAGE_ADDED}\n variables={{ channelId: channelId?.toString() }}\n updateQuery={undefined}\n />\n </>\n );\n }, [imageViewerModal, subscribe]);\n\n // Add optimized listViewProps to reduce re-renders and improve list performance\n const listViewProps = useMemo(\n () => ({\n onEndReached: onEndReached,\n onEndReachedThreshold: 0.5,\n onMomentumScrollBegin: onMomentumScrollBegin,\n removeClippedSubviews: true, // Improve performance by unmounting components when not visible\n initialNumToRender: 10, // Reduce initial render amount\n maxToRenderPerBatch: 7, // Reduce number in each render batch\n windowSize: 7, // Reduce the window size\n updateCellsBatchingPeriod: 50, // Batch cell updates to improve scrolling\n keyExtractor: (item) => item._id, // Add explicit key extractor\n }),\n [onEndReached, onMomentumScrollBegin],\n );\n\n // Debug helper function to inspect files in messages\n const debugFileData = useCallback((message: any, prefix: string = 'Message') => {\n if (__DEV__) {\n console.log(\n `${prefix} ID: ${message?.id}, ` +\n `Has files object: ${!!message?.files}, ` +\n `Files typename: ${message?.files?.__typename}, ` +\n `Files data exists: ${!!message?.files?.data}, ` +\n `Files count: ${message?.files?.data?.length || 0}`,\n );\n\n if (message?.files?.data && message?.files?.data?.length > 0) {\n const file = message?.files?.data[0];\n console.log(\n `File[0] ID: ${file?.id}, ` +\n `URL: ${file?.url?.substring(0, 30)}..., ` +\n `Name: ${file?.name}, ` +\n `Type: ${file?.mimeType}`,\n );\n }\n }\n }, []);\n\n // Return optimized component with performance improvements\n return (\n <KeyboardAvoidingView\n style={{ flex: 1, justifyContent: 'flex-end' }}\n behavior={Platform.OS === 'ios' ? 'padding' : 'height'}\n keyboardVerticalOffset={Platform.OS === 'ios' ? 64 : 0}\n >\n <View\n style={{\n flex: 1,\n backgroundColor: 'white',\n position: 'relative',\n marginBottom: images.length > 0 ? 5 : bottomMargin,\n }}\n >\n {errorMessage ? (\n <ErrorNotification\n message={errorMessage}\n onClose={() => setErrorMessage('')}\n type={notificationType}\n />\n ) : null}\n\n {messageLoading && <Spinner color={'#3b82f6'} />}\n <GiftedChatInboxComponent\n ref={messageRootListRef}\n errorMessage={errorMessage}\n images={images}\n onSelectImages={onSelectImages}\n onRemoveImage={handleRemoveImage}\n selectedImage={selectedImage}\n setSelectedImage={setSelectedImage}\n isUploadingImage={isUploadingImage}\n loading={loading}\n wrapInSafeArea={true}\n renderLoading={() => <Spinner color={'#3b82f6'} />}\n messages={messageList}\n renderAvatar={null}\n showUserAvatar={false}\n listViewProps={{\n ...listViewProps,\n contentContainerStyle: {\n paddingBottom: inputToolbarHeight,\n },\n }}\n onSend={handleSend}\n text={messageText || ' '}\n onInputTextChanged={(text) => {\n setMessageText(text);\n }}\n renderFooter={() => (isUploadingImage ? <Spinner color={'#3b82f6'} /> : null)}\n scrollToBottom\n user={{\n _id: auth?.id || '',\n }}\n renderSend={renderSend}\n renderMessageText={renderMessageText}\n renderMessage={renderMessage}\n renderChatFooter={renderChatFooter}\n renderLoadEarlier={renderLoadEarlier}\n loadEarlier={totalCount > channelMessages.length}\n isLoadingEarlier={loadingOldMessages}\n placeholder=\"Jot something down\"\n infiniteScroll={true}\n // renderChatEmpty={() => (\n // <><Text>Empty</Text>\n // {!loading && messageList && messageList?.length == 0 && (\n // <Box className=\"p-5\">\n // <Center className=\"mt-6\">\n // <Ionicons name=\"chatbubbles\" size={30} />\n // <Text>You don't have any message yet!</Text>\n // </Center>\n // </Box>\n // )}\n // </>\n // )}\n />\n\n {/* <GiftedChat\n ref={messageRootListRef}\n wrapInSafeArea={true}\n renderLoading={() => <Spinner color={'#3b82f6'} />}\n messages={messageList}\n renderAvatar={null}\n showUserAvatar={false}\n listViewProps={{\n ...listViewProps,\n contentContainerStyle: {\n paddingBottom: inputToolbarHeight,\n },\n }}\n onSend={handleSend}\n text={messageText || ' '}\n onInputTextChanged={(text) => {\n setMessageText(text);\n }}\n renderFooter={() => (isUploadingImage ? <Spinner color={'#3b82f6'} /> : null)}\n scrollToBottom\n user={{\n _id: auth?.id || '',\n }}\n isTyping={false}\n alwaysShowSend={true}\n renderSend={renderSend}\n renderMessageText={renderMessageText}\n renderInputToolbar={renderInputToolbar}\n // renderComposer={renderComposer}\n // minInputToolbarHeight={isActionSheetVisible ? 0 : 56}\n minInputToolbarHeight={inputToolbarHeight}\n renderActions={null}\n renderMessage={renderMessage}\n renderChatFooter={renderChatFooter}\n renderLoadEarlier={renderLoadEarlier}\n loadEarlier={totalCount > channelMessages.length}\n isLoadingEarlier={loadingOldMessages}\n bottomOffset={0}\n isKeyboardInternallyHandled={false}\n textInputProps={{\n multiline: true,\n returnKeyType: 'default',\n enablesReturnKeyAutomatically: true,\n placeholderTextColor: colors.gray[400],\n }}\n minComposerHeight={36}\n maxComposerHeight={100}\n placeholder=\"Jot something down\"\n lightboxProps={{\n underlayColor: 'transparent',\n springConfig: { tension: 90000, friction: 90000 },\n disabled: true,\n }}\n infiniteScroll={false}\n renderAccessory={selectedImage ? renderAccessory : null}\n /> */}\n </View>\n </KeyboardAvoidingView>\n );\n};\n\n// Export with React.memo to prevent unnecessary re-renders\nexport const ConversationView = React.memo(ConversationViewComponent, (prevProps, nextProps) => {\n // Only re-render if these critical props change\n return (\n prevProps.channelId === nextProps.channelId &&\n prevProps.role === nextProps.role &&\n prevProps.isShowThreadMessage === nextProps.isShowThreadMessage\n );\n});\n"],"names":["React","_a","_b","error","_c","_d","data","params","SlackMessage"],"mappings":"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"}
|