@messenger-box/platform-mobile 10.0.3-alpha.20 → 10.0.3-alpha.201

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 (112) hide show
  1. package/lib/components/messages-container-ui/BuildModeView.js +428 -0
  2. package/lib/components/messages-container-ui/BuildModeView.js.map +1 -0
  3. package/lib/components/messages-container-ui/MessagesContainerUI.js +55 -0
  4. package/lib/components/messages-container-ui/MessagesContainerUI.js.map +1 -0
  5. package/lib/components/messages-container-ui/PlanModeView.js +336 -0
  6. package/lib/components/messages-container-ui/PlanModeView.js.map +1 -0
  7. package/lib/compute.js +2 -3
  8. package/lib/compute.js.map +1 -1
  9. package/lib/index.js +1 -1
  10. package/lib/index.js.map +1 -1
  11. package/lib/module.js.map +1 -1
  12. package/lib/queries/inboxQueries.js +62 -0
  13. package/lib/queries/inboxQueries.js.map +1 -0
  14. package/lib/routes.json +2 -3
  15. package/lib/screens/inbox/DialogMessages.js +8 -3
  16. package/lib/screens/inbox/DialogMessages.js.map +1 -1
  17. package/lib/screens/inbox/DialogThreadMessages.js +6 -11
  18. package/lib/screens/inbox/DialogThreadMessages.js.map +1 -1
  19. package/lib/screens/inbox/DialogThreads.js +58 -20
  20. package/lib/screens/inbox/DialogThreads.js.map +1 -1
  21. package/lib/screens/inbox/Inbox.js.map +1 -1
  22. package/lib/screens/inbox/components/CachedImage/consts.js +1 -1
  23. package/lib/screens/inbox/components/CachedImage/consts.js.map +1 -1
  24. package/lib/screens/inbox/components/CachedImage/index.js +125 -115
  25. package/lib/screens/inbox/components/CachedImage/index.js.map +1 -1
  26. package/lib/screens/inbox/components/DialogItem.js +160 -0
  27. package/lib/screens/inbox/components/DialogItem.js.map +1 -0
  28. package/lib/screens/inbox/components/GiftedChatInboxComponent.js +315 -0
  29. package/lib/screens/inbox/components/GiftedChatInboxComponent.js.map +1 -0
  30. package/lib/screens/inbox/components/SlackMessageContainer/ImageViewerModal.js +3 -1
  31. package/lib/screens/inbox/components/SlackMessageContainer/ImageViewerModal.js.map +1 -1
  32. package/lib/screens/inbox/components/SlackMessageContainer/PaymentMessage.js +194 -0
  33. package/lib/screens/inbox/components/SlackMessageContainer/PaymentMessage.js.map +1 -0
  34. package/lib/screens/inbox/components/SlackMessageContainer/SlackBubble.js +149 -36
  35. package/lib/screens/inbox/components/SlackMessageContainer/SlackBubble.js.map +1 -1
  36. package/lib/screens/inbox/components/SlackMessageContainer/SlackMessage.js +4 -5
  37. package/lib/screens/inbox/components/SlackMessageContainer/SlackMessage.js.map +1 -1
  38. package/lib/screens/inbox/components/SubscriptionHandler.js +22 -0
  39. package/lib/screens/inbox/components/SubscriptionHandler.js.map +1 -0
  40. package/lib/screens/inbox/components/ThreadsViewItem.js +67 -47
  41. package/lib/screens/inbox/components/ThreadsViewItem.js.map +1 -1
  42. package/lib/screens/inbox/config/config.js +4 -2
  43. package/lib/screens/inbox/config/config.js.map +1 -1
  44. package/lib/screens/inbox/containers/ConversationView.js +1099 -1094
  45. package/lib/screens/inbox/containers/ConversationView.js.map +1 -1
  46. package/lib/screens/inbox/containers/Dialogs.js +132 -534
  47. package/lib/screens/inbox/containers/Dialogs.js.map +1 -1
  48. package/lib/screens/inbox/containers/ThreadConversationView.js +876 -1357
  49. package/lib/screens/inbox/containers/ThreadConversationView.js.map +1 -1
  50. package/lib/screens/inbox/containers/ThreadsView.js +81 -54
  51. package/lib/screens/inbox/containers/ThreadsView.js.map +1 -1
  52. package/lib/screens/inbox/hooks/useInboxMessages.js +31 -0
  53. package/lib/screens/inbox/hooks/useInboxMessages.js.map +1 -0
  54. package/lib/screens/inbox/hooks/useSafeDialogThreadsMachine.js +108 -0
  55. package/lib/screens/inbox/hooks/useSafeDialogThreadsMachine.js.map +1 -0
  56. package/lib/screens/inbox/workflow/dialog-threads-xstate.js +151 -0
  57. package/lib/screens/inbox/workflow/dialog-threads-xstate.js.map +1 -0
  58. package/package.json +9 -7
  59. package/CHANGELOG.md +0 -164
  60. package/jest.config.js +0 -24
  61. package/lib/screens/inbox/components/DialogsListItem.js +0 -548
  62. package/lib/screens/inbox/components/DialogsListItem.js.map +0 -1
  63. package/lib/screens/inbox/components/ServiceDialogsListItem.js +0 -489
  64. package/lib/screens/inbox/components/ServiceDialogsListItem.js.map +0 -1
  65. package/lib/screens/inbox/components/workflow/dialogs-list-item-xstate.js +0 -175
  66. package/lib/screens/inbox/components/workflow/dialogs-list-item-xstate.js.map +0 -1
  67. package/lib/screens/inbox/components/workflow/service-dialogs-list-item-xstate.js +0 -191
  68. package/lib/screens/inbox/components/workflow/service-dialogs-list-item-xstate.js.map +0 -1
  69. package/lib/screens/inbox/containers/workflow/conversation-xstate.js +0 -380
  70. package/lib/screens/inbox/containers/workflow/conversation-xstate.js.map +0 -1
  71. package/lib/screens/inbox/containers/workflow/dialogs-xstate.js +0 -211
  72. package/lib/screens/inbox/containers/workflow/dialogs-xstate.js.map +0 -1
  73. package/lib/screens/inbox/containers/workflow/thread-conversation-xstate.js +0 -438
  74. package/lib/screens/inbox/containers/workflow/thread-conversation-xstate.js.map +0 -1
  75. package/rollup.config.mjs +0 -45
  76. package/src/components/index.ts +0 -0
  77. package/src/compute.ts +0 -63
  78. package/src/index.ts +0 -7
  79. package/src/module.ts +0 -10
  80. package/src/navigation/InboxNavigation.tsx +0 -102
  81. package/src/navigation/index.ts +0 -1
  82. package/src/screens/inbox/DialogMessages.tsx +0 -21
  83. package/src/screens/inbox/DialogThreadMessages.tsx +0 -97
  84. package/src/screens/inbox/DialogThreads.tsx +0 -129
  85. package/src/screens/inbox/Inbox.tsx +0 -17
  86. package/src/screens/inbox/components/CachedImage/consts.ts +0 -6
  87. package/src/screens/inbox/components/CachedImage/index.tsx +0 -223
  88. package/src/screens/inbox/components/DialogsHeader.tsx +0 -30
  89. package/src/screens/inbox/components/DialogsListItem.tsx +0 -819
  90. package/src/screens/inbox/components/ServiceDialogsListItem.tsx +0 -679
  91. package/src/screens/inbox/components/SlackMessageContainer/ImageViewerModal.tsx +0 -113
  92. package/src/screens/inbox/components/SlackMessageContainer/SlackBubble.tsx +0 -313
  93. package/src/screens/inbox/components/SlackMessageContainer/SlackMessage.tsx +0 -145
  94. package/src/screens/inbox/components/SlackMessageContainer/index.ts +0 -3
  95. package/src/screens/inbox/components/SupportServiceDialogsListItem.tsx +0 -301
  96. package/src/screens/inbox/components/ThreadsViewItem.tsx +0 -321
  97. package/src/screens/inbox/components/workflow/dialogs-list-item-xstate.ts +0 -145
  98. package/src/screens/inbox/components/workflow/service-dialogs-list-item-xstate.ts +0 -159
  99. package/src/screens/inbox/config/config.ts +0 -15
  100. package/src/screens/inbox/config/index.ts +0 -1
  101. package/src/screens/inbox/containers/ConversationView.tsx +0 -1782
  102. package/src/screens/inbox/containers/Dialogs.tsx +0 -794
  103. package/src/screens/inbox/containers/SupportServiceDialogs.tsx +0 -119
  104. package/src/screens/inbox/containers/ThreadConversationView.tsx +0 -2312
  105. package/src/screens/inbox/containers/ThreadsView.tsx +0 -305
  106. package/src/screens/inbox/containers/workflow/apollo/handleResult.ts +0 -20
  107. package/src/screens/inbox/containers/workflow/conversation-xstate.ts +0 -313
  108. package/src/screens/inbox/containers/workflow/dialogs-xstate.ts +0 -196
  109. package/src/screens/inbox/containers/workflow/thread-conversation-xstate.ts +0 -401
  110. package/src/screens/index.ts +0 -4
  111. package/tsconfig.json +0 -13
  112. package/webpack.config.js +0 -58
