@messenger-box/platform-mobile 10.0.3-alpha.34 → 10.0.3-alpha.37

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 (34) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/lib/screens/inbox/components/CachedImage/index.js +125 -93
  3. package/lib/screens/inbox/components/CachedImage/index.js.map +1 -1
  4. package/lib/screens/inbox/components/DialogsListItem.js +80 -256
  5. package/lib/screens/inbox/components/DialogsListItem.js.map +1 -1
  6. package/lib/screens/inbox/components/ServiceDialogsListItem.js +222 -324
  7. package/lib/screens/inbox/components/ServiceDialogsListItem.js.map +1 -1
  8. package/lib/screens/inbox/components/SlackMessageContainer/SlackBubble.js +0 -2
  9. package/lib/screens/inbox/components/SlackMessageContainer/SlackBubble.js.map +1 -1
  10. package/lib/screens/inbox/containers/ConversationView.js +487 -888
  11. package/lib/screens/inbox/containers/ConversationView.js.map +1 -1
  12. package/lib/screens/inbox/containers/Dialogs.js +243 -547
  13. package/lib/screens/inbox/containers/Dialogs.js.map +1 -1
  14. package/lib/screens/inbox/containers/ThreadConversationView.js +409 -1364
  15. package/lib/screens/inbox/containers/ThreadConversationView.js.map +1 -1
  16. package/package.json +4 -4
  17. package/src/screens/inbox/components/CachedImage/index.tsx +191 -140
  18. package/src/screens/inbox/components/DialogsListItem.tsx +112 -345
  19. package/src/screens/inbox/components/ServiceDialogsListItem.tsx +316 -437
  20. package/src/screens/inbox/components/SlackMessageContainer/SlackBubble.tsx +2 -4
  21. package/src/screens/inbox/containers/ConversationView.tsx +676 -993
  22. package/src/screens/inbox/containers/ConversationView.tsx.bk +1467 -0
  23. package/src/screens/inbox/containers/Dialogs.tsx +345 -636
  24. package/src/screens/inbox/containers/ThreadConversationView.tsx +661 -1887
  25. package/lib/screens/inbox/components/workflow/dialogs-list-item-xstate.js +0 -175
  26. package/lib/screens/inbox/components/workflow/dialogs-list-item-xstate.js.map +0 -1
  27. package/lib/screens/inbox/components/workflow/service-dialogs-list-item-xstate.js +0 -191
  28. package/lib/screens/inbox/components/workflow/service-dialogs-list-item-xstate.js.map +0 -1
  29. package/lib/screens/inbox/containers/workflow/conversation-xstate.js +0 -380
  30. package/lib/screens/inbox/containers/workflow/conversation-xstate.js.map +0 -1
  31. package/lib/screens/inbox/containers/workflow/dialogs-xstate.js +0 -211
  32. package/lib/screens/inbox/containers/workflow/dialogs-xstate.js.map +0 -1
  33. package/lib/screens/inbox/containers/workflow/thread-conversation-xstate.js +0 -438
  34. package/lib/screens/inbox/containers/workflow/thread-conversation-xstate.js.map +0 -1
@@ -1,4 +1,4 @@
1
- import React__default,{useRef,useCallback,useEffect,useMemo,useState}from'react';import {Pressable,HStack,Box,AvatarGroup,Avatar,AvatarFallbackText,AvatarBadge,Text,AvatarImage}from'@admin-layout/gluestack-ui-mobile';import {isToday,isYesterday,format}from'date-fns';import {useFocusEffect}from'@react-navigation/native';import {useMessagesQuery,useOnChatMessageAddedSubscription,OnChatMessageAddedDocument}from'common/graphql';import {startCase}from'lodash-es';import colors from'tailwindcss/colors';import {Actions,BaseState}from'./workflow/dialogs-list-item-xstate.js';var __defProp = Object.defineProperty;
1
+ import React__default,{useRef,useState,useEffect,useCallback,useMemo}from'react';import {Pressable,HStack,Box,AvatarGroup,Avatar,AvatarFallbackText,AvatarBadge,Text,AvatarImage}from'@admin-layout/gluestack-ui-mobile';import {isToday,isYesterday,format}from'date-fns';import {useFocusEffect}from'@react-navigation/native';import {useMessagesQuery,useOnChatMessageAddedSubscription,OnChatMessageAddedDocument}from'common/graphql';import {startCase}from'lodash-es';import colors from'tailwindcss/colors';var __defProp = Object.defineProperty;
2
2
  var __defProps = Object.defineProperties;
