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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,10 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [10.0.3-alpha.46](https://github.com/CDEBase/messenger-box/compare/v10.0.3-alpha.45...v10.0.3-alpha.46) (2025-05-19)
7
+
8
+ **Note:** Version bump only for package @messenger-box/platform-mobile
9
+
6
10
  ## [10.0.3-alpha.43](https://github.com/CDEBase/messenger-box/compare/v10.0.3-alpha.42...v10.0.3-alpha.43) (2025-05-15)
7
11
 
8
12
  **Note:** Version bump only for package @messenger-box/platform-mobile
@@ -1,4 +1,4 @@
1
- import React__default,{useState,useRef,useMemo,useEffect,useCallback}from'react';import {useToast,Box,Button,ButtonText,HStack,Avatar,AvatarFallbackText,AvatarImage,Text,ScrollView,Image,Spinner}from'@admin-layout/gluestack-ui-mobile';import {Platform,View,TouchableHighlight,TouchableOpacity,TextInput,KeyboardAvoidingView,Animated}from'react-native';import {useNavigation,useIsFocused,useFocusEffect}from'@react-navigation/native';import {navigationRef}from'@common-stack/client-react';import {useSelector,shallowEqual}from'react-redux';import {uniqBy,orderBy,startCase}from'lodash-es';import*as ImagePicker from'expo-image-picker';import {MaterialCommunityIcons,Ionicons,MaterialIcons}from'@expo/vector-icons';import {Send,MessageText}from'react-native-gifted-chat';import {FileRefType,RoomType,PreDefinedRole}from'common';import {useAddDirectChannel,useSendChannelMessage,useSendExpoNotification,MESSAGES_DOCUMENT,CHAT_MESSAGE_ADDED,useChannelMessagesQuery}from'../../../queries/inboxQueries.js';import {useUploadFilesNative}from'@messenger-box/platform-client';import {objectId}from'@messenger-box/core';import {userSelector}from'@adminide-stack/user-auth0-client';import {isToday,isYesterday,format}from'date-fns';import Message from'../components/SlackMessageContainer/SlackMessage.js';import ImageViewerModal from'../components/SlackMessageContainer/ImageViewerModal.js';import CachedImage from'../components/CachedImage/index.js';import {config}from'../config/config.js';import colors from'tailwindcss/colors';import {SubscriptionHandler}from'../components/SubscriptionHandler.js';import {useInboxMessages}from'../hooks/useInboxMessages.js';import'react-native-reanimated';import'expo-constants';import {GiftedChatInboxComponent}from'../components/GiftedChatInboxComponent.js';var __defProp = Object.defineProperty;
1
+ import React__default,{useState,useRef,useMemo,useEffect,useCallback}from'react';import {useToast,Box,Button,ButtonText,HStack,Avatar,AvatarFallbackText,AvatarImage,Text,ScrollView,Image,Spinner}from'@admin-layout/gluestack-ui-mobile';import {Platform,View,TouchableHighlight,TouchableOpacity,TextInput,KeyboardAvoidingView,Animated}from'react-native';import {useRoute,useNavigation,useIsFocused,useFocusEffect}from'@react-navigation/native';import {navigationRef}from'@common-stack/client-react';import {useSelector,shallowEqual}from'react-redux';import {uniqBy,orderBy,startCase}from'lodash-es';import*as ImagePicker from'expo-image-picker';import {MaterialCommunityIcons,Ionicons,MaterialIcons}from'@expo/vector-icons';import {Send,MessageText}from'react-native-gifted-chat';import {FileRefType,RoomType,PreDefinedRole}from'common';import {useAddDirectChannel,useSendChannelMessage,useSendExpoNotification,MESSAGES_DOCUMENT,CHAT_MESSAGE_ADDED,useChannelMessagesQuery}from'../../../queries/inboxQueries.js';import {useUploadFilesNative}from'@messenger-box/platform-client';import {objectId}from'@messenger-box/core';import {userSelector}from'@adminide-stack/user-auth0-client';import {isToday,isYesterday,format}from'date-fns';import Message from'../components/SlackMessageContainer/SlackMessage.js';import ImageViewerModal from'../components/SlackMessageContainer/ImageViewerModal.js';import CachedImage from'../components/CachedImage/index.js';import {config}from'../config/config.js';import colors from'tailwindcss/colors';import {SubscriptionHandler}from'../components/SubscriptionHandler.js';import {useInboxMessages}from'../hooks/useInboxMessages.js';import'react-native-reanimated';import'expo-constants';import {GiftedChatInboxComponent}from'../components/GiftedChatInboxComponent.js';var __defProp = Object.defineProperty;
2
2
  var __defProps = Object.defineProperties;
3
3
  var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
4
4
  var __getOwnPropSymbols = Object.getOwnPropertySymbols;
@@ -107,6 +107,9 @@ const ConversationViewComponent = (_a) => {
107
107
  "isShowThreadMessage"
108
108
  ]);
109
109
  var _a2, _b2, _c, _d;
110
+ const {
111
+ params
112
+ } = useRoute();
110
113
  const [channelId, setChannelId] = useState(initialChannelId || null);
111
114
  const [messageText, setMessageText] = useState("");
112
115
  const [loading, setLoading] = useState(false);
@@ -146,7 +149,8 @@ const ConversationViewComponent = (_a) => {
146
149
  channelId: channelId == null ? void 0 : channelId.toString(),
147
150
  parentId: null,
148
151
  limit: MESSAGES_PER_PAGE,
149
- skip
152
+ skip,
153
+ orgName: params == null ? void 0 : params.orgName
150
154
  },
151
155
  subscriptionDocument: CHAT_MESSAGE_ADDED,
