@messenger-box/platform-mobile 10.0.3-alpha.18 → 10.0.3-alpha.180

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.
Files changed (98) hide show
  1. package/lib/compute.js +2 -3
  2. package/lib/compute.js.map +1 -1
  3. package/lib/index.js.map +1 -1
  4. package/lib/module.js.map +1 -1
  5. package/lib/queries/inboxQueries.js +65 -0
  6. package/lib/queries/inboxQueries.js.map +1 -0
  7. package/lib/routes.json +2 -3
  8. package/lib/screens/inbox/DialogMessages.js +8 -3
  9. package/lib/screens/inbox/DialogMessages.js.map +1 -1
  10. package/lib/screens/inbox/DialogThreadMessages.js +6 -11
  11. package/lib/screens/inbox/DialogThreadMessages.js.map +1 -1
  12. package/lib/screens/inbox/DialogThreads.js +58 -20
  13. package/lib/screens/inbox/DialogThreads.js.map +1 -1
  14. package/lib/screens/inbox/Inbox.js.map +1 -1
  15. package/lib/screens/inbox/components/CachedImage/consts.js.map +1 -1
  16. package/lib/screens/inbox/components/CachedImage/index.js +125 -115
  17. package/lib/screens/inbox/components/CachedImage/index.js.map +1 -1
  18. package/lib/screens/inbox/components/DialogItem.js +160 -0
  19. package/lib/screens/inbox/components/DialogItem.js.map +1 -0
  20. package/lib/screens/inbox/components/GiftedChatInboxComponent.js +313 -0
  21. package/lib/screens/inbox/components/GiftedChatInboxComponent.js.map +1 -0
  22. package/lib/screens/inbox/components/SlackMessageContainer/ImageViewerModal.js +2 -0
  23. package/lib/screens/inbox/components/SlackMessageContainer/ImageViewerModal.js.map +1 -1
  24. package/lib/screens/inbox/components/SlackMessageContainer/PaymentMessage.js +194 -0
  25. package/lib/screens/inbox/components/SlackMessageContainer/PaymentMessage.js.map +1 -0
  26. package/lib/screens/inbox/components/SlackMessageContainer/SlackBubble.js +144 -32
  27. package/lib/screens/inbox/components/SlackMessageContainer/SlackBubble.js.map +1 -1
  28. package/lib/screens/inbox/components/SlackMessageContainer/SlackMessage.js +3 -4
  29. package/lib/screens/inbox/components/SlackMessageContainer/SlackMessage.js.map +1 -1
  30. package/lib/screens/inbox/components/SubscriptionHandler.js +22 -0
  31. package/lib/screens/inbox/components/SubscriptionHandler.js.map +1 -0
  32. package/lib/screens/inbox/components/ThreadsViewItem.js +67 -47
  33. package/lib/screens/inbox/components/ThreadsViewItem.js.map +1 -1
  34. package/lib/screens/inbox/config/config.js +4 -2
  35. package/lib/screens/inbox/config/config.js.map +1 -1
  36. package/lib/screens/inbox/containers/ConversationView.js +1098 -1093
  37. package/lib/screens/inbox/containers/ConversationView.js.map +1 -1
  38. package/lib/screens/inbox/containers/Dialogs.js +179 -333
  39. package/lib/screens/inbox/containers/Dialogs.js.map +1 -1
  40. package/lib/screens/inbox/containers/ThreadConversationView.js +873 -866
  41. package/lib/screens/inbox/containers/ThreadConversationView.js.map +1 -1
  42. package/lib/screens/inbox/containers/ThreadsView.js +81 -54
  43. package/lib/screens/inbox/containers/ThreadsView.js.map +1 -1
  44. package/lib/screens/inbox/hooks/useInboxMessages.js +31 -0
  45. package/lib/screens/inbox/hooks/useInboxMessages.js.map +1 -0
  46. package/lib/screens/inbox/hooks/useSafeDialogThreadsMachine.js +108 -0
  47. package/lib/screens/inbox/hooks/useSafeDialogThreadsMachine.js.map +1 -0
  48. package/lib/screens/inbox/workflow/dialog-threads-xstate.js +151 -0
  49. package/lib/screens/inbox/workflow/dialog-threads-xstate.js.map +1 -0
  50. package/package.json +5 -5
  51. package/CHANGELOG.md +0 -156
  52. package/jest.config.js +0 -24
  53. package/lib/screens/inbox/components/DialogsListItem.js +0 -175
  54. package/lib/screens/inbox/components/DialogsListItem.js.map +0 -1
  55. package/lib/screens/inbox/components/ServiceDialogsListItem.js +0 -165
  56. package/lib/screens/inbox/components/ServiceDialogsListItem.js.map +0 -1
  57. package/lib/screens/inbox/containers/workflow/conversation-xstate.js +0 -380
  58. package/lib/screens/inbox/containers/workflow/conversation-xstate.js.map +0 -1
  59. package/lib/screens/inbox/containers/workflow/dialogs-xstate.js +0 -235
  60. package/lib/screens/inbox/containers/workflow/dialogs-xstate.js.map +0 -1
  61. package/lib/screens/inbox/containers/workflow/thread-conversation-xstate.js +0 -438
  62. package/lib/screens/inbox/containers/workflow/thread-conversation-xstate.js.map +0 -1
  63. package/rollup.config.mjs +0 -45
  64. package/src/components/index.ts +0 -0
  65. package/src/compute.ts +0 -63
  66. package/src/index.ts +0 -7
  67. package/src/module.ts +0 -10
  68. package/src/navigation/InboxNavigation.tsx +0 -102
  69. package/src/navigation/index.ts +0 -1
  70. package/src/screens/inbox/DialogMessages.tsx +0 -21
  71. package/src/screens/inbox/DialogThreadMessages.tsx +0 -97
  72. package/src/screens/inbox/DialogThreads.tsx +0 -129
  73. package/src/screens/inbox/Inbox.tsx +0 -17
  74. package/src/screens/inbox/components/CachedImage/consts.ts +0 -6
  75. package/src/screens/inbox/components/CachedImage/index.tsx +0 -223
  76. package/src/screens/inbox/components/DialogsHeader.tsx +0 -30
  77. package/src/screens/inbox/components/DialogsListItem.tsx +0 -302
  78. package/src/screens/inbox/components/ServiceDialogsListItem.tsx +0 -287
  79. package/src/screens/inbox/components/SlackMessageContainer/ImageViewerModal.tsx +0 -113
  80. package/src/screens/inbox/components/SlackMessageContainer/SlackBubble.tsx +0 -313
  81. package/src/screens/inbox/components/SlackMessageContainer/SlackMessage.tsx +0 -145
  82. package/src/screens/inbox/components/SlackMessageContainer/index.ts +0 -3
  83. package/src/screens/inbox/components/SupportServiceDialogsListItem.tsx +0 -283
  84. package/src/screens/inbox/components/ThreadsViewItem.tsx +0 -321
  85. package/src/screens/inbox/config/config.ts +0 -15
  86. package/src/screens/inbox/config/index.ts +0 -1
  87. package/src/screens/inbox/containers/ConversationView.tsx +0 -1782
  88. package/src/screens/inbox/containers/Dialogs.tsx +0 -544
  89. package/src/screens/inbox/containers/SupportServiceDialogs.tsx +0 -119
  90. package/src/screens/inbox/containers/ThreadConversationView.tsx +0 -1537
  91. package/src/screens/inbox/containers/ThreadsView.tsx +0 -305
  92. package/src/screens/inbox/containers/workflow/apollo/handleResult.ts +0 -20
  93. package/src/screens/inbox/containers/workflow/conversation-xstate.ts +0 -313
  94. package/src/screens/inbox/containers/workflow/dialogs-xstate.ts +0 -196
  95. package/src/screens/inbox/containers/workflow/thread-conversation-xstate.ts +0 -401
  96. package/src/screens/index.ts +0 -4
  97. package/tsconfig.json +0 -13
  98. package/webpack.config.js +0 -58