3
3
  var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
4
4
  var __getOwnPropSymbols = Object.getOwnPropertySymbols;
@@ -27,127 +27,6 @@ const createdAtText = (value) => {
27
27
  return "Yesterday";
28
28
  return format(new Date(value), "MMM dd, yyyy");
29
29
  };
30
- function useSafeMachine(machine) {
31
- const [state, setState] = useState({
32
- context: {
33
- channelId: null,
34
- currentUser: null,
35
- messages: [],
36
- loading: false,
37
- error: null,
38
- title: "",
39
- channelMembers: [],
40
- lastMessage: null
41
- },
42
- value: BaseState.Idle,
43
- matches: (stateValue) => stateValue === BaseState.Idle
44
- });
45
- const send = useCallback((event) => {
46
- try {
47
- if (event.type === Actions.INITIAL_CONTEXT) {
48
- setState((prev) => {
49
- var _a, _b;
50
- return __spreadProps(__spreadValues({}, prev), {
51
- context: __spreadProps(__spreadValues({}, prev.context), {
52
- channelId: ((_a = event.data) == null ? void 0 : _a.channelId) || null,
53
- currentUser: ((_b = event.data) == null ? void 0 : _b.currentUser) || null,
54
- loading: true
55
- }),
56
- value: BaseState.FetchingMessages
57
- });
58
- });
59
- } else if (event.type === Actions.UPDATE_MESSAGES) {
60
- setState((prev) => {
61
- var _a, _b, _c, _d, _e, _f;
62
- if ((_a = event.data) == null ? void 0 : _a.messages) {
63
- const messages = event.data.messages;
64
- if ((_b = event.data) == null ? void 0 : _b.directLastMessage) {
65
- console.log("Using direct last message from event:", {
66
- id: event.data.directLastMessage.id,
67
- message: ((_c = event.data.directLastMessage.message) == null ? void 0 : _c.substring(0, 20)) + "..."
68
- });
69
- return __spreadProps(__spreadValues({}, prev), {
70
- context: __spreadProps(__spreadValues({}, prev.context), {
71
- messages,
72
- lastMessage: event.data.directLastMessage,
73
- loading: false
74
- })
75
- });
76
- }
77
- const sortedMessages = [...messages].sort((a, b) => new Date((b == null ? void 0 : b.updatedAt) || (b == null ? void 0 : b.createdAt)).getTime() - new Date((a == null ? void 0 : a.updatedAt) || (a == null ? void 0 : a.createdAt)).getTime());
78
- const newLastMessage = sortedMessages.length > 0 ? sortedMessages[0] : null;
79
- if (newLastMessage) {
80
- console.log("Setting last message from bulk update:", {
81
- id: newLastMessage.id,
82
- message: ((_d = newLastMessage.message) == null ? void 0 : _d.substring(0, 20)) + "...",
83
- date: newLastMessage.updatedAt || newLastMessage.createdAt
84
- });
85
- }
86
- return __spreadProps(__spreadValues({}, prev), {
87
- context: __spreadProps(__spreadValues({}, prev.context), {
88
- messages,
89
- lastMessage: newLastMessage,
90
- loading: false
91
- })
92
- });
93
- } else if ((_e = event.data) == null ? void 0 : _e.message) {
94
- const newMessage = event.data.message;
95
- const updatedMessages = [...prev.context.messages, newMessage];
96
- console.log("Setting new message as lastMessage from subscription:", {
97
- id: newMessage.id,
98
- message: ((_f = newMessage.message) == null ? void 0 : _f.substring(0, 20)) + "...",
99
- date: newMessage.createdAt || newMessage.updatedAt
100
- });
101
- return __spreadProps(__spreadValues({}, prev), {
102
- context: __spreadProps(__spreadValues({}, prev.context), {
103
- messages: updatedMessages,
104
- lastMessage: newMessage,
105
- loading: false
106
- })
107
- });
108
- }
109
- return prev;
110
- });
111
- } else if (event.type === Actions.SET_TITLE) {
112
- setState((prev) => {
113
- var _a;
114
- return __spreadProps(__spreadValues({}, prev), {
115
- context: __spreadProps(__spreadValues({}, prev.context), {
116
- title: ((_a = event.data) == null ? void 0 : _a.title) || ""
117
- })
118
- });
119
- });
120
- } else if (event.type === Actions.START_LOADING) {
121
- setState((prev) => __spreadProps(__spreadValues({}, prev), {
122
- context: __spreadProps(__spreadValues({}, prev.context), {
123
- loading: true
124
- })
125
- }));
126
- } else if (event.type === Actions.STOP_LOADING) {
127
- setState((prev) => __spreadProps(__spreadValues({}, prev), {
128
- context: __spreadProps(__spreadValues({}, prev.context), {
129
- loading: false
130
- })
131
- }));
132
- }
133
- } catch (error) {
134
- console.error("Error sending event to state machine:", error);
135
- }
136
- }, []);
137
- const stateWithMatches = useMemo(() => {
138
- return __spreadProps(__spreadValues({}, state), {
139
- matches: (stateValue) => {
140
- try {
141
- return state.value === stateValue;
142
- } catch (error) {
143
- console.error(`Error in matches function:`, error);
144
- return false;
145
- }
146
- }
147
- });
148
- }, [state]);
149
- return [stateWithMatches, send];
150
- }
151
30
  const LastMessageComponent = ({
152
31
  subscribeToNewMessages,
153
32
  title,
@@ -195,34 +74,13 @@ const DialogsListItemComponent = function DialogsListItem2({
195
74
  onOpen,
196
75
  forceRefresh
197
76
  }) {
198
- var _a, _b, _c, _d, _e;
77
+ var _a, _b, _c, _d;
199
78
  const isMountedRef = useRef(true);
200
79
  const parentId = null;
201
- const [state, send] = useSafeMachine();
202
- useCallback(() => {
203
- try {
204
- return (state == null ? void 0 : state.context) || {};
205
- } catch (error) {
206
- console.error("Error accessing state.context:", error);
207
- return {};
208
- }
209
- }, [state]);
210
- const safeContextProperty = useCallback((property, defaultValue = null) => {
211
- var _a2, _b2;
212
- try {
213
- return (_b2 = (_a2 = state == null ? void 0 : state.context) == null ? void 0 : _a2[property]) != null ? _b2 : defaultValue;
214
- } catch (error) {
215
- console.error(`Error accessing state.context.${property}:`, error);
216
- return defaultValue;
217
- }
218
- }, [state]);
219
- const safeSend = useCallback((event) => {
220
- try {
221
- send(event);
222
- } catch (error) {
223
- console.error("Error sending event to state machine:", error, event);
224
- }
225
- }, [send]);
80
+ const [loading, setLoading] = useState(false);
81
+ const [title, setTitle] = useState("");
82
+ const [messages, setMessages] = useState([]);
83
+ const [lastMessage, setLastMessage] = useState(null);
226
84
  const {
227
85
  data: messagesQuery,
228
86
  loading: messageLoading,
@@ -238,8 +96,15 @@ const DialogsListItemComponent = function DialogsListItem2({
238
96
  refetchWritePolicy: "overwrite",
239
97
  nextFetchPolicy: "network-only",
240
98
  onCompleted: (data) => {
241
- var _a2, _b2;
99
+ var _a2, _b2, _c2;
242
100
  console.log(`Completed message query for channel ${channel == null ? void 0 : channel.id}:`, ((_b2 = (_a2 = data == null ? void 0 : data.messages) == null ? void 0 : _a2.data) == null ? void 0 : _b2.length) ? "Has messages" : "No messages");
101
+ if ((_c2 = data == null ? void 0 : data.messages) == null ? void 0 : _c2.data) {
102
+ setMessages(data.messages.data);
103
+ const sortedMessages = [...data.messages.data].sort((a, b) => new Date((b == null ? void 0 : b.updatedAt) || (b == null ? void 0 : b.createdAt)).getTime() - new Date((a == null ? void 0 : a.updatedAt) || (a == null ? void 0 : a.createdAt)).getTime());
104
+ if (sortedMessages.length > 0) {
105
+ setLastMessage(sortedMessages[0]);
106
+ }
107
+ }
243
108
  },
244
109
  onError: (error) => {
245
110
  console.error(`Error fetching messages for channel ${channel == null ? void 0 : channel.id}:`, error);
@@ -255,26 +120,16 @@ const DialogsListItemComponent = function DialogsListItem2({
255
120
  }
256
121
  });
257
122
  useEffect(() => {
258
- if (channel == null ? void 0 : channel.id) {
259
- safeSend({
260
- type: Actions.INITIAL_CONTEXT,
261
- data: {
262
- channelId: channel.id,
263
- currentUser
264
- }
265
- });
266
- }
123
+ isMountedRef.current = true;
267
124
  return () => {
268
125
  isMountedRef.current = false;
269
126
  };
270
- }, [channel == null ? void 0 : channel.id, currentUser, safeSend]);
127
+ }, []);
271
128
  const refreshDialogState = useCallback(() => {
272
129
  var _a2;
273
130
  if ((channel == null ? void 0 : channel.id) && isMountedRef.current) {
274
131
  console.log("Forcing dialog state refresh for channel:", channel == null ? void 0 : channel.id);
275
- safeSend({
276
- type: Actions.START_LOADING
277
- });
132
+ setLoading(true);
278
133
  const options = {
279
134
  channelId: (_a2 = channel == null ? void 0 : channel.id) == null ? void 0 : _a2.toString(),
280
135
  parentId,
@@ -293,26 +148,17 @@ const DialogsListItemComponent = function DialogsListItem2({
293
148
  date: latestMessage.createdAt || latestMessage.updatedAt
294
149
  });
295
150
  }
296
- safeSend({
297
- type: Actions.UPDATE_MESSAGES,
298
- data: {
299
- messages: result.data.messages.data
300
- }
301
- });
151
+ setMessages(result.data.messages.data);
152
+ setLastMessage(latestMessage);
302
153
  }
303
- safeSend({
304
- type: Actions.STOP_LOADING
305
- });
154
+ setLoading(false);
306
155
  }).catch((err) => {
307
156
  console.error("Error refreshing dialog state:", err);
308
- safeSend({
309
- type: Actions.STOP_LOADING
310
- });
157
+ setLoading(false);
311
158
  });
312
159
  }
313
- }, [channel == null ? void 0 : channel.id, refetchMessages, safeSend, isMountedRef, parentId]);
160
+ }, [channel == null ? void 0 : channel.id, refetchMessages, isMountedRef, parentId]);
314
161
  const firstRenderRef = useRef(true);
