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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/lib/compute.js +2 -3
  3. package/lib/index.js.map +1 -1
  4. package/lib/queries/inboxQueries.js +77 -0
  5. package/lib/queries/inboxQueries.js.map +1 -0
  6. package/lib/routes.json +2 -3
  7. package/lib/screens/inbox/DialogThreadMessages.js +3 -7
  8. package/lib/screens/inbox/DialogThreadMessages.js.map +1 -1
  9. package/lib/screens/inbox/DialogThreads.js +3 -7
  10. package/lib/screens/inbox/DialogThreads.js.map +1 -1
  11. package/lib/screens/inbox/components/DialogsListItem.js +47 -46
  12. package/lib/screens/inbox/components/DialogsListItem.js.map +1 -1
  13. package/lib/screens/inbox/components/GiftedChatInboxComponent.js +313 -0
  14. package/lib/screens/inbox/components/GiftedChatInboxComponent.js.map +1 -0
  15. package/lib/screens/inbox/components/ServiceDialogsListItem.js +72 -57
  16. package/lib/screens/inbox/components/ServiceDialogsListItem.js.map +1 -1
  17. package/lib/screens/inbox/components/SlackMessageContainer/SlackBubble.js +115 -14
  18. package/lib/screens/inbox/components/SlackMessageContainer/SlackBubble.js.map +1 -1
  19. package/lib/screens/inbox/components/SubscriptionHandler.js +24 -0
  20. package/lib/screens/inbox/components/SubscriptionHandler.js.map +1 -0
  21. package/lib/screens/inbox/containers/ConversationView.js +640 -493
  22. package/lib/screens/inbox/containers/ConversationView.js.map +1 -1
  23. package/lib/screens/inbox/containers/Dialogs.js +100 -181
  24. package/lib/screens/inbox/containers/Dialogs.js.map +1 -1
  25. package/lib/screens/inbox/containers/ThreadConversationView.js +659 -245
  26. package/lib/screens/inbox/containers/ThreadConversationView.js.map +1 -1
  27. package/lib/screens/inbox/containers/ThreadsView.js +3 -3
  28. package/lib/screens/inbox/containers/ThreadsView.js.map +1 -1
  29. package/lib/screens/inbox/hooks/useInboxMessages.js +31 -0
  30. package/lib/screens/inbox/hooks/useInboxMessages.js.map +1 -0
  31. package/package.json +4 -4
  32. package/src/index.ts +2 -0
  33. package/src/queries/inboxQueries.ts +298 -0
  34. package/src/queries/index.d.ts +2 -0
  35. package/src/queries/index.ts +1 -0
  36. package/src/screens/inbox/DialogThreadMessages.tsx +3 -11
  37. package/src/screens/inbox/DialogThreads.tsx +3 -7
  38. package/src/screens/inbox/components/Actionsheet.tsx +30 -0
  39. package/src/screens/inbox/components/DialogsListItem.tsx +89 -148
  40. package/src/screens/inbox/components/ExpandableInput.tsx +460 -0
  41. package/src/screens/inbox/components/ExpandableInputActionSheet.tsx +518 -0
  42. package/src/screens/inbox/components/GiftedChatInboxComponent.tsx +411 -0
  43. package/src/screens/inbox/components/ServiceDialogsListItem.tsx +202 -221
  44. package/src/screens/inbox/components/SlackInput.tsx +23 -0
  45. package/src/screens/inbox/components/SlackMessageContainer/SlackBubble.tsx +216 -30
  46. package/src/screens/inbox/components/SubscriptionHandler.tsx +41 -0
  47. package/src/screens/inbox/components/SupportServiceDialogsListItem.tsx +6 -7
  48. package/src/screens/inbox/containers/ConversationView.tsx +1109 -669
  49. package/src/screens/inbox/containers/Dialogs.tsx +198 -342
  50. package/src/screens/inbox/containers/SupportServiceDialogs.tsx +2 -2
  51. package/src/screens/inbox/containers/ThreadConversationView.tsx +1141 -402
  52. package/src/screens/inbox/containers/ThreadsView.tsx +5 -5
  53. package/src/screens/inbox/hooks/useInboxMessages.ts +34 -0
  54. package/src/screens/inbox/machines/threadsMachine.ts +2 -2