@@ -1 +1 @@
1
- {"version":3,"file":"Dialogs.js","sources":["../../../../src/screens/inbox/containers/Dialogs.tsx"],"sourcesContent":["import React, { useCallback, useMemo, useEffect, useState, useRef } 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';\nimport { dialogsXstate, Actions as DialogsActions, BaseState, MainState } from './workflow/dialogs-xstate';\n\nexport interface InboxProps {\n channelFilters?: Record<string, unknown>;\n channelRole?: string;\n supportServices: boolean;\n}\n\n// Define state type for the state machine\ninterface 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 };\n value: string;\n matches?: (stateValue: string) => boolean;\n}\n\n// Interface for the return type to ensure proper typing\ntype UseSafeMachineReturnType = [SafeStateType & { matches: (stateValue: string) => boolean }, (event: any) => void];\n\n// Create a safer version of useMachine to handle potential errors\nfunction useSafeMachine(machine): UseSafeMachineReturnType {\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 },\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('Dialogs Event received:', event.type);\n\n // Handle specific events manually\n if (event.type === DialogsActions.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 },\n value: BaseState.FetchChannels,\n }));\n } else if (event.type === DialogsActions.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 === DialogsActions.REFRESH_CHANNELS) {\n setState((prev) => ({\n ...prev,\n context: {\n ...prev.context,\n refreshing: true,\n },\n value: MainState.RefreshChannels,\n }));\n } else if (event.type === DialogsActions.SELECT_CHANNEL) {\n setState((prev) => ({\n ...prev,\n context: {\n ...prev.context,\n selectedChannelId: event.data?.channelId || null,\n },\n value: MainState.SelectChannel,\n }));\n } else if (event.type === DialogsActions.START_LOADING) {\n setState((prev) => ({\n ...prev,\n context: {\n ...prev.context,\n loading: true,\n },\n }));\n } else if (event.type === DialogsActions.STOP_LOADING) {\n setState((prev) => ({\n ...prev,\n context: {\n ...prev.context,\n loading: false,\n },\n }));\n } else if (event.type === 'FETCH_CHANNELS_SUCCESS') {\n setState((prev) => ({\n ...prev,\n context: {\n ...prev.context,\n channels: event.data?.channels || [],\n loading: false,\n refreshing: false,\n },\n value: BaseState.Idle,\n }));\n } else if (event.type === 'REFRESH_CHANNELS_SUCCESS') {\n setState((prev) => ({\n ...prev,\n context: {\n ...prev.context,\n channels: event.data?.channels || [],\n refreshing: false,\n },\n value: BaseState.Idle,\n }));\n } else if (event.type === 'ERROR') {\n setState((prev) => ({\n ...prev,\n context: {\n ...prev.context,\n error: event.data?.message || 'An error occurred',\n loading: false,\n refreshing: false,\n },\n value: BaseState.Error,\n }));\n }\n } catch (err) {\n console.error('Error in send function:', err);\n }\n }, []);\n\n // Add a matches method for state compatibility\n const stateWithMatches = useMemo(() => {\n return {\n ...state,\n matches: (value: string) => state.value === value,\n };\n }, [state]);\n\n // Return as a tuple to match useMachine API\n return [stateWithMatches, send];\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 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 // 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 // Use cleanup function to prevent setting state after unmount\n useEffect(() => {\n return () => {\n isMountedRef.current = false;\n };\n }, []);\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 onCompleted: (data) => {\n if (isMountedRef.current) {\n const allChannels = [...(data?.supportServiceChannels ?? []), ...(data?.channelsByUser ?? [])];\n safeSend({\n type: 'FETCH_CHANNELS_SUCCESS',\n data: { channels: allChannels },\n });\n }\n },\n onError: (error) => {\n if (isMountedRef.current) {\n safeSend({\n type: 'ERROR',\n data: { message: error.message },\n });\n }\n },\n });\n\n // Set initial context once on mount, but don't fetch data as useFocusEffect will handle it\n useEffect(() => {\n console.log('Setting initial context');\n // Only set the initial context with configuration, but don't trigger data fetching\n // This prevents double fetching with useFocusEffect\n safeSend({\n type: DialogsActions.INITIAL_CONTEXT,\n data: {\n channelRole,\n channelFilters: channelFiltersRef.current,\n supportServices,\n selectedChannelId: params?.channelId,\n },\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []); // Empty dependency array ensures this runs only once on mount\n\n // Ref to track if we've already refreshed to prevent infinite loop\n const hasRefreshedRef = useRef(false);\n // Ref to store the current channelFilters to detect real changes\n const channelFiltersRef = useRef(channelFilters);\n\n // Shared function to handle channel refreshing\n const refreshChannels = useCallback(() => {\n // Skip if already refreshing to prevent loops\n if (safeContextProperty('refreshing', false)) {\n console.log('Skipping refresh - already in progress');\n return Promise.resolve();\n }\n\n console.log('Starting channel refresh');\n\n // Start refreshing\n safeSend({\n type: DialogsActions.REFRESH_CHANNELS,\n });\n\n // Use ref for filters to avoid dependency cycles\n const currentFilters = channelFiltersRef.current;\n\n // Fetch the channels\n return getChannelsRefetch({\n role: channelRole,\n criteria: currentFilters,\n supportServices: supportServices ? true : false,\n supportServiceCriteria: {\n type: RoomType.Service,\n },\n })\n .then((data) => {\n if (isMountedRef.current) {\n const allChannels = [\n ...(data?.data?.supportServiceChannels ?? []),\n ...(data?.data?.channelsByUser ?? []),\n ];\n console.log(`Refresh completed, found ${allChannels.length} channels`);\n safeSend({\n type: 'REFRESH_CHANNELS_SUCCESS',\n data: { channels: allChannels },\n });\n }\n })\n .catch((error) => {\n if (isMountedRef.current) {\n console.error('Channel refresh error:', error.message);\n safeSend({\n type: 'ERROR',\n data: { message: error.message },\n });\n }\n });\n }, [channelRole, supportServices, getChannelsRefetch, safeSend, safeContextProperty]);\n\n // Update the channelFiltersRef when channelFilters changes\n useEffect(() => {\n const filtersChanged = JSON.stringify(channelFiltersRef.current) !== JSON.stringify(channelFilters);\n if (filtersChanged) {\n console.log('Channel filters changed, updating ref');\n channelFiltersRef.current = channelFilters;\n\n // Only refresh if already mounted and initialized\n if (isMountedRef.current && safeContextProperty('channelRole') !== null) {\n console.log('Refreshing due to filter change');\n refreshChannels();\n }\n }\n }, [channelFilters, refreshChannels, safeContextProperty]);\n\n // Handle focus effects\n useFocusEffect(\n useCallback(() => {\n if (!isFocused) return;\n\n console.log('Screen focused, checking if refresh needed');\n\n // Only refresh on focus if we're not already loading and haven't refreshed\n if (isMountedRef.current && !hasRefreshedRef.current) {\n console.log('Refreshing on focus');\n hasRefreshedRef.current = true;\n refreshChannels();\n }\n\n return () => {\n // Reset the ref when the screen loses focus\n console.log('Screen unfocused, resetting refresh state');\n hasRefreshedRef.current = false;\n };\n }, [isFocused, refreshChannels]),\n );\n\n const handleRefresh = useCallback(() => {\n // Don't allow manual refresh while already refreshing\n if (safeContextProperty('refreshing', false)) {\n console.log('Manual refresh ignored - refresh already in progress');\n return;\n }\n\n console.log('Manual refresh triggered');\n refreshChannels();\n }, [refreshChannels, safeContextProperty]);\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, auth?.id]);\n\n const handleSelectChannel = useCallback(\n (id: any, title: any) => {\n safeSend({\n type: DialogsActions.SELECT_CHANNEL,\n data: { channelId: id },\n });\n\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 [params, navigation, channelRole, safeSend],\n );\n\n const handleSelectServiceChannel = useCallback(\n (id: any, title: any, postParentId: any) => {\n safeSend({\n type: DialogsActions.SELECT_CHANNEL,\n data: { channelId: id },\n });\n\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 [params, navigation, channelRole, safeSend],\n );\n\n const searchQuery = safeContextProperty('searchQuery', '');\n\n return (\n <Box className=\"p-2\">\n <FlatList\n data={channels && channels?.length > 0 ? channels : []}\n onRefresh={handleRefresh}\n refreshing={safeContextProperty('refreshing', false)}\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={safeContextProperty('refreshing', false)}\n selectedChannelId={safeContextProperty('selectedChannelId', params?.channelId)}\n role={channelRole}\n />\n ) : (\n <DialogsListItem\n onOpen={handleSelectChannel}\n currentUser={auth}\n channel={channel}\n selectedChannelId={safeContextProperty('selectedChannelId', params?.channelId)}\n />\n )\n }\n ListEmptyComponent={() => (\n <>\n {userChannelsLoading || safeContextProperty('loading', false) ? (\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\n placeholder=\"Search\"\n value={searchQuery}\n onChangeText={(text) =>\n safeSend({\n type: DialogsActions.SET_SEARCH_QUERY,\n data: { searchQuery: text },\n })\n }\n />\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":["DialogsActions","_a","React"],"mappings":"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"}
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, shallowEqual } from 'react-redux';\nimport { useNavigation, useRoute, useFocusEffect } from '@react-navigation/native';\nimport { DialogItem } from '../components/DialogItem';\n// import { useChannelsQuery, CHAT_MESSAGE_ADDED } from '../../../queries/inboxQueries';\nimport {\n useGetChannelsByUserQuery,\n useGetChannelsByUserWithLastMessageQuery,\n OnChatMessageAddedDocument,\n} 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 { 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 channelType = channelFilters?.type ?? RoomType.Direct;\n channelFilters.type = supportServices ? [channelType, RoomType.Service] : channelType;\n const { params } = useRoute<any>();\n const auth = useSelector(userSelector, shallowEqual);\n const navigation = useNavigation<any>();\n // Local state for UI control - only keeping searchQuery as it's needed for local filtering\n const [searchQuery, setSearchQuery] = useState('');\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 } = useGetChannelsByUserWithLastMessageQuery({\n variables: {\n role: channelRole,\n criteria: channelFilters,\n // supportServices: false,\n // supportServices: supportServices ? true : false,\n // supportServiceCriteria: {\n // type: RoomType.Service,\n // },\n limit: 15,\n skip: 0,\n },\n notifyOnNetworkStatusChange: true,\n fetchPolicy: 'cache-and-network',\n });\n\n // Subscribe to new messages to update lastMessage in channels\n // useEffect(() => {\n // if (!data?.channelsByUser?.length || !subscribeToMore) return;\n\n // const subscriptions: (() => void)[] = [];\n\n // // Subscribe to each channel for real-time lastMessage updates\n // data.channelsByUser.forEach(channel => {\n // if (!channel?.id) return;\n\n // const unsubscribe = subscribeToMore({\n // document: OnChatMessageAddedDocument,\n // variables: {\n // channelId: channel.id.toString(),\n // },\n // updateQuery: (prev, { subscriptionData }: any) => {\n // if (!subscriptionData?.data?.chatMessageAdded || !isMountedRef.current) {\n // return prev;\n // }\n\n // const newMessage = subscriptionData.data.chatMessageAdded;\n // const channelId = newMessage.channel?.id;\n\n // if (!channelId) return prev;\n\n // // Update the specific channel's lastMessage\n // const updatedChannels = (prev.channelsByUser || []).map(ch => {\n // if (ch?.id === channelId) {\n // return {\n // ...ch,\n // lastMessage: {\n // id: newMessage.id,\n // message: newMessage.message || '',\n // createdAt: newMessage.createdAt,\n // updatedAt: newMessage.updatedAt,\n // author: newMessage.author ? {\n // id: newMessage.author.id,\n // givenName: newMessage.author.givenName,\n // familyName: newMessage.author.familyName,\n // username: newMessage.author.username,\n // } : null,\n // files: newMessage.files ? {\n // totalCount: newMessage.files.totalCount || 0,\n // data: (newMessage.files.data || []).map(file => ({\n // id: file.id,\n // name: file.name,\n // extension: file.extension,\n // mimeType: file.mimeType,\n // }))\n // } : null,\n // },\n // updatedAt: newMessage.createdAt,\n // lastPostAt: newMessage.createdAt,\n // };\n // }\n // return ch;\n // });\n\n // return {\n // ...prev,\n // channelsByUser: updatedChannels,\n // };\n // },\n // onError: (error) => {\n // console.error(`LastMessage subscription error for channel ${channel.id}:`, error);\n // },\n // });\n\n // subscriptions.push(unsubscribe);\n // });\n\n // // Cleanup subscriptions\n // return () => {\n // subscriptions.forEach(unsub => {\n // try {\n // unsub?.();\n // } catch (error) {\n // console.error('Error unsubscribing from lastMessage updates:', error);\n // }\n // });\n // };\n // }, [data?.channelsByUser, subscribeToMore]);\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;\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 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 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 allChannels = useMemo(() => [...(data?.channelsByUser || [])], [data]);\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 (\n <DialogItem\n key={key}\n onOpen={channel?.type === RoomType.Service ? handleSelectServiceChannel : handleSelectChannel}\n currentUser={auth}\n channel={channel}\n />\n );\n },\n [auth, handleSelectChannel, handleSelectServiceChannel],\n );\n\n // Memoize ListFooterComponent and ListEmptyComponent\n const ListFooterComponent = useMemo(\n () =>\n loading ? (\n <Center className=\"py-4\">\n <Spinner color={colors.blue[500]} size=\"small\" />\n </Center>\n ) : null,\n [loading],\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 (loading || !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');\n\n fetchMore({\n variables: {\n skip: channels.length,\n },\n updateQuery: (prev, { fetchMoreResult }) => {\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 });\n }, [fetchMore, loading, data, channels.length]);\n\n return (\n <Box className=\"p-2\">\n <FlatList\n data={displayChannels}\n onRefresh={handlePullToRefresh}\n refreshing={loading}\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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"}