@@ -1 +0,0 @@
1
- {"version":3,"file":"DialogsListItem.js","sources":["../../../../src/screens/inbox/components/DialogsListItem.tsx"],"sourcesContent":["import React, { useMemo, useState, useCallback, useRef, useEffect } from 'react';\nimport {\n Text,\n Image,\n Pressable,\n HStack,\n Box,\n AvatarGroup,\n Avatar,\n AvatarFallbackText,\n AvatarImage,\n AvatarBadge,\n View,\n} from '@admin-layout/gluestack-ui-mobile';\nimport { format, isToday, isYesterday } from 'date-fns';\nimport { useFocusEffect } from '@react-navigation/native';\nimport { IChannel, SortEnum, IUserAccount } from 'common';\nimport {\n useMessagesQuery,\n useOnChatMessageAddedSubscription,\n OnChatMessageAddedDocument as CHAT_MESSAGE_ADDED,\n useUserAccountQuery,\n} from 'common/graphql';\nimport { startCase } from 'lodash-es';\nimport colors from 'tailwindcss/colors';\nimport { dialogsListItemXstate, Actions, BaseState } from './workflow/dialogs-list-item-xstate';\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\nexport interface IDialogListChannel extends IChannel {\n users: IUserAccount[];\n}\n\nexport interface IDialogListItemProps {\n currentUser?: any;\n users?: any;\n selectedChannelId?: any;\n channel?: any;\n onOpen: (id: any, title: any) => void;\n forceRefresh?: 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 channelId: string | null;\n currentUser: any;\n messages: any[];\n loading: boolean;\n error: string | null;\n title: string;\n channelMembers: any[];\n lastMessage: any;\n };\n value: string;\n matches?: (stateValue: string) => boolean;\n }\n\n // Initialize state with default values to prevent undefined errors\n const [state, setState] = useState<SafeStateType>({\n context: {\n channelId: null,\n currentUser: null,\n messages: [],\n loading: false,\n error: null,\n title: '',\n channelMembers: [],\n lastMessage: null,\n },\n value: BaseState.Idle,\n matches: (stateValue) => stateValue === BaseState.Idle,\n });\n\n // Implement a send function that updates state safely\n const send = useCallback((event) => {\n try {\n // Handle specific events manually\n if (event.type === Actions.INITIAL_CONTEXT) {\n setState((prev) => ({\n ...prev,\n context: {\n ...prev.context,\n channelId: event.data?.channelId || null,\n currentUser: event.data?.currentUser || null,\n loading: true,\n },\n value: BaseState.FetchingMessages,\n }));\n } else if (event.type === Actions.UPDATE_MESSAGES) {\n setState((prev) => {\n if (event.data?.messages) {\n // Handling bulk messages (initial load)\n const messages = event.data.messages;\n\n // If a direct last message was provided (from subscription), use it\n if (event.data?.directLastMessage) {\n console.log('Using direct last message from event:', {\n id: event.data.directLastMessage.id,\n message: event.data.directLastMessage.message?.substring(0, 20) + '...',\n });\n\n return {\n ...prev,\n context: {\n ...prev.context,\n messages: messages,\n lastMessage: event.data.directLastMessage,\n loading: false,\n },\n };\n }\n\n // Otherwise sort messages by date to find the most recent\n const sortedMessages = [...messages].sort(\n (a, b) =>\n new Date(b?.updatedAt || b?.createdAt).getTime() -\n new Date(a?.updatedAt || a?.createdAt).getTime(),\n );\n\n const newLastMessage = sortedMessages.length > 0 ? sortedMessages[0] : null;\n\n // Log the update for debugging\n if (newLastMessage) {\n console.log('Setting last message from bulk update:', {\n id: newLastMessage.id,\n message: newLastMessage.message?.substring(0, 20) + '...',\n date: newLastMessage.updatedAt || newLastMessage.createdAt,\n });\n }\n\n return {\n ...prev,\n context: {\n ...prev.context,\n messages: messages,\n lastMessage: newLastMessage,\n loading: false,\n },\n };\n } else if (event.data?.message) {\n // Handling single message (from subscription)\n const newMessage = event.data.message;\n const updatedMessages = [...prev.context.messages, newMessage];\n\n // Use the new message directly as the last message\n // This ensures immediate update on subscription\n console.log('Setting new message as lastMessage from subscription:', {\n id: newMessage.id,\n message: newMessage.message?.substring(0, 20) + '...',\n date: newMessage.createdAt || newMessage.updatedAt,\n });\n\n return {\n ...prev,\n context: {\n ...prev.context,\n messages: updatedMessages,\n lastMessage: newMessage, // Use the new message directly\n loading: false,\n },\n };\n }\n return prev;\n });\n } else if (event.type === Actions.SET_TITLE) {\n setState((prev) => ({\n ...prev,\n context: {\n ...prev.context,\n title: event.data?.title || '',\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 setState((prev) => ({\n ...prev,\n context: {\n ...prev.context,\n loading: false,\n },\n }));\n }\n } catch (error) {\n console.error('Error sending event to state machine:', error);\n }\n }, []);\n\n // Helper function to compute the last message from a list of messages\n const computeLastMessage = (messages) => {\n if (!messages || !messages.length) return null;\n\n // Always sort by dates in descending order (newest first)\n const sortedMessages = [...messages].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; // Newest first\n });\n\n // Return the most recent message\n const latestMsg = sortedMessages[0];\n\n // Debug log to see if we're selecting the right message\n if (latestMsg) {\n console.log('Selected most recent message:', {\n id: latestMsg.id,\n date: latestMsg.updatedAt || latestMsg.createdAt,\n text: latestMsg.message?.substring(0, 20) + '...',\n });\n }\n\n return latestMsg;\n };\n\n // Add a matches function that works with the current state value\n const stateWithMatches = useMemo(() => {\n return {\n ...state,\n matches: (stateValue) => {\n try {\n return state.value === stateValue;\n } catch (error) {\n console.error(`Error in matches function:`, error);\n return false;\n }\n },\n };\n }, [state]);\n\n // Return as a tuple to match useMachine API\n return [stateWithMatches, send] as const;\n}\n\n// LastMessage component definition\nconst LastMessageComponent = ({ subscribeToNewMessages, title, lastMessage, channelId }) => {\n // Subscribe to new messages when component mounts\n React.useEffect(() => {\n // Subscribe and store the unsubscribe function\n const unsubscribe = subscribeToNewMessages();\n return () => {\n // Cleanup subscription on unmount\n if (unsubscribe && typeof unsubscribe === 'function') {\n unsubscribe();\n }\n };\n }, [channelId, subscribeToNewMessages]);\n\n // Debug output for component rendering\n React.useEffect(() => {\n console.log(`LastMessageComponent rendered for channel ${channelId}:`, {\n hasLastMessage: !!lastMessage,\n messageId: lastMessage?.id,\n messageText: lastMessage?.message?.substring(0, 20) + (lastMessage?.message?.length > 20 ? '...' : ''),\n date: lastMessage?.createdAt ? new Date(lastMessage.createdAt).toISOString() : 'none',\n hasFiles: lastMessage?.files?.data?.length > 0,\n });\n }, [lastMessage, channelId]);\n\n const count = 30;\n const channelTitle = title?.slice(0, count) + (title?.length > count ? '...' : '') || '';\n\n // Define message display text\n let displayMessage = 'No messages yet';\n\n if (lastMessage) {\n if (lastMessage.message && lastMessage.message.trim() !== '') {\n // Show text message\n displayMessage = lastMessage.message;\n } else if (lastMessage.files?.data?.length > 0) {\n // Show message with files\n displayMessage = '📎 File attachment';\n } else {\n // Default for empty message\n displayMessage = '(Empty message)';\n }\n }\n\n // Determine the date/time to display\n const displayDate = lastMessage?.createdAt\n ? createdAtText(lastMessage.createdAt)\n : lastMessage?.updatedAt\n ? createdAtText(lastMessage.updatedAt)\n : '';\n\n return (\n <HStack space={'sm'} className=\"flex-1 justify-between\">\n <Box className=\"flex-[0.8]\">\n <Text color={colors.gray[600]} className=\"text-base text-wrap flex-wrap font-semibold\">\n {channelTitle}\n </Text>\n <Text color={colors.gray[600]} numberOfLines={1}>\n {displayMessage}\n </Text>\n </Box>\n\n <Box className=\"flex-[0.2]\">\n <Text color={colors.gray[500]}>{displayDate}</Text>\n </Box>\n </HStack>\n );\n};\n\n/**\n * TODO:\n * - Get Reservation info: reservation date, status\n * - Add ability to get property information: name, logo\n */\nexport const DialogsListItemComponent: React.FC<IDialogListItemProps> = function DialogsListItem({\n currentUser,\n // users,\n selectedChannelId,\n channel,\n onOpen,\n forceRefresh,\n}) {\n // Create a ref to track if component is mounted\n const isMountedRef = useRef(true);\n\n // Define parentId early to avoid linter errors\n const parentId: any = null;\n\n // Use our safer custom implementation instead of the problematic useMachine\n const [state, send] = useSafeMachine(dialogsListItemXstate);\n\n // Define safe access functions\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 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 // Query hooks for fetching messages\n const {\n data: messagesQuery,\n loading: messageLoading,\n refetch: refetchMessages,\n subscribeToMore,\n } = useMessagesQuery({\n variables: {\n channelId: channel?.id?.toString(),\n parentId: parentId,\n limit: 10,\n },\n fetchPolicy: 'cache-and-network', // Use cache first, then network\n refetchWritePolicy: 'overwrite', // Ensure refetches overwrite existing data\n nextFetchPolicy: 'network-only', // Force subsequent fetches to use network\n onCompleted: (data) => {\n console.log(\n `Completed message query for channel ${channel?.id}:`,\n data?.messages?.data?.length ? 'Has messages' : 'No messages',\n );\n },\n onError: (error) => {\n console.error(`Error fetching messages for channel ${channel?.id}:`, error);\n },\n });\n\n const {\n data: newMessage,\n loading: newMsgLoading,\n error: newMsgError,\n }: any = useOnChatMessageAddedSubscription({\n variables: {\n channelId: channel?.id?.toString(),\n },\n });\n\n // Initialize the state machine with context data\n useEffect(() => {\n if (channel?.id) {\n safeSend({\n type: Actions.INITIAL_CONTEXT,\n data: { channelId: channel.id, currentUser },\n });\n }\n\n // Cleanup function\n return () => {\n isMountedRef.current = false;\n };\n }, [channel?.id, currentUser, safeSend]);\n\n // Function to force refresh the component state\n const refreshDialogState = useCallback(() => {\n if (channel?.id && isMountedRef.current) {\n console.log('Forcing dialog state refresh for channel:', channel?.id);\n // First ensure we're in a loading state to trigger UI updates\n safeSend({ type: Actions.START_LOADING });\n\n // Set up the options for the query to force network fetch\n const options = {\n channelId: channel?.id?.toString(),\n parentId: parentId,\n limit: 10,\n };\n\n // Refetch messages from server\n refetchMessages(options)\n .then((result) => {\n // Update the state with fresh data\n if (result.data?.messages?.data && isMountedRef.current) {\n console.log(\n `Refreshed ${result.data.messages.data.length} messages for channel ${channel?.id}`,\n );\n\n // Get the most recent message for debug comparison\n const sortedMessages = [...result.data.messages.data].sort(\n (a, b) =>\n new Date(b?.updatedAt || b?.createdAt).getTime() -\n new Date(a?.updatedAt || a?.createdAt).getTime(),\n );\n\n const latestMessage = sortedMessages.length > 0 ? sortedMessages[0] : null;\n\n if (latestMessage) {\n console.log('Latest message after refresh:', {\n id: latestMessage.id,\n message: latestMessage.message?.substring(0, 20) + '...',\n date: latestMessage.createdAt || latestMessage.updatedAt,\n });\n }\n\n safeSend({\n type: Actions.UPDATE_MESSAGES,\n data: { messages: result.data.messages.data },\n });\n }\n safeSend({ type: Actions.STOP_LOADING });\n })\n .catch((err) => {\n console.error('Error refreshing dialog state:', err);\n safeSend({ type: Actions.STOP_LOADING });\n });\n }\n }, [channel?.id, refetchMessages, safeSend, isMountedRef, parentId]);\n\n // Track if this is the first time the component renders\n const firstRenderRef = useRef(true);\n\n // Track the last time we refreshed to prevent too frequent refreshes\n const lastRefreshRef = useRef(0);\n\n // Fix messages not refreshing when coming back from detail screen\n useFocusEffect(\n React.useCallback(() => {\n if (!channel?.id) return;\n\n console.log('DialogsListItem focused for channel:', channel?.id);\n\n // Skip refresh on first render as it's handled by other effects\n if (firstRenderRef.current) {\n console.log('Skipping initial focus refresh for channel:', channel?.id);\n firstRenderRef.current = false;\n return;\n }\n\n // Always force a refetch when coming back to this screen\n console.log('FOCUS EFFECT: Force refetching messages on navigation back for channel:', channel?.id);\n\n // Show loading state\n safeSend({ type: Actions.START_LOADING });\n\n // Use a direct refetch with network-only policy to force fresh data\n const fetchFreshData = async () => {\n try {\n // Set up the options for the query to force network fetch\n const options = {\n channelId: channel?.id?.toString(),\n parentId: parentId,\n limit: 10,\n };\n\n // Force a network-only fetch by using refetch without extra options\n // Apollo will use the parent query's fetch policy which we've set to network-only\n const result = await refetchMessages(options);\n\n // Log the refreshed data\n console.log(\n `FOCUS EFFECT: Refetched ${result?.data?.messages?.data?.length || 0} messages for channel ${\n channel?.id\n }`,\n );\n\n if (result?.data?.messages?.data && isMountedRef.current) {\n // Compare with current state to check if we're getting fresh data\n const currentMessages = safeContextProperty('messages', []);\n const fetchedMessages = result.data.messages.data;\n\n // Log comparison to see if we got new data\n console.log('Data comparison:', {\n currentCount: currentMessages.length,\n fetchedCount: fetchedMessages.length,\n isDifferent: JSON.stringify(currentMessages) !== JSON.stringify(fetchedMessages),\n });\n\n // Update state with fresh data\n safeSend({\n type: Actions.UPDATE_MESSAGES,\n data: { messages: fetchedMessages },\n });\n }\n } catch (error) {\n console.error('Error refetching messages on focus:', error);\n } finally {\n if (isMountedRef.current) {\n safeSend({ type: Actions.STOP_LOADING });\n }\n }\n };\n\n // Execute fetch\n fetchFreshData();\n\n return () => {\n // Cleanup function when unfocused\n };\n }, [channel?.id, refetchMessages, safeSend, parentId, isMountedRef]),\n );\n\n // Update messages in state when query data is available\n React.useEffect(() => {\n if (messagesQuery?.messages?.data && isMountedRef.current) {\n const messages = messagesQuery.messages.data;\n\n // Count messages with files\n const messagesWithFiles = messages.filter((msg) => msg?.files?.data?.length > 0);\n\n console.log(\n `Updating messages for channel ${channel?.id}, count:`,\n messages.length,\n `(${messagesWithFiles.length} with files)`,\n );\n\n if (messages.length > 0) {\n // Log the first message for debugging\n console.log('First message sample:', {\n id: messages[0].id,\n message: messages[0].message?.substring(0, 20) + '...',\n createdAt: messages[0].createdAt,\n hasFiles: messages[0]?.files?.data?.length > 0,\n });\n }\n\n safeSend({\n type: Actions.UPDATE_MESSAGES,\n data: { messages },\n });\n }\n }, [messagesQuery, safeSend, channel?.id, isMountedRef]);\n\n // Force a refresh on initial mount to ensure we have fresh data\n useEffect(() => {\n if (channel?.id && isMountedRef.current) {\n const timer = setTimeout(() => {\n if (isMountedRef.current) {\n console.log('Initial data refresh for channel:', channel.id);\n refreshDialogState();\n }\n }, 100);\n\n return () => {\n clearTimeout(timer);\n };\n }\n }, [channel?.id, refreshDialogState, isMountedRef]);\n\n // Use forceRefresh prop to trigger immediate refresh\n useEffect(() => {\n if (forceRefresh && channel?.id && isMountedRef.current) {\n console.log(`Force refreshing messages for channel ${channel?.id} due to forceRefresh prop`);\n\n // Set a very slight delay to ensure component is fully mounted\n const timer = setTimeout(() => {\n if (isMountedRef.current && refetchMessages) {\n // Force a full network-only fetch\n refetchMessages({\n channelId: channel?.id?.toString(),\n parentId: parentId,\n limit: 10,\n })\n .then((result) => {\n if (result?.data?.messages?.data && isMountedRef.current) {\n console.log(\n `Force refresh completed for channel ${channel?.id} with ${result.data.messages.data.length} messages`,\n );\n\n // Update messages in state\n safeSend({\n type: Actions.UPDATE_MESSAGES,\n data: { messages: result.data.messages.data },\n });\n }\n })\n .catch((error) => {\n console.error(`Error force refreshing channel ${channel?.id}:`, error);\n });\n }\n }, 50);\n\n return () => clearTimeout(timer);\n }\n }, [channel?.id, forceRefresh, isMountedRef, refetchMessages, safeSend, parentId]);\n\n const channelMembers = useMemo(\n () =>\n channel?.members\n ?.filter((ch: any) => ch?.user?.id != currentUser?.id && ch?.user?.__typename == 'UserAccount')\n ?.map((m: any) => m?.user) ?? null,\n [currentUser, channel],\n );\n\n // Set title in state when channel members change\n useEffect(() => {\n if (channelMembers && isMountedRef.current) {\n const titleString =\n channelMembers\n ?.map((u: any) => u?.givenName + ' ' + (u?.familyName ?? ''))\n ?.filter((mu: any) => mu)\n ?.join(', ') ?? '';\n\n safeSend({\n type: Actions.SET_TITLE,\n data: { title: titleString },\n });\n }\n }, [channelMembers, safeSend, isMountedRef]);\n\n // Compute title with proper truncation\n const title = useMemo(() => {\n const titleString = safeContextProperty('title', '');\n const length = 30;\n return titleString.length > length ? titleString.substring(0, length - 3) + '...' : titleString;\n }, [safeContextProperty]);\n\n // Get the last message directly from state context instead of computing it\n const lastMessage = useMemo(() => {\n const message = safeContextProperty('lastMessage', null);\n // Add dependency on the messages array length to ensure re-render on new messages\n return message;\n }, [safeContextProperty, state.context?.messages?.length]);\n\n // Debug output for the component\n useEffect(() => {\n console.log(`DialogsListItem for channel ${channel?.id}: `, {\n hasLastMessage: !!lastMessage,\n message: lastMessage?.message?.substring(0, 20) + (lastMessage?.message?.length > 20 ? '...' : ''),\n messagesCount: safeContextProperty('messages', []).length,\n });\n }, [channel?.id, lastMessage, safeContextProperty]);\n\n return (\n <Pressable\n onPress={() => onOpen(channel?.id, title)}\n className=\"flex-1 border-gray-200 rounded-md dark:border-gray-600 dark:bg-gray-700\"\n style={{ borderBottomWidth: 1, borderColor: '#e5e7eb', marginVertical: 0, paddingHorizontal: 10 }}\n >\n <HStack space={'md'} className=\"flex-1 w-[100%] py-3 items-center\">\n <Box className=\"flex-[0.1] items-start pl-3\">\n <AvatarGroup>\n {channelMembers &&\n channelMembers?.length > 0 &&\n channelMembers?.slice(0, 1)?.map((ch: any, i: Number) => (\n <Avatar\n key={'dialogs-list-' + i}\n size={'sm'}\n className={`bg-transparent top-[${i == 1 ? '4' : '0'}] right-[${\n i == 1 ? '-2' : '0'\n }] z-[${i == 1 ? 5 : 1}]`}\n >\n <AvatarFallbackText>{startCase(ch?.username?.charAt(0))}</AvatarFallbackText>\n\n {channelMembers?.length > 1 && (\n <AvatarBadge\n style={{\n width: '100%',\n height: '100%',\n backgroundColor: '#e5e7eb',\n borderRadius: 5,\n }}\n className=\"items-center justify-center bg-gray-200 rounded-md\"\n >\n <Text style={{ fontSize: 12, fontWeight: 'bold', color: '#000' }}>\n {channelMembers?.length}\n </Text>\n </AvatarBadge>\n )}\n {channelMembers?.length == 1 && (\n <>\n <AvatarImage\n alt=\"user image\"\n style={{ borderRadius: 6, borderWidth: 2, borderColor: '#fff' }}\n source={{\n uri: ch?.picture,\n }}\n />\n <AvatarBadge style={{ width: 10, height: 10 }} />\n </>\n )}\n </Avatar>\n ))}\n </AvatarGroup>\n </Box>\n <Box className=\"flex-1\">\n <LastMessageComponent\n key={`last-msg-${lastMessage?.id || 'none'}-${safeContextProperty('messages', []).length}`}\n title={title}\n lastMessage={lastMessage}\n channelId={channel?.id}\n subscribeToNewMessages={() =>\n subscribeToMore({\n document: CHAT_MESSAGE_ADDED,\n variables: {\n channelId: channel.id?.toString(),\n },\n updateQuery: (prev, { subscriptionData }: any) => {\n if (!subscriptionData.data) return prev;\n const newMessage: any = subscriptionData?.data?.chatMessageAdded;\n\n // Add debug info for the new message\n console.log('New message added (subscription):', {\n channelId: channel.id,\n messageId: newMessage.id,\n message: newMessage.message?.substring(0, 20) + '...',\n hasFiles: newMessage?.files?.data?.length > 0,\n filesCount: newMessage?.files?.data?.length || 0,\n timestamp: newMessage.createdAt || newMessage.updatedAt,\n });\n\n // Force message update (double approach to ensure it updates)\n if (isMountedRef.current) {\n // Update through state machine directly\n console.log('Updating messages with new subscription message');\n\n // First, update the messages array with the new message\n const currentMessages = safeContextProperty('messages', []);\n const updatedMessages = [...currentMessages, newMessage];\n\n // Then directly set the new message as the last message\n // This ensures the UI updates immediately\n safeSend({\n type: Actions.UPDATE_MESSAGES,\n data: {\n messages: updatedMessages,\n // Directly set this message as the last message\n directLastMessage: newMessage,\n },\n });\n\n // No need for additional refresh - the direct update is enough\n // This prevents unnecessary network requests and UI flicker\n }\n\n // Update the Apollo cache\n const existingMessages: any = prev?.messages;\n const previousData = existingMessages?.data\n ? [...existingMessages.data, newMessage]\n : [];\n const totalMsgCount = existingMessages?.totalCount + 1;\n const merged = {\n ...prev,\n messages: {\n ...existingMessages,\n data: previousData,\n totalCount: totalMsgCount,\n },\n };\n return merged;\n },\n })\n }\n />\n </Box>\n </HStack>\n </Pressable>\n );\n};\n\nexport const DialogsListItem = React.memo(DialogsListItemComponent);\n"],"names":["React","_a","_b","DialogsListItem","_c","_d","_e","CHAT_MESSAGE_ADDED","newMessage"],"mappings":"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"}
@@ -1,489 +0,0 @@
1
- import React__default,{useRef,useCallback,useState,useMemo}from'react';import {HStack,Box,Text,Pressable,Avatar,AvatarFallbackText,AvatarImage}from'@admin-layout/gluestack-ui-mobile';import {isToday,isYesterday,format}from'date-fns';import {useFocusEffect}from'@react-navigation/native';import {useThreadMessagesQuery,OnThreadCreatedUpdatedDocument}from'common/graphql';import {startCase}from'lodash-es';import colors from'tailwindcss/colors';import {Actions,BaseState}from'./workflow/service-dialogs-list-item-xstate.js';var __defProp = Object.defineProperty;
2
- var __defProps = Object.defineProperties;
3
- var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
4
- var __getOwnPropSymbols = Object.getOwnPropertySymbols;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __propIsEnum = Object.prototype.propertyIsEnumerable;
7
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
8
- var __spreadValues = (a, b) => {
9
- for (var prop in b || (b = {}))
10
- if (__hasOwnProp.call(b, prop))
11
- __defNormalProp(a, prop, b[prop]);
12
- if (__getOwnPropSymbols)
13
- for (var prop of __getOwnPropSymbols(b)) {
14
- if (__propIsEnum.call(b, prop))
15
- __defNormalProp(a, prop, b[prop]);
16
- }
17
- return a;
18
- };
19
- var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
20
- const safeDate = (dateValue) => {
21
- if (!dateValue)
22
- return null;
23
- try {
24
- const date = new Date(dateValue);
25
- if (isNaN(date.getTime())) {
26
- console.warn("Invalid date value detected:", dateValue);
27
- return null;
28
- }
29
- return date;
30
- } catch (error) {
31
- console.warn("Error creating date from value:", dateValue, error);
32
- return null;
33
- }
34
- };
35
- const createdAtText = (value) => {
36
- if (!value)
37
- return "";
38
- const date = safeDate(value);
39
- if (!date)
40
- return "";
41
- if (isToday(date))
42
- return "Today";
43
- if (isYesterday(date))
44
- return "Yesterday";
45
- return format(date, "MMM dd, yyyy");
46
- };
47
- function useSafeMachine(machine) {
48
- const [state, setState] = useState({
49
- context: {
50
- channelId: null,
51
- currentUser: null,
52
- threadMessages: [],
53
- loading: false,
54
- error: null,
55
- title: "",
56
- role: "",
57
- servicePostParentId: null,
58
- lastMessage: null
59
- },
60
- value: BaseState.Idle,
61
- matches: (stateValue) => stateValue === BaseState.Idle
62
- });
63
- const send = useCallback((event) => {
64
- try {
65
- if (event.type === Actions.INITIAL_CONTEXT) {
66
- setState((prev) => {
67
- var _a, _b, _c;
68
- return __spreadProps(__spreadValues({}, prev), {
69
- context: __spreadProps(__spreadValues({}, prev.context), {
70
- channelId: ((_a = event.data) == null ? void 0 : _a.channelId) || null,
71
- currentUser: ((_b = event.data) == null ? void 0 : _b.currentUser) || null,
72
- role: ((_c = event.data) == null ? void 0 : _c.role) || null,
73
- loading: true
74
- }),
75
- value: BaseState.FetchingThreadMessages
76
- });
77
- });
78
- } else if (event.type === Actions.UPDATE_THREAD_MESSAGES) {
79
- setState((prev) => {
80
- var _a, _b, _c, _d, _e;
81
- if ((_a = event.data) == null ? void 0 : _a.threadMessages) {
82
- if ((_b = event.data) == null ? void 0 : _b.directLastMessage) {
83
- console.log("Using direct last message from event:", {
84
- id: event.data.directLastMessage.id,
85
- message: ((_c = event.data.directLastMessage.message) == null ? void 0 : _c.substring(0, 20)) + "..."
86
- });
87
- return __spreadProps(__spreadValues({}, prev), {
88
- context: __spreadProps(__spreadValues({}, prev.context), {
89
- threadMessages: event.data.threadMessages,
90
- lastMessage: event.data.directLastMessage,
91
- loading: false
92
- })
93
- });
94
- }
95
- return __spreadProps(__spreadValues({}, prev), {
96
- context: __spreadProps(__spreadValues({}, prev.context), {
97
- threadMessages: event.data.threadMessages,
98
- lastMessage: computeLastMessage(event.data.threadMessages),
99
- loading: false
100
- })
101
- });
102
- } else if ((_d = event.data) == null ? void 0 : _d.message) {
103
- const newMessage = event.data.message;
104
- const updatedMessages = [...prev.context.threadMessages, newMessage];
105
- console.log("Setting new message as lastMessage from subscription:", {
106
- id: newMessage.id,
107
- message: ((_e = newMessage.message) == null ? void 0 : _e.substring(0, 20)) + "...",
108
- date: newMessage.createdAt || newMessage.updatedAt
109
- });
110
- return __spreadProps(__spreadValues({}, prev), {
111
- context: __spreadProps(__spreadValues({}, prev.context), {
112
- threadMessages: updatedMessages,
113
- lastMessage: newMessage,
114
- loading: false
115
- })
116
- });
117
- }
118
- return prev;
119
- });
120
- } else if (event.type === Actions.SET_TITLE) {
121
- setState((prev) => {
122
- var _a;
123
- return __spreadProps(__spreadValues({}, prev), {
124
- context: __spreadProps(__spreadValues({}, prev.context), {
125
- title: ((_a = event.data) == null ? void 0 : _a.title) || ""
126
- })
127
- });
128
- });
129
- } else if (event.type === Actions.SET_SERVICE_POST_PARENT_ID) {
130
- setState((prev) => {
131
- var _a;
132
- return __spreadProps(__spreadValues({}, prev), {
133
- context: __spreadProps(__spreadValues({}, prev.context), {
134
- servicePostParentId: ((_a = event.data) == null ? void 0 : _a.servicePostParentId) || null
135
- })
136
- });
137
- });
138
- } else if (event.type === Actions.START_LOADING) {
139
- setState((prev) => __spreadProps(__spreadValues({}, prev), {
140
- context: __spreadProps(__spreadValues({}, prev.context), {
141
- loading: true
142
- })
143
- }));
144
- } else if (event.type === Actions.STOP_LOADING) {
145
- setState((prev) => __spreadProps(__spreadValues({}, prev), {
146
- context: __spreadProps(__spreadValues({}, prev.context), {
147
- loading: false
148
- })
149
- }));
150
- }
151
- } catch (error) {
152
- console.error("Error sending event to state machine:", error);
153
- }
154
- }, []);
155
- const computeLastMessage = (threadMessages) => {
156
- if (!threadMessages || !threadMessages.length)
157
- return null;
158
- let posts = [];
159
- let replies = [];
160
- const isTextMessage = (msg) => {
161
- if (!msg)
162
- return false;
163
- if (!msg.message || msg.message === "")
164
- return false;
165
- const isImageMessage = msg.message.includes("<img") || msg.message.includes("[Image]") || msg.message.includes("![") || /\.(jpeg|jpg|gif|png|bmp|webp)/i.test(msg.message) && (msg.message.includes("http") || msg.message.includes("/images/"));
166
- return !isImageMessage;
167
- };
168
- threadMessages.forEach((thread) => {
169
- var _a;
170
- if ((thread == null ? void 0 : thread.post) && isTextMessage(thread.post)) {
171
- posts.push(thread.post);
172
- }
173
- if ((_a = thread == null ? void 0 : thread.replies) == null ? void 0 : _a.length) {
174
- replies = [...replies, ...thread.replies.filter((r) => isTextMessage(r))];
175
- }
176
- });
177
- const allMessages = [...posts, ...replies];
178
- if (!allMessages.length)
179
- return null;
180
- return allMessages.reduce((a, b) => {
181
- const dateA = safeDate(a == null ? void 0 : a.createdAt);
182
- const dateB = safeDate(b == null ? void 0 : b.createdAt);
183
- if (!dateA)
184
- return b;
185
- if (!dateB)
186
- return a;
187
- return dateA > dateB ? a : b;
188
- }, allMessages[0]);
189
- };
190
- const stateWithMatches = useMemo(() => {
191
- return __spreadProps(__spreadValues({}, state), {
192
- matches: (stateValue) => {
193
- try {
194
- return state.value === stateValue;
195
- } catch (error) {
196
- console.error(`Error in matches function:`, error);
197
- return false;
198
- }
199
- }
200
- });
201
- }, [state]);
202
- return [stateWithMatches, send];
203
- }
204
- const ServiceChannelWithLastMessage = React__default.memo(({
205
- channel,
206
- lastMessage,
207
- subscribeToNewMessages
208
- }) => {
209
- var _a, _b, _c, _d, _e;
210
- React__default.useEffect(() => {
211
- const unsubscribe = subscribeToNewMessages();
212
- return () => {
213
- if (unsubscribe && typeof unsubscribe === "function") {
214
- unsubscribe();
215
- }
216
- };
217
- }, [subscribeToNewMessages]);
218
- React__default.useEffect(() => {
219
- var _a2, _b2, _c2;
220
- console.log(`ServiceChannelWithLastMessage rendered for channel ${channel == null ? void 0 : channel.id}:`, {
221
- hasLastMessage: !!lastMessage,
222
- messageId: lastMessage == null ? void 0 : lastMessage.id,
223
- messageText: ((_a2 = lastMessage == null ? void 0 : lastMessage.message) == null ? void 0 : _a2.substring(0, 20)) + (((_b2 = lastMessage == null ? void 0 : lastMessage.message) == null ? void 0 : _b2.length) > 20 ? "..." : ""),
224
- date: (lastMessage == null ? void 0 : lastMessage.createdAt) ? (_c2 = safeDate(lastMessage.createdAt)) == null ? void 0 : _c2.toISOString() : "none"
225
- });
226
- }, [lastMessage, channel == null ? void 0 : channel.id]);
227
- const count = 30;
228
- const title = (channel == null ? void 0 : channel.title.slice(0, count)) + ((channel == null ? void 0 : channel.title.length) > count ? "..." : "");
229
- let displayMessage = "No messages yet";
230
- if (lastMessage) {
231
- const hasFileAttachments = ((_b = (_a = lastMessage.files) == null ? void 0 : _a.data) == null ? void 0 : _b.length) > 0;
232
- const isImageMessage = ((_c = lastMessage.message) == null ? void 0 : _c.includes("<img")) || ((_d = lastMessage.message) == null ? void 0 : _d.includes("[Image]")) || ((_e = lastMessage.message) == null ? void 0 : _e.includes("![")) || /\.(jpeg|jpg|gif|png|bmp|webp)/i.test(lastMessage.message || "") && ((lastMessage.message || "").includes("http") || (lastMessage.message || "").includes("/images/"));
233
- if (hasFileAttachments) {
234
- displayMessage = "\u{1F4CE} File attachment";
235
- } else if (isImageMessage) {
236
- displayMessage = "[Image]";
237
- } else if (lastMessage.message && lastMessage.message.trim() !== "") {
238
- displayMessage = lastMessage.message;
239
- } else {
240
- displayMessage = "(Empty message)";
241
- }
242
- }
243
- return /* @__PURE__ */ React__default.createElement(HStack, { space: "sm", className: "flex-1 justify-between" }, /* @__PURE__ */ React__default.createElement(Box, { className: "flex-[0.8]" }, /* @__PURE__ */ React__default.createElement(Text, { color: colors.gray[600], className: "text-base text-wrap flex-wrap font-semibold" }, title), /* @__PURE__ */ React__default.createElement(Text, { color: colors.gray[600], numberOfLines: 1 }, displayMessage)), /* @__PURE__ */ React__default.createElement(Box, { className: "flex-[0.2]" }, /* @__PURE__ */ React__default.createElement(Text, { color: colors.gray[500] }, lastMessage ? createdAtText(lastMessage == null ? void 0 : lastMessage.createdAt) : "")));
244
- });
245
- const ServiceDialogsListItemComponent = function DialogsListItem({
246
- currentUser,
247
- selectedChannelId,
248
- channel,
249
- onOpen,
250
- refreshing,
251
- role
252
- }) {
253
- var _a, _b, _c, _d;
254
- const isMountedRef = useRef(true);
255
- const [state, send] = useSafeMachine();
256
- const safeContextProperty = useCallback((property, defaultValue = null) => {
257
- var _a2, _b2;
258
- try {
259
- return (_b2 = (_a2 = state == null ? void 0 : state.context) == null ? void 0 : _a2[property]) != null ? _b2 : defaultValue;
260
- } catch (error2) {
261
- console.error(`Error accessing state.context.${property}:`, error2);
262
- return defaultValue;
263
- }
264
- }, [state]);
265
- const safeSend = useCallback((event) => {
266
- try {
267
- send(event);
268
- } catch (error2) {
269
- console.error("Error sending event to state machine:", error2, event);
270
- }
271
- }, [send]);
272
- const {
273
- data: threadMessages,
274
- loading: threadMessageLoading,
275
- error,
276
- refetch: refetchThreadMessages,
277
- subscribeToMore
278
- } = useThreadMessagesQuery({
279
- variables: {
280
- channelId: (_a = channel == null ? void 0 : channel.id) == null ? void 0 : _a.toString(),
281
- role,
282
- limit: 2
283
- },
284
- fetchPolicy: "cache-and-network",
285
- onCompleted: (data) => {
286
- var _a2, _b2;
287
- console.log(`Completed thread messages query for channel ${channel == null ? void 0 : channel.id}:`, ((_b2 = (_a2 = data == null ? void 0 : data.threadMessages) == null ? void 0 : _a2.data) == null ? void 0 : _b2.length) ? "Has messages" : "No messages");
288
- },
289
- onError: (error2) => {
290
- console.error(`Error fetching thread messages for channel ${channel == null ? void 0 : channel.id}:`, error2);
291
- }
292
- });
293
- React__default.useEffect(() => {
294
- var _a2;
295
- if (channel == null ? void 0 : channel.id) {
296
- safeSend({
297
- type: Actions.INITIAL_CONTEXT,
298
- data: {
299
- channelId: (_a2 = channel == null ? void 0 : channel.id) == null ? void 0 : _a2.toString(),
300
- currentUser,
301
- role
302
- }
303
- });
304
- safeSend({
305
- type: Actions.SET_TITLE,
306
- data: {
307
- title: (channel == null ? void 0 : channel.title) || ""
308
- }
309
- });
310
- }
311
- return () => {
312
- isMountedRef.current = false;
313
- };
314
- }, [channel == null ? void 0 : channel.id, currentUser, role, safeSend]);
315
- React__default.useEffect(() => {
316
- var _a2, _b2, _c2;
317
- if (threadMessages && isMountedRef.current) {
318
- console.log(`Updating thread messages for channel ${channel == null ? void 0 : channel.id}, count:`, ((_b2 = (_a2 = threadMessages == null ? void 0 : threadMessages.threadMessages) == null ? void 0 : _a2.data) == null ? void 0 : _b2.length) || 0);
319
- safeSend({
320
- type: Actions.UPDATE_THREAD_MESSAGES,
321
- data: {
322
- threadMessages: ((_c2 = threadMessages == null ? void 0 : threadMessages.threadMessages) == null ? void 0 : _c2.data) || []
323
- }
324
- });
325
- }
326
- }, [threadMessages, refreshing, channel == null ? void 0 : channel.id, safeSend]);
327
- const lastMessage = safeContextProperty("lastMessage", null);
328
- const servicePostParentId = safeContextProperty("servicePostParentId", null);
329
- React__default.useEffect(() => {
330
- if (lastMessage) {
331
- const sParentId = (lastMessage == null ? void 0 : lastMessage.parentId) ? lastMessage == null ? void 0 : lastMessage.parentId : lastMessage == null ? void 0 : lastMessage.id;
332
- safeSend({
333
- type: Actions.SET_SERVICE_POST_PARENT_ID,
334
- data: {
335
- servicePostParentId: sParentId
336
- }
337
- });
338
- }
339
- }, [lastMessage, safeSend]);
340
- const creatorAndMembersId = React__default.useMemo(() => {
341
- var _a2, _b2, _c2, _d2, _e, _f;
342
- if (!(channel == null ? void 0 : channel.members))
343
- return null;
344
- const membersIds = (_c2 = (_b2 = (_a2 = channel == null ? void 0 : channel.members) == null ? void 0 : _a2.filter((m) => {
345
- var _a3;
346
- return m !== null && ((_a3 = m == null ? void 0 : m.user) == null ? void 0 : _a3.id) !== (currentUser == null ? void 0 : currentUser.id);
347
- })) == null ? void 0 : _b2.map((mu) => {
348
- var _a3;
349
- return (_a3 = mu == null ? void 0 : mu.user) == null ? void 0 : _a3.id;
350
- })) != null ? _c2 : [];
351
- const creatorId = (_d2 = channel == null ? void 0 : channel.creator) == null ? void 0 : _d2.id;
352
- const mergedIds = (_e = [].concat(membersIds, creatorId)) != null ? _e : [];
353
- return (_f = mergedIds == null ? void 0 : mergedIds.filter((m, pos) => (mergedIds == null ? void 0 : mergedIds.indexOf(m)) === pos)) != null ? _f : [];
354
- }, [channel, currentUser]);
355
- const postParentId = React__default.useMemo(() => {
356
- var _a2;
357
- if (!(creatorAndMembersId == null ? void 0 : creatorAndMembersId.length))
358
- return null;
359
- return (creatorAndMembersId == null ? void 0 : creatorAndMembersId.length) && (creatorAndMembersId == null ? void 0 : creatorAndMembersId.includes(currentUser == null ? void 0 : currentUser.id)) ? null : (lastMessage == null ? void 0 : lastMessage.parentId) ? lastMessage == null ? void 0 : lastMessage.parentId : (_a2 = lastMessage == null ? void 0 : lastMessage.id) != null ? _a2 : 0;
360
- }, [creatorAndMembersId, lastMessage, currentUser]);
361
- useCallback(() => {
362
- var _a2;
363
- if ((channel == null ? void 0 : channel.id) && isMountedRef.current) {
364
- console.log("Forcing thread state refresh for channel:", channel == null ? void 0 : channel.id);
365
- safeSend({
366
- type: Actions.START_LOADING
367
- });
368
- refetchThreadMessages({
369
- channelId: (_a2 = channel == null ? void 0 : channel.id) == null ? void 0 : _a2.toString(),
370
- role,
371
- limit: 2
372
- }).then((result) => {
373
- var _a3, _b2;
374
- if (((_b2 = (_a3 = result.data) == null ? void 0 : _a3.threadMessages) == null ? void 0 : _b2.data) && isMountedRef.current) {
375
- console.log(`Refreshed ${result.data.threadMessages.data.length} thread messages for channel ${channel == null ? void 0 : channel.id}`);
376
- safeSend({
377
- type: Actions.UPDATE_THREAD_MESSAGES,
378
- data: {
379
- threadMessages: result.data.threadMessages.data
380
- }
381
- });
382
- }
383
- safeSend({
384
- type: Actions.STOP_LOADING
385
- });
386
- }).catch((err) => {
387
- console.error("Error refreshing thread state:", err);
388
- safeSend({
389
- type: Actions.STOP_LOADING
390
- });
391
- });
392
- }
393
- }, [channel == null ? void 0 : channel.id, refetchThreadMessages, safeSend, isMountedRef, role]);
394
- useFocusEffect(React__default.useCallback(() => {
395
- if (!(channel == null ? void 0 : channel.id))
396
- return;
397
- console.log("ServiceDialogsListItem focused for channel:", channel == null ? void 0 : channel.id);
398
- safeSend({
399
- type: Actions.START_LOADING
400
- });
401
- const fetchFreshData = async () => {
402
- var _a2, _b2, _c2, _d2, _e, _f;
403
- try {
404
- const result = await refetchThreadMessages({
405
- channelId: (_a2 = channel == null ? void 0 : channel.id) == null ? void 0 : _a2.toString(),
406
- role,
407
- limit: 2
408
- });
409
- console.log(`FOCUS EFFECT: Refetched ${((_d2 = (_c2 = (_b2 = result == null ? void 0 : result.data) == null ? void 0 : _b2.threadMessages) == null ? void 0 : _c2.data) == null ? void 0 : _d2.length) || 0} messages for channel ${channel == null ? void 0 : channel.id}`);
410
- if (((_f = (_e = result == null ? void 0 : result.data) == null ? void 0 : _e.threadMessages) == null ? void 0 : _f.data) && isMountedRef.current) {
411
- safeSend({
412
- type: Actions.UPDATE_THREAD_MESSAGES,
413
- data: {
414
- threadMessages: result.data.threadMessages.data
415
- }
416
- });
417
- }
418
- } catch (error2) {
419
- console.error("Error refetching thread messages on focus:", error2);
420
- } finally {
421
- if (isMountedRef.current) {
422
- safeSend({
423
- type: Actions.STOP_LOADING
424
- });
425
- }
426
- }
427
- };
428
- fetchFreshData();
429
- return () => {
430
- };
431
- }, [refreshing, channel == null ? void 0 : channel.id, refetchThreadMessages, safeSend, role, isMountedRef]));
432
- return /* @__PURE__ */ React__default.createElement(Pressable, { onPress: () => (channel == null ? void 0 : channel.id) !== selectedChannelId && onOpen(channel == null ? void 0 : channel.id, channel == null ? void 0 : channel.title, postParentId), className: "flex-1 rounded-md border-gray-200 dark:border-gray-600 dark:bg-gray-700", style: {
433
- borderBottomWidth: 1,
434
- borderColor: "#e5e7eb",
435
- marginVertical: 0
436
- } }, /* @__PURE__ */ React__default.createElement(HStack, { space: "md", className: "flex-1 w-[100%] px-2 py-3 items-center" }, /* @__PURE__ */ React__default.createElement(Box, { className: "flex-[0.1] items-start pl-3" }, /* @__PURE__ */ React__default.createElement(Avatar, { key: "service-channels-key-" + (channel == null ? void 0 : channel.id), size: "sm", className: "bg-transparent top-0 right-0 z-[1]" }, /* @__PURE__ */ React__default.createElement(AvatarFallbackText, null, " ", startCase((_c = (_b = channel == null ? void 0 : channel.creator) == null ? void 0 : _b.username) == null ? void 0 : _c.charAt(0))), /* @__PURE__ */ React__default.createElement(AvatarImage, { alt: "user image", style: {
437
- borderRadius: 6,
438
- borderWidth: 2,
439
- borderColor: "#fff"
440
- }, source: {
441
- uri: (_d = channel == null ? void 0 : channel.creator) == null ? void 0 : _d.picture
442
- } }))), /* @__PURE__ */ React__default.createElement(Box, { className: "flex-1" }, /* @__PURE__ */ React__default.createElement(ServiceChannelWithLastMessage, { channel, lastMessage, subscribeToNewMessages: () => {
443
- var _a2;
444
- return subscribeToMore({
445
- document: OnThreadCreatedUpdatedDocument,
446
- variables: {
447
- channelId: (_a2 = channel == null ? void 0 : channel.id) == null ? void 0 : _a2.toString(),
448
- postParentId: postParentId ? servicePostParentId : null
449
- },
450
- updateQuery: (prev, {
451
- subscriptionData
452
- }) => {
453
- var _a3, _b2, _c2, _d2, _e, _f, _g, _h, _i;
454
- if (!subscriptionData.data)
455
- return prev;
456
- const newPostThreadData = (_b2 = (_a3 = subscriptionData == null ? void 0 : subscriptionData.data) == null ? void 0 : _a3.threadCreatedUpdated) == null ? void 0 : _b2.data;
457
- const newMessage = (_d2 = (_c2 = subscriptionData == null ? void 0 : subscriptionData.data) == null ? void 0 : _c2.threadCreatedUpdated) == null ? void 0 : _d2.lastMessage;
458
- console.log("New thread message subscription update:", {
459
- channelId: channel == null ? void 0 : channel.id,
460
- threadId: newPostThreadData == null ? void 0 : newPostThreadData.id,
461
- hasMessage: !!newMessage,
462
- message: ((_e = newMessage == null ? void 0 : newMessage.message) == null ? void 0 : _e.substring(0, 20)) + "..."
463
- });
464
- const data = (_h = (_g = (_f = prev == null ? void 0 : prev.threadMessages) == null ? void 0 : _f.data) == null ? void 0 : _g.map((t) => t.id === (newPostThreadData == null ? void 0 : newPostThreadData.id) ? __spreadProps(__spreadValues({}, t), {
465
- replies: [...t == null ? void 0 : t.replies, newMessage],
466
- replyCount: newPostThreadData == null ? void 0 : newPostThreadData.replyCount,
467
- lastReplyAt: newPostThreadData == null ? void 0 : newPostThreadData.lastReplyAt,
468
- updatedAt: newPostThreadData == null ? void 0 : newPostThreadData.updatedAt
469
- }) : t)) != null ? _h : [];
470
- if (isMountedRef.current) {
471
- safeSend({
472
- type: Actions.UPDATE_THREAD_MESSAGES,
473
- data: {
474
- threadMessages: (data == null ? void 0 : data.length) > 0 ? data : [newPostThreadData],
475
- directLastMessage: newMessage
476
- }
477
- });
478
- }
479
- return Object.assign({}, prev, {
480
- threadMessages: __spreadProps(__spreadValues({}, prev == null ? void 0 : prev.threadMessages), {
481
- totalCount: (_i = newPostThreadData == null ? void 0 : newPostThreadData.totalCount) != null ? _i : 0,
482
- data: (data == null ? void 0 : data.length) > 0 ? data : [newPostThreadData]
483
- })
484
- });
485
- }
486
- });
487
- } }))));
488
- };
489
- const ServiceDialogsListItem = React__default.memo(ServiceDialogsListItemComponent);export{ServiceDialogsListItem,ServiceDialogsListItemComponent};//# sourceMappingURL=ServiceDialogsListItem.js.map