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

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.
@@ -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 CHAT_MESSAGE_ADDED,\n useChatMessageAddedSubscription,\n useMessagesQuery as useMessagesQueryFromInbox,\n} from '../../../queries/inboxQueries';\nimport { startCase } from 'lodash-es';\nimport colors from 'tailwindcss/colors';\nimport { SubscriptionHandler } from './SubscriptionHandler';\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 visible?: boolean;\n}\n\n// LastMessage component definition\nconst LastMessageComponent = ({ subscribeToNewMessages, title, lastMessage, channelId, subscribeToMore }) => {\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 <>\n <SubscriptionHandler\n subscribeToMore={subscribeToMore}\n document={CHAT_MESSAGE_ADDED}\n variables={{ channelId: channelId?.toString() }}\n updateQuery={undefined} // Provide custom updateQuery if needed\n />\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/**\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 visible = true,\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 // State for component data\n const [loading, setLoading] = useState(false);\n const [title, setTitle] = useState('');\n const [messages, setMessages] = useState([]);\n const [lastMessage, setLastMessage] = useState(null);\n\n // Only run queries/subscriptions if visible\n const shouldQuery = !!channel?.id && visible;\n\n // Query hooks for fetching messages (minimal fields if possible)\n const {\n data: messagesQuery,\n loading: messageLoading,\n refetch: refetchMessages,\n subscribeToMore,\n } = useMessagesQueryFromInbox({\n variables: {\n channelId: channel?.id?.toString(),\n parentId: parentId,\n limit: 10,\n },\n skip: !shouldQuery, // Only run if visible\n fetchPolicy: 'cache-and-network',\n refetchWritePolicy: 'overwrite',\n nextFetchPolicy: 'network-only',\n onCompleted: (data) => {\n if (!shouldQuery) return;\n if (data?.messages?.data) {\n setMessages(data.messages.data);\n const sortedMessages = [...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 if (sortedMessages.length > 0) {\n setLastMessage(sortedMessages[0]);\n }\n }\n },\n onError: (error) => {\n if (!shouldQuery) return;\n console.error(`Error fetching messages for channel ${channel?.id}:`, error);\n },\n });\n\n // Subscription for new messages (only if visible)\n const { data: newMessage } = useChatMessageAddedSubscription({\n variables: {\n channelId: channel?.id?.toString(),\n },\n skip: !shouldQuery,\n });\n\n // Set mounted state on mount/unmount\n useEffect(() => {\n isMountedRef.current = true;\n return () => {\n isMountedRef.current = false;\n };\n }, []);\n\n // Function to force refresh the component state\n const refreshDialogState = useCallback(() => {\n if (shouldQuery && isMountedRef.current) {\n setLoading(true);\n const options = {\n channelId: channel?.id?.toString(),\n parentId: parentId,\n limit: 10,\n };\n refetchMessages(options)\n .then((result) => {\n if (result.data?.messages?.data && isMountedRef.current) {\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 const latestMessage = sortedMessages.length > 0 ? sortedMessages[0] : null;\n setMessages(result.data.messages.data);\n setLastMessage(latestMessage);\n }\n setLoading(false);\n })\n .catch((err) => {\n console.error('Error refreshing dialog state:', err);\n setLoading(false);\n });\n }\n }, [shouldQuery, channel?.id, refetchMessages, parentId]);\n\n // Track if this is the first time the component renders\n const firstRenderRef = useRef(true);\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 setLoading(true);\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 = 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 // Get the most recent message\n const sortedMessages = [...fetchedMessages].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 // Update state with fresh data\n setMessages(fetchedMessages);\n setLastMessage(latestMessage);\n }\n } catch (error) {\n console.error('Error refetching messages on focus:', error);\n } finally {\n if (isMountedRef.current) {\n setLoading(false);\n }\n }\n };\n\n // Execute fetch\n fetchFreshData();\n\n return () => {\n // Cleanup function when unfocused\n };\n }, [channel?.id, refetchMessages, messages, isMountedRef, parentId]),\n );\n\n // Only run effects if visible\n useEffect(() => {\n if (!shouldQuery) return;\n if (channel?.id && isMountedRef.current) {\n const timer = setTimeout(() => {\n if (isMountedRef.current) {\n refreshDialogState();\n }\n }, 100);\n return () => {\n clearTimeout(timer);\n };\n }\n }, [shouldQuery, channel?.id, refreshDialogState]);\n\n useEffect(() => {\n if (forceRefresh && shouldQuery && channel?.id && isMountedRef.current) {\n const timer = setTimeout(() => {\n if (isMountedRef.current && refetchMessages) {\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 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 const latestMessage = sortedMessages.length > 0 ? sortedMessages[0] : null;\n setMessages(result.data.messages.data);\n setLastMessage(latestMessage);\n }\n })\n .catch((error) => {\n console.error(`Error force refreshing channel ${channel?.id}:`, error);\n });\n }\n }, 50);\n return () => clearTimeout(timer);\n }\n }, [shouldQuery, channel?.id, forceRefresh, refetchMessages, 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 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 setTitle(titleString);\n }\n }, [channelMembers]);\n\n // Compute title with proper truncation\n const displayTitle = useMemo(() => {\n const length = 30;\n return title.length > length ? title.substring(0, length - 3) + '...' : title;\n }, [title]);\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: messages.length,\n });\n }, [channel?.id, lastMessage, messages.length]);\n\n // Handle new messages from subscription\n useEffect(() => {\n if (!shouldQuery) return;\n if (newMessage?.chatMessageAdded && channel?.id) {\n const incomingMessage = newMessage.chatMessageAdded;\n if (messages.some((msg) => msg.id === incomingMessage.id)) {\n return;\n }\n setMessages((prevMessages) => [...prevMessages, incomingMessage]);\n setLastMessage(incomingMessage);\n }\n }, [shouldQuery, newMessage, channel?.id, messages]);\n\n // Create listener for channel property updates\n useEffect(() => {\n if (!shouldQuery) return;\n if (channel?.lastMessage && channel.lastMessage.id) {\n if (!messages.some((msg) => msg.id === channel.lastMessage.id)) {\n setMessages((prevMessages) => [...prevMessages, channel.lastMessage]);\n setLastMessage(channel.lastMessage);\n }\n }\n }, [shouldQuery, channel?.lastMessage?.id, messages]);\n\n return (\n <Pressable\n onPress={() => onOpen(channel?.id, displayTitle)}\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 {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'}-${messages.length}`}\n title={displayTitle}\n lastMessage={lastMessage}\n channelId={channel?.id}\n subscribeToNewMessages={() =>\n shouldQuery\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 if (isMountedRef.current) {\n if (!messages.some((msg) => msg.id === newMessage.id)) {\n setMessages((prevMessages) => [...prevMessages, newMessage]);\n setLastMessage(newMessage);\n }\n }\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 : undefined\n }\n subscribeToMore={subscribeToMore}\n />\n </Box>\n </HStack>\n </Pressable>\n );\n};\n\nexport const DialogsListItem = React.memo(DialogsListItemComponent);\n"],"names":["React","DialogsListItem","useMessagesQueryFromInbox","_a","_b","_c","_d","newMessage"],"mappings":"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"}
@@ -1,402 +0,0 @@
1
- import React__default,{useRef,useState,useMemo,useCallback}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 {THREAD_CREATED_UPDATED,CHAT_MESSAGE_ADDED}from'../../../queries/inboxQueries.js';import {startCase}from'lodash-es';import colors from'tailwindcss/colors';import {SubscriptionHandler}from'./SubscriptionHandler.js';import {useThreadMessagesQuery}from'common/graphql';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
- const computeLastMessage = (threadMessages) => {
48
- if (!threadMessages || !threadMessages.length)
49
- return null;
50
- let posts = [];
51
- let replies = [];
52
- const isTextMessage = (msg) => {
53
- if (!msg)
54
- return false;
55
- if (!msg.message || msg.message === "")
56
- return false;
57
- 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/"));
58
- return !isImageMessage;
59
- };
60
- threadMessages.forEach((thread) => {
61
- var _a;
62
- if ((thread == null ? void 0 : thread.post) && isTextMessage(thread.post)) {
63
- posts.push(thread.post);
64
- }
65
- if ((_a = thread == null ? void 0 : thread.replies) == null ? void 0 : _a.length) {
66
- replies = [...replies, ...thread.replies.filter((r) => isTextMessage(r))];
67
- }
68
- });
69
- const allMessages = [...posts, ...replies];
70
- if (!allMessages.length)
71
- return null;
72
- return allMessages.reduce((a, b) => {
73
- const dateA = safeDate(a == null ? void 0 : a.createdAt);
74
- const dateB = safeDate(b == null ? void 0 : b.createdAt);
75
- if (!dateA)
76
- return b;
77
- if (!dateB)
78
- return a;
79
- return dateA > dateB ? a : b;
80
- }, allMessages[0]);
81
- };
82
- const ServiceChannelWithLastMessage = React__default.memo(({
83
- channel,
84
- lastMessage,
85
- subscribeToNewMessages,
86
- subscribeToChatMessages,
87
- subscribeToMore,
88
- postParentId,
89
- servicePostParentId
90
- }) => {
91
- var _a, _b, _c, _d, _e, _f, _g;
92
- React__default.useEffect(() => {
93
- console.log(`Setting up subscriptions for channel ${channel == null ? void 0 : channel.id}`);
94
- let threadUnsubscribe;
95
- let chatUnsubscribe;
96
- try {
97
- threadUnsubscribe = subscribeToNewMessages();
98
- chatUnsubscribe = subscribeToChatMessages();
99
- } catch (error) {
100
- console.error(`Error setting up subscriptions for channel ${channel == null ? void 0 : channel.id}:`, error);
101
- }
102
- return () => {
103
- if (threadUnsubscribe && typeof threadUnsubscribe === "function") {
104
- try {
105
- console.log(`Cleaning up thread subscription for channel ${channel == null ? void 0 : channel.id}`);
106
- threadUnsubscribe();
107
- } catch (error) {
108
- console.error(`Error cleaning up thread subscription for channel ${channel == null ? void 0 : channel.id}:`, error);
109
- }
110
- }
111
- if (chatUnsubscribe && typeof chatUnsubscribe === "function") {
112
- try {
113
- console.log(`Cleaning up chat subscription for channel ${channel == null ? void 0 : channel.id}`);
114
- chatUnsubscribe();
115
- } catch (error) {
116
- console.error(`Error cleaning up chat subscription for channel ${channel == null ? void 0 : channel.id}:`, error);
117
- }
118
- }
119
- };
120
- }, [subscribeToNewMessages, subscribeToChatMessages, channel == null ? void 0 : channel.id]);
121
- React__default.useEffect(() => {
122
- var _a2, _b2, _c2;
123
- console.log(`ServiceChannelWithLastMessage rendered for channel ${channel == null ? void 0 : channel.id}:`, {
124
- hasLastMessage: !!lastMessage,
125
- messageId: lastMessage == null ? void 0 : lastMessage.id,
126
- 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 ? "..." : ""),
127
- date: (lastMessage == null ? void 0 : lastMessage.createdAt) ? (_c2 = safeDate(lastMessage.createdAt)) == null ? void 0 : _c2.toISOString() : "none"
128
- });
129
- }, [lastMessage, channel == null ? void 0 : channel.id]);
130
- const count = 30;
131
- const title = (channel == null ? void 0 : channel.title.slice(0, count)) + ((channel == null ? void 0 : channel.title.length) > count ? "..." : "");
132
- let displayMessage = "No messages yet";
133
- if (lastMessage) {
134
- const hasFileAttachments = ((_b = (_a = lastMessage.files) == null ? void 0 : _a.data) == null ? void 0 : _b.length) > 0;
135
- 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/"));
136
- if (hasFileAttachments) {
137
- displayMessage = "\u{1F4CE} File attachment";
138
- } else if (isImageMessage) {
139
- displayMessage = "[Image]";
140
- } else if (lastMessage.message && lastMessage.message.trim() !== "") {
141
- displayMessage = lastMessage.message;
142
- } else {
143
- displayMessage = "(Empty message)";
144
- }
145
- }
146
- return /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, /* @__PURE__ */ React__default.createElement(
147
- SubscriptionHandler,
148
- {
149
- subscribeToMore,
150
- document: THREAD_CREATED_UPDATED,
151
- variables: {
152
- channelId: (_f = channel == null ? void 0 : channel.id) == null ? void 0 : _f.toString(),
153
- postParentId: postParentId || servicePostParentId || null
154
- },
155
- updateQuery: void 0
156
- }
157
- ), /* @__PURE__ */ React__default.createElement(
158
- SubscriptionHandler,
159
- {
160
- subscribeToMore,
161
- document: CHAT_MESSAGE_ADDED,
162
- variables: {
163
- channelId: (_g = channel == null ? void 0 : channel.id) == null ? void 0 : _g.toString(),
164
- postParentId: postParentId || servicePostParentId || null
165
- },
166
- updateQuery: void 0
167
- }
168
- ), /* @__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) : ""))));
169
- });
170
- const ServiceDialogsListItemComponent = function DialogsListItem({
171
- currentUser,
172
- selectedChannelId,
173
- channel,
174
- onOpen,
175
- refreshing,
176
- role,
177
- visible = true
178
- }) {
179
- var _a, _b, _c, _d;
180
- const isMountedRef = useRef(true);
181
- const [subscriptionsTimestamp, setSubscriptionsTimestamp] = useState(Date.now());
182
- const shouldQuery = !!(channel == null ? void 0 : channel.id) && visible;
183
- const {
184
- data: threadMessagesData,
185
- loading: threadMessageLoading,
186
- error,
187
- refetch: refetchThreadMessages,
188
- subscribeToMore
189
- } = useThreadMessagesQuery({
190
- variables: {
191
- channelId: (_a = channel == null ? void 0 : channel.id) == null ? void 0 : _a.toString(),
192
- role,
193
- limit: 2
194
- },
195
- skip: !shouldQuery,
196
- fetchPolicy: "cache-and-network",
197
- onCompleted: (data) => {
198
- if (!shouldQuery)
199
- return;
200
- },
201
- onError: (error2) => {
202
- if (!shouldQuery)
203
- return;
204
- console.error(`Error fetching thread messages for channel ${channel == null ? void 0 : channel.id}:`, error2);
205
- }
206
- });
207
- const threadMessages = useMemo(() => {
208
- var _a2;
209
- return ((_a2 = threadMessagesData == null ? void 0 : threadMessagesData.threadMessages) == null ? void 0 : _a2.data) || [];
210
- }, [threadMessagesData]);
211
- const lastMessage = useMemo(() => {
212
- if (!shouldQuery)
213
- return null;
214
- return computeLastMessage(threadMessages);
215
- }, [shouldQuery, threadMessages]);
216
- const servicePostParentId = useMemo(() => {
217
- if (!shouldQuery || !lastMessage)
218
- return null;
219
- return (lastMessage == null ? void 0 : lastMessage.parentId) ? lastMessage == null ? void 0 : lastMessage.parentId : lastMessage == null ? void 0 : lastMessage.id;
220
- }, [shouldQuery, lastMessage]);
221
- React__default.useEffect(() => {
222
- return () => {
223
- isMountedRef.current = false;
224
- };
225
- }, []);
226
- const creatorAndMembersId = useMemo(() => {
227
- var _a2, _b2, _c2, _d2, _e, _f;
228
- if (!shouldQuery || !(channel == null ? void 0 : channel.members))
229
- return null;
230
- const membersIds = (_c2 = (_b2 = (_a2 = channel == null ? void 0 : channel.members) == null ? void 0 : _a2.filter((m) => {
231
- var _a3;
232
- return m !== null && ((_a3 = m == null ? void 0 : m.user) == null ? void 0 : _a3.id) !== (currentUser == null ? void 0 : currentUser.id);
233
- })) == null ? void 0 : _b2.map((mu) => {
234
- var _a3;
235
- return (_a3 = mu == null ? void 0 : mu.user) == null ? void 0 : _a3.id;
236
- })) != null ? _c2 : [];
237
- const creatorId = (_d2 = channel == null ? void 0 : channel.creator) == null ? void 0 : _d2.id;
238
- const mergedIds = (_e = [].concat(membersIds, creatorId)) != null ? _e : [];
239
- return (_f = mergedIds == null ? void 0 : mergedIds.filter((m, pos) => (mergedIds == null ? void 0 : mergedIds.indexOf(m)) === pos)) != null ? _f : [];
240
- }, [shouldQuery, channel, currentUser]);
241
- const postParentId = useMemo(() => {
242
- var _a2;
243
- if (!shouldQuery || !(creatorAndMembersId == null ? void 0 : creatorAndMembersId.length))
244
- return null;
245
- 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;
246
- }, [shouldQuery, creatorAndMembersId, lastMessage, currentUser]);
247
- useCallback(() => {
248
- var _a2;
249
- if (shouldQuery && (channel == null ? void 0 : channel.id) && isMountedRef.current) {
250
- refetchThreadMessages({
251
- channelId: (_a2 = channel == null ? void 0 : channel.id) == null ? void 0 : _a2.toString(),
252
- role,
253
- limit: 2
254
- }).catch((err) => {
255
- console.error("Error refreshing thread state:", err);
256
- });
257
- }
258
- }, [shouldQuery, channel == null ? void 0 : channel.id, refetchThreadMessages, role]);
259
- useFocusEffect(React__default.useCallback(() => {
260
- if (!shouldQuery || !(channel == null ? void 0 : channel.id))
261
- return;
262
- setSubscriptionsTimestamp(Date.now());
263
- const fetchFreshData = async () => {
264
- var _a2;
265
- try {
266
- await refetchThreadMessages({
267
- channelId: (_a2 = channel == null ? void 0 : channel.id) == null ? void 0 : _a2.toString(),
268
- role,
269
- limit: 2
270
- });
271
- } catch (error2) {
272
- console.error("Error refetching thread messages on focus:", error2);
273
- }
274
- };
275
- fetchFreshData();
276
- return () => {
277
- };
278
- }, [shouldQuery, refreshing, channel == null ? void 0 : channel.id, refetchThreadMessages, role]));
279
- return /* @__PURE__ */ React__default.createElement(
280
- Pressable,
281
- {
282
- onPress: () => onOpen(channel == null ? void 0 : channel.id, channel == null ? void 0 : channel.title, postParentId),
283
- className: "flex-1 rounded-md border-gray-200 dark:border-gray-600 dark:bg-gray-700",
284
- style: {
285
- borderBottomWidth: 1,
286
- borderColor: "#e5e7eb",
287
- marginVertical: 0
288
- }
289
- },
290
- /* @__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: {
291
- borderRadius: 6,
292
- borderWidth: 2,
293
- borderColor: "#fff"
294
- }, source: {
295
- uri: (_d = channel == null ? void 0 : channel.creator) == null ? void 0 : _d.picture
296
- } }))), /* @__PURE__ */ React__default.createElement(Box, { className: "flex-1" }, /* @__PURE__ */ React__default.createElement(ServiceChannelWithLastMessage, { key: `channel-${channel == null ? void 0 : channel.id}-${subscriptionsTimestamp}`, channel, lastMessage, subscribeToNewMessages: () => {
297
- var _a2;
298
- return shouldQuery ? subscribeToMore({
299
- document: THREAD_CREATED_UPDATED,
300
- variables: {
301
- channelId: (_a2 = channel == null ? void 0 : channel.id) == null ? void 0 : _a2.toString(),
302
- postParentId: postParentId || servicePostParentId || null
303
- },
304
- updateQuery: (prev, {
305
- subscriptionData
306
- }) => {
307
- var _a3, _b2, _c2, _d2, _e, _f, _g, _h;
308
- if (!(subscriptionData == null ? void 0 : subscriptionData.data)) {
309
- return prev;
310
- }
311
- try {
312
- const newPostThreadData = (_b2 = (_a3 = subscriptionData == null ? void 0 : subscriptionData.data) == null ? void 0 : _a3.threadCreatedUpdated) == null ? void 0 : _b2.data;
313
- const newMessage = (_d2 = (_c2 = subscriptionData == null ? void 0 : subscriptionData.data) == null ? void 0 : _c2.threadCreatedUpdated) == null ? void 0 : _d2.lastMessage;
314
- if (!newPostThreadData || !newMessage) {
315
- return prev;
316
- }
317
- const prevThreads = ((_e = prev == null ? void 0 : prev.threadMessages) == null ? void 0 : _e.data) || [];
318
- const threadExists = prevThreads.some((t) => t.id === (newPostThreadData == null ? void 0 : newPostThreadData.id));
319
- let updatedThreads;
320
- if (threadExists) {
321
- updatedThreads = prevThreads.map((t) => t.id === (newPostThreadData == null ? void 0 : newPostThreadData.id) ? __spreadProps(__spreadValues({}, t), {
322
- replies: [...(t == null ? void 0 : t.replies) || [], newMessage],
323
- replyCount: newPostThreadData == null ? void 0 : newPostThreadData.replyCount,
324
- lastReplyAt: newPostThreadData == null ? void 0 : newPostThreadData.lastReplyAt,
325
- updatedAt: newPostThreadData == null ? void 0 : newPostThreadData.updatedAt
326
- }) : t);
327
- } else {
328
- updatedThreads = [...prevThreads, newPostThreadData];
329
- }
330
- return __spreadProps(__spreadValues({}, prev), {
331
- threadMessages: __spreadProps(__spreadValues({}, prev == null ? void 0 : prev.threadMessages), {
332
- totalCount: (_h = (_g = newPostThreadData == null ? void 0 : newPostThreadData.totalCount) != null ? _g : (_f = prev == null ? void 0 : prev.threadMessages) == null ? void 0 : _f.totalCount) != null ? _h : 0,
333
- data: updatedThreads
334
- })
335
- });
336
- } catch (error2) {
337
- return prev;
338
- }
339
- },
340
- onError: (error2) => {
341
- console.error(`Thread subscription error for channel ${channel == null ? void 0 : channel.id}:`, error2);
342
- }
343
- }) : void 0;
344
- }, subscribeToChatMessages: () => {
345
- var _a2;
346
- return shouldQuery ? subscribeToMore({
347
- document: CHAT_MESSAGE_ADDED,
348
- variables: {
349
- channelId: (_a2 = channel == null ? void 0 : channel.id) == null ? void 0 : _a2.toString(),
350
- postParentId: postParentId || servicePostParentId || null
351
- },
352
- updateQuery: (prev, {
353
- subscriptionData
354
- }) => {
355
- var _a3, _b2;
356
- if (!(subscriptionData == null ? void 0 : subscriptionData.data)) {
357
- return prev;
358
- }
359
- try {
360
- const newMessage = (_a3 = subscriptionData == null ? void 0 : subscriptionData.data) == null ? void 0 : _a3.chatMessageAdded;
361
- if (!newMessage) {
362
- return prev;
363
- }
364
- const prevThreads = ((_b2 = prev == null ? void 0 : prev.threadMessages) == null ? void 0 : _b2.data) || [];
365
- const threadIndex = prevThreads.findIndex((t) => {
366
- var _a4;
367
- if (newMessage.parentId && ((_a4 = t.post) == null ? void 0 : _a4.id) === newMessage.parentId) {
368
- return true;
369
- }
370
- if (t.replies && t.replies.some((r) => r.id === newMessage.parentId)) {
371
- return true;
372
- }
373
- return false;
374
- });
375
- if (threadIndex === -1) {
376
- return prev;
377
- }
378
- const updatedThreads = [...prevThreads];
379
- const thread = __spreadValues({}, updatedThreads[threadIndex]);
380
- thread.replies = [...thread.replies || [], newMessage];
381
- const currentReplyCount = typeof thread.replyCount === "number" ? thread.replyCount : 0;
382
- thread.replyCount = currentReplyCount + 1;
383
- thread.lastReplyAt = newMessage.createdAt;
384
- thread.updatedAt = newMessage.createdAt;
385
- updatedThreads[threadIndex] = thread;
386
- return __spreadProps(__spreadValues({}, prev), {
387
- threadMessages: __spreadProps(__spreadValues({}, prev == null ? void 0 : prev.threadMessages), {
388
- data: updatedThreads
389
- })
390
- });
391
- } catch (error2) {
392
- return prev;
393
- }
394
- },
395
- onError: (error2) => {
396
- console.error(`Chat message subscription error for channel ${channel == null ? void 0 : channel.id}:`, error2);
397
- }
398
- }) : void 0;
399
- }, subscribeToMore, postParentId, servicePostParentId })))
400
- );
401
- };
402
- const ServiceDialogsListItem = React__default.memo(ServiceDialogsListItemComponent);export{ServiceDialogsListItem,ServiceDialogsListItemComponent};//# sourceMappingURL=ServiceDialogsListItem.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ServiceDialogsListItem.js","sources":["../../../../src/screens/inbox/components/ServiceDialogsListItem.tsx"],"sourcesContent":["import React, { useMemo, useState, useCallback, useRef } 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, IUserAccount } from 'common';\nimport {\n THREAD_CREATED_UPDATED,\n CHAT_MESSAGE_ADDED,\n useThreadMessagesQuery,\n useThreadCreatedUpdatedSubscription,\n useThreadChatMessageAddedSubscription,\n} from '../../../queries/inboxQueries';\nimport { startCase } from 'lodash-es';\nimport colors from 'tailwindcss/colors';\nimport { SubscriptionHandler } from './SubscriptionHandler';\n\n// Helper function to safely create a Date object\nconst safeDate = (dateValue) => {\n if (!dateValue) return null;\n\n try {\n const date = new Date(dateValue);\n // Check if the date is valid by seeing if it returns a valid time value\n if (isNaN(date.getTime())) {\n console.warn('Invalid date value detected:', dateValue);\n return null;\n }\n return date;\n } catch (error) {\n console.warn('Error creating date from value:', dateValue, error);\n return null;\n }\n};\n\nconst createdAtText = (value: string) => {\n if (!value) return '';\n const date = safeDate(value);\n if (!date) return '';\n\n if (isToday(date)) return 'Today';\n if (isYesterday(date)) return 'Yesterday';\n return format(date, '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, postParentId?: any) => void;\n refreshing: boolean;\n role: any;\n visible?: boolean;\n}\n\n// Helper function to compute the last message from a list of messages\nconst computeLastMessage = (threadMessages) => {\n if (!threadMessages || !threadMessages.length) return null;\n\n // Extract the post and replies from thread messages\n let posts = [];\n let replies = [];\n\n // Helper function to check if a message is an image or contains only image content\n const isTextMessage = (msg) => {\n if (!msg) return false;\n\n // If message is empty or only contains image-specific markers, ignore it\n if (!msg.message || msg.message === '') return false;\n\n // Check if message looks like an image URL or reference\n const isImageMessage =\n msg.message.includes('<img') ||\n msg.message.includes('[Image]') ||\n msg.message.includes('![') ||\n (/\\.(jpeg|jpg|gif|png|bmp|webp)/i.test(msg.message) &&\n (msg.message.includes('http') || msg.message.includes('/images/')));\n\n // Return true only for text messages (not image messages)\n return !isImageMessage;\n };\n\n threadMessages.forEach((thread) => {\n if (thread?.post && isTextMessage(thread.post)) {\n posts.push(thread.post);\n }\n if (thread?.replies?.length) {\n replies = [...replies, ...thread.replies.filter((r) => isTextMessage(r))];\n }\n });\n\n // Combine and sort all messages\n const allMessages = [...posts, ...replies];\n if (!allMessages.length) return null;\n\n // Return the most recent message - use safe date comparison\n return allMessages.reduce((a, b) => {\n const dateA = safeDate(a?.createdAt);\n const dateB = safeDate(b?.createdAt);\n\n // If either date is invalid, prefer the message with valid date\n if (!dateA) return b;\n if (!dateB) return a;\n\n return dateA > dateB ? a : b;\n }, allMessages[0]);\n};\n\nconst ServiceChannelWithLastMessage = React.memo(\n ({\n channel,\n lastMessage,\n subscribeToNewMessages,\n subscribeToChatMessages,\n subscribeToMore,\n postParentId,\n servicePostParentId,\n }: {\n channel: any;\n lastMessage: any;\n subscribeToNewMessages: () => void;\n subscribeToChatMessages: () => void;\n subscribeToMore: any;\n postParentId: any;\n servicePostParentId: any;\n }) => {\n React.useEffect(() => {\n console.log(`Setting up subscriptions for channel ${channel?.id}`);\n // Subscribe and store the unsubscribe functions\n let threadUnsubscribe;\n let chatUnsubscribe;\n\n try {\n threadUnsubscribe = subscribeToNewMessages();\n chatUnsubscribe = subscribeToChatMessages();\n } catch (error) {\n console.error(`Error setting up subscriptions for channel ${channel?.id}:`, error);\n }\n\n return () => {\n // Cleanup subscriptions on unmount\n if (threadUnsubscribe && typeof threadUnsubscribe === 'function') {\n try {\n console.log(`Cleaning up thread subscription for channel ${channel?.id}`);\n threadUnsubscribe();\n } catch (error) {\n console.error(`Error cleaning up thread subscription for channel ${channel?.id}:`, error);\n }\n }\n\n if (chatUnsubscribe && typeof chatUnsubscribe === 'function') {\n try {\n console.log(`Cleaning up chat subscription for channel ${channel?.id}`);\n chatUnsubscribe();\n } catch (error) {\n console.error(`Error cleaning up chat subscription for channel ${channel?.id}:`, error);\n }\n }\n };\n }, [subscribeToNewMessages, subscribeToChatMessages, channel?.id]);\n\n // Debug output for component rendering\n React.useEffect(() => {\n console.log(`ServiceChannelWithLastMessage rendered for channel ${channel?.id}:`, {\n hasLastMessage: !!lastMessage,\n messageId: lastMessage?.id,\n messageText: lastMessage?.message?.substring(0, 20) + (lastMessage?.message?.length > 20 ? '...' : ''),\n date: lastMessage?.createdAt ? safeDate(lastMessage.createdAt)?.toISOString() : 'none',\n });\n }, [lastMessage, channel?.id]);\n\n const count = 30;\n const title = channel?.title.slice(0, count) + (channel?.title.length > count ? '...' : '');\n\n // Define message display text\n let displayMessage = 'No messages yet';\n\n if (lastMessage) {\n // Check for file attachments\n const hasFileAttachments = lastMessage.files?.data?.length > 0;\n\n // Check if the message appears to be an image\n const isImageMessage =\n lastMessage.message?.includes('<img') ||\n lastMessage.message?.includes('[Image]') ||\n lastMessage.message?.includes('![') ||\n (/\\.(jpeg|jpg|gif|png|bmp|webp)/i.test(lastMessage.message || '') &&\n ((lastMessage.message || '').includes('http') || (lastMessage.message || '').includes('/images/')));\n\n if (hasFileAttachments) {\n displayMessage = '📎 File attachment';\n } else if (isImageMessage) {\n displayMessage = '[Image]';\n } else if (lastMessage.message && lastMessage.message.trim() !== '') {\n displayMessage = lastMessage.message;\n } else {\n displayMessage = '(Empty message)';\n }\n }\n\n return (\n <>\n <SubscriptionHandler\n subscribeToMore={subscribeToMore}\n document={THREAD_CREATED_UPDATED}\n variables={{\n channelId: channel?.id?.toString(),\n postParentId: postParentId || servicePostParentId || null,\n }}\n updateQuery={undefined} // Provide custom updateQuery if needed\n />\n <SubscriptionHandler\n subscribeToMore={subscribeToMore}\n document={CHAT_MESSAGE_ADDED}\n variables={{\n channelId: channel?.id?.toString(),\n postParentId: postParentId || servicePostParentId || null,\n }}\n updateQuery={undefined} // Provide custom updateQuery if needed\n />\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 {title}\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]}>{lastMessage ? createdAtText(lastMessage?.createdAt) : ''}</Text>\n </Box>\n </HStack>\n </>\n );\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 ServiceDialogsListItemComponent: React.FC<IDialogListItemProps> = function DialogsListItem({\n currentUser,\n // users,\n selectedChannelId,\n channel,\n onOpen,\n refreshing,\n role,\n visible = true,\n}) {\n const isMountedRef = useRef(true);\n const [subscriptionsTimestamp, setSubscriptionsTimestamp] = useState(Date.now());\n\n // Only run queries/subscriptions if visible\n const shouldQuery = !!channel?.id && visible;\n\n // Query for thread messages (minimal fields if possible)\n const {\n data: threadMessagesData,\n loading: threadMessageLoading,\n error,\n refetch: refetchThreadMessages,\n subscribeToMore,\n } = useThreadMessagesQuery({\n variables: {\n channelId: channel?.id?.toString(),\n role,\n limit: 2,\n },\n skip: !shouldQuery, // Only run if visible\n fetchPolicy: 'cache-and-network',\n onCompleted: (data) => {\n if (!shouldQuery) return;\n },\n onError: (error) => {\n if (!shouldQuery) return;\n console.error(`Error fetching thread messages for channel ${channel?.id}:`, error);\n },\n });\n\n // Extract threadMessages data for easier access\n const threadMessages = useMemo(() => threadMessagesData?.threadMessages?.data || [], [threadMessagesData]);\n\n // Calculate lastMessage directly from threadMessages\n const lastMessage = useMemo(() => {\n if (!shouldQuery) return null;\n return computeLastMessage(threadMessages);\n }, [shouldQuery, threadMessages]);\n\n // Calculate servicePostParentId based on lastMessage\n const servicePostParentId = useMemo(() => {\n if (!shouldQuery || !lastMessage) return null;\n return lastMessage?.parentId ? lastMessage?.parentId : lastMessage?.id;\n }, [shouldQuery, lastMessage]);\n\n // Handle component unmount\n React.useEffect(() => {\n return () => {\n isMountedRef.current = false;\n };\n }, []);\n\n const creatorAndMembersId = useMemo(() => {\n if (!shouldQuery || !channel?.members) return null;\n const membersIds: any =\n channel?.members\n ?.filter((m: any) => m !== null && m?.user?.id !== currentUser?.id)\n ?.map((mu: any) => mu?.user?.id) ?? [];\n const creatorId: any = channel?.creator?.id;\n const mergedIds: any = [].concat(membersIds, creatorId) ?? [];\n return mergedIds?.filter((m: any, pos: any) => mergedIds?.indexOf(m) === pos) ?? [];\n }, [shouldQuery, channel, currentUser]);\n\n const postParentId = useMemo(() => {\n if (!shouldQuery || !creatorAndMembersId?.length) return null;\n return creatorAndMembersId?.length && creatorAndMembersId?.includes(currentUser?.id)\n ? null\n : lastMessage?.parentId\n ? lastMessage?.parentId\n : lastMessage?.id ?? 0;\n }, [shouldQuery, creatorAndMembersId, lastMessage, currentUser]);\n\n // Function to force refresh the component state\n const refreshThreadState = useCallback(() => {\n if (shouldQuery && channel?.id && isMountedRef.current) {\n refetchThreadMessages({\n channelId: channel?.id?.toString(),\n role,\n limit: 2,\n }).catch((err) => {\n console.error('Error refreshing thread state:', err);\n });\n }\n }, [shouldQuery, channel?.id, refetchThreadMessages, role]);\n\n // Reset subscriptions when the component gains focus\n useFocusEffect(\n React.useCallback(() => {\n if (!shouldQuery || !channel?.id) return;\n setSubscriptionsTimestamp(Date.now());\n const fetchFreshData = async () => {\n try {\n await refetchThreadMessages({\n channelId: channel?.id?.toString(),\n role,\n limit: 2,\n });\n } catch (error) {\n console.error('Error refetching thread messages on focus:', error);\n }\n };\n fetchFreshData();\n return () => {};\n }, [shouldQuery, refreshing, channel?.id, refetchThreadMessages, role]),\n );\n\n return (\n <Pressable\n // onPress={() => channel?.id !== selectedChannelId && onOpen(channel?.id, channel?.title, postParentId)}\n onPress={() => onOpen(channel?.id, channel?.title, postParentId)}\n className=\"flex-1 rounded-md border-gray-200 dark:border-gray-600 dark:bg-gray-700\"\n style={{ borderBottomWidth: 1, borderColor: '#e5e7eb', marginVertical: 0 }}\n >\n <HStack space={'md'} className=\"flex-1 w-[100%] px-2 py-3 items-center\">\n <Box className=\"flex-[0.1] items-start pl-3\">\n <Avatar\n key={'service-channels-key-' + channel?.id}\n size={'sm'}\n className=\"bg-transparent top-0 right-0 z-[1]\"\n >\n <AvatarFallbackText> {startCase(channel?.creator?.username?.charAt(0))}</AvatarFallbackText>\n <AvatarImage\n alt=\"user image\"\n style={{ borderRadius: 6, borderWidth: 2, borderColor: '#fff' }}\n source={{\n uri: channel?.creator?.picture,\n }}\n />\n </Avatar>\n </Box>\n <Box className=\"flex-1\">\n <ServiceChannelWithLastMessage\n key={`channel-${channel?.id}-${subscriptionsTimestamp}`}\n channel={channel}\n lastMessage={lastMessage}\n subscribeToNewMessages={() =>\n shouldQuery\n ? subscribeToMore({\n document: THREAD_CREATED_UPDATED,\n variables: {\n channelId: channel?.id?.toString(),\n postParentId: postParentId || servicePostParentId || null,\n },\n updateQuery: (prev, { subscriptionData }: any) => {\n if (!subscriptionData?.data) {\n return prev;\n }\n try {\n const newPostThreadData: any =\n subscriptionData?.data?.threadCreatedUpdated?.data;\n const newMessage: any =\n subscriptionData?.data?.threadCreatedUpdated?.lastMessage;\n if (!newPostThreadData || !newMessage) {\n return prev;\n }\n const prevThreads = prev?.threadMessages?.data || [];\n const threadExists = prevThreads.some(\n (t: any) => t.id === newPostThreadData?.id,\n );\n let updatedThreads;\n if (threadExists) {\n updatedThreads = prevThreads.map((t: any) =>\n t.id === newPostThreadData?.id\n ? {\n ...t,\n replies: [...(t?.replies || []), newMessage],\n replyCount: newPostThreadData?.replyCount,\n lastReplyAt: newPostThreadData?.lastReplyAt,\n updatedAt: newPostThreadData?.updatedAt,\n }\n : t,\n );\n } else {\n updatedThreads = [...prevThreads, newPostThreadData];\n }\n return {\n ...prev,\n threadMessages: {\n ...prev?.threadMessages,\n totalCount:\n newPostThreadData?.totalCount ??\n prev?.threadMessages?.totalCount ??\n 0,\n data: updatedThreads,\n },\n };\n } catch (error) {\n return prev;\n }\n },\n onError: (error) => {\n console.error(`Thread subscription error for channel ${channel?.id}:`, error);\n },\n })\n : undefined\n }\n subscribeToChatMessages={() =>\n shouldQuery\n ? subscribeToMore({\n document: CHAT_MESSAGE_ADDED,\n variables: {\n channelId: channel?.id?.toString(),\n postParentId: postParentId || servicePostParentId || null,\n },\n updateQuery: (prev, { subscriptionData }: any) => {\n if (!subscriptionData?.data) {\n return prev;\n }\n try {\n const newMessage = subscriptionData?.data?.chatMessageAdded;\n if (!newMessage) {\n return prev;\n }\n const prevThreads = prev?.threadMessages?.data || [];\n const threadIndex = prevThreads.findIndex((t: any) => {\n if (newMessage.parentId && t.post?.id === newMessage.parentId) {\n return true;\n }\n if (\n t.replies &&\n t.replies.some((r: any) => r.id === newMessage.parentId)\n ) {\n return true;\n }\n return false;\n });\n if (threadIndex === -1) {\n return prev;\n }\n const updatedThreads = [...prevThreads];\n const thread = { ...updatedThreads[threadIndex] };\n thread.replies = [...(thread.replies || []), newMessage];\n const currentReplyCount =\n typeof thread.replyCount === 'number' ? thread.replyCount : 0;\n thread.replyCount = currentReplyCount + 1;\n thread.lastReplyAt = newMessage.createdAt;\n thread.updatedAt = newMessage.createdAt;\n updatedThreads[threadIndex] = thread;\n return {\n ...prev,\n threadMessages: {\n ...prev?.threadMessages,\n data: updatedThreads,\n },\n };\n } catch (error) {\n return prev;\n }\n },\n onError: (error) => {\n console.error(\n `Chat message subscription error for channel ${channel?.id}:`,\n error,\n );\n },\n })\n : undefined\n }\n subscribeToMore={subscribeToMore}\n postParentId={postParentId}\n servicePostParentId={servicePostParentId}\n />\n </Box>\n </HStack>\n </Pressable>\n );\n};\n\nexport const ServiceDialogsListItem = React.memo(ServiceDialogsListItemComponent);\n"],"names":["React","_a","_b","_c","error","_d"],"mappings":"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"}