315
- useRef(0);
316
162
  useFocusEffect(React__default.useCallback(() => {
317
163
  if (!(channel == null ? void 0 : channel.id))
318
164
  return;
@@ -323,11 +169,9 @@ const DialogsListItemComponent = function DialogsListItem2({
323
169
  return;
324
170
  }
325
171
  console.log("FOCUS EFFECT: Force refetching messages on navigation back for channel:", channel == null ? void 0 : channel.id);
326
- safeSend({
327
- type: Actions.START_LOADING
328
- });
172
+ setLoading(true);
329
173
  const fetchFreshData = async () => {
330
- var _a2, _b2, _c2, _d2, _e2, _f;
174
+ var _a2, _b2, _c2, _d2, _e, _f;
331
175
  try {
332
176
  const options = {
333
177
  channelId: (_a2 = channel == null ? void 0 : channel.id) == null ? void 0 : _a2.toString(),
@@ -336,60 +180,31 @@ const DialogsListItemComponent = function DialogsListItem2({
336
180
  };
337
181
  const result = await refetchMessages(options);
338
182
  console.log(`FOCUS EFFECT: Refetched ${((_d2 = (_c2 = (_b2 = result == null ? void 0 : result.data) == null ? void 0 : _b2.messages) == null ? void 0 : _c2.data) == null ? void 0 : _d2.length) || 0} messages for channel ${channel == null ? void 0 : channel.id}`);
339
- if (((_f = (_e2 = result == null ? void 0 : result.data) == null ? void 0 : _e2.messages) == null ? void 0 : _f.data) && isMountedRef.current) {
340
- const currentMessages = safeContextProperty("messages", []);
183
+ if (((_f = (_e = result == null ? void 0 : result.data) == null ? void 0 : _e.messages) == null ? void 0 : _f.data) && isMountedRef.current) {
184
+ const currentMessages = messages;
341
185
  const fetchedMessages = result.data.messages.data;
342
186
  console.log("Data comparison:", {
343
187
  currentCount: currentMessages.length,
344
188
  fetchedCount: fetchedMessages.length,
345
189
  isDifferent: JSON.stringify(currentMessages) !== JSON.stringify(fetchedMessages)
346
190
  });
347
- safeSend({
348
- type: Actions.UPDATE_MESSAGES,
349
- data: {
350
- messages: fetchedMessages
351
- }
352
- });
191
+ const sortedMessages = [...fetchedMessages].sort((a, b) => new Date((b == null ? void 0 : b.updatedAt) || (b == null ? void 0 : b.createdAt)).getTime() - new Date((a == null ? void 0 : a.updatedAt) || (a == null ? void 0 : a.createdAt)).getTime());
192
+ const latestMessage = sortedMessages.length > 0 ? sortedMessages[0] : null;
193
+ setMessages(fetchedMessages);
194
+ setLastMessage(latestMessage);
353
195
  }
354
196
  } catch (error) {
355
197
  console.error("Error refetching messages on focus:", error);
356
198
  } finally {
357
199
  if (isMountedRef.current) {
358
- safeSend({
359
- type: Actions.STOP_LOADING
360
- });
200
+ setLoading(false);
361
201
  }
362
202
  }
363
203
  };
364
204
  fetchFreshData();
365
205
  return () => {
366
206
  };
367
- }, [channel == null ? void 0 : channel.id, refetchMessages, safeSend, parentId, isMountedRef]));
368
- React__default.useEffect(() => {
369
- var _a2, _b2, _c2, _d2, _e2;
370
- if (((_a2 = messagesQuery == null ? void 0 : messagesQuery.messages) == null ? void 0 : _a2.data) && isMountedRef.current) {
371
- const messages = messagesQuery.messages.data;
372
- const messagesWithFiles = messages.filter((msg) => {
373
- var _a3, _b3;
374
- return ((_b3 = (_a3 = msg == null ? void 0 : msg.files) == null ? void 0 : _a3.data) == null ? void 0 : _b3.length) > 0;
375
- });
376
- console.log(`Updating messages for channel ${channel == null ? void 0 : channel.id}, count:`, messages.length, `(${messagesWithFiles.length} with files)`);
377
- if (messages.length > 0) {
378
- console.log("First message sample:", {
379
- id: messages[0].id,
380
- message: ((_b2 = messages[0].message) == null ? void 0 : _b2.substring(0, 20)) + "...",
381
- createdAt: messages[0].createdAt,
382
- hasFiles: ((_e2 = (_d2 = (_c2 = messages[0]) == null ? void 0 : _c2.files) == null ? void 0 : _d2.data) == null ? void 0 : _e2.length) > 0
383
- });
384
- }
385
- safeSend({
386
- type: Actions.UPDATE_MESSAGES,
387
- data: {
388
- messages
389
- }
390
- });
391
- }
392
- }, [messagesQuery, safeSend, channel == null ? void 0 : channel.id, isMountedRef]);
207
+ }, [channel == null ? void 0 : channel.id, refetchMessages, messages, isMountedRef, parentId]));
393
208
  useEffect(() => {
394
209
  if ((channel == null ? void 0 : channel.id) && isMountedRef.current) {
395
210
  const timer = setTimeout(() => {
@@ -417,12 +232,10 @@ const DialogsListItemComponent = function DialogsListItem2({
417
232
  var _a3, _b2;
418
233
  if (((_b2 = (_a3 = result == null ? void 0 : result.data) == null ? void 0 : _a3.messages) == null ? void 0 : _b2.data) && isMountedRef.current) {
419
234
  console.log(`Force refresh completed for channel ${channel == null ? void 0 : channel.id} with ${result.data.messages.data.length} messages`);
420
- safeSend({
421
- type: Actions.UPDATE_MESSAGES,
422
- data: {
423
- messages: result.data.messages.data
424
- }
425
- });
235
+ const sortedMessages = [...result.data.messages.data].sort((a, b) => new Date((b == null ? void 0 : b.updatedAt) || (b == null ? void 0 : b.createdAt)).getTime() - new Date((a == null ? void 0 : a.updatedAt) || (a == null ? void 0 : a.createdAt)).getTime());
236
+ const latestMessage = sortedMessages.length > 0 ? sortedMessages[0] : null;
237
+ setMessages(result.data.messages.data);
238
+ setLastMessage(latestMessage);
426
239
  }
427
240
  }).catch((error) => {
428
241
  console.error(`Error force refreshing channel ${channel == null ? void 0 : channel.id}:`, error);
@@ -431,7 +244,7 @@ const DialogsListItemComponent = function DialogsListItem2({
431
244
  }, 50);
432
245
  return () => clearTimeout(timer);
433
246
  }
434
- }, [channel == null ? void 0 : channel.id, forceRefresh, isMountedRef, refetchMessages, safeSend, parentId]);
247
+ }, [channel == null ? void 0 : channel.id, forceRefresh, isMountedRef, refetchMessages, parentId]);
435
248
  const channelMembers = useMemo(() => {
436
249
  var _a2, _b2, _c2;
437
250
  return (_c2 = (_b2 = (_a2 = channel == null ? void 0 : channel.members) == null ? void 0 : _a2.filter((ch) => {
@@ -446,37 +259,54 @@ const DialogsListItemComponent = function DialogsListItem2({
446
259
  var _a3;
447
260
  return (u == null ? void 0 : u.givenName) + " " + ((_a3 = u == null ? void 0 : u.familyName) != null ? _a3 : "");
448
261
  })) == null ? void 0 : _a2.filter((mu) => mu)) == null ? void 0 : _b2.join(", ")) != null ? _c2 : "";
449
- safeSend({
450
- type: Actions.SET_TITLE,
451
- data: {
452
- title: titleString
453
- }
454
- });
262
+ setTitle(titleString);
455
263
  }
456
- }, [channelMembers, safeSend, isMountedRef]);
457
- const title = useMemo(() => {
458
- const titleString = safeContextProperty("title", "");
264
+ }, [channelMembers, isMountedRef]);
265
+ const displayTitle = useMemo(() => {
459
266
  const length = 30;
460
- return titleString.length > length ? titleString.substring(0, length - 3) + "..." : titleString;
461
- }, [safeContextProperty]);
462
- const lastMessage = useMemo(() => {
463
- const message = safeContextProperty("lastMessage", null);
464
- return message;
465
- }, [safeContextProperty, (_d = (_c = state.context) == null ? void 0 : _c.messages) == null ? void 0 : _d.length]);
267
+ return title.length > length ? title.substring(0, length - 3) + "..." : title;
268
+ }, [title]);
466
269
  useEffect(() => {
467
270
  var _a2, _b2;
468
271
  console.log(`DialogsListItem for channel ${channel == null ? void 0 : channel.id}: `, {
469
272
  hasLastMessage: !!lastMessage,
470
273
  message: ((_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 ? "..." : ""),
471
- messagesCount: safeContextProperty("messages", []).length
274
+ messagesCount: messages.length
472
275
  });
473
- }, [channel == null ? void 0 : channel.id, lastMessage, safeContextProperty]);
474
- return /* @__PURE__ */ React__default.createElement(Pressable, { onPress: () => onOpen(channel == null ? void 0 : channel.id, title), className: "flex-1 border-gray-200 rounded-md dark:border-gray-600 dark:bg-gray-700", style: {
276
+ }, [channel == null ? void 0 : channel.id, lastMessage, messages.length]);
277
+ useEffect(() => {
278
+ var _a2;
279
+ if ((newMessage == null ? void 0 : newMessage.chatMessageAdded) && (channel == null ? void 0 : channel.id)) {
280
+ const incomingMessage = newMessage.chatMessageAdded;
281
+ if (messages.some((msg) => msg.id === incomingMessage.id)) {
282
+ console.log("Message already in local state, skipping update:", incomingMessage.id);
283
+ return;
284
+ }
285
+ console.log("New message received from subscription:", {
286
+ channelId: channel.id,
287
+ messageId: incomingMessage.id,
288
+ message: ((_a2 = incomingMessage.message) == null ? void 0 : _a2.substring(0, 20)) + "...",
289
+ timestamp: incomingMessage.createdAt
290
+ });
291
+ setMessages((prevMessages) => [...prevMessages, incomingMessage]);
292
+ setLastMessage(incomingMessage);
293
+ }
294
+ }, [newMessage, channel == null ? void 0 : channel.id, messages]);
295
+ useEffect(() => {
296
+ if ((channel == null ? void 0 : channel.lastMessage) && channel.lastMessage.id) {
297
+ console.log("Channel has lastMessage property:", channel.lastMessage.id);
298
+ if (!messages.some((msg) => msg.id === channel.lastMessage.id)) {
299
+ setMessages((prevMessages) => [...prevMessages, channel.lastMessage]);
300
+ setLastMessage(channel.lastMessage);
301
+ }
302
+ }
303
+ }, [(_c = channel == null ? void 0 : channel.lastMessage) == null ? void 0 : _c.id, messages]);
304
+ return /* @__PURE__ */ React__default.createElement(Pressable, { onPress: () => onOpen(channel == null ? void 0 : channel.id, displayTitle), className: "flex-1 border-gray-200 rounded-md dark:border-gray-600 dark:bg-gray-700", style: {
475
305
  borderBottomWidth: 1,
476
306
  borderColor: "#e5e7eb",
477
307
  marginVertical: 0,
478
308
  paddingHorizontal: 10
479
- } }, /* @__PURE__ */ React__default.createElement(HStack, { space: "md", className: "flex-1 w-[100%] py-3 items-center" }, /* @__PURE__ */ React__default.createElement(Box, { className: "flex-[0.1] items-start pl-3" }, /* @__PURE__ */ React__default.createElement(AvatarGroup, null, channelMembers && (channelMembers == null ? void 0 : channelMembers.length) > 0 && ((_e = channelMembers == null ? void 0 : channelMembers.slice(0, 1)) == null ? void 0 : _e.map((ch, i) => {
309
+ } }, /* @__PURE__ */ React__default.createElement(HStack, { space: "md", className: "flex-1 w-[100%] py-3 items-center" }, /* @__PURE__ */ React__default.createElement(Box, { className: "flex-[0.1] items-start pl-3" }, /* @__PURE__ */ React__default.createElement(AvatarGroup, null, channelMembers && (channelMembers == null ? void 0 : channelMembers.length) > 0 && ((_d = channelMembers == null ? void 0 : channelMembers.slice(0, 1)) == null ? void 0 : _d.map((ch, i) => {
480
310
  var _a2;
481
311
  return /* @__PURE__ */ React__default.createElement(Avatar, { key: "dialogs-list-" + i, size: "sm", className: `bg-transparent top-[${i == 1 ? "4" : "0"}] right-[${i == 1 ? "-2" : "0"}] z-[${i == 1 ? 5 : 1}]` }, /* @__PURE__ */ React__default.createElement(AvatarFallbackText, null, startCase((_a2 = ch == null ? void 0 : ch.username) == null ? void 0 : _a2.charAt(0))), (channelMembers == null ? void 0 : channelMembers.length) > 1 && /* @__PURE__ */ React__default.createElement(AvatarBadge, { style: {
482
312
  width: "100%",
@@ -497,7 +327,7 @@ const DialogsListItemComponent = function DialogsListItem2({
497
327
  width: 10,
498
328
  height: 10
499
329
  } })));
500
- })))), /* @__PURE__ */ React__default.createElement(Box, { className: "flex-1" }, /* @__PURE__ */ React__default.createElement(LastMessageComponent, { key: `last-msg-${(lastMessage == null ? void 0 : lastMessage.id) || "none"}-${safeContextProperty("messages", []).length}`, title, lastMessage, channelId: channel == null ? void 0 : channel.id, subscribeToNewMessages: () => {
330
+ })))), /* @__PURE__ */ React__default.createElement(Box, { className: "flex-1" }, /* @__PURE__ */ React__default.createElement(LastMessageComponent, { key: `last-msg-${(lastMessage == null ? void 0 : lastMessage.id) || "none"}-${messages.length}`, title: displayTitle, lastMessage, channelId: channel == null ? void 0 : channel.id, subscribeToNewMessages: () => {
501
331
  var _a2;
502
332
  return subscribeToMore({
503
333
  document: OnChatMessageAddedDocument,
@@ -507,7 +337,7 @@ const DialogsListItemComponent = function DialogsListItem2({
507
337
  updateQuery: (prev, {
508
338
  subscriptionData
509
339
  }) => {
510
- var _a3, _b2, _c2, _d2, _e2, _f;
340
+ var _a3, _b2, _c2, _d2, _e, _f;
511
341
  if (!subscriptionData.data)
512
342
  return prev;
513
343
  const newMessage2 = (_a3 = subscriptionData == null ? void 0 : subscriptionData.data) == null ? void 0 : _a3.chatMessageAdded;
@@ -516,20 +346,14 @@ const DialogsListItemComponent = function DialogsListItem2({
516
346
  messageId: newMessage2.id,
517
347
  message: ((_b2 = newMessage2.message) == null ? void 0 : _b2.substring(0, 20)) + "...",
518
348
  hasFiles: ((_d2 = (_c2 = newMessage2 == null ? void 0 : newMessage2.files) == null ? void 0 : _c2.data) == null ? void 0 : _d2.length) > 0,
519
- filesCount: ((_f = (_e2 = newMessage2 == null ? void 0 : newMessage2.files) == null ? void 0 : _e2.data) == null ? void 0 : _f.length) || 0,
349
+ filesCount: ((_f = (_e = newMessage2 == null ? void 0 : newMessage2.files) == null ? void 0 : _e.data) == null ? void 0 : _f.length) || 0,
520
350
  timestamp: newMessage2.createdAt || newMessage2.updatedAt
521
351
  });
522
352
  if (isMountedRef.current) {
523
- console.log("Updating messages with new subscription message");
524
- const currentMessages = safeContextProperty("messages", []);
525
- const updatedMessages = [...currentMessages, newMessage2];
526
- safeSend({
527
- type: Actions.UPDATE_MESSAGES,
528
- data: {
529
- messages: updatedMessages,
530
- directLastMessage: newMessage2
531
- }
532
- });
353
+ if (!messages.some((msg) => msg.id === newMessage2.id)) {
354
+ setMessages((prevMessages) => [...prevMessages, newMessage2]);
355
+ setLastMessage(newMessage2);
356
+ }
533
357
  }
534
358
  const existingMessages = prev == null ? void 0 : prev.messages;
535
359
  const previousData = (existingMessages == null ? void 0 : existingMessages.data) ? [...existingMessages.data, newMessage2] : [];