@messenger-box/platform-mobile 10.0.3-alpha.19 → 10.0.3-alpha.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +8 -0
- package/lib/screens/inbox/components/CachedImage/index.js +0 -19
- package/lib/screens/inbox/components/CachedImage/index.js.map +1 -1
- package/lib/screens/inbox/components/DialogsListItem.js +423 -50
- package/lib/screens/inbox/components/DialogsListItem.js.map +1 -1
- package/lib/screens/inbox/components/ServiceDialogsListItem.js +375 -51
- package/lib/screens/inbox/components/ServiceDialogsListItem.js.map +1 -1
- package/lib/screens/inbox/components/workflow/dialogs-list-item-xstate.js +175 -0
- package/lib/screens/inbox/components/workflow/dialogs-list-item-xstate.js.map +1 -0
- package/lib/screens/inbox/components/workflow/service-dialogs-list-item-xstate.js +191 -0
- package/lib/screens/inbox/components/workflow/service-dialogs-list-item-xstate.js.map +1 -0
- package/lib/screens/inbox/containers/Dialogs.js +536 -66
- package/lib/screens/inbox/containers/Dialogs.js.map +1 -1
- package/lib/screens/inbox/containers/ThreadConversationView.js +95 -23
- package/lib/screens/inbox/containers/ThreadConversationView.js.map +1 -1
- package/lib/screens/inbox/containers/workflow/dialogs-xstate.js +211 -0
- package/lib/screens/inbox/containers/workflow/dialogs-xstate.js.map +1 -0
- package/package.json +2 -2
- package/src/screens/inbox/components/CachedImage/index.tsx +9 -9
- package/src/screens/inbox/components/DialogsListItem.tsx +624 -107
- package/src/screens/inbox/components/ServiceDialogsListItem.tsx +506 -114
- package/src/screens/inbox/components/SupportServiceDialogsListItem.tsx +35 -17
- package/src/screens/inbox/components/workflow/dialogs-list-item-xstate.ts +145 -0
- package/src/screens/inbox/components/workflow/service-dialogs-list-item-xstate.ts +159 -0
- package/src/screens/inbox/containers/Dialogs.tsx +711 -169
- package/src/screens/inbox/containers/ThreadConversationView.tsx +151 -35
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Dialogs.js","sources":["../../../../src/screens/inbox/containers/Dialogs.tsx"],"sourcesContent":["import React, { useCallback, useMemo, useEffect, useState } from 'react';\nimport {\n FlatList,\n Box,\n Heading,\n Input,\n InputField,\n Text,\n Icon,\n Center,\n Spinner,\n} from '@admin-layout/gluestack-ui-mobile';\nimport { Ionicons } from '@expo/vector-icons';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { useNavigation, useRoute, useIsFocused, useFocusEffect } from '@react-navigation/native';\nimport { orderBy, uniqBy, startCase } from 'lodash-es';\nimport { DialogsListItem } from '../components/DialogsListItem';\nimport { ServiceDialogsListItem } from '../components/ServiceDialogsListItem';\nimport { useGetChannelsByUserQuery, useGetChannelsByUserWithServiceChannelsQuery } from 'common/graphql';\nimport { RoomType } from 'common';\nimport { userSelector } from '@adminide-stack/user-auth0-client';\nimport { CHANGE_SETTINGS_ACTION } from '@admin-layout/client';\nimport { config } from '../config';\nimport colors from 'tailwindcss/colors';\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 dispatch = useDispatch();\n const navigation = useNavigation<any>();\n const isFocused = useIsFocused();\n const [refreshing, setRefresh] = useState<boolean>(false);\n // const [userDirectChannel, setUserDirectChannel] = useState<any>([]);\n\n const {\n data: userChannels,\n loading: userChannelsLoading,\n refetch: getChannelsRefetch,\n } = useGetChannelsByUserWithServiceChannelsQuery({\n variables: {\n role: channelRole,\n criteria: channelFilters,\n supportServices: supportServices ? true : false,\n supportServiceCriteria: {\n type: RoomType.Service,\n },\n },\n });\n\n // const {\n // data: userChannels,\n // loading: userChannelsLoading,\n // refetch: getChannelsRefetch,\n // } = useGetChannelsByUserQuery({\n // variables: {\n // role: channelRole,\n // criteria: channelFilters,\n // },\n // onCompleted: (data: any) => {\n // setRefresh(false);\n // },\n // });\n\n useFocusEffect(\n React.useCallback(() => {\n // Do something when the screen is focused\n setRefresh(false);\n //getChannelsRefetch({ role: channelRole, criteria: channelFilters });\n getChannelsRefetch({\n role: channelRole,\n criteria: channelFilters,\n supportServices: supportServices ? true : false,\n supportServiceCriteria: {\n type: RoomType.Service,\n },\n });\n return () => {\n // Do something when the screen is unfocused\n // Useful for cleanup functions\n };\n }, [channelFilters]),\n );\n\n // const channels = React.useMemo(() => {\n // if (!userChannels?.channelsByUser?.length) return null;\n // let uChannels: any =\n // userChannels?.channelsByUser?.filter((c: any) =>\n // c.members.some((u: any) => u !== null && u?.user?.id != auth?.id && u.user.__typename == 'UserAccount'),\n // ) ?? [];\n // return (uChannels && orderBy(uChannels, ['updatedAt'], ['desc'])) || [];\n // }, [userChannels]);\n\n const channels = React.useMemo(() => {\n const allChannels = [...(userChannels?.supportServiceChannels ?? []), ...(userChannels?.channelsByUser ?? [])];\n let uChannels: any =\n allChannels?.filter((c: any) =>\n c.members.some((u: any) => u !== null && u?.user?.id != auth?.id && u.user.__typename == 'UserAccount'),\n ) ?? [];\n return (uChannels && orderBy(uChannels, ['updatedAt'], ['desc'])) || [];\n }, [userChannels]);\n\n // useEffect(() => {\n // setTimeout(() => {\n // dispatch({\n // type: CHANGE_SETTINGS_ACTION,\n // payload: {\n // footerRender: false,\n // },\n // } as any);\n // }, 0);\n // return () => {\n // dispatch({\n // type: CHANGE_SETTINGS_ACTION,\n // payload: {\n // footerRender: true,\n // },\n // } as any);\n // };\n // }, []);\n\n // useEffect(() => {\n // if (userChannels?.channelsByUser) {\n // if (userChannels?.channelsByUser?.length == 0) {\n // setUserDirectChannel([]);\n // }\n // //Direct channel\n // let userDirectChannels: any =\n // userChannels?.channelsByUser\n // ?.filter((i: any) => i.type == 'DIRECT')\n // ?.filter((c: any) =>\n // c.members.some((u: any) => u?.user?.id != auth?.id && u.user.__typename == 'UserAccount'),\n // ) ?? [];\n\n // if (userDirectChannels?.length > 0) setUserDirectChannel(userDirectChannels);\n // }\n // }, [userChannels?.channelsByUser]);\n\n const handleSelectChannel = useCallback((id: any, title: any) => {\n if (params?.channelId) {\n navigation.navigate(config.INBOX_MESSEGE_PATH as any, {\n channelId: params?.channelId,\n role: params?.role,\n title: params?.title ?? null,\n hideTabBar: true,\n });\n } else {\n navigation.navigate(config.INBOX_MESSEGE_PATH as any, {\n channelId: id,\n role: channelRole,\n title: title,\n hideTabBar: true,\n });\n }\n }, []);\n\n const handleSelectServiceChannel = useCallback((id: any, title: any, postParentId: any) => {\n if (params?.channelId) {\n navigation.navigate(\n params?.postParentId || params?.postParentId == 0\n ? config.THREAD_MESSEGE_PATH\n : (config.THREADS_PATH as any),\n {\n channelId: params?.channelId,\n role: params?.role,\n title: params?.title ?? null,\n postParentId: params?.postParentId,\n hideTabBar: true,\n },\n );\n } else {\n navigation.navigate(\n postParentId || postParentId == 0 ? config.THREAD_MESSEGE_PATH : (config.THREADS_PATH as any),\n {\n channelId: id,\n role: channelRole,\n title: title,\n postParentId: postParentId,\n hideTabBar: true,\n },\n );\n }\n }, []);\n\n const handleRefresh = useCallback(() => {\n //if(userChannels?.channelsByUser?.length != channels?.length)setRefresh(true);\n setRefresh(true);\n getChannelsRefetch({ role: channelRole, criteria: channelFilters })?.finally(() => setRefresh(false));\n }, []);\n\n return (\n <Box className=\"p-2\">\n <FlatList\n data={channels && channels?.length > 0 ? channels : []}\n onRefresh={handleRefresh}\n refreshing={refreshing}\n contentContainerStyle={{ minHeight: '100%' }}\n ItemSeparatorComponent={() => <Box className=\"h-0.5 bg-gray-200\" />}\n renderItem={({ item: channel }: any) =>\n channel?.type === RoomType.Service ? (\n <ServiceDialogsListItem\n onOpen={handleSelectServiceChannel}\n currentUser={auth}\n channel={channel}\n refreshing={refreshing}\n selectedChannelId={params?.channelId}\n role={channelRole}\n />\n ) : (\n <DialogsListItem\n onOpen={handleSelectChannel}\n currentUser={auth}\n channel={channel}\n selectedChannelId={params?.channelId}\n />\n )\n }\n ListEmptyComponent={() => (\n <>\n {userChannelsLoading ? (\n <Center className=\"flex-1 justify-center items-center\">\n <Spinner color={colors.blue[500]} />\n </Center>\n ) : (\n <Box className=\"p-5\">\n <Heading>Chat</Heading>\n <Input className={`h-[50] mt-3 rounded-[50] border-gray-200 border `}>\n <InputField placeholder=\"Search\" />\n </Input>\n <Center className=\"mt-6\">\n <Ionicons name=\"chatbubbles\" size={50} />\n <Text>You don't have any messages yet!</Text>\n </Center>\n </Box>\n )}\n </>\n )}\n keyExtractor={(item, index) => 'key' + index}\n />\n </Box>\n );\n};\n\nexport const Dialogs = React.memo(DialogsComponent);\n"],"names":["React","_a"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Dialogs.js","sources":["../../../../src/screens/inbox/containers/Dialogs.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useRef, useState } 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 { orderBy } from 'lodash-es';\nimport { DialogsListItem } from '../components/DialogsListItem';\nimport { ServiceDialogsListItem } from '../components/ServiceDialogsListItem';\nimport { useGetChannelsByUserWithServiceChannelsQuery } from 'common/graphql';\nimport { RoomType } from 'common';\nimport { userSelector } from '@adminide-stack/user-auth0-client';\nimport { config } from '../config';\nimport colors from 'tailwindcss/colors';\nimport { dialogsXstate } from './workflow/dialogs-xstate';\n\n// Define custom actions and states for our component\nconst Actions = {\n INITIAL_CONTEXT: 'INITIAL_CONTEXT',\n ERROR_HANDLED: 'ERROR_HANDLED',\n FETCH_CHANNELS: 'FETCH_CHANNELS',\n APPEND_CHANNELS: 'APPEND_CHANNELS',\n REFRESH_CHANNELS: 'REFRESH_CHANNELS',\n SELECT_CHANNEL: 'SELECT_CHANNEL',\n START_LOADING: 'START_LOADING',\n STOP_LOADING: 'STOP_LOADING',\n LOAD_MORE_CHANNELS: 'LOAD_MORE_CHANNELS',\n SET_SEARCH_QUERY: 'SET_SEARCH_QUERY',\n};\n\nconst BaseState = {\n Idle: 'idle',\n Error: 'error',\n Loading: 'loading',\n Done: 'done',\n FetchChannels: 'fetchChannels',\n};\n\nconst MainState = {\n RefreshChannels: 'refreshChannels',\n SelectChannel: 'selectChannel',\n LoadMoreChannels: 'loadMoreChannels',\n};\n\nexport interface InboxProps {\n channelFilters?: Record<string, unknown>;\n channelRole?: string;\n supportServices: boolean;\n}\n\n// Create a safer version of useMachine to handle potential errors\nfunction useSafeMachine(machine) {\n // Define the state type\n interface SafeStateType {\n context: {\n channels: any[];\n refreshing: boolean;\n loading: boolean;\n error: string | null;\n searchQuery: string;\n selectedChannelId: string | null;\n channelRole: string | null;\n channelFilters: Record<string, any>;\n supportServices: boolean;\n page: number;\n hasMoreChannels: boolean;\n loadingMore: boolean;\n };\n value: string;\n matches?: (stateValue: string) => boolean;\n }\n\n // Initialize with default state\n const [state, setState] = useState<SafeStateType>({\n context: {\n channels: [],\n refreshing: false,\n loading: false,\n error: null,\n searchQuery: '',\n selectedChannelId: null,\n channelRole: null,\n channelFilters: {},\n supportServices: false,\n page: 1,\n hasMoreChannels: true,\n loadingMore: false,\n },\n value: 'idle',\n });\n\n // Create a safe send function\n const send = useCallback((event) => {\n try {\n // Log event for debugging\n console.log('Event received:', event.type);\n\n // Handle specific events manually\n if (event.type === Actions.INITIAL_CONTEXT) {\n setState((prev) => ({\n ...prev,\n context: {\n ...prev.context,\n channelRole: event.data?.channelRole || null,\n channelFilters: event.data?.channelFilters || {},\n supportServices: event.data?.supportServices || false,\n selectedChannelId: event.data?.selectedChannelId || null,\n loading: true,\n page: 1,\n hasMoreChannels: true,\n },\n value: BaseState.FetchChannels,\n }));\n } else if (event.type === Actions.FETCH_CHANNELS) {\n console.log('Setting channels:', event.data?.channels?.length || 0);\n setState((prev) => ({\n ...prev,\n context: {\n ...prev.context,\n channels: event.data?.channels || [],\n hasMoreChannels: (event.data?.channels?.length || 0) > 0,\n loading: event.data?.stopLoading ? false : prev.context.loading,\n refreshing: event.data?.stopLoading ? false : prev.context.refreshing,\n loadingMore: false,\n },\n value: BaseState.Idle,\n }));\n } else if (event.type === Actions.APPEND_CHANNELS) {\n const newChannels = event.data?.channels || [];\n console.log('Appending channels:', newChannels.length);\n\n setState((prev) => ({\n ...prev,\n context: {\n ...prev.context,\n channels: [...prev.context.channels, ...newChannels],\n hasMoreChannels: newChannels.length >= 10, // If we got fewer than 10 channels, assume no more are available\n page: prev.context.page + 1,\n loadingMore: false,\n },\n value: BaseState.Idle,\n }));\n } else if (event.type === Actions.REFRESH_CHANNELS) {\n setState((prev) => ({\n ...prev,\n context: {\n ...prev.context,\n refreshing: true,\n page: 1,\n hasMoreChannels: true,\n },\n value: MainState.RefreshChannels,\n }));\n } else if (event.type === Actions.SELECT_CHANNEL) {\n setState((prev) => ({\n ...prev,\n context: {\n ...prev.context,\n selectedChannelId: event.data?.channelId || null,\n },\n }));\n } else if (event.type === Actions.START_LOADING) {\n setState((prev) => ({\n ...prev,\n context: {\n ...prev.context,\n loading: true,\n },\n }));\n } else if (event.type === Actions.STOP_LOADING) {\n console.log('Explicitly stopping loading state');\n setState((prev) => ({\n ...prev,\n context: {\n ...prev.context,\n loading: false,\n refreshing: false,\n loadingMore: false,\n },\n value: prev.value === BaseState.FetchChannels ? BaseState.Idle : prev.value,\n }));\n } else if (event.type === Actions.LOAD_MORE_CHANNELS) {\n setState((prev) => ({\n ...prev,\n context: {\n ...prev.context,\n loadingMore: true,\n },\n value: MainState.LoadMoreChannels,\n }));\n } else if (event.type === Actions.SET_SEARCH_QUERY) {\n setState((prev) => ({\n ...prev,\n context: {\n ...prev.context,\n searchQuery: event.data?.searchQuery || '',\n },\n }));\n } else if (event.type === Actions.ERROR_HANDLED) {\n console.log('Error handled:', event.data?.message);\n setState((prev) => ({\n ...prev,\n context: {\n ...prev.context,\n error: event.data?.message || null,\n loading: false,\n refreshing: false,\n loadingMore: false,\n },\n value: BaseState.Idle,\n }));\n }\n } catch (error) {\n console.error('Error handling event:', error);\n }\n }, []);\n\n // Add a custom matches function to the state\n const stateWithMatches = useMemo(() => {\n return {\n ...state,\n matches: (checkState) => {\n return state.value === checkState;\n },\n };\n }, [state]);\n\n // Return as a tuple to match useMachine API\n return [stateWithMatches, send] as const;\n}\n\nconst 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 // Create a ref to track if component is mounted\n const isMountedRef = useRef(true);\n\n // Use our safer custom implementation instead of the problematic useMachine\n const [state, send] = useSafeMachine(dialogsXstate);\n\n // Define safe functions first to avoid \"used before declaration\" errors\n const safeContext = useCallback(() => {\n try {\n return state?.context || {};\n } catch (error) {\n console.error('Error accessing state.context:', error);\n return {};\n }\n }, [state]);\n\n const safeContextProperty = useCallback(\n (property, defaultValue = null) => {\n try {\n return state?.context?.[property] ?? defaultValue;\n } catch (error) {\n console.error(`Error accessing state.context.${property}:`, error);\n return defaultValue;\n }\n },\n [state],\n );\n\n const safeMatches = useCallback(\n (stateValue) => {\n try {\n return state?.matches?.(stateValue) || false;\n } catch (error) {\n console.error(`Error calling state.matches with ${stateValue}:`, error);\n return false;\n }\n },\n [state],\n );\n\n const safeSend = useCallback(\n (event) => {\n try {\n send(event);\n } catch (error) {\n console.error('Error sending event to state machine:', error, event);\n }\n },\n [send],\n );\n\n // Destructure context properties with safe getters\n const channels = safeContextProperty('channels', []);\n const refreshing = safeContextProperty('refreshing', false);\n const loading = safeContextProperty('loading', false);\n const searchQuery = safeContextProperty('searchQuery', '');\n const selectedChannelId = safeContextProperty('selectedChannelId', null);\n const loadingMore = safeContextProperty('loadingMore', false);\n const hasMoreChannels = safeContextProperty('hasMoreChannels', true);\n const page = safeContextProperty('page', 1);\n\n // Use a ref to track the current machine snapshot for safer access\n const stateRef = useRef(state);\n\n // Keep the ref updated with the latest snapshot\n useEffect(() => {\n stateRef.current = state;\n }, [state]);\n\n // Avoid referencing state.context directly in places that might cause undefined errors\n const safeGetContext = useCallback(() => {\n if (stateRef.current && stateRef.current.context) {\n return stateRef.current.context;\n }\n // Return default values if context is undefined\n return {\n channels: [],\n refreshing: false,\n loading: false,\n error: null,\n searchQuery: '',\n selectedChannelId: null,\n channelRole: null,\n channelFilters: {},\n supportServices: false,\n page: 1,\n hasMoreChannels: true,\n loadingMore: false,\n };\n }, []);\n\n // Use cleanup function to prevent setting state after unmount\n useEffect(() => {\n return () => {\n isMountedRef.current = false;\n };\n }, []);\n\n // Apollo query for fetching channels\n const { refetch: getChannelsRefetch } = useGetChannelsByUserWithServiceChannelsQuery({\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 fetchPolicy: 'cache-and-network',\n nextFetchPolicy: 'network-only',\n notifyOnNetworkStatusChange: true,\n skip: true, // Skip automatic fetching as we'll control it via the state machine\n });\n\n // Fetch channels implementation\n const fetchChannelsDirectly = useCallback(\n async (pageNum = 1, append = false) => {\n try {\n const context = safeGetContext();\n console.log(`💫 FETCHING channels (page: ${pageNum}, append: ${append})`);\n\n // Calculate skip based on page number (pagination)\n const skipCount = (pageNum - 1) * 15;\n\n const { data } = await getChannelsRefetch({\n role: channelRole,\n criteria: channelFilters,\n supportServices: supportServices ? true : false,\n supportServiceCriteria: {\n type: RoomType.Service,\n },\n limit: 15,\n skip: skipCount,\n });\n\n const allChannels = [...(data?.supportServiceChannels ?? []), ...(data?.channelsByUser ?? [])];\n const filteredChannels =\n allChannels?.filter((c) =>\n c.members.some(\n (u) => u !== null && u?.user?.id != auth?.id && u.user.__typename == 'UserAccount',\n ),\n ) ?? [];\n const sortedChannels = (filteredChannels && orderBy(filteredChannels, ['updatedAt'], ['desc'])) || [];\n\n console.log(`📊 Processed channels: ${sortedChannels.length} (page: ${pageNum}, skip: ${skipCount})`);\n\n if (isMountedRef.current) {\n if (append) {\n safeSend({\n type: Actions.APPEND_CHANNELS,\n data: { channels: sortedChannels },\n });\n } else {\n safeSend({\n type: Actions.FETCH_CHANNELS,\n data: { channels: sortedChannels },\n });\n }\n\n // Immediately stop loading state instead of waiting\n safeSend({ type: Actions.STOP_LOADING });\n }\n } catch (error) {\n console.error('Error fetching channels:', error);\n if (isMountedRef.current) {\n safeSend({\n type: Actions.ERROR_HANDLED,\n data: { message: 'Failed to fetch channels' },\n });\n }\n }\n },\n [getChannelsRefetch, channelRole, channelFilters, supportServices, auth?.id, safeSend],\n );\n\n // Add a safety timeout to ensure loading state is eventually cleared\n // even if the fetchChannelsDirectly function fails to complete\n useEffect(() => {\n if (loading) {\n const safetyTimeout = setTimeout(() => {\n console.log('⚠️ Safety timeout triggered - forcing loading state to stop');\n if (isMountedRef.current) {\n safeSend({ type: Actions.STOP_LOADING });\n }\n }, 5000); // 5 seconds safety timeout\n\n return () => clearTimeout(safetyTimeout);\n }\n }, [loading, safeSend]);\n\n // Add a faster refresh function with smaller dataset and timeout\n const fastRefresh = useCallback(async () => {\n try {\n console.log('🔄 Fast refreshing channels...');\n\n // Set a timeout to ensure refreshing state is cleared if the fetch fails\n const clearRefreshingTimeout = setTimeout(() => {\n if (isMountedRef.current) {\n console.log('⚠️ Fast refresh timeout - stopping refresh state');\n safeSend({ type: Actions.STOP_LOADING });\n }\n }, 3000); // 3 second timeout for refresh\n\n // Perform the fetch with a smaller limit for faster results\n const { data } = await getChannelsRefetch({\n role: channelRole,\n criteria: channelFilters,\n supportServices: supportServices ? true : false,\n supportServiceCriteria: {\n type: RoomType.Service,\n },\n limit: 10,\n skip: 0,\n });\n\n // Cancel the timeout since we got a response\n clearTimeout(clearRefreshingTimeout);\n\n if (!isMountedRef.current) return;\n\n const allChannels = [...(data?.supportServiceChannels ?? []), ...(data?.channelsByUser ?? [])];\n const filteredChannels =\n allChannels?.filter((c) =>\n c.members.some((u) => u !== null && u?.user?.id != auth?.id && u.user.__typename == 'UserAccount'),\n ) ?? [];\n const sortedChannels = (filteredChannels && orderBy(filteredChannels, ['updatedAt'], ['desc'])) || [];\n\n console.log(`📊 Fast refresh completed: ${sortedChannels.length} channels`);\n\n // Update the state with the new channels, but only if still mounted\n if (isMountedRef.current) {\n // Use a single update to prevent UI jumping\n safeSend({\n type: Actions.FETCH_CHANNELS,\n data: {\n channels: sortedChannels,\n stopLoading: true,\n },\n });\n }\n } catch (error) {\n console.error('Error during fast refresh:', error);\n if (isMountedRef.current) {\n safeSend({ type: Actions.STOP_LOADING });\n }\n }\n }, [getChannelsRefetch, channelRole, channelFilters, supportServices, auth?.id, safeSend]);\n\n // Process state changes and execute side effects\n useEffect(() => {\n // Only execute if not already refreshing or loading to prevent loops\n const context = safeGetContext();\n const isAlreadyFetching = context.refreshing || context.loading;\n\n if (!isAlreadyFetching) {\n if (safeMatches(BaseState.FetchChannels)) {\n console.log('🔄 Fetching channels...');\n fetchChannelsDirectly(1, false);\n } else if (safeMatches(MainState.RefreshChannels)) {\n console.log('🔄 Refreshing channels...');\n fetchChannelsDirectly(1, false);\n } else if (safeMatches(MainState.LoadMoreChannels)) {\n console.log('🔄 Loading more channels...');\n fetchChannelsDirectly(page, true);\n }\n } else {\n // Log that we're skipping the fetch due to already being in progress\n console.log('⏩ Skipping fetch because isAlreadyFetching:', isAlreadyFetching);\n }\n }, [fetchChannelsDirectly, safeMatches, safeGetContext, state.value, page]);\n\n // Add a debug log to track state transitions\n useEffect(() => {\n console.log('State changed to:', state.value);\n console.log(\n 'Context:',\n JSON.stringify({\n channelsCount: channels.length,\n loading,\n refreshing,\n }),\n );\n }, [state.value, channels.length, loading, refreshing]);\n\n // Initialize state machine with props on mount\n useEffect(() => {\n if (isMountedRef.current) {\n console.log('🚀 Initializing state machine with props', {\n channelRole,\n channelFilters,\n supportServices,\n selectedChannelId: params?.channelId,\n });\n\n safeSend({\n type: Actions.INITIAL_CONTEXT,\n data: {\n channelRole,\n channelFilters,\n supportServices,\n selectedChannelId: params?.channelId,\n },\n });\n\n // Add a safety measure to ensure loading is stopped even if fetch fails\n const initSafetyTimeout = setTimeout(() => {\n if (isMountedRef.current && loading) {\n console.log('⚠️ Init safety timeout triggered - forcing loading state to stop');\n safeSend({ type: Actions.STOP_LOADING });\n }\n }, 8000); // 8 seconds safety timeout\n\n return () => clearTimeout(initSafetyTimeout);\n }\n }, []);\n\n // Handle refresh on focus (when navigating back to this screen)\n const focusRefreshRef = useRef<number | null>(null);\n\n useFocusEffect(\n useCallback(() => {\n // Use a flag to ensure we only trigger refresh once per focus\n let hasTriggeredRefresh = false;\n\n // Reset the focus refresh tracking when component gets focus\n const now = Date.now();\n const lastRefresh = focusRefreshRef.current;\n\n // Only refresh if at least 2 seconds have passed since last refresh\n const shouldRefresh = lastRefresh === null || now - lastRefresh > 2000;\n\n // Only refresh if component is mounted and not in initial state,\n // and not already refreshing/loading\n const context = safeGetContext();\n const isAlreadyFetching = context.refreshing || context.loading;\n\n if (\n isMountedRef.current &&\n !hasTriggeredRefresh &&\n !isAlreadyFetching &&\n shouldRefresh &&\n (channels.length > 0 || safeMatches(BaseState.Idle))\n ) {\n hasTriggeredRefresh = true;\n focusRefreshRef.current = now;\n\n // Use fast refresh for better performance\n console.log('🔄 Focus effect: triggering fast refresh');\n safeSend({\n type: Actions.START_LOADING,\n data: { refreshing: true },\n });\n\n // Execute fast refresh with a short delay to prevent UI jank\n setTimeout(() => {\n if (isMountedRef.current) {\n fastRefresh();\n }\n }, 100);\n } else {\n console.log('⏩ Skipping focus refresh:', {\n isAlreadyFetching,\n hasTriggeredRefresh,\n shouldRefresh,\n timeGap: lastRefresh === null ? 'first refresh' : now - lastRefresh,\n });\n }\n\n return () => {\n // Reset flag when focus is lost\n hasTriggeredRefresh = false;\n };\n }, [safeSend, channels.length, safeMatches, safeGetContext, fastRefresh]),\n );\n\n // Navigation handlers\n const handleSelectChannel = useCallback(\n (id, title) => {\n // Always update the selected channel ID, even if it's the same channel\n safeSend({ type: Actions.SELECT_CHANNEL, data: { channelId: id } });\n\n // Force navigation to the channel screen, even if it's already selected\n // This ensures we can reopen the same channel multiple times\n navigation.navigate(config.INBOX_MESSEGE_PATH, {\n channelId: id,\n role: channelRole,\n title: title,\n hideTabBar: true,\n timestamp: new Date().getTime(), // Add timestamp to force a refresh when navigating to the same screen\n });\n },\n [navigation, channelRole, safeSend],\n );\n\n const handleSelectServiceChannel = useCallback(\n (id, title, postParentId) => {\n safeSend({ type: Actions.SELECT_CHANNEL, data: { channelId: 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, safeSend],\n );\n\n // Modified pull-to-refresh handler to use fast refresh\n const handlePullToRefresh = useCallback(() => {\n if (refreshing) {\n console.log('⏩ Skipping refresh because already refreshing');\n return;\n }\n\n // Update the last refresh timestamp to prevent simultaneous focus refresh\n const now = Date.now();\n focusRefreshRef.current = now;\n\n console.log('🔄 Pull-to-refresh triggered');\n safeSend({\n type: Actions.START_LOADING,\n data: { refreshing: true },\n });\n\n // Use the fast refresh approach for pull-to-refresh\n fastRefresh();\n }, [safeSend, refreshing, fastRefresh]);\n\n // Search handler\n const handleSearchChange = useCallback(\n (text: string) => {\n safeSend({\n type: Actions.SET_SEARCH_QUERY,\n data: { searchQuery: text },\n });\n },\n [safeSend],\n );\n\n // Add loadMore handler with debounce to prevent multiple calls\n const handleLoadMore = useCallback(() => {\n if (!loadingMore && hasMoreChannels) {\n console.log('Loading more channels at page:', page + 1);\n safeSend({ type: Actions.LOAD_MORE_CHANNELS });\n } else {\n console.log('Skip loading more: loadingMore=', loadingMore, 'hasMoreChannels=', hasMoreChannels);\n }\n }, [safeSend, loadingMore, hasMoreChannels, page]);\n\n return (\n <Box className=\"p-2\">\n <FlatList\n data={channels}\n onRefresh={handlePullToRefresh}\n refreshing={refreshing}\n contentContainerStyle={{ minHeight: '100%' }}\n ItemSeparatorComponent={() => <Box className=\"h-0.5 bg-gray-200\" />}\n renderItem={({ item: channel }) => {\n return channel?.type === RoomType.Service ? (\n <ServiceDialogsListItem\n key={`service-${channel.id}`}\n onOpen={handleSelectServiceChannel}\n currentUser={auth}\n channel={channel}\n refreshing={refreshing}\n selectedChannelId={selectedChannelId}\n role={channelRole}\n />\n ) : (\n <DialogsListItem\n key={`direct-${channel.id}`}\n onOpen={handleSelectChannel}\n currentUser={auth}\n channel={channel}\n selectedChannelId={selectedChannelId}\n forceRefresh={true}\n />\n );\n }}\n ListFooterComponent={() =>\n loadingMore ? (\n <Center className=\"py-4\">\n <Spinner color={colors.blue[500]} size=\"small\" />\n </Center>\n ) : null\n }\n onEndReached={handleLoadMore}\n onEndReachedThreshold={0.3}\n initialNumToRender={10}\n maxToRenderPerBatch={10}\n windowSize={10}\n removeClippedSubviews={true}\n updateCellsBatchingPeriod={50}\n ListEmptyComponent={() => {\n console.log('Rendering ListEmptyComponent', { loading, refreshing, stateValue: state.value });\n\n // Only show spinner during initial loading\n if (loading && channels.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\n // Show empty state when no channels and not loading\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\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\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\n <Text className=\"text-2xl font-bold text-center mb-2\">No messages yet</Text>\n\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 }}\n keyExtractor={(item) => `channel-${item.id}`}\n />\n </Box>\n );\n};\n\nexport const Dialogs = React.memo(DialogsComponent);\n"],"names":["_a","_b","_c","_d","React"],"mappings":"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"}
|
|
@@ -27,12 +27,22 @@ const {
|
|
|
27
27
|
const createdAtText = (value) => {
|
|
28
28
|
if (!value)
|
|
29
29
|
return "";
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
30
|
+
try {
|
|
31
|
+
const timestamp = new Date(value).getTime();
|
|
32
|
+
if (isNaN(timestamp)) {
|
|
33
|
+
console.warn(`Invalid date value in createdAtText: ${value}`);
|
|
34
|
+
return "Unknown date";
|
|
35
|
+
}
|
|
36
|
+
let date = new Date(value);
|
|
37
|
+
if (isToday(date))
|
|
38
|
+
return "Today";
|
|
39
|
+
if (isYesterday(date))
|
|
40
|
+
return "Yesterday";
|
|
41
|
+
return format(date, "MMM dd, yyyy");
|
|
42
|
+
} catch (error) {
|
|
43
|
+
console.error(`Error processing date in createdAtText: ${value}`, error);
|
|
44
|
+
return "Unknown date";
|
|
45
|
+
}
|
|
36
46
|
};
|
|
37
47
|
function useSafeMachine(machine) {
|
|
38
48
|
const [state, setState] = useState({
|
|
@@ -211,12 +221,20 @@ function useSafeMachine(machine) {
|
|
|
211
221
|
const apiTotalCount = (_b2 = event.data) == null ? void 0 : _b2.totalCount;
|
|
212
222
|
console.log(`Merging ${newMessages.length} older messages with ${prev.context.threadMessages.length} existing messages`);
|
|
213
223
|
if (newMessages.length > 0) {
|
|
214
|
-
|
|
215
|
-
|
|
224
|
+
try {
|
|
225
|
+
console.log("First new message date:", !isNaN(new Date(newMessages[0].createdAt).getTime()) ? new Date(newMessages[0].createdAt).toISOString() : "Invalid date");
|
|
226
|
+
console.log("Last new message date:", !isNaN(new Date(newMessages[newMessages.length - 1].createdAt).getTime()) ? new Date(newMessages[newMessages.length - 1].createdAt).toISOString() : "Invalid date");
|
|
227
|
+
} catch (error) {
|
|
228
|
+
console.error("Error logging new message dates:", error);
|
|
229
|
+
}
|
|
216
230
|
}
|
|
217
231
|
if (prev.context.threadMessages.length > 0) {
|
|
218
|
-
|
|
219
|
-
|
|
232
|
+
try {
|
|
233
|
+
console.log("First existing message date:", !isNaN(new Date(prev.context.threadMessages[0].createdAt).getTime()) ? new Date(prev.context.threadMessages[0].createdAt).toISOString() : "Invalid date");
|
|
234
|
+
console.log("Last existing message date:", !isNaN(new Date(prev.context.threadMessages[prev.context.threadMessages.length - 1].createdAt).getTime()) ? new Date(prev.context.threadMessages[prev.context.threadMessages.length - 1].createdAt).toISOString() : "Invalid date");
|
|
235
|
+
} catch (error) {
|
|
236
|
+
console.error("Error logging existing message dates:", error);
|
|
237
|
+
}
|
|
220
238
|
}
|
|
221
239
|
if (newMessages.length === 0 && prev.context.totalCount > prev.context.threadMessages.length) {
|
|
222
240
|
console.log("No new messages found despite totalCount indicating more should exist");
|
|
@@ -229,7 +247,14 @@ function useSafeMachine(machine) {
|
|
|
229
247
|
});
|
|
230
248
|
}
|
|
231
249
|
const combinedMessages = uniqBy([...prev.context.threadMessages, ...newMessages], "id");
|
|
232
|
-
const sortedMessages = orderBy(combinedMessages, [(msg) =>
|
|
250
|
+
const sortedMessages = orderBy(combinedMessages, [(msg) => {
|
|
251
|
+
try {
|
|
252
|
+
return !isNaN(new Date(msg.createdAt).getTime()) ? new Date(msg.createdAt).getTime() : 0;
|
|
253
|
+
} catch (error) {
|
|
254
|
+
console.error(`Error sorting message by date: ${msg.id}`, error);
|
|
255
|
+
return 0;
|
|
256
|
+
}
|
|
257
|
+
}], ["desc"]);
|
|
233
258
|
const newTotalCount = typeof apiTotalCount === "number" ? apiTotalCount : Math.max(sortedMessages.length, prev.context.totalCount);
|
|
234
259
|
console.log(`Total messages after merge and sort: ${sortedMessages.length}, totalCount: ${newTotalCount}`);
|
|
235
260
|
return __spreadProps(__spreadValues({}, prev), {
|
|
@@ -273,7 +298,7 @@ const ThreadConversationViewComponent = ({
|
|
|
273
298
|
isPostParentIdThread,
|
|
274
299
|
role
|
|
275
300
|
}) => {
|
|
276
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t
|
|
301
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t;
|
|
277
302
|
const {
|
|
278
303
|
params
|
|
279
304
|
} = useRoute();
|
|
@@ -977,19 +1002,40 @@ const ThreadConversationViewComponent = ({
|
|
|
977
1002
|
messageIds.add(msg.id);
|
|
978
1003
|
return true;
|
|
979
1004
|
}).map((msg) => {
|
|
980
|
-
var _a2, _b2, _c2, _d2, _e2, _f2, _g2, _h2, _i2, _j2, _k2, _l2, _m2
|
|
1005
|
+
var _a2, _b2, _c2, _d2, _e2, _f2, _g2, _h2, _i2, _j2, _k2, _l2, _m2;
|
|
981
1006
|
const uniqueId = msg.id || `${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
|
|
1007
|
+
let messageDate;
|
|
1008
|
+
try {
|
|
1009
|
+
if (msg.createdAt && !isNaN(new Date(msg.createdAt).getTime())) {
|
|
1010
|
+
messageDate = new Date(msg.createdAt);
|
|
1011
|
+
} else {
|
|
1012
|
+
console.warn(`Invalid date value for message ${msg.id}: ${msg.createdAt}`);
|
|
1013
|
+
messageDate = new Date();
|
|
1014
|
+
}
|
|
1015
|
+
} catch (error) {
|
|
1016
|
+
console.error(`Error creating date for message ${msg.id}:`, error);
|
|
1017
|
+
messageDate = new Date();
|
|
1018
|
+
}
|
|
1019
|
+
let imageUrl = null;
|
|
1020
|
+
if (((_a2 = msg.files) == null ? void 0 : _a2.data) && msg.files.data.length > 0) {
|
|
1021
|
+
const fileData = msg.files.data[0];
|
|
1022
|
+
if (fileData && fileData.url) {
|
|
1023
|
+
imageUrl = fileData.url;
|
|
1024
|
+
console.log("\u{1F4F7} Found image URL for message", msg.id, ":", imageUrl);
|
|
1025
|
+
}
|
|
1026
|
+
}
|
|
1027
|
+
let messageText = msg.message || "";
|
|
982
1028
|
let message = {
|
|
983
1029
|
_id: uniqueId,
|
|
984
|
-
text:
|
|
985
|
-
createdAt:
|
|
1030
|
+
text: messageText,
|
|
1031
|
+
createdAt: messageDate,
|
|
986
1032
|
user: {
|
|
987
|
-
_id: (
|
|
988
|
-
name: (
|
|
989
|
-
avatar: (
|
|
1033
|
+
_id: (_d2 = (_b2 = msg == null ? void 0 : msg.author) == null ? void 0 : _b2.id) != null ? _d2 : (_c2 = auth == null ? void 0 : auth.profile) == null ? void 0 : _c2.id,
|
|
1034
|
+
name: (_j2 = (_h2 = (_e2 = msg == null ? void 0 : msg.author) == null ? void 0 : _e2.givenName) != null ? _h2 : ((_f2 = auth == null ? void 0 : auth.profile) == null ? void 0 : _f2.given_name) + " " + ((_g2 = msg == null ? void 0 : msg.author) == null ? void 0 : _g2.familyName)) != null ? _j2 : (_i2 = auth == null ? void 0 : auth.profile) == null ? void 0 : _i2.family_name,
|
|
1035
|
+
avatar: (_m2 = (_k2 = msg == null ? void 0 : msg.author) == null ? void 0 : _k2.picture) != null ? _m2 : (_l2 = auth == null ? void 0 : auth.profile) == null ? void 0 : _l2.picture
|
|
990
1036
|
},
|
|
991
1037
|
type: (msg == null ? void 0 : msg.type) || "",
|
|
992
|
-
image:
|
|
1038
|
+
image: imageUrl,
|
|
993
1039
|
sent: (msg == null ? void 0 : msg.isDelivered) || true,
|
|
994
1040
|
received: (msg == null ? void 0 : msg.isRead) || false,
|
|
995
1041
|
propsConfiguration: msg == null ? void 0 : msg.propsConfiguration
|
|
@@ -997,9 +1043,22 @@ const ThreadConversationViewComponent = ({
|
|
|
997
1043
|
return message;
|
|
998
1044
|
});
|
|
999
1045
|
}
|
|
1000
|
-
const sortedMessages = orderBy(res, [(msg) =>
|
|
1046
|
+
const sortedMessages = orderBy(res, [(msg) => {
|
|
1047
|
+
try {
|
|
1048
|
+
return msg.createdAt instanceof Date ? msg.createdAt.getTime() : new Date().getTime();
|
|
1049
|
+
} catch (error) {
|
|
1050
|
+
console.error("Error sorting message by date:", error);
|
|
1051
|
+
return 0;
|
|
1052
|
+
}
|
|
1053
|
+
}], ["desc"]);
|
|
1001
1054
|
if (sortedMessages.length > 0) {
|
|
1002
|
-
|
|
1055
|
+
try {
|
|
1056
|
+
const firstMsg = sortedMessages[0];
|
|
1057
|
+
const lastMsg = sortedMessages[sortedMessages.length - 1];
|
|
1058
|
+
console.log("Message date range:", lastMsg.createdAt instanceof Date ? lastMsg.createdAt.toISOString() : "invalid date", "to", firstMsg.createdAt instanceof Date ? firstMsg.createdAt.toISOString() : "invalid date");
|
|
1059
|
+
} catch (error) {
|
|
1060
|
+
console.error("Error logging message date range:", error);
|
|
1061
|
+
}
|
|
1003
1062
|
}
|
|
1004
1063
|
return sortedMessages;
|
|
1005
1064
|
}, [safeContextProperty("threadMessages"), auth]);
|
|
@@ -1364,7 +1423,20 @@ const ThreadConversationViewComponent = ({
|
|
|
1364
1423
|
borderColor: "#fff"
|
|
1365
1424
|
}, source: {
|
|
1366
1425
|
uri: (_f = (_e = safeContextProperty("threadPost")[0]) == null ? void 0 : _e.author) == null ? void 0 : _f.picture
|
|
1367
|
-
} })), /* @__PURE__ */ React__default.createElement(Box, null, /* @__PURE__ */ React__default.createElement(Text, { className: "font-bold color-black" }, (_i = (_h = (_g = safeContextProperty("threadPost")[0]) == null ? void 0 : _g.author) == null ? void 0 : _h.givenName) != null ? _i : "", " ", (_l = (_k = (_j = safeContextProperty("threadPost")[0]) == null ? void 0 : _j.author) == null ? void 0 : _k.familyName) != null ? _l : ""), /* @__PURE__ */ React__default.createElement(Text, { className: "pl-0 color-gray-500" }, createdAtText((_m = safeContextProperty("threadPost")[0]) == null ? void 0 : _m.createdAt), " at", " ",
|
|
1426
|
+
} })), /* @__PURE__ */ React__default.createElement(Box, null, /* @__PURE__ */ React__default.createElement(Text, { className: "font-bold color-black" }, (_i = (_h = (_g = safeContextProperty("threadPost")[0]) == null ? void 0 : _g.author) == null ? void 0 : _h.givenName) != null ? _i : "", " ", (_l = (_k = (_j = safeContextProperty("threadPost")[0]) == null ? void 0 : _j.author) == null ? void 0 : _k.familyName) != null ? _l : ""), /* @__PURE__ */ React__default.createElement(Text, { className: "pl-0 color-gray-500" }, createdAtText((_m = safeContextProperty("threadPost")[0]) == null ? void 0 : _m.createdAt), " at", " ", (() => {
|
|
1427
|
+
var _a2;
|
|
1428
|
+
try {
|
|
1429
|
+
const createdAt = (_a2 = safeContextProperty("threadPost")[0]) == null ? void 0 : _a2.createdAt;
|
|
1430
|
+
if (createdAt && !isNaN(new Date(createdAt).getTime())) {
|
|
1431
|
+
return format(new Date(createdAt), "hh:mm:a");
|
|
1432
|
+
} else {
|
|
1433
|
+
return "unknown time";
|
|
1434
|
+
}
|
|
1435
|
+
} catch (error) {
|
|
1436
|
+
console.error("Error formatting thread post time:", error);
|
|
1437
|
+
return "unknown time";
|
|
1438
|
+
}
|
|
1439
|
+
})()))), /* @__PURE__ */ React__default.createElement(HStack, { space: "sm", className: "px-2 items-center" }, /* @__PURE__ */ React__default.createElement(Text, null, (_o = (_n = safeContextProperty("threadPost")[0]) == null ? void 0 : _n.message) != null ? _o : ""))), /* @__PURE__ */ React__default.createElement(Box, { className: "py-4" }, /* @__PURE__ */ React__default.createElement(Box, { className: "px-4 py-2 border-t border-b border-gray-200" }, /* @__PURE__ */ React__default.createElement(Text, { className: "font-bold color-gray-600" }, (_q = (_p = safeContextProperty("threadPost")[0]) == null ? void 0 : _p.replies) == null ? void 0 : _q.totalCount, " ", ((_s = (_r = safeContextProperty("threadPost")[0]) == null ? void 0 : _r.replies) == null ? void 0 : _s.totalCount) > 0 ? "replies" : "reply"))))), /* @__PURE__ */ React__default.createElement(GiftedChat, { ref: threadMessageListRef, wrapInSafeArea: false, renderLoading: () => /* @__PURE__ */ React__default.createElement(Spinner, { color: colors.blue[500] }), messages: messageList, listViewProps: {
|
|
1368
1440
|
onScroll: handleScrollToTop,
|
|
1369
1441
|
onEndReached: handleEndReached,
|
|
1370
1442
|
onEndReachedThreshold: 0.2,
|
|
@@ -1422,7 +1494,7 @@ const ThreadConversationViewComponent = ({
|
|
|
1422
1494
|
});
|
|
1423
1495
|
}, renderFooter: () => safeContextProperty("loading", false) && !safeContextProperty("loadingOldMessages", false) ? /* @__PURE__ */ React__default.createElement(Box, { className: "w-full py-2 items-center" }, /* @__PURE__ */ React__default.createElement(Spinner, { color: colors.blue[500] })) : safeContextProperty("imageLoading", false) ? /* @__PURE__ */ React__default.createElement(Box, { className: "w-full py-2 items-center" }, /* @__PURE__ */ React__default.createElement(Spinner, { color: colors.blue[500] })) : /* @__PURE__ */ React__default.createElement(React__default.Fragment, null), scrollToBottom: true, loadEarlier: false, isLoadingEarlier: false, user: {
|
|
1424
1496
|
_id: (auth == null ? void 0 : auth.id) || ""
|
|
1425
|
-
}, isTyping: true, alwaysShowSend: safeContextProperty("loading", false) ? false : true, infiniteScroll: true, renderSend, renderInputToolbar, minInputToolbarHeight: 50, renderActions, renderAccessory: !!((
|
|
1497
|
+
}, isTyping: true, alwaysShowSend: safeContextProperty("loading", false) ? false : true, infiniteScroll: true, renderSend, renderInputToolbar, minInputToolbarHeight: 50, renderActions, renderAccessory: !!((_t = state == null ? void 0 : state.context) == null ? void 0 : _t.selectedImage) ? renderAccessory : void 0, renderMessage, maxInputLength: 1e3, placeholder: "Type a message...", showUserAvatar: true, showAvatarForEveryMessage: false, inverted: true, parsePatterns: (linkStyle) => [{
|
|
1426
1498
|
type: "url",
|
|
1427
1499
|
style: __spreadProps(__spreadValues({}, linkStyle), {
|
|
1428
1500
|
color: colors.blue[500]
|