@@ -1,4 +1,4 @@
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 {useThreadMessagesQuery,OnThreadChatMessageAddedDocument,OnThreadCreatedUpdatedDocument}from'common/graphql';import {startCase}from'lodash-es';import colors from'tailwindcss/colors';var __defProp = Object.defineProperty;
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
2
  var __defProps = Object.defineProperties;
3
3
  var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
4
4
  var __getOwnPropSymbols = Object.getOwnPropertySymbols;
@@ -83,9 +83,12 @@ const ServiceChannelWithLastMessage = React__default.memo(({
83
83
  channel,
84
84
  lastMessage,
85
85
  subscribeToNewMessages,
86
- subscribeToChatMessages
86
+ subscribeToChatMessages,
87
+ subscribeToMore,
88
+ postParentId,
89
+ servicePostParentId
87
90
  }) => {
88
- var _a, _b, _c, _d, _e;
91
+ var _a, _b, _c, _d, _e, _f, _g;
89
92
  React__default.useEffect(() => {
90
93
  console.log(`Setting up subscriptions for channel ${channel == null ? void 0 : channel.id}`);
91
94
  let threadUnsubscribe;
@@ -140,7 +143,29 @@ const ServiceChannelWithLastMessage = React__default.memo(({
140
143
  displayMessage = "(Empty message)";
141
144
  }
142
145
  }
143
- 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) : "")));
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) : ""))));
144
169
  });
145
170
  const ServiceDialogsListItemComponent = function DialogsListItem({
146
171
  currentUser,
@@ -148,11 +173,13 @@ const ServiceDialogsListItemComponent = function DialogsListItem({
148
173
  channel,
149
174
  onOpen,
150
175
  refreshing,
151
- role
176
+ role,
177
+ visible = true
152
178
  }) {
153
- var _a, _b, _c, _d, _e;
179
+ var _a, _b, _c, _d;
154
180
  const isMountedRef = useRef(true);
155
181
  const [subscriptionsTimestamp, setSubscriptionsTimestamp] = useState(Date.now());
182
+ const shouldQuery = !!(channel == null ? void 0 : channel.id) && visible;
156
183
  const {
157
184
  data: threadMessagesData,
158
185
  loading: threadMessageLoading,
@@ -165,32 +192,40 @@ const ServiceDialogsListItemComponent = function DialogsListItem({
165
192
  role,
166
193
  limit: 2
167
194
  },
195
+ skip: !shouldQuery,
168
196
  fetchPolicy: "cache-and-network",
169
197
  onCompleted: (data) => {
170
- var _a2, _b2;
171
- 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");
198
+ if (!shouldQuery)
199
+ return;
172
200
  },
173
201
  onError: (error2) => {
202
+ if (!shouldQuery)
203
+ return;
174
204
  console.error(`Error fetching thread messages for channel ${channel == null ? void 0 : channel.id}:`, error2);
175
205
  }
176
206
  });
177
- const threadMessages = ((_b = threadMessagesData == null ? void 0 : threadMessagesData.threadMessages) == null ? void 0 : _b.data) || [];
207
+ const threadMessages = useMemo(() => {
208
+ var _a2;
209
+ return ((_a2 = threadMessagesData == null ? void 0 : threadMessagesData.threadMessages) == null ? void 0 : _a2.data) || [];
210
+ }, [threadMessagesData]);
178
211
  const lastMessage = useMemo(() => {
212
+ if (!shouldQuery)
213
+ return null;
179
214
  return computeLastMessage(threadMessages);
180
- }, [threadMessages]);
215
+ }, [shouldQuery, threadMessages]);
181
216
  const servicePostParentId = useMemo(() => {
182
- if (!lastMessage)
217
+ if (!shouldQuery || !lastMessage)
183
218
  return null;
184
219
  return (lastMessage == null ? void 0 : lastMessage.parentId) ? lastMessage == null ? void 0 : lastMessage.parentId : lastMessage == null ? void 0 : lastMessage.id;
185
- }, [lastMessage]);
220
+ }, [shouldQuery, lastMessage]);
186
221
  React__default.useEffect(() => {
187
222
  return () => {
188
223
  isMountedRef.current = false;
189
224
  };
190
225
  }, []);