152
156
  subscriptionVariables: {
@@ -967,7 +971,7 @@ const ConversationViewComponent = (_a) => {
967
971
  const attachment = (_f = (_e = currentMessage == null ? void 0 : currentMessage.propsConfiguration) == null ? void 0 : _e.contents) == null ? void 0 : _f.attachment;
968
972
  let action = "";
969
973
  let actionId = "";
970
- let params = {};
974
+ let params2 = {};
971
975
  if ((_g = attachment == null ? void 0 : attachment.callToAction) == null ? void 0 : _g.extraParams) {
972
976
  const extraParams = (_h = attachment == null ? void 0 : attachment.callToAction) == null ? void 0 : _h.extraParams;
973
977
  const route = (_i = extraParams == null ? void 0 : extraParams.route) != null ? _i : null;
@@ -984,15 +988,15 @@ const ConversationViewComponent = (_a) => {
984
988
  param = ((_y = route == null ? void 0 : route.host) == null ? void 0 : _y.params) ? (_A = (_z = route == null ? void 0 : route.host) == null ? void 0 : _z.params) != null ? _A : null : null;
985
989
  }
986
990
  action = path;
987
- params = __spreadValues({}, param);
991
+ params2 = __spreadValues({}, param);
988
992
  } else if ((_B = attachment == null ? void 0 : attachment.callToAction) == null ? void 0 : _B.link) {
989
993
  action = CALL_TO_ACTION_PATH;
990
994
  actionId = (_C = attachment == null ? void 0 : attachment.callToAction) == null ? void 0 : _C.link.split("/").pop();
991
- params = {
995
+ params2 = {
992
996
  reservationId: actionId
993
997
  };
994
998
  }
995
- return /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, (attachment == null ? void 0 : attachment.callToAction) && action ? /* @__PURE__ */ React__default.createElement(Box, { className: `bg-[${CALL_TO_ACTION_BOX_BGCOLOR}] rounded-[15] pb-2` }, /* @__PURE__ */ React__default.createElement(Button, { variant: "outline", size: "sm", className: `border-[${CALL_TO_ACTION_BUTTON_BORDERCOLOR}]`, onPress: () => action && params && navigation.navigate(action, params) }, /* @__PURE__ */ React__default.createElement(ButtonText, { className: `color-[${CALL_TO_ACTION_TEXT_COLOR}]` }, attachment.callToAction.title)), /* @__PURE__ */ React__default.createElement(MessageText, __spreadProps(__spreadValues({}, props), { textStyle: {
999
+ return /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, (attachment == null ? void 0 : attachment.callToAction) && action ? /* @__PURE__ */ React__default.createElement(Box, { className: `bg-[${CALL_TO_ACTION_BOX_BGCOLOR}] rounded-[15] pb-2` }, /* @__PURE__ */ React__default.createElement(Button, { variant: "outline", size: "sm", className: `border-[${CALL_TO_ACTION_BUTTON_BORDERCOLOR}] mt-2 rounded-full `, onPress: () => action && params2 && navigation.navigate(action, params2) }, /* @__PURE__ */ React__default.createElement(ButtonText, { className: `color-[${CALL_TO_ACTION_TEXT_COLOR}]` }, attachment.callToAction.title)), /* @__PURE__ */ React__default.createElement(MessageText, __spreadProps(__spreadValues({}, props), { textStyle: {
996
1000
  left: {
997
1001
  marginLeft: 5,
998
1002
  color: CALL_TO_ACTION_TEXT_COLOR,
@@ -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 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 } 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 [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 },\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 resource: '' as any,\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 resource: '' as any,\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 resource: '' as any,\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 <Button\n variant={'outline'}\n size={'sm'}\n className={`border-[${CALL_TO_ACTION_BUTTON_BORDERCOLOR}]`}\n onPress={() => action && params && navigation.navigate(action, params)}\n >\n <ButtonText className={`color-[${CALL_TO_ACTION_TEXT_COLOR}]`}>\n {attachment.callToAction.title}\n </ButtonText>\n </Button>\n <MessageText\n {...props}\n textStyle={{\n left: { marginLeft: 5, color: CALL_TO_ACTION_TEXT_COLOR, paddingHorizontal: 2 },\n }}\n />\n </Box>\n ) : (\n <TouchableHighlight\n underlayColor={'#c0c0c0'}\n style={{ width: '100%' }}\n onPress={() => {\n if (currentMessage?.isShowThreadMessage)\n navigation.navigate(config.THREAD_MESSEGE_PATH, {\n channelId: channelId,\n title: 'Message',\n postParentId: currentMessage?._id,\n isPostParentIdThread: true,\n });\n }}\n >\n <>\n <MessageText {...props} textStyle={{ left: { marginLeft: 5 } }} />\n {currentMessage?.replies?.data?.length > 0 && (\n <HStack space={'sm'} className=\"px-1 items-center\">\n <HStack>\n {currentMessage?.replies?.data\n ?.filter(\n (v: any, i: any, a: any) =>\n a.findIndex((t: any) => t?.author?.id === v?.author?.id) ===\n i,\n )\n ?.slice(0, 2)\n ?.reverse()\n ?.map((p: any, i: Number) => (\n <Avatar\n key={'conversations-view-key-' + i}\n size={'sm'}\n className=\"bg-transparent\"\n >\n <AvatarFallbackText>\n {startCase(p?.author?.username?.charAt(0))}\n </AvatarFallbackText>\n <AvatarImage\n alt=\"user image\"\n style={{\n borderRadius: 6,\n borderWidth: 2,\n borderColor: '#fff',\n }}\n source={{\n uri: p?.author?.picture,\n }}\n />\n </Avatar>\n ))}\n </HStack>\n <Text style={{ fontSize: 12 }} className=\"font-bold color-blue-800\">\n {currentMessage?.replies?.totalCount}{' '}\n {currentMessage?.replies?.totalCount == 1 ? 'reply' : 'replies'}\n </Text>\n <Text style={{ fontSize: 12 }} className=\"font-bold color-gray-500\">\n {lastReply ? createdAtText(lastReply?.createdAt) : ''}\n </Text>\n </HStack>\n )}\n </>\n </TouchableHighlight>\n )}\n </>\n );\n } else {\n return (\n <TouchableHighlight\n underlayColor={'#c0c0c0'}\n style={{ width: '100%' }}\n onPress={() => {\n if (currentMessage?.isShowThreadMessage)\n navigation.navigate(config.THREAD_MESSEGE_PATH, {\n channelId: channelId,\n title: 'Message',\n postParentId: currentMessage?._id,\n isPostParentIdThread: true,\n });\n }}\n >\n <>\n <MessageText {...props} textStyle={{ left: { marginLeft: 5 } }} />\n {currentMessage?.replies?.data?.length > 0 && (\n <HStack space={'sm'} className=\"px-1 items-center\">\n <HStack>\n {currentMessage?.replies?.data\n ?.filter(\n (v: any, i: any, a: any) =>\n a.findIndex((t: any) => t?.author?.id === v?.author?.id) === i,\n )\n ?.slice(0, 2)\n ?.reverse()\n ?.map((p: any, i: Number) => (\n <Avatar\n key={'conversation-replies-key-' + i}\n className=\"bg-transparent\"\n size={'sm'}\n >\n <AvatarFallbackText>\n {startCase(p?.author?.username?.charAt(0))}\n </AvatarFallbackText>\n <AvatarImage\n alt=\"user image\"\n style={{ borderRadius: 6, borderWidth: 2, borderColor: '#fff' }}\n source={{\n uri: p?.author?.picture,\n }}\n />\n </Avatar>\n ))}\n </HStack>\n <Text style={{ fontSize: 12 }} className=\"font-bold color-blue-800\">\n {currentMessage?.replies?.totalCount}{' '}\n {currentMessage?.replies?.totalCount == 1 ? 'reply' : 'replies'}\n </Text>\n <Text style={{ fontSize: 12 }} className=\"font-bold color-gray-500\">\n {lastReply ? createdAtText(lastReply?.createdAt) : ''}\n </Text>\n </HStack>\n )}\n </>\n </TouchableHighlight>\n );\n }\n },\n [navigation, channelId, role],\n );\n\n // Render action buttons (including image upload)\n const renderActions = (props) => {\n return (\n <Actions\n {...props}\n // options={{\n // ['Choose from Library']: onSelectImages,\n // ['Cancel']: () => {}, // Add this option to make the sheet dismissible\n // }}\n optionTintColor=\"#000000\"\n cancelButtonIndex={1} // Set the Cancel option as the cancel button\n icon={() => (\n <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","SlackMessage"],"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 resource: '' as any,\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 resource: '' as any,\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 resource: '' as any,\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 <Button\n variant={'outline'}\n size={'sm'}\n className={`border-[${CALL_TO_ACTION_BUTTON_BORDERCOLOR}] mt-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 <MessageText\n {...props}\n textStyle={{\n left: { marginLeft: 5, color: CALL_TO_ACTION_TEXT_COLOR, paddingHorizontal: 2 },\n }}\n />\n </Box>\n ) : (\n <TouchableHighlight\n underlayColor={'#c0c0c0'}\n style={{ width: '100%' }}\n onPress={() => {\n if (currentMessage?.isShowThreadMessage)\n navigation.navigate(config.THREAD_MESSEGE_PATH, {\n channelId: channelId,\n title: 'Message',\n postParentId: currentMessage?._id,\n isPostParentIdThread: true,\n });\n }}\n >\n <>\n <MessageText {...props} textStyle={{ left: { marginLeft: 5 } }} />\n {currentMessage?.replies?.data?.length > 0 && (\n <HStack space={'sm'} className=\"px-1 items-center\">\n <HStack>\n {currentMessage?.replies?.data\n ?.filter(\n (v: any, i: any, a: any) =>\n a.findIndex((t: any) => t?.author?.id === v?.author?.id) ===\n i,\n )\n ?.slice(0, 2)\n ?.reverse()\n ?.map((p: any, i: Number) => (\n <Avatar\n key={'conversations-view-key-' + i}\n size={'sm'}\n className=\"bg-transparent\"\n >\n <AvatarFallbackText>\n {startCase(p?.author?.username?.charAt(0))}\n </AvatarFallbackText>\n <AvatarImage\n alt=\"user image\"\n style={{\n borderRadius: 6,\n borderWidth: 2,\n borderColor: '#fff',\n }}\n source={{\n uri: p?.author?.picture,\n }}\n />\n </Avatar>\n ))}\n </HStack>\n <Text style={{ fontSize: 12 }} className=\"font-bold color-blue-800\">\n {currentMessage?.replies?.totalCount}{' '}\n {currentMessage?.replies?.totalCount == 1 ? 'reply' : 'replies'}\n </Text>\n <Text style={{ fontSize: 12 }} className=\"font-bold color-gray-500\">\n {lastReply ? createdAtText(lastReply?.createdAt) : ''}\n </Text>\n </HStack>\n )}\n </>\n </TouchableHighlight>\n )}\n </>\n );\n } else {\n return (\n <TouchableHighlight\n underlayColor={'#c0c0c0'}\n style={{ width: '100%' }}\n onPress={() => {\n if (currentMessage?.isShowThreadMessage)\n navigation.navigate(config.THREAD_MESSEGE_PATH, {\n channelId: channelId,\n title: 'Message',\n postParentId: currentMessage?._id,\n isPostParentIdThread: true,\n });\n }}\n >\n <>\n <MessageText {...props} textStyle={{ left: { marginLeft: 5 } }} />\n {currentMessage?.replies?.data?.length > 0 && (\n <HStack space={'sm'} className=\"px-1 items-center\">\n <HStack>\n {currentMessage?.replies?.data\n ?.filter(\n (v: any, i: any, a: any) =>\n a.findIndex((t: any) => t?.author?.id === v?.author?.id) === i,\n )\n ?.slice(0, 2)\n ?.reverse()\n ?.map((p: any, i: Number) => (\n <Avatar\n key={'conversation-replies-key-' + i}\n className=\"bg-transparent\"\n size={'sm'}\n >\n <AvatarFallbackText>\n {startCase(p?.author?.username?.charAt(0))}\n </AvatarFallbackText>\n <AvatarImage\n alt=\"user image\"\n style={{ borderRadius: 6, borderWidth: 2, borderColor: '#fff' }}\n source={{\n uri: p?.author?.picture,\n }}\n />\n </Avatar>\n ))}\n </HStack>\n <Text style={{ fontSize: 12 }} className=\"font-bold color-blue-800\">\n {currentMessage?.replies?.totalCount}{' '}\n {currentMessage?.replies?.totalCount == 1 ? 'reply' : 'replies'}\n </Text>\n <Text style={{ fontSize: 12 }} className=\"font-bold color-gray-500\">\n {lastReply ? createdAtText(lastReply?.createdAt) : ''}\n </Text>\n </HStack>\n )}\n </>\n </TouchableHighlight>\n );\n }\n },\n [navigation, channelId, role],\n );\n\n // Render action buttons (including image upload)\n const renderActions = (props) => {\n return (\n <Actions\n {...props}\n // options={{\n // ['Choose from Library']: onSelectImages,\n // ['Cancel']: () => {}, // Add this option to make the sheet dismissible\n // }}\n optionTintColor=\"#000000\"\n cancelButtonIndex={1} // Set the Cancel option as the cancel button\n icon={() => (\n <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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"}
@@ -31,6 +31,7 @@ const DialogsComponent = (props) => {
31
31
  } = useRoute();
32
32
  const auth = useSelector(userSelector);
33
33
  const navigation = useNavigation();
34
+ console.log("---dialogs component---orgName---", params == null ? void 0 : params.orgName);
34
35
  const [searchQuery, setSearchQuery] = useState("");
35
36
  const [selectedChannelId, setSelectedChannelId] = useState((params == null ? void 0 : params.channelId) || null);
36
37
  const [page, setPage] = useState(1);
@@ -98,7 +99,8 @@ const DialogsComponent = (props) => {
98
99
  role: channelRole,
99
100
  title,
100
101
  hideTabBar: true,
101
- timestamp: new Date().getTime()
102
+ timestamp: new Date().getTime(),
103
+ orgName: params == null ? void 0 : params.orgName
102
104
  });
103
105
  }, [navigation, channelRole]);
104
106
  const handleSelectServiceChannel = useCallback((id, title, postParentId) => {
@@ -120,7 +122,8 @@ const DialogsComponent = (props) => {
120
122
  role: channelRole,
121
123
  title,
122
124
  postParentId,
123
- hideTabBar: true
125
+ hideTabBar: true,
126
+ orgName: params == null ? void 0 : params.orgName
124
127
  });
125
128
  }, [navigation, channelRole]);
126
129
  const handleSearchChange = useCallback((text) => {
@@ -1 +1 @@
1
- {"version":3,"file":"Dialogs.js","sources":["../../../../src/screens/inbox/containers/Dialogs.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useRef, useState, useMemo } from 'react';\nimport { FlatList, Box, Heading, Input, InputField, Text, Center, Spinner } from '@admin-layout/gluestack-ui-mobile';\nimport { Ionicons } from '@expo/vector-icons';\nimport { useSelector } from 'react-redux';\nimport { useNavigation, useRoute, useFocusEffect } from '@react-navigation/native';\nimport { DialogsListItem } from '../components/DialogsListItem';\nimport { ServiceDialogsListItem } from '../components/ServiceDialogsListItem';\nimport { useChannelsQuery, CHAT_MESSAGE_ADDED } from '../../../queries/inboxQueries';\nimport { RoomType } from 'common';\nimport { userSelector } from '@adminide-stack/user-auth0-client';\nimport { config } from '../config';\nimport colors from 'tailwindcss/colors';\nimport { SubscriptionHandler } from '../components/SubscriptionHandler';\n\nexport interface InboxProps {\n channelFilters?: Record<string, unknown>;\n channelRole?: string;\n supportServices: boolean;\n}\n\nconst DialogsComponent = (props: InboxProps) => {\n const { channelFilters: channelFilterProp, channelRole, supportServices } = props;\n const channelFilters = { ...channelFilterProp };\n channelFilters.type = channelFilters?.type ?? RoomType.Direct;\n const { params } = useRoute<any>();\n const auth = useSelector(userSelector);\n const navigation = useNavigation<any>();\n\n // Local state for UI control\n const [searchQuery, setSearchQuery] = useState('');\n const [selectedChannelId, setSelectedChannelId] = useState<string | null>(params?.channelId || null);\n const [page, setPage] = useState(1);\n const [isLoadingMore, setIsLoadingMore] = useState(false);\n\n // Create a ref to track if component is mounted\n const isMountedRef = useRef(true);\n const focusRefreshRef = useRef<number | null>(null);\n const lastRefreshTimeRef = useRef(Date.now());\n const MIN_REFRESH_INTERVAL = 2000;\n\n // Add lastNavigationTimestamp to track when the user navigates away\n const lastNavigationTimestamp = useRef(0);\n // Track active channel to prevent duplicate clicks on the same channel\n const activeChannelRef = useRef<string | null>(null);\n // Hold a timeout ref to reset active channel status\n const resetActiveChannelTimeoutRef = useRef<NodeJS.Timeout | null>(null);\n\n // Apollo query with pagination and optimistic updates\n const { data, loading, refetch, fetchMore, subscribeToMore } = useChannelsQuery({\n variables: {\n role: channelRole,\n criteria: channelFilters,\n supportServices: supportServices ? true : false,\n supportServiceCriteria: {\n type: RoomType.Service,\n },\n limit: 15,\n skip: 0,\n },\n notifyOnNetworkStatusChange: true,\n });\n\n // Memoize processChannels and sortChannels to avoid unnecessary recalculations\n const processChannels = useCallback(\n (rawChannels = []) => {\n if (!rawChannels?.length) return [];\n return rawChannels.filter((c) => {\n if (!c?.members) return false;\n return c.members.some(\n (member) => member?.user && member.user.id !== auth?.id && member.user.__typename === 'UserAccount',\n );\n });\n },\n [auth?.id],\n );\n\n const sortChannels = useCallback((channels) => {\n if (!channels?.length) return [];\n return [...channels].sort((a, b) => {\n const dateA = new Date(a?.updatedAt || a?.createdAt).getTime();\n const dateB = new Date(b?.updatedAt || b?.createdAt).getTime();\n return dateB - dateA;\n });\n }, []);\n\n // Navigation handlers with debounce to prevent double taps\n const handleSelectChannel = useCallback(\n (id, title) => {\n if (activeChannelRef.current === id) {\n console.log('📱 Ignoring repeated tap on channel:', id);\n return;\n }\n activeChannelRef.current = id;\n if (resetActiveChannelTimeoutRef.current) {\n clearTimeout(resetActiveChannelTimeoutRef.current);\n }\n resetActiveChannelTimeoutRef.current = setTimeout(() => {\n activeChannelRef.current = null;\n }, 2000);\n setSelectedChannelId(id);\n console.log('📱 Navigating to channel:', id);\n navigation.navigate(config.INBOX_MESSEGE_PATH, {\n channelId: id,\n role: channelRole,\n title: title,\n hideTabBar: true,\n timestamp: new Date().getTime(),\n });\n },\n [navigation, channelRole],\n );\n\n const handleSelectServiceChannel = useCallback(\n (id, title, postParentId) => {\n if (activeChannelRef.current === id) {\n console.log('📱 Ignoring repeated tap on service channel:', id);\n return;\n }\n activeChannelRef.current = id;\n if (resetActiveChannelTimeoutRef.current) {\n clearTimeout(resetActiveChannelTimeoutRef.current);\n }\n resetActiveChannelTimeoutRef.current = setTimeout(() => {\n activeChannelRef.current = null;\n }, 2000);\n setSelectedChannelId(id);\n console.log('📱 Navigating to service channel:', id);\n navigation.navigate(postParentId || postParentId === 0 ? config.THREAD_MESSEGE_PATH : config.THREADS_PATH, {\n channelId: id,\n role: channelRole,\n title: title,\n postParentId: postParentId,\n hideTabBar: true,\n });\n },\n [navigation, channelRole],\n );\n\n // Handle search query changes\n const handleSearchChange = useCallback((text: string) => {\n setSearchQuery(text);\n }, []);\n\n // Memoize allChannels and channels\n const allChannels = useMemo(\n () => [...(data?.supportServiceChannels || []), ...(data?.channelsByUser || [])],\n [data],\n );\n const channels = useMemo(\n () => sortChannels(processChannels(allChannels)),\n [allChannels, processChannels, sortChannels],\n );\n\n // Memoize filteredChannels\n const displayChannels = useMemo(() => {\n if (!searchQuery.trim()) return channels;\n const query = searchQuery.toLowerCase();\n return channels.filter((channel) => {\n if (channel.title && channel.title.toLowerCase().includes(query)) return true;\n if (channel.members) {\n return channel.members.some((member) => {\n const user = member?.user;\n if (!user) return false;\n const fullName = `${user.givenName || ''} ${user.familyName || ''}`.toLowerCase();\n return fullName.includes(query) || (user.username && user.username.toLowerCase().includes(query));\n });\n }\n return false;\n });\n }, [channels, searchQuery]);\n\n // Memoize renderItem to avoid re-renders\n const renderItem = useCallback(\n ({ item: channel }) => {\n const key = `${channel.type === RoomType.Service ? 'service' : 'direct'}-${channel.id}`;\n return channel?.type === RoomType.Service ? (\n <ServiceDialogsListItem\n key={key}\n onOpen={handleSelectServiceChannel}\n currentUser={auth}\n channel={channel}\n refreshing={loading}\n selectedChannelId={selectedChannelId}\n role={channelRole}\n />\n ) : (\n <DialogsListItem\n key={key}\n onOpen={handleSelectChannel}\n currentUser={auth}\n channel={channel}\n selectedChannelId={selectedChannelId}\n forceRefresh={true}\n />\n );\n },\n [auth, channelRole, handleSelectChannel, handleSelectServiceChannel, loading, selectedChannelId],\n );\n\n // Memoize ListFooterComponent and ListEmptyComponent\n const ListFooterComponent = useMemo(\n () =>\n isLoadingMore ? (\n <Center className=\"py-4\">\n <Spinner color={colors.blue[500]} size=\"small\" />\n </Center>\n ) : null,\n [isLoadingMore],\n );\n\n const ListEmptyComponent = useMemo(() => {\n if (loading && displayChannels.length === 0) {\n return (\n <Center className=\"flex-1 justify-center items-center\" style={{ height: 300 }}>\n <Spinner color={colors.blue[500]} size=\"large\" />\n <Text className=\"mt-4 text-gray-500\">Loading conversations...</Text>\n </Center>\n );\n }\n return (\n <Box className=\"p-6\">\n <Box className=\"mb-6\">\n <Heading className=\"text-2xl font-bold\">Direct Messages</Heading>\n <Text className=\"text-gray-600 mt-1\">Private conversations with other users</Text>\n </Box>\n <Input\n className=\"mb-8 h-[50] rounded-md border-gray-300 border\"\n size=\"md\"\n style={{\n paddingVertical: 8,\n marginBottom: 10,\n borderColor: '#d1d5db',\n borderRadius: 10,\n }}\n >\n <InputField\n placeholder=\"Search messages...\"\n onChangeText={handleSearchChange}\n value={searchQuery}\n />\n </Input>\n <Center className=\"items-center\" style={{ paddingVertical: 5 }}>\n <Box className=\"w-16 h-16 rounded-full bg-blue-500 flex items-center justify-center mb-5\">\n <Ionicons name=\"chatbubble-ellipses\" size={30} color=\"white\" />\n </Box>\n <Text className=\"text-2xl font-bold text-center mb-2\">No messages yet</Text>\n <Text className=\"text-gray-600 text-center mb-8\">\n When you start conversations with others,{'\\n'}\n they'll appear here.\n </Text>\n </Center>\n </Box>\n );\n }, [loading, displayChannels.length, handleSearchChange, searchQuery]);\n\n // Handle component cleanup\n useEffect(() => {\n return () => {\n isMountedRef.current = false;\n // Clear any active timeouts\n if (resetActiveChannelTimeoutRef.current) {\n clearTimeout(resetActiveChannelTimeoutRef.current);\n }\n };\n }, []);\n\n // Reset activeChannelRef when returning to this screen\n useFocusEffect(\n useCallback(() => {\n // When screen gains focus, check if we're coming back from a detail screen\n const now = Date.now();\n\n // Reset active channel ref if enough time has passed since last navigation\n if (now - lastNavigationTimestamp.current > 300) {\n activeChannelRef.current = null;\n console.log('Reset active channel reference on focus');\n }\n\n return () => {\n // When losing focus, update the timestamp\n lastNavigationTimestamp.current = Date.now();\n };\n }, []),\n );\n\n // Handle refresh on focus\n useFocusEffect(\n useCallback(() => {\n console.log('📱 Focus effect triggered for Dialogs screen');\n\n // Refresh when returning to the screen if enough time has passed\n const performRefresh = () => {\n const now = Date.now();\n if (now - lastRefreshTimeRef.current < MIN_REFRESH_INTERVAL) {\n console.log('⏩ Skipping refresh: too soon after previous refresh');\n return;\n }\n\n console.log('🔄 Performing refresh on screen focus');\n if (isMountedRef.current) {\n lastRefreshTimeRef.current = now;\n refetch();\n }\n };\n\n const focusRefreshTimeout = setTimeout(performRefresh, 100);\n return () => clearTimeout(focusRefreshTimeout);\n }, [refetch]),\n );\n\n // Handle pull-to-refresh\n const handlePullToRefresh = useCallback(() => {\n const now = Date.now();\n focusRefreshRef.current = now;\n\n console.log('🔄 Pull-to-refresh triggered');\n refetch();\n }, [refetch]);\n\n // Load more channels\n const handleLoadMore = useCallback(() => {\n if (isLoadingMore || !data || channels.length < 10) {\n console.log('Skip loading more: already loading or all data loaded');\n return;\n }\n\n console.log('Loading more channels at page:', page + 1);\n setIsLoadingMore(true);\n\n fetchMore({\n variables: {\n skip: page * 15,\n },\n updateQuery: (prev, { fetchMoreResult }) => {\n setIsLoadingMore(false);\n setPage((prevPage) => prevPage + 1);\n\n if (!fetchMoreResult) return prev;\n\n // Combine previous and new results\n return {\n ...fetchMoreResult,\n channelsByUser: [...(prev.channelsByUser || []), ...(fetchMoreResult.channelsByUser || [])],\n supportServiceChannels: [\n ...(prev.supportServiceChannels || []),\n ...(fetchMoreResult.supportServiceChannels || []),\n ],\n };\n },\n }).catch((error) => {\n console.error('Error loading more channels:', error);\n setIsLoadingMore(false);\n });\n }, [fetchMore, isLoadingMore, data, channels.length, page]);\n\n return (\n <Box className=\"p-2\">\n <SubscriptionHandler\n subscribeToMore={subscribeToMore}\n document={CHAT_MESSAGE_ADDED}\n variables={{}}\n updateQuery={undefined}\n />\n <FlatList\n data={displayChannels}\n onRefresh={handlePullToRefresh}\n refreshing={loading && !isLoadingMore}\n contentContainerStyle={{ minHeight: '100%' }}\n ItemSeparatorComponent={React.useCallback(\n () => (\n <Box className=\"h-0.5 bg-gray-200\" />\n ),\n [],\n )}\n renderItem={renderItem}\n ListFooterComponent={ListFooterComponent}\n onEndReached={handleLoadMore}\n onEndReachedThreshold={0.5}\n initialNumToRender={5}\n maxToRenderPerBatch={5}\n windowSize={5}\n removeClippedSubviews={true}\n updateCellsBatchingPeriod={100}\n getItemLayout={React.useCallback((data, index) => ({ length: 80, offset: 80 * index, index }), [])}\n keyExtractor={React.useCallback((item) => `channel-${item.id}`, [])}\n ListEmptyComponent={ListEmptyComponent}\n />\n </Box>\n );\n};\n\nexport const Dialogs = React.memo(DialogsComponent);\n"],"names":["channels","React","data"],"mappings":";;;;;;;;;;;;;;;;;;;AAkBA,MAAM,gBAAA,GAAmB,CAAC,KAAsB,KAAA;AAlBhD,EAAA,IAAA,EAAA;AAmBE,EAAM,MAAA;AAAA,IACJ,cAAgB,EAAA,iBAAA;AAAA,IAChB,WAAA;AAAA,IACA;AAAA,GACE,GAAA,KAAA;AACJ,EAAA,MAAM,iBAAiB,cAClB,CAAA,EAAA,EAAA,iBAAA,CAAA;AAEL,EAAA,cAAA,CAAe,IAAO,GAAA,CAAA,EAAA,GAAA,cAAA,IAAA,IAAA,GAAA,MAAA,GAAA,cAAA,CAAgB,IAAhB,KAAA,IAAA,GAAA,EAAA,GAAwB,QAAS,CAAA,MAAA;AACvD,EAAM,MAAA;AAAA,IACJ;AAAA,MACE,QAAc,EAAA;AAClB,EAAM,MAAA,IAAA,GAAO,YAAY,YAAY,CAAA;AACrC,EAAA,MAAM,aAAa,aAAmB,EAAA;AAGtC,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAI,SAAS,EAAE,CAAA;AACjD,EAAA,MAAM,CAAC,iBAAmB,EAAA,oBAAoB,IAAI,QAAwB,CAAA,CAAA,MAAA,IAAA,IAAA,GAAA,MAAA,GAAA,MAAA,CAAQ,cAAa,IAAI,CAAA;AACnG,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAI,SAAS,CAAC,CAAA;AAClC,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAI,SAAS,KAAK,CAAA;AAGxD,EAAM,MAAA,YAAA,GAAe,OAAO,IAAI,CAAA;AAChC,EAAM,MAAA,eAAA,GAAkB,OAAsB,IAAI,CAAA;AAClD,EAAA,MAAM,kBAAqB,GAAA,MAAA,CAAO,IAAK,CAAA,GAAA,EAAK,CAAA;AAC5C,EAAA,MAAM,oBAAuB,GAAA,GAAA;AAG7B,EAAM,MAAA,uBAAA,GAA0B,OAAO,CAAC,CAAA;AAExC,EAAM,MAAA,gBAAA,GAAmB,OAAsB,IAAI,CAAA;AAEnD,EAAM,MAAA,4BAAA,GAA+B,OAA8B,IAAI,CAAA;AAGvE,EAAM,MAAA;AAAA,IACJ,IAAA;AAAA,IACA,OAAA;AAAA,IACA,OAAA;AAAA,IACA,SAAA;AAAA,IACA;AAAA,MACE,gBAAiB,CAAA;AAAA,IACnB,SAAW,EAAA;AAAA,MACT,IAAM,EAAA,WAAA;AAAA,MACN,QAAU,EAAA,cAAA;AAAA,MACV,eAAA,EAAiB,kBAAkB,IAAO,GAAA,KAAA;AAAA,MAC1C,sBAAwB,EAAA;AAAA,QACtB,MAAM,QAAS,CAAA;AAAA,OACjB;AAAA,MACA,KAAO,EAAA,EAAA;AAAA,MACP,IAAM,EAAA;AAAA,KACR;AAAA,IACA,2BAA6B,EAAA;AAAA,GAC9B,CAAA;AAGD,EAAA,MAAM,eAAkB,GAAA,WAAA,CAAY,CAAC,WAAA,GAAc,EAAO,KAAA;AACxD,IAAA,IAAI,EAAC,WAAa,IAAA,IAAA,GAAA,MAAA,GAAA,WAAA,CAAA,MAAA,CAAA;AAAQ,MAAA,OAAO,EAAC;AAClC,IAAO,OAAA,WAAA,CAAY,OAAO,CAAK,CAAA,KAAA;AAC7B,MAAA,IAAI,EAAC,CAAG,IAAA,IAAA,GAAA,MAAA,GAAA,CAAA,CAAA,OAAA,CAAA;AAAS,QAAO,OAAA,KAAA;AACxB,MAAA,OAAO,CAAE,CAAA,OAAA,CAAQ,IAAK,CAAA,CAAA,MAAA,KAAA,CAAU,iCAAQ,IAAQ,KAAA,MAAA,CAAO,IAAK,CAAA,EAAA,MAAO,IAAM,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAA,EAAA,CAAA,IAAM,MAAO,CAAA,IAAA,CAAK,eAAe,aAAa,CAAA;AAAA,KACxH,CAAA;AAAA,GACA,EAAA,CAAC,IAAM,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAA,EAAE,CAAC,CAAA;AACb,EAAM,MAAA,YAAA,GAAe,WAAY,CAAA,CAAAA,SAAY,KAAA;AAC3C,IAAI,IAAA,EAACA,SAAA,IAAA,IAAA,GAAA,MAAA,GAAAA,SAAU,CAAA,MAAA,CAAA;AAAQ,MAAA,OAAO,EAAC;AAC/B,IAAA,OAAO,CAAC,GAAGA,SAAQ,EAAE,IAAK,CAAA,CAAC,GAAG,CAAM,KAAA;AAClC,MAAM,MAAA,KAAA,GAAQ,IAAI,IAAK,CAAA,CAAA,CAAA,IAAA,IAAA,GAAA,MAAA,GAAA,CAAA,CAAG,eAAa,CAAG,IAAA,IAAA,GAAA,MAAA,GAAA,CAAA,CAAA,SAAA,CAAS,EAAE,OAAQ,EAAA;AAC7D,MAAM,MAAA,KAAA,GAAQ,IAAI,IAAK,CAAA,CAAA,CAAA,IAAA,IAAA,GAAA,MAAA,GAAA,CAAA,CAAG,eAAa,CAAG,IAAA,IAAA,GAAA,MAAA,GAAA,CAAA,CAAA,SAAA,CAAS,EAAE,OAAQ,EAAA;AAC7D,MAAA,OAAO,KAAQ,GAAA,KAAA;AAAA,KAChB,CAAA;AAAA,GACH,EAAG,EAAE,CAAA;AAGL,EAAA,MAAM,mBAAsB,GAAA,WAAA,CAAY,CAAC,EAAA,EAAI,KAAU,KAAA;AACrD,IAAI,IAAA,gBAAA,CAAiB,YAAY,EAAI,EAAA;AACnC,MAAQ,OAAA,CAAA,GAAA,CAAI,+CAAwC,EAAE,CAAA;AACtD,MAAA;AAAA;AAEF,IAAA,gBAAA,CAAiB,OAAU,GAAA,EAAA;AAC3B,IAAA,IAAI,6BAA6B,OAAS,EAAA;AACxC,MAAA,YAAA,CAAa,6BAA6B,OAAO,CAAA;AAAA;AAEnD,IAA6B,4BAAA,CAAA,OAAA,GAAU,WAAW,MAAM;AACtD,MAAA,gBAAA,CAAiB,OAAU,GAAA,IAAA;AAAA,OAC1B,GAAI,CAAA;AACP,IAAA,oBAAA,CAAqB,EAAE,CAAA;AACvB,IAAQ,OAAA,CAAA,GAAA,CAAI,oCAA6B,EAAE,CAAA;AAC3C,IAAW,UAAA,CAAA,QAAA,CAAS,OAAO,kBAAoB,EAAA;AAAA,MAC7C,SAAW,EAAA,EAAA;AAAA,MACX,IAAM,EAAA,WAAA;AAAA,MACN,KAAA;AAAA,MACA,UAAY,EAAA,IAAA;AAAA,MACZ,SAAW,EAAA,IAAI,IAAK,EAAA,CAAE,OAAQ;AAAA,KAC/B,CAAA;AAAA,GACA,EAAA,CAAC,UAAY,EAAA,WAAW,CAAC,CAAA;AAC5B,EAAA,MAAM,0BAA6B,GAAA,WAAA,CAAY,CAAC,EAAA,EAAI,OAAO,YAAiB,KAAA;AAC1E,IAAI,IAAA,gBAAA,CAAiB,YAAY,EAAI,EAAA;AACnC,MAAQ,OAAA,CAAA,GAAA,CAAI,uDAAgD,EAAE,CAAA;AAC9D,MAAA;AAAA;AAEF,IAAA,gBAAA,CAAiB,OAAU,GAAA,EAAA;AAC3B,IAAA,IAAI,6BAA6B,OAAS,EAAA;AACxC,MAAA,YAAA,CAAa,6BAA6B,OAAO,CAAA;AAAA;AAEnD,IAA6B,4BAAA,CAAA,OAAA,GAAU,WAAW,MAAM;AACtD,MAAA,gBAAA,CAAiB,OAAU,GAAA,IAAA;AAAA,OAC1B,GAAI,CAAA;AACP,IAAA,oBAAA,CAAqB,EAAE,CAAA;AACvB,IAAQ,OAAA,CAAA,GAAA,CAAI,4CAAqC,EAAE,CAAA;AACnD,IAAA,UAAA,CAAW,SAAS,YAAgB,IAAA,YAAA,KAAiB,IAAI,MAAO,CAAA,mBAAA,GAAsB,OAAO,YAAc,EAAA;AAAA,MACzG,SAAW,EAAA,EAAA;AAAA,MACX,IAAM,EAAA,WAAA;AAAA,MACN,KAAA;AAAA,MACA,YAAA;AAAA,MACA,UAAY,EAAA;AAAA,KACb,CAAA;AAAA,GACA,EAAA,CAAC,UAAY,EAAA,WAAW,CAAC,CAAA;AAG5B,EAAM,MAAA,kBAAA,GAAqB,WAAY,CAAA,CAAC,IAAiB,KAAA;AACvD,IAAA,cAAA,CAAe,IAAI,CAAA;AAAA,GACrB,EAAG,EAAE,CAAA;AAGL,EAAA,MAAM,cAAc,OAAQ,CAAA,MAAM,CAAC,GAAA,CAAI,6BAAM,sBAA0B,KAAA,EAAK,EAAA,GAAA,CAAI,6BAAM,cAAkB,KAAA,EAAG,CAAG,EAAA,CAAC,IAAI,CAAC,CAAA;AACpH,EAAA,MAAM,QAAW,GAAA,OAAA,CAAQ,MAAM,YAAA,CAAa,eAAgB,CAAA,WAAW,CAAC,CAAA,EAAG,CAAC,WAAA,EAAa,eAAiB,EAAA,YAAY,CAAC,CAAA;AAGvH,EAAM,MAAA,eAAA,GAAkB,QAAQ,MAAM;AACpC,IAAI,IAAA,CAAC,YAAY,IAAK,EAAA;AAAG,MAAO,OAAA,QAAA;AAChC,IAAM,MAAA,KAAA,GAAQ,YAAY,WAAY,EAAA;AACtC,IAAO,OAAA,QAAA,CAAS,OAAO,CAAW,OAAA,KAAA;AAChC,MAAA,IAAI,QAAQ,KAAS,IAAA,OAAA,CAAQ,MAAM,WAAY,EAAA,CAAE,SAAS,KAAK,CAAA;AAAG,QAAO,OAAA,IAAA;AACzE,MAAA,IAAI,QAAQ,OAAS,EAAA;AACnB,QAAO,OAAA,OAAA,CAAQ,OAAQ,CAAA,IAAA,CAAK,CAAU,MAAA,KAAA;AACpC,UAAA,MAAM,OAAO,MAAQ,IAAA,IAAA,GAAA,MAAA,GAAA,MAAA,CAAA,IAAA;AACrB,UAAA,IAAI,CAAC,IAAA;AAAM,YAAO,OAAA,KAAA;AAClB,UAAM,MAAA,QAAA,GAAW,GAAG,IAAK,CAAA,SAAA,IAAa,MAAM,IAAK,CAAA,UAAA,IAAc,KAAK,WAAY,EAAA;AAChF,UAAO,OAAA,QAAA,CAAS,QAAS,CAAA,KAAK,CAAK,IAAA,IAAA,CAAK,QAAY,IAAA,IAAA,CAAK,QAAS,CAAA,WAAA,EAAc,CAAA,QAAA,CAAS,KAAK,CAAA;AAAA,SAC/F,CAAA;AAAA;AAEH,MAAO,OAAA,KAAA;AAAA,KACR,CAAA;AAAA,GACA,EAAA,CAAC,QAAU,EAAA,WAAW,CAAC,CAAA;AAG1B,EAAM,MAAA,UAAA,GAAa,YAAY,CAAC;AAAA,IAC9B,IAAM,EAAA;AAAA,GACF,KAAA;AACJ,IAAM,MAAA,GAAA,GAAM,GAAG,OAAQ,CAAA,IAAA,KAAS,SAAS,OAAU,GAAA,SAAA,GAAY,YAAY,OAAQ,CAAA,EAAA,CAAA,CAAA;AACnF,IAAA,OAAA,CAAO,OAAS,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,CAAA,IAAA,MAAS,QAAS,CAAA,OAAA,mBAAWC,cAAA,CAAA,aAAA,CAAA,sBAAA,EAAA,EAAuB,GAAU,EAAA,MAAA,EAAQ,0BAA4B,EAAA,WAAA,EAAa,IAAM,EAAA,OAAA,EAAkB,UAAY,EAAA,OAAA,EAAS,iBAAsC,EAAA,IAAA,EAAM,WAAa,EAAA,CAAA,mBAAMA,cAAA,CAAA,aAAA,CAAA,eAAA,EAAA,EAAgB,GAAU,EAAA,MAAA,EAAQ,mBAAqB,EAAA,WAAA,EAAa,IAAM,EAAA,OAAA,EAAkB,iBAAsC,EAAA,YAAA,EAAc,IAAM,EAAA,CAAA;AAAA,GACnY,EAAG,CAAC,IAAM,EAAA,WAAA,EAAa,qBAAqB,0BAA4B,EAAA,OAAA,EAAS,iBAAiB,CAAC,CAAA;AAGnG,EAAM,MAAA,mBAAA,GAAsB,QAAQ,MAAM,aAAA,gDAAiB,MAAO,EAAA,EAAA,SAAA,EAAU,0BACzDA,cAAA,CAAA,aAAA,CAAA,OAAA,EAAA,EAAQ,OAAO,MAAO,CAAA,IAAA,CAAK,MAAM,IAAK,EAAA,OAAA,EAAQ,CACnD,CAAY,GAAA,IAAA,EAAM,CAAC,aAAa,CAAC,CAAA;AAC/C,EAAM,MAAA,kBAAA,GAAqB,QAAQ,MAAM;AACvC,IAAI,IAAA,OAAA,IAAW,eAAgB,CAAA,MAAA,KAAW,CAAG,EAAA;AAC3C,MAAA,uBAAQA,cAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAO,SAAU,EAAA,oCAAA,EAAqC,KAAO,EAAA;AAAA,QACnE,MAAQ,EAAA;AAAA,OAEI,EAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,OAAQ,EAAA,EAAA,KAAA,EAAO,OAAO,IAAK,CAAA,GAAA,CAAA,EAAM,IAAK,EAAA,OAAA,EAAQ,mBAC9CA,cAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAK,SAAU,EAAA,oBAAA,EAAA,EAAqB,0BAAwB,CACjE,CAAA;AAAA;AAEZ,IAAO,uBAAAA,cAAA,CAAA,aAAA,CAAC,GAAI,EAAA,EAAA,SAAA,EAAU,KACV,EAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,GAAI,EAAA,EAAA,SAAA,EAAU,MACX,EAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,OAAQ,EAAA,EAAA,SAAA,EAAU,oBAAqB,EAAA,EAAA,iBAAe,CACvD,kBAAAA,cAAA,CAAA,aAAA,CAAC,IAAK,EAAA,EAAA,SAAA,EAAU,oBAAqB,EAAA,EAAA,wCAAsC,CAC/E,CAAA,kBACCA,cAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAM,SAAU,EAAA,+CAAA,EAAgD,IAAK,EAAA,IAAA,EAAK,KAAO,EAAA;AAAA,MAC1F,eAAiB,EAAA,CAAA;AAAA,MACjB,YAAc,EAAA,EAAA;AAAA,MACd,WAAa,EAAA,SAAA;AAAA,MACb,YAAc,EAAA;AAAA,KAEF,EAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,UAAW,EAAA,EAAA,WAAA,EAAY,sBAAqB,YAAc,EAAA,kBAAA,EAAoB,KAAO,EAAA,WAAA,EAAa,CACvG,CACA,kBAAAA,cAAA,CAAA,aAAA,CAAC,MAAO,EAAA,EAAA,SAAA,EAAU,gBAAe,KAAO,EAAA;AAAA,MAChD,eAAiB,EAAA;AAAA,KAEL,EAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,GAAI,EAAA,EAAA,SAAA,EAAU,0EACX,EAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,QAAS,EAAA,EAAA,IAAA,EAAK,qBAAsB,EAAA,IAAA,EAAM,EAAI,EAAA,KAAA,EAAM,OAAQ,EAAA,CACjE,CACA,kBAAAA,cAAA,CAAA,aAAA,CAAC,IAAK,EAAA,EAAA,SAAA,EAAU,qCAAsC,EAAA,EAAA,iBAAe,CACrE,kBAAAA,cAAA,CAAA,aAAA,CAAC,IAAK,EAAA,EAAA,SAAA,EAAU,gCAAiC,EAAA,EAAA,2CAAA,EACH,IAAK,EAAA,sBAEnD,CACJ,CACJ,CAAA;AAAA,KACP,CAAC,OAAA,EAAS,gBAAgB,MAAQ,EAAA,kBAAA,EAAoB,WAAW,CAAC,CAAA;AAGrE,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,OAAO,MAAM;AACX,MAAA,YAAA,CAAa,OAAU,GAAA,KAAA;AAEvB,MAAA,IAAI,6BAA6B,OAAS,EAAA;AACxC,QAAA,YAAA,CAAa,6BAA6B,OAAO,CAAA;AAAA;AACnD,KACF;AAAA,GACF,EAAG,EAAE,CAAA;AAGL,EAAA,cAAA,CAAe,YAAY,MAAM;AAE/B,IAAM,MAAA,GAAA,GAAM,KAAK,GAAI,EAAA;AAGrB,IAAI,IAAA,GAAA,GAAM,uBAAwB,CAAA,OAAA,GAAU,GAAK,EAAA;AAC/C,MAAA,gBAAA,CAAiB,OAAU,GAAA,IAAA;AAC3B,MAAA,OAAA,CAAQ,IAAI,yCAAyC,CAAA;AAAA;AAEvD,IAAA,OAAO,MAAM;AAEX,MAAwB,uBAAA,CAAA,OAAA,GAAU,KAAK,GAAI,EAAA;AAAA,KAC7C;AAAA,GACF,EAAG,EAAE,CAAC,CAAA;AAGN,EAAA,cAAA,CAAe,YAAY,MAAM;AAC/B,IAAA,OAAA,CAAQ,IAAI,qDAA8C,CAAA;AAG1D,IAAA,MAAM,iBAAiB,MAAM;AAC3B,MAAM,MAAA,GAAA,GAAM,KAAK,GAAI,EAAA;AACrB,MAAI,IAAA,GAAA,GAAM,kBAAmB,CAAA,OAAA,GAAU,oBAAsB,EAAA;AAC3D,QAAA,OAAA,CAAQ,IAAI,0DAAqD,CAAA;AACjE,QAAA;AAAA;AAEF,MAAA,OAAA,CAAQ,IAAI,8CAAuC,CAAA;AACnD,MAAA,IAAI,aAAa,OAAS,EAAA;AACxB,QAAA,kBAAA,CAAmB,OAAU,GAAA,GAAA;AAC7B,QAAQ,OAAA,EAAA;AAAA;AACV,KACF;AACA,IAAM,MAAA,mBAAA,GAAsB,UAAW,CAAA,cAAA,EAAgB,GAAG,CAAA;AAC1D,IAAO,OAAA,MAAM,aAAa,mBAAmB,CAAA;AAAA,GAC5C,EAAA,CAAC,OAAO,CAAC,CAAC,CAAA;AAGb,EAAM,MAAA,mBAAA,GAAsB,YAAY,MAAM;AAC5C,IAAM,MAAA,GAAA,GAAM,KAAK,GAAI,EAAA;AACrB,IAAA,eAAA,CAAgB,OAAU,GAAA,GAAA;AAC1B,IAAA,OAAA,CAAQ,IAAI,qCAA8B,CAAA;AAC1C,IAAQ,OAAA,EAAA;AAAA,GACV,EAAG,CAAC,OAAO,CAAC,CAAA;AAGZ,EAAM,MAAA,cAAA,GAAiB,YAAY,MAAM;AACvC,IAAA,IAAI,aAAiB,IAAA,CAAC,IAAQ,IAAA,QAAA,CAAS,SAAS,EAAI,EAAA;AAClD,MAAA,OAAA,CAAQ,IAAI,uDAAuD,CAAA;AACnE,MAAA;AAAA;AAEF,IAAQ,OAAA,CAAA,GAAA,CAAI,gCAAkC,EAAA,IAAA,GAAO,CAAC,CAAA;AACtD,IAAA,gBAAA,CAAiB,IAAI,CAAA;AACrB,IAAU,SAAA,CAAA;AAAA,MACR,SAAW,EAAA;AAAA,QACT,MAAM,IAAO,GAAA;AAAA,OACf;AAAA,MACA,WAAA,EAAa,CAAC,IAAM,EAAA;AAAA,QAClB;AAAA,OACI,KAAA;AACJ,QAAA,gBAAA,CAAiB,KAAK,CAAA;AACtB,QAAQ,OAAA,CAAA,CAAA,QAAA,KAAY,WAAW,CAAC,CAAA;AAChC,QAAA,IAAI,CAAC,eAAA;AAAiB,UAAO,OAAA,IAAA;AAG7B,QAAA,OAAO,iCACF,eADE,CAAA,EAAA;AAAA,UAEL,cAAA,EAAgB,CAAC,GAAI,IAAK,CAAA,cAAA,IAAkB,EAAC,EAAI,GAAI,eAAA,CAAgB,cAAkB,IAAA,EAAG,CAAA;AAAA,UAC1F,sBAAA,EAAwB,CAAC,GAAI,IAAK,CAAA,sBAAA,IAA0B,EAAC,EAAI,GAAI,eAAA,CAAgB,sBAA0B,IAAA,EAAG;AAAA,SACpH,CAAA;AAAA;AACF,KACD,CAAE,CAAA,KAAA,CAAM,CAAS,KAAA,KAAA;AAChB,MAAQ,OAAA,CAAA,KAAA,CAAM,gCAAgC,KAAK,CAAA;AACnD,MAAA,gBAAA,CAAiB,KAAK,CAAA;AAAA,KACvB,CAAA;AAAA,GACH,EAAG,CAAC,SAAW,EAAA,aAAA,EAAe,MAAM,QAAS,CAAA,MAAA,EAAQ,IAAI,CAAC,CAAA;AAC1D,EAAO,uBAAAA,cAAA,CAAA,aAAA,CAAC,GAAI,EAAA,EAAA,SAAA,EAAU,KACZ,EAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,uBAAoB,eAAkC,EAAA,QAAA,EAAU,kBAAoB,EAAA,SAAA,EAAW,EAAC,EAAG,aAAa,MAAW,EAAA,CAAA,kBAC3HA,cAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EAAS,IAAM,EAAA,eAAA,EAAiB,SAAW,EAAA,mBAAA,EAAqB,UAAY,EAAA,OAAA,IAAW,CAAC,aAAA,EAAe,qBAAuB,EAAA;AAAA,IACrI,SAAW,EAAA;AAAA,GACV,EAAA,sBAAA,EAAwBA,cAAM,CAAA,WAAA,CAAY,sBAAOA,cAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EAAI,SAAU,EAAA,mBAAA,EAAoB,GAAI,EAAE,CAAG,EAAA,UAAA,EAAwB,qBAA0C,YAAc,EAAA,cAAA,EAAgB,qBAAuB,EAAA,GAAA,EAAK,kBAAoB,EAAA,CAAA,EAAG,mBAAqB,EAAA,CAAA,EAAG,YAAY,CAAG,EAAA,qBAAA,EAAuB,IAAM,EAAA,yBAAA,EAA2B,KAAK,aAAe,EAAAA,cAAA,CAAM,WAAY,CAAA,CAACC,OAAM,KAAW,MAAA;AAAA,IACvY,MAAQ,EAAA,EAAA;AAAA,IACR,QAAQ,EAAK,GAAA,KAAA;AAAA,IACb;AAAA,GACE,CAAA,EAAA,EAAE,CAAA,EAAG,cAAcD,cAAM,CAAA,WAAA,CAAY,CAAQ,IAAA,KAAA,CAAA,QAAA,EAAW,KAAK,EAAM,CAAA,CAAA,EAAA,EAAE,CAAA,EAAG,oBAAwC,CAChH,CAAA;AACR,CAAA;AACa,MAAA,OAAA,GAAUA,cAAM,CAAA,IAAA,CAAK,gBAAgB"}
1
+ {"version":3,"file":"Dialogs.js","sources":["../../../../src/screens/inbox/containers/Dialogs.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useRef, useState, useMemo } from 'react';\nimport { FlatList, Box, Heading, Input, InputField, Text, Center, Spinner } from '@admin-layout/gluestack-ui-mobile';\nimport { Ionicons } from '@expo/vector-icons';\nimport { useSelector } from 'react-redux';\nimport { useNavigation, useRoute, useFocusEffect } from '@react-navigation/native';\nimport { DialogsListItem } from '../components/DialogsListItem';\nimport { ServiceDialogsListItem } from '../components/ServiceDialogsListItem';\nimport { useChannelsQuery, CHAT_MESSAGE_ADDED } from '../../../queries/inboxQueries';\nimport { RoomType } from 'common';\nimport { userSelector } from '@adminide-stack/user-auth0-client';\nimport { config } from '../config';\nimport colors from 'tailwindcss/colors';\nimport { SubscriptionHandler } from '../components/SubscriptionHandler';\n\nexport interface InboxProps {\n channelFilters?: Record<string, unknown>;\n channelRole?: string;\n supportServices: boolean;\n}\n\nconst DialogsComponent = (props: InboxProps) => {\n const { channelFilters: channelFilterProp, channelRole, supportServices } = props;\n const channelFilters = { ...channelFilterProp };\n channelFilters.type = channelFilters?.type ?? RoomType.Direct;\n const { params } = useRoute<any>();\n const auth = useSelector(userSelector);\n const navigation = useNavigation<any>();\n console.log('---dialogs component---orgName---', params?.orgName);\n // Local state for UI control\n const [searchQuery, setSearchQuery] = useState('');\n const [selectedChannelId, setSelectedChannelId] = useState<string | null>(params?.channelId || null);\n const [page, setPage] = useState(1);\n const [isLoadingMore, setIsLoadingMore] = useState(false);\n\n // Create a ref to track if component is mounted\n const isMountedRef = useRef(true);\n const focusRefreshRef = useRef<number | null>(null);\n const lastRefreshTimeRef = useRef(Date.now());\n const MIN_REFRESH_INTERVAL = 2000;\n\n // Add lastNavigationTimestamp to track when the user navigates away\n const lastNavigationTimestamp = useRef(0);\n // Track active channel to prevent duplicate clicks on the same channel\n const activeChannelRef = useRef<string | null>(null);\n // Hold a timeout ref to reset active channel status\n const resetActiveChannelTimeoutRef = useRef<NodeJS.Timeout | null>(null);\n\n // Apollo query with pagination and optimistic updates\n const { data, loading, refetch, fetchMore, subscribeToMore } = useChannelsQuery({\n variables: {\n role: channelRole,\n criteria: channelFilters,\n supportServices: supportServices ? true : false,\n supportServiceCriteria: {\n type: RoomType.Service,\n },\n limit: 15,\n skip: 0,\n },\n notifyOnNetworkStatusChange: true,\n });\n\n // Memoize processChannels and sortChannels to avoid unnecessary recalculations\n const processChannels = useCallback(\n (rawChannels = []) => {\n if (!rawChannels?.length) return [];\n return rawChannels.filter((c) => {\n if (!c?.members) return false;\n return c.members.some(\n (member) => member?.user && member.user.id !== auth?.id && member.user.__typename === 'UserAccount',\n );\n });\n },\n [auth?.id],\n );\n\n const sortChannels = useCallback((channels) => {\n if (!channels?.length) return [];\n return [...channels].sort((a, b) => {\n const dateA = new Date(a?.updatedAt || a?.createdAt).getTime();\n const dateB = new Date(b?.updatedAt || b?.createdAt).getTime();\n return dateB - dateA;\n });\n }, []);\n\n // Navigation handlers with debounce to prevent double taps\n const handleSelectChannel = useCallback(\n (id, title) => {\n if (activeChannelRef.current === id) {\n console.log('📱 Ignoring repeated tap on channel:', id);\n return;\n }\n activeChannelRef.current = id;\n if (resetActiveChannelTimeoutRef.current) {\n clearTimeout(resetActiveChannelTimeoutRef.current);\n }\n resetActiveChannelTimeoutRef.current = setTimeout(() => {\n activeChannelRef.current = null;\n }, 2000);\n setSelectedChannelId(id);\n console.log('📱 Navigating to channel:', id);\n navigation.navigate(config.INBOX_MESSEGE_PATH, {\n channelId: id,\n role: channelRole,\n title: title,\n hideTabBar: true,\n timestamp: new Date().getTime(),\n orgName: params?.orgName,\n });\n },\n [navigation, channelRole],\n );\n\n const handleSelectServiceChannel = useCallback(\n (id, title, postParentId) => {\n if (activeChannelRef.current === id) {\n console.log('📱 Ignoring repeated tap on service channel:', id);\n return;\n }\n activeChannelRef.current = id;\n if (resetActiveChannelTimeoutRef.current) {\n clearTimeout(resetActiveChannelTimeoutRef.current);\n }\n resetActiveChannelTimeoutRef.current = setTimeout(() => {\n activeChannelRef.current = null;\n }, 2000);\n setSelectedChannelId(id);\n console.log('📱 Navigating to service channel:', id);\n navigation.navigate(postParentId || postParentId === 0 ? config.THREAD_MESSEGE_PATH : config.THREADS_PATH, {\n channelId: id,\n role: channelRole,\n title: title,\n postParentId: postParentId,\n hideTabBar: true,\n orgName: params?.orgName,\n });\n },\n [navigation, channelRole],\n );\n\n // Handle search query changes\n const handleSearchChange = useCallback((text: string) => {\n setSearchQuery(text);\n }, []);\n\n // Memoize allChannels and channels\n const allChannels = useMemo(\n () => [...(data?.supportServiceChannels || []), ...(data?.channelsByUser || [])],\n [data],\n );\n const channels = useMemo(\n () => sortChannels(processChannels(allChannels)),\n [allChannels, processChannels, sortChannels],\n );\n\n // Memoize filteredChannels\n const displayChannels = useMemo(() => {\n if (!searchQuery.trim()) return channels;\n const query = searchQuery.toLowerCase();\n return channels.filter((channel) => {\n if (channel.title && channel.title.toLowerCase().includes(query)) return true;\n if (channel.members) {\n return channel.members.some((member) => {\n const user = member?.user;\n if (!user) return false;\n const fullName = `${user.givenName || ''} ${user.familyName || ''}`.toLowerCase();\n return fullName.includes(query) || (user.username && user.username.toLowerCase().includes(query));\n });\n }\n return false;\n });\n }, [channels, searchQuery]);\n\n // Memoize renderItem to avoid re-renders\n const renderItem = useCallback(\n ({ item: channel }) => {\n const key = `${channel.type === RoomType.Service ? 'service' : 'direct'}-${channel.id}`;\n return channel?.type === RoomType.Service ? (\n <ServiceDialogsListItem\n key={key}\n onOpen={handleSelectServiceChannel}\n currentUser={auth}\n channel={channel}\n refreshing={loading}\n selectedChannelId={selectedChannelId}\n role={channelRole}\n />\n ) : (\n <DialogsListItem\n key={key}\n onOpen={handleSelectChannel}\n currentUser={auth}\n channel={channel}\n selectedChannelId={selectedChannelId}\n forceRefresh={true}\n />\n );\n },\n [auth, channelRole, handleSelectChannel, handleSelectServiceChannel, loading, selectedChannelId],\n );\n\n // Memoize ListFooterComponent and ListEmptyComponent\n const ListFooterComponent = useMemo(\n () =>\n isLoadingMore ? (\n <Center className=\"py-4\">\n <Spinner color={colors.blue[500]} size=\"small\" />\n </Center>\n ) : null,\n [isLoadingMore],\n );\n\n const ListEmptyComponent = useMemo(() => {\n if (loading && displayChannels.length === 0) {\n return (\n <Center className=\"flex-1 justify-center items-center\" style={{ height: 300 }}>\n <Spinner color={colors.blue[500]} size=\"large\" />\n <Text className=\"mt-4 text-gray-500\">Loading conversations...</Text>\n </Center>\n );\n }\n return (\n <Box className=\"p-6\">\n <Box className=\"mb-6\">\n <Heading className=\"text-2xl font-bold\">Direct Messages</Heading>\n <Text className=\"text-gray-600 mt-1\">Private conversations with other users</Text>\n </Box>\n <Input\n className=\"mb-8 h-[50] rounded-md border-gray-300 border\"\n size=\"md\"\n style={{\n paddingVertical: 8,\n marginBottom: 10,\n borderColor: '#d1d5db',\n borderRadius: 10,\n }}\n >\n <InputField\n placeholder=\"Search messages...\"\n onChangeText={handleSearchChange}\n value={searchQuery}\n />\n </Input>\n <Center className=\"items-center\" style={{ paddingVertical: 5 }}>\n <Box className=\"w-16 h-16 rounded-full bg-blue-500 flex items-center justify-center mb-5\">\n <Ionicons name=\"chatbubble-ellipses\" size={30} color=\"white\" />\n </Box>\n <Text className=\"text-2xl font-bold text-center mb-2\">No messages yet</Text>\n <Text className=\"text-gray-600 text-center mb-8\">\n When you start conversations with others,{'\\n'}\n they'll appear here.\n </Text>\n </Center>\n </Box>\n );\n }, [loading, displayChannels.length, handleSearchChange, searchQuery]);\n\n // Handle component cleanup\n useEffect(() => {\n return () => {\n isMountedRef.current = false;\n // Clear any active timeouts\n if (resetActiveChannelTimeoutRef.current) {\n clearTimeout(resetActiveChannelTimeoutRef.current);\n }\n };\n }, []);\n\n // Reset activeChannelRef when returning to this screen\n useFocusEffect(\n useCallback(() => {\n // When screen gains focus, check if we're coming back from a detail screen\n const now = Date.now();\n\n // Reset active channel ref if enough time has passed since last navigation\n if (now - lastNavigationTimestamp.current > 300) {\n activeChannelRef.current = null;\n console.log('Reset active channel reference on focus');\n }\n\n return () => {\n // When losing focus, update the timestamp\n lastNavigationTimestamp.current = Date.now();\n };\n }, []),\n );\n\n // Handle refresh on focus\n useFocusEffect(\n useCallback(() => {\n console.log('📱 Focus effect triggered for Dialogs screen');\n\n // Refresh when returning to the screen if enough time has passed\n const performRefresh = () => {\n const now = Date.now();\n if (now - lastRefreshTimeRef.current < MIN_REFRESH_INTERVAL) {\n console.log('⏩ Skipping refresh: too soon after previous refresh');\n return;\n }\n\n console.log('🔄 Performing refresh on screen focus');\n if (isMountedRef.current) {\n lastRefreshTimeRef.current = now;\n refetch();\n }\n };\n\n const focusRefreshTimeout = setTimeout(performRefresh, 100);\n return () => clearTimeout(focusRefreshTimeout);\n }, [refetch]),\n );\n\n // Handle pull-to-refresh\n const handlePullToRefresh = useCallback(() => {\n const now = Date.now();\n focusRefreshRef.current = now;\n\n console.log('🔄 Pull-to-refresh triggered');\n refetch();\n }, [refetch]);\n\n // Load more channels\n const handleLoadMore = useCallback(() => {\n if (isLoadingMore || !data || channels.length < 10) {\n console.log('Skip loading more: already loading or all data loaded');\n return;\n }\n\n console.log('Loading more channels at page:', page + 1);\n setIsLoadingMore(true);\n\n fetchMore({\n variables: {\n skip: page * 15,\n },\n updateQuery: (prev, { fetchMoreResult }) => {\n setIsLoadingMore(false);\n setPage((prevPage) => prevPage + 1);\n\n if (!fetchMoreResult) return prev;\n\n // Combine previous and new results\n return {\n ...fetchMoreResult,\n channelsByUser: [...(prev.channelsByUser || []), ...(fetchMoreResult.channelsByUser || [])],\n supportServiceChannels: [\n ...(prev.supportServiceChannels || []),\n ...(fetchMoreResult.supportServiceChannels || []),\n ],\n };\n },\n }).catch((error) => {\n console.error('Error loading more channels:', error);\n setIsLoadingMore(false);\n });\n }, [fetchMore, isLoadingMore, data, channels.length, page]);\n\n return (\n <Box className=\"p-2\">\n <SubscriptionHandler\n subscribeToMore={subscribeToMore}\n document={CHAT_MESSAGE_ADDED}\n variables={{}}\n updateQuery={undefined}\n />\n <FlatList\n data={displayChannels}\n onRefresh={handlePullToRefresh}\n refreshing={loading && !isLoadingMore}\n contentContainerStyle={{ minHeight: '100%' }}\n ItemSeparatorComponent={React.useCallback(\n () => (\n <Box className=\"h-0.5 bg-gray-200\" />\n ),\n [],\n )}\n renderItem={renderItem}\n ListFooterComponent={ListFooterComponent}\n onEndReached={handleLoadMore}\n onEndReachedThreshold={0.5}\n initialNumToRender={5}\n maxToRenderPerBatch={5}\n windowSize={5}\n removeClippedSubviews={true}\n updateCellsBatchingPeriod={100}\n getItemLayout={React.useCallback((data, index) => ({ length: 80, offset: 80 * index, index }), [])}\n keyExtractor={React.useCallback((item) => `channel-${item.id}`, [])}\n ListEmptyComponent={ListEmptyComponent}\n />\n </Box>\n );\n};\n\nexport const Dialogs = React.memo(DialogsComponent);\n"],"names":["channels","React","data"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@messenger-box/platform-mobile",
3
- "version": "10.0.3-alpha.43",
3
+ "version": "10.0.3-alpha.46",
4
4
  "description": "Sample core for higher packages to depend on",
5
5
  "license": "ISC",
6
6
  "author": "CDMBase LLC",
@@ -22,8 +22,8 @@
22
22
  "watch-ts": "tsc --watch"
23
23
  },
24
24
  "dependencies": {
25
- "@messenger-box/core": "10.0.3-alpha.40",
26
- "@messenger-box/platform-client": "10.0.3-alpha.43",
25
+ "@messenger-box/core": "10.0.3-alpha.46",
26
+ "@messenger-box/platform-client": "10.0.3-alpha.46",
27
27
  "base-64": "1.0.0",
28
28
  "react-native-gifted-chat": "1.0.4"
29
29
  },
@@ -43,5 +43,5 @@
43
43
  "typescript": {
44
44
  "definition": "lib/index.d.ts"
45
45
  },
46
- "gitHead": "e70bc5ae7e2b6570406b8aaf73de5ba4ebed691a"
46
+ "gitHead": "5bc321d4000aa9d26ae0bdad9461598851b75174"
47
47
  }
@@ -33,7 +33,7 @@ import {
33
33
  TextInput,
34
34
  KeyboardAvoidingView,
35
35
  } from 'react-native';
36
- import { useFocusEffect, useIsFocused, useNavigation } from '@react-navigation/native';
36
+ import { useFocusEffect, useIsFocused, useNavigation, useRoute } from '@react-navigation/native';
37
37
  import { navigationRef } from '@common-stack/client-react';
38
38
  import { useSelector, shallowEqual } from 'react-redux';
39
39
  import { orderBy, startCase, uniqBy } from 'lodash-es';
@@ -207,6 +207,7 @@ function useGradualKeyboardAnimation() {
207
207
 
208
208
  const ConversationViewComponent = ({ channelId: initialChannelId, role, isShowThreadMessage, ...rest }: any) => {
209
209
  // Core state management using React hooks instead of XState
210
+ const { params } = useRoute<any>();
210
211
  const [channelId, setChannelId] = useState<string | null>(initialChannelId || null);
211
212
  const [messageText, setMessageText] = useState('');
212
213
  const [loading, setLoading] = useState(false);
@@ -259,6 +260,7 @@ const ConversationViewComponent = ({ channelId: initialChannelId, role, isShowTh
259
260
  parentId: null,
260
261
  limit: MESSAGES_PER_PAGE,
261
262
  skip: skip, // Use skip state for pagination
263
+ orgName: params?.orgName,
262
264
  },
263
265
  subscriptionDocument: CHAT_MESSAGE_ADDED,
264
266
  subscriptionVariables: { channelId: channelId?.toString() },
@@ -1363,7 +1365,7 @@ const ConversationViewComponent = ({ channelId: initialChannelId, role, isShowTh
1363
1365
  <Button
1364
1366
  variant={'outline'}
1365
1367
  size={'sm'}
1366
- className={`border-[${CALL_TO_ACTION_BUTTON_BORDERCOLOR}]`}
1368
+ className={`border-[${CALL_TO_ACTION_BUTTON_BORDERCOLOR}] mt-2 rounded-full `}
1367
1369
  onPress={() => action && params && navigation.navigate(action, params)}
1368
1370
  >
1369
1371
  <ButtonText className={`color-[${CALL_TO_ACTION_TEXT_COLOR}]`}>
@@ -25,7 +25,7 @@ const DialogsComponent = (props: InboxProps) => {
25
25
  const { params } = useRoute<any>();
26
26
  const auth = useSelector(userSelector);
27
27
  const navigation = useNavigation<any>();
28
-
28
+ console.log('---dialogs component---orgName---', params?.orgName);
29
29
  // Local state for UI control
30
30
  const [searchQuery, setSearchQuery] = useState('');
31
31
  const [selectedChannelId, setSelectedChannelId] = useState<string | null>(params?.channelId || null);
@@ -105,6 +105,7 @@ const DialogsComponent = (props: InboxProps) => {
105
105
  title: title,
106
106
  hideTabBar: true,
107
107
  timestamp: new Date().getTime(),
108
+ orgName: params?.orgName,
108
109
  });
109
110
  },
110
111
  [navigation, channelRole],
@@ -131,6 +132,7 @@ const DialogsComponent = (props: InboxProps) => {
131
132
  title: title,
132
133
  postParentId: postParentId,
133
134
  hideTabBar: true,
135
+ orgName: params?.orgName,
134
136
  });
135
137
  },
136
138
  [navigation, channelRole],