191
226
  const creatorAndMembersId = useMemo(() => {
192
- var _a2, _b2, _c2, _d2, _e2, _f;
193
- if (!(channel == null ? void 0 : channel.members))
227
+ var _a2, _b2, _c2, _d2, _e, _f;
228
+ if (!shouldQuery || !(channel == null ? void 0 : channel.members))
194
229
  return null;
195
230
  const membersIds = (_c2 = (_b2 = (_a2 = channel == null ? void 0 : channel.members) == null ? void 0 : _a2.filter((m) => {
196
231
  var _a3;
@@ -200,19 +235,18 @@ const ServiceDialogsListItemComponent = function DialogsListItem({
200
235
  return (_a3 = mu == null ? void 0 : mu.user) == null ? void 0 : _a3.id;
201
236
  })) != null ? _c2 : [];
202
237
  const creatorId = (_d2 = channel == null ? void 0 : channel.creator) == null ? void 0 : _d2.id;
203
- const mergedIds = (_e2 = [].concat(membersIds, creatorId)) != null ? _e2 : [];
238
+ const mergedIds = (_e = [].concat(membersIds, creatorId)) != null ? _e : [];
204
239
  return (_f = mergedIds == null ? void 0 : mergedIds.filter((m, pos) => (mergedIds == null ? void 0 : mergedIds.indexOf(m)) === pos)) != null ? _f : [];
205
- }, [channel, currentUser]);
240
+ }, [shouldQuery, channel, currentUser]);
206
241
  const postParentId = useMemo(() => {
207
242
  var _a2;
208
- if (!(creatorAndMembersId == null ? void 0 : creatorAndMembersId.length))
243
+ if (!shouldQuery || !(creatorAndMembersId == null ? void 0 : creatorAndMembersId.length))
209
244
  return null;
210
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;
211
- }, [creatorAndMembersId, lastMessage, currentUser]);
246
+ }, [shouldQuery, creatorAndMembersId, lastMessage, currentUser]);
212
247
  useCallback(() => {
213
248
  var _a2;
214
- if ((channel == null ? void 0 : channel.id) && isMountedRef.current) {
215
- console.log("Forcing thread state refresh for channel:", channel == null ? void 0 : channel.id);
249
+ if (shouldQuery && (channel == null ? void 0 : channel.id) && isMountedRef.current) {
216
250
  refetchThreadMessages({
217
251
  channelId: (_a2 = channel == null ? void 0 : channel.id) == null ? void 0 : _a2.toString(),
218
252
  role,
@@ -221,12 +255,11 @@ const ServiceDialogsListItemComponent = function DialogsListItem({
221
255
  console.error("Error refreshing thread state:", err);
222
256
  });
223
257
  }
224
- }, [channel == null ? void 0 : channel.id, refetchThreadMessages, isMountedRef, role]);
258
+ }, [shouldQuery, channel == null ? void 0 : channel.id, refetchThreadMessages, role]);
225
259
  useFocusEffect(React__default.useCallback(() => {
226
- setSubscriptionsTimestamp(Date.now());
227
- if (!(channel == null ? void 0 : channel.id))
260
+ if (!shouldQuery || !(channel == null ? void 0 : channel.id))
228
261
  return;
229
- console.log("ServiceDialogsListItem focused for channel:", channel == null ? void 0 : channel.id);
262
+ setSubscriptionsTimestamp(Date.now());
230
263
  const fetchFreshData = async () => {
231
264
  var _a2;
232
265
  try {
@@ -242,7 +275,7 @@ const ServiceDialogsListItemComponent = function DialogsListItem({
242
275
  fetchFreshData();
243
276
  return () => {
244
277
  };
245
- }, [refreshing, channel == null ? void 0 : channel.id, refetchThreadMessages, role]));
278
+ }, [shouldQuery, refreshing, channel == null ? void 0 : channel.id, refetchThreadMessages, role]));
246
279
  return /* @__PURE__ */ React__default.createElement(
247
280
  Pressable,
248
281
  {
@@ -254,16 +287,16 @@ const ServiceDialogsListItemComponent = function DialogsListItem({
254
287
  marginVertical: 0
255
288
  }
256
289
  },
257
- /* @__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((_d = (_c = channel == null ? void 0 : channel.creator) == null ? void 0 : _c.username) == null ? void 0 : _d.charAt(0))), /* @__PURE__ */ React__default.createElement(AvatarImage, { alt: "user image", style: {
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: {
258
291
  borderRadius: 6,
259
292
  borderWidth: 2,
260
293
  borderColor: "#fff"
261
294
  }, source: {
262
- uri: (_e = channel == null ? void 0 : channel.creator) == null ? void 0 : _e.picture
295
+ uri: (_d = channel == null ? void 0 : channel.creator) == null ? void 0 : _d.picture
263
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: () => {
264
297
  var _a2;
265
- return subscribeToMore({
266
- document: OnThreadCreatedUpdatedDocument,
298
+ return shouldQuery ? subscribeToMore({
299
+ document: THREAD_CREATED_UPDATED,
267
300
  variables: {
268
301
  channelId: (_a2 = channel == null ? void 0 : channel.id) == null ? void 0 : _a2.toString(),
269
302
  postParentId: postParentId || servicePostParentId || null
@@ -271,25 +304,17 @@ const ServiceDialogsListItemComponent = function DialogsListItem({
271
304
  updateQuery: (prev, {
272
305
  subscriptionData
273
306
  }) => {
274
- var _a3, _b2, _c2, _d2, _e2, _f, _g, _h, _i;
307
+ var _a3, _b2, _c2, _d2, _e, _f, _g, _h;
275
308
  if (!(subscriptionData == null ? void 0 : subscriptionData.data)) {
276
- console.log(`No subscription data for channel ${channel == null ? void 0 : channel.id}`);
277
309
  return prev;
278
310
  }
279
311
  try {
280
312
  const newPostThreadData = (_b2 = (_a3 = subscriptionData == null ? void 0 : subscriptionData.data) == null ? void 0 : _a3.threadCreatedUpdated) == null ? void 0 : _b2.data;
281
313
  const newMessage = (_d2 = (_c2 = subscriptionData == null ? void 0 : subscriptionData.data) == null ? void 0 : _c2.threadCreatedUpdated) == null ? void 0 : _d2.lastMessage;
282
314
  if (!newPostThreadData || !newMessage) {
283
- console.log(`Missing data in subscription for channel ${channel == null ? void 0 : channel.id}`);
284
315
  return prev;
285
316
  }
286
- console.log("New thread message subscription update:", {
287
- channelId: channel == null ? void 0 : channel.id,
288
- threadId: newPostThreadData == null ? void 0 : newPostThreadData.id,
289
- hasMessage: !!newMessage,
290
- message: ((_e2 = newMessage == null ? void 0 : newMessage.message) == null ? void 0 : _e2.substring(0, 20)) + "..."
291
- });
292
- const prevThreads = ((_f = prev == null ? void 0 : prev.threadMessages) == null ? void 0 : _f.data) || [];
317
+ const prevThreads = ((_e = prev == null ? void 0 : prev.threadMessages) == null ? void 0 : _e.data) || [];
293
318
  const threadExists = prevThreads.some((t) => t.id === (newPostThreadData == null ? void 0 : newPostThreadData.id));
294
319
  let updatedThreads;
295
320
  if (threadExists) {
@@ -304,23 +329,22 @@ const ServiceDialogsListItemComponent = function DialogsListItem({
304
329
  }
305
330
  return __spreadProps(__spreadValues({}, prev), {
306
331
  threadMessages: __spreadProps(__spreadValues({}, prev == null ? void 0 : prev.threadMessages), {
307
- totalCount: (_i = (_h = newPostThreadData == null ? void 0 : newPostThreadData.totalCount) != null ? _h : (_g = prev == null ? void 0 : prev.threadMessages) == null ? void 0 : _g.totalCount) != null ? _i : 0,
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,
308
333
  data: updatedThreads
309
334
  })
310
335
  });
311
336
  } catch (error2) {
312
- console.error(`Error processing subscription data for channel ${channel == null ? void 0 : channel.id}:`, error2);
313
337
  return prev;
314
338
  }
315
339
  },
316
340
  onError: (error2) => {
317
341
  console.error(`Thread subscription error for channel ${channel == null ? void 0 : channel.id}:`, error2);
318
342
  }
319
- });
343
+ }) : void 0;
320
344
  }, subscribeToChatMessages: () => {
321
345
  var _a2;
322
- return subscribeToMore({
323
- document: OnThreadChatMessageAddedDocument,
346
+ return shouldQuery ? subscribeToMore({
347
+ document: CHAT_MESSAGE_ADDED,
324
348
  variables: {
325
349
  channelId: (_a2 = channel == null ? void 0 : channel.id) == null ? void 0 : _a2.toString(),
326
350
  postParentId: postParentId || servicePostParentId || null
@@ -328,23 +352,16 @@ const ServiceDialogsListItemComponent = function DialogsListItem({
328
352
  updateQuery: (prev, {
329
353
  subscriptionData
330
354
  }) => {
331
- var _a3, _b2, _c2;
355
+ var _a3, _b2;
332
356
  if (!(subscriptionData == null ? void 0 : subscriptionData.data)) {
333
- console.log(`No chat message subscription data for channel ${channel == null ? void 0 : channel.id}`);
334
357
  return prev;
335
358
  }
336
359
  try {
337
360
  const newMessage = (_a3 = subscriptionData == null ? void 0 : subscriptionData.data) == null ? void 0 : _a3.chatMessageAdded;
338
361
  if (!newMessage) {
339
- console.log(`Missing chat message data in subscription for channel ${channel == null ? void 0 : channel.id}`);
340
362
  return prev;
341
363
  }
342
- console.log("New chat message subscription update:", {
343
- channelId: channel == null ? void 0 : channel.id,
344
- messageId: newMessage == null ? void 0 : newMessage.id,
345
- message: ((_b2 = newMessage == null ? void 0 : newMessage.message) == null ? void 0 : _b2.substring(0, 20)) + "..."
346
- });
347
- const prevThreads = ((_c2 = prev == null ? void 0 : prev.threadMessages) == null ? void 0 : _c2.data) || [];
364
+ const prevThreads = ((_b2 = prev == null ? void 0 : prev.threadMessages) == null ? void 0 : _b2.data) || [];
348
365
  const threadIndex = prevThreads.findIndex((t) => {
349
366
  var _a4;
350
367
  if (newMessage.parentId && ((_a4 = t.post) == null ? void 0 : _a4.id) === newMessage.parentId) {
@@ -356,7 +373,6 @@ const ServiceDialogsListItemComponent = function DialogsListItem({
356
373
  return false;
357
374
  });
358
375
  if (threadIndex === -1) {
359
- console.log(`Cannot find thread for chat message in channel ${channel == null ? void 0 : channel.id}`);
360
376
  return prev;
361
377
  }
362
378
  const updatedThreads = [...prevThreads];
@@ -373,15 +389,14 @@ const ServiceDialogsListItemComponent = function DialogsListItem({
373
389
  })
374
390
  });
375
391
  } catch (error2) {
376
- console.error(`Error processing chat message subscription for channel ${channel == null ? void 0 : channel.id}:`, error2);
377
392
  return prev;
378
393
  }
379
394
  },
380
395
  onError: (error2) => {
381
396
  console.error(`Chat message subscription error for channel ${channel == null ? void 0 : channel.id}:`, error2);
382
397
  }
383
- });
384
- } })))
398
+ }) : void 0;
399
+ }, subscribeToMore, postParentId, servicePostParentId })))
385
400
  );
386
401
  };
387
402
  const ServiceDialogsListItem = React__default.memo(ServiceDialogsListItemComponent);export{ServiceDialogsListItem,ServiceDialogsListItemComponent};//# sourceMappingURL=ServiceDialogsListItem.js.map
@@ -1 +1 @@
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 useOnThreadCreatedUpdatedSubscription,\n useOnThreadChatMessageAddedSubscription,\n useThreadMessagesQuery,\n OnThreadCreatedUpdatedDocument as THREAD_CHAT_ADDED,\n OnThreadChatMessageAddedDocument as CHAT_MESSAGE_ADDED,\n} from 'common/graphql';\nimport { startCase } from 'lodash-es';\nimport colors from 'tailwindcss/colors';\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}\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 ({ channel, lastMessage, subscribeToNewMessages, subscribeToChatMessages }: any) => {\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 <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 * 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}) {\n // Create a ref to track if component is mounted\n const isMountedRef = useRef(true);\n const [subscriptionsTimestamp, setSubscriptionsTimestamp] = useState(Date.now());\n\n // Query for thread messages\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 fetchPolicy: 'cache-and-network',\n onCompleted: (data) => {\n console.log(\n `Completed thread messages query for channel ${channel?.id}:`,\n data?.threadMessages?.data?.length ? 'Has messages' : 'No messages',\n );\n },\n onError: (error) => {\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 = threadMessagesData?.threadMessages?.data || [];\n\n // Calculate lastMessage directly from threadMessages\n const lastMessage = useMemo(() => {\n return computeLastMessage(threadMessages);\n }, [threadMessages]);\n\n // Calculate servicePostParentId based on lastMessage\n const servicePostParentId = useMemo(() => {\n if (!lastMessage) return null;\n return lastMessage?.parentId ? lastMessage?.parentId : lastMessage?.id;\n }, [lastMessage]);\n\n // Handle component unmount\n React.useEffect(() => {\n return () => {\n isMountedRef.current = false;\n };\n }, []);\n\n const creatorAndMembersId = useMemo(() => {\n if (!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 }, [channel, currentUser]);\n\n const postParentId = useMemo(() => {\n if (!creatorAndMembersId?.length) return null;\n\n return creatorAndMembersId?.length && creatorAndMembersId?.includes(currentUser?.id)\n ? null\n : lastMessage?.parentId\n ? lastMessage?.parentId\n : lastMessage?.id ?? 0;\n }, [creatorAndMembersId, lastMessage, currentUser]);\n\n // Function to force refresh the component state\n const refreshThreadState = useCallback(() => {\n if (channel?.id && isMountedRef.current) {\n console.log('Forcing thread state refresh for channel:', channel?.id);\n\n // Refetch messages from server\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 }, [channel?.id, refetchThreadMessages, isMountedRef, role]);\n\n // Reset subscriptions when the component gains focus\n useFocusEffect(\n React.useCallback(() => {\n // Force subscription refresh\n setSubscriptionsTimestamp(Date.now());\n\n // Existing focus effect logic...\n if (!channel?.id) return;\n\n console.log('ServiceDialogsListItem focused for channel:', channel?.id);\n\n // Use a direct refetch with network-only policy to force fresh data\n const fetchFreshData = async () => {\n try {\n // Force a network-only fetch\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\n // Execute fetch\n fetchFreshData();\n\n return () => {\n // Cleanup function when unfocused\n };\n }, [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 subscribeToMore({\n document: THREAD_CHAT_ADDED,\n variables: {\n channelId: channel?.id?.toString(),\n postParentId: postParentId || servicePostParentId || null,\n },\n updateQuery: (prev, { subscriptionData }: any) => {\n if (!subscriptionData?.data) {\n console.log(`No subscription data for channel ${channel?.id}`);\n return prev;\n }\n\n try {\n const newPostThreadData: any =\n subscriptionData?.data?.threadCreatedUpdated?.data;\n const newMessage: any =\n subscriptionData?.data?.threadCreatedUpdated?.lastMessage;\n\n if (!newPostThreadData || !newMessage) {\n console.log(`Missing data in subscription for channel ${channel?.id}`);\n return prev;\n }\n\n console.log('New thread message subscription update:', {\n channelId: channel?.id,\n threadId: newPostThreadData?.id,\n hasMessage: !!newMessage,\n message: newMessage?.message?.substring(0, 20) + '...',\n });\n\n // Create a safe copy of the previous data\n const prevThreads = prev?.threadMessages?.data || [];\n\n // Check if this thread already exists\n const threadExists = prevThreads.some(\n (t: any) => t.id === newPostThreadData?.id,\n );\n\n let updatedThreads;\n if (threadExists) {\n // Update existing thread\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 // Add new thread\n updatedThreads = [...prevThreads, newPostThreadData];\n }\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 console.error(\n `Error processing subscription data for channel ${channel?.id}:`,\n error,\n );\n return prev;\n }\n },\n onError: (error) => {\n console.error(`Thread subscription error for channel ${channel?.id}:`, error);\n },\n })\n }\n subscribeToChatMessages={() =>\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 console.log(`No chat message subscription data for channel ${channel?.id}`);\n return prev;\n }\n\n try {\n const newMessage = subscriptionData?.data?.chatMessageAdded;\n\n if (!newMessage) {\n console.log(\n `Missing chat message data in subscription for channel ${channel?.id}`,\n );\n return prev;\n }\n\n console.log('New chat message subscription update:', {\n channelId: channel?.id,\n messageId: newMessage?.id,\n message: newMessage?.message?.substring(0, 20) + '...',\n });\n\n // Find the thread this message belongs to\n const prevThreads = prev?.threadMessages?.data || [];\n const threadIndex = prevThreads.findIndex((t: any) => {\n // Check if this message belongs to this thread\n if (newMessage.parentId && t.post?.id === newMessage.parentId) {\n return true;\n }\n // Check replies\n if (t.replies && t.replies.some((r: any) => r.id === newMessage.parentId)) {\n return true;\n }\n return false;\n });\n\n if (threadIndex === -1) {\n console.log(\n `Cannot find thread for chat message in channel ${channel?.id}`,\n );\n return prev;\n }\n\n // Update the thread with the new message\n const updatedThreads = [...prevThreads];\n const thread = { ...updatedThreads[threadIndex] };\n\n // Add message to replies\n thread.replies = [...(thread.replies || []), newMessage];\n\n // Fix for arithmetic operation type error\n const currentReplyCount =\n typeof thread.replyCount === 'number' ? thread.replyCount : 0;\n thread.replyCount = currentReplyCount + 1;\n\n thread.lastReplyAt = newMessage.createdAt;\n thread.updatedAt = newMessage.createdAt;\n\n updatedThreads[threadIndex] = thread;\n\n return {\n ...prev,\n threadMessages: {\n ...prev?.threadMessages,\n data: updatedThreads,\n },\n };\n } catch (error) {\n console.error(\n `Error processing chat message subscription for channel ${channel?.id}:`,\n error,\n );\n return prev;\n }\n },\n onError: (error) => {\n console.error(`Chat message subscription error for channel ${channel?.id}:`, error);\n },\n })\n }\n />\n </Box>\n </HStack>\n </Pressable>\n );\n};\n\nexport const ServiceDialogsListItem = React.memo(ServiceDialogsListItemComponent);\n"],"names":["React","_a","_b","_c","error","_d","_e","THREAD_CHAT_ADDED","CHAT_MESSAGE_ADDED"],"mappings":"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"}
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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"}