@messenger-box/platform-mobile 10.0.3-alpha.36 → 10.0.3-alpha.38

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 +74 -288
  5. package/lib/screens/inbox/components/DialogsListItem.js.map +1 -1
  6. package/lib/screens/inbox/components/ServiceDialogsListItem.js +184 -415
  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 +621 -951
  11. package/lib/screens/inbox/containers/ConversationView.js.map +1 -1
  12. package/lib/screens/inbox/containers/Dialogs.js +212 -628
  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 +3 -3
  17. package/src/screens/inbox/components/CachedImage/index.tsx +191 -140
  18. package/src/screens/inbox/components/DialogsListItem.tsx +122 -386
  19. package/src/screens/inbox/components/ServiceDialogsListItem.tsx +69 -377
  20. package/src/screens/inbox/components/SlackMessageContainer/SlackBubble.tsx +2 -4
  21. package/src/screens/inbox/containers/ConversationView.tsx +793 -1064
  22. package/src/screens/inbox/containers/ConversationView.tsx.bk +1467 -0
  23. package/src/screens/inbox/containers/Dialogs.tsx +301 -763
  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,
@@ -163,16 +42,6 @@ const LastMessageComponent = ({
163
42
  }
164
43
  };
165
44
  }, [channelId, subscribeToNewMessages]);
166
- React__default.useEffect(() => {
167
- var _a2, _b2, _c, _d;
168
- console.log(`LastMessageComponent rendered for channel ${channelId}:`, {
169
- hasLastMessage: !!lastMessage,
170
- messageId: lastMessage == null ? void 0 : lastMessage.id,
171
- 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 ? "..." : ""),
172
- date: (lastMessage == null ? void 0 : lastMessage.createdAt) ? new Date(lastMessage.createdAt).toISOString() : "none",
173
- hasFiles: ((_d = (_c = lastMessage == null ? void 0 : lastMessage.files) == null ? void 0 : _c.data) == null ? void 0 : _d.length) > 0
174
- });
175
- }, [lastMessage, channelId]);
176
45
  const count = 30;
177
46
  const channelTitle = (title == null ? void 0 : title.slice(0, count)) + ((title == null ? void 0 : title.length) > count ? "..." : "") || "";
178
47
  let displayMessage = "No messages yet";
@@ -195,34 +64,13 @@ const DialogsListItemComponent = function DialogsListItem2({
195
64
  onOpen,
196
65
  forceRefresh
197
66
  }) {
198
- var _a, _b, _c, _d, _e, _f;
67
+ var _a, _b, _c, _d;
199
68
  const isMountedRef = useRef(true);
200
69
  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]);
70
+ const [loading, setLoading] = useState(false);
71
+ const [title, setTitle] = useState("");
72
+ const [messages, setMessages] = useState([]);
73
+ const [lastMessage, setLastMessage] = useState(null);
226
74
  const {
227
75
  data: messagesQuery,
228
76
  loading: messageLoading,
@@ -238,8 +86,15 @@ const DialogsListItemComponent = function DialogsListItem2({
238
86
  refetchWritePolicy: "overwrite",
239
87
  nextFetchPolicy: "network-only",
240
88
  onCompleted: (data) => {
241
- var _a2, _b2;
89
+ var _a2, _b2, _c2;
242
90
  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");
91
+ if ((_c2 = data == null ? void 0 : data.messages) == null ? void 0 : _c2.data) {
92
+ setMessages(data.messages.data);
93
+ 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());
94
+ if (sortedMessages.length > 0) {
95
+ setLastMessage(sortedMessages[0]);
96
+ }
97
+ }
243
98
  },
244
99
  onError: (error) => {
245
100
  console.error(`Error fetching messages for channel ${channel == null ? void 0 : channel.id}:`, error);
@@ -255,26 +110,16 @@ const DialogsListItemComponent = function DialogsListItem2({
255
110
  }
256
111
  });
257
112
  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
- }
113
+ isMountedRef.current = true;
267
114
  return () => {
268
115
  isMountedRef.current = false;
269
116
  };
270
- }, [channel == null ? void 0 : channel.id, currentUser, safeSend]);
117
+ }, []);
271
118
  const refreshDialogState = useCallback(() => {
272
119
  var _a2;
273
120
  if ((channel == null ? void 0 : channel.id) && isMountedRef.current) {
274
121
  console.log("Forcing dialog state refresh for channel:", channel == null ? void 0 : channel.id);
275
- safeSend({
276
- type: Actions.START_LOADING
277
- });
122
+ setLoading(true);
278
123
  const options = {
279
124
  channelId: (_a2 = channel == null ? void 0 : channel.id) == null ? void 0 : _a2.toString(),
280
125
  parentId,
@@ -293,26 +138,17 @@ const DialogsListItemComponent = function DialogsListItem2({
293
138
  date: latestMessage.createdAt || latestMessage.updatedAt
294
139
  });
295
140
  }
296
- safeSend({
297
- type: Actions.UPDATE_MESSAGES,
298
- data: {
299
- messages: result.data.messages.data
300
- }
301
- });
141
+ setMessages(result.data.messages.data);
142
+ setLastMessage(latestMessage);
302
143
  }
303
- safeSend({
304
- type: Actions.STOP_LOADING
305
- });
144
+ setLoading(false);
306
145
  }).catch((err) => {
307
146
  console.error("Error refreshing dialog state:", err);
308
- safeSend({
309
- type: Actions.STOP_LOADING
310
- });
147
+ setLoading(false);
311
148
  });
312
149
  }
313
- }, [channel == null ? void 0 : channel.id, refetchMessages, safeSend, isMountedRef, parentId]);
150
+ }, [channel == null ? void 0 : channel.id, refetchMessages, isMountedRef, parentId]);
314
151
  const firstRenderRef = useRef(true);
315
- useRef(0);
316
152
  useFocusEffect(React__default.useCallback(() => {
317
153
  if (!(channel == null ? void 0 : channel.id))
318
154
  return;
@@ -323,11 +159,9 @@ const DialogsListItemComponent = function DialogsListItem2({
323
159
  return;
324
160
  }
325
161
  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
- });
162
+ setLoading(true);
329
163
  const fetchFreshData = async () => {
330
- var _a2, _b2, _c2, _d2, _e2, _f2;
164
+ var _a2, _b2, _c2, _d2, _e, _f;
331
165
  try {
332
166
  const options = {
333
167
  channelId: (_a2 = channel == null ? void 0 : channel.id) == null ? void 0 : _a2.toString(),
@@ -336,60 +170,31 @@ const DialogsListItemComponent = function DialogsListItem2({
336
170
  };
337
171
  const result = await refetchMessages(options);
338
172
  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 (((_f2 = (_e2 = result == null ? void 0 : result.data) == null ? void 0 : _e2.messages) == null ? void 0 : _f2.data) && isMountedRef.current) {
340
- const currentMessages = safeContextProperty("messages", []);
173
+ if (((_f = (_e = result == null ? void 0 : result.data) == null ? void 0 : _e.messages) == null ? void 0 : _f.data) && isMountedRef.current) {
174
+ const currentMessages = messages;
341
175
  const fetchedMessages = result.data.messages.data;
342
176
  console.log("Data comparison:", {
343
177
  currentCount: currentMessages.length,
344
178
  fetchedCount: fetchedMessages.length,
345
179
  isDifferent: JSON.stringify(currentMessages) !== JSON.stringify(fetchedMessages)
346
180
  });
347
- safeSend({
348
- type: Actions.UPDATE_MESSAGES,
349
- data: {
350
- messages: fetchedMessages
351
- }
352
- });
181
+ 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());
182
+ const latestMessage = sortedMessages.length > 0 ? sortedMessages[0] : null;
183
+ setMessages(fetchedMessages);
184
+ setLastMessage(latestMessage);
353
185
  }
354
186
  } catch (error) {
355
187
  console.error("Error refetching messages on focus:", error);
356
188
  } finally {
357
189
  if (isMountedRef.current) {
358
- safeSend({
359
- type: Actions.STOP_LOADING
360
- });
190
+ setLoading(false);
361
191
  }
362
192
  }
363
193
  };
364
194
  fetchFreshData();
365
195
  return () => {
366
196
  };
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]);
197
+ }, [channel == null ? void 0 : channel.id, refetchMessages, messages, isMountedRef, parentId]));
393
198
  useEffect(() => {
394
199
  if ((channel == null ? void 0 : channel.id) && isMountedRef.current) {
395
200
  const timer = setTimeout(() => {
@@ -417,12 +222,10 @@ const DialogsListItemComponent = function DialogsListItem2({
417
222
  var _a3, _b2;
418
223
  if (((_b2 = (_a3 = result == null ? void 0 : result.data) == null ? void 0 : _a3.messages) == null ? void 0 : _b2.data) && isMountedRef.current) {
419
224
  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
- });
225
+ 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());
226
+ const latestMessage = sortedMessages.length > 0 ? sortedMessages[0] : null;
227
+ setMessages(result.data.messages.data);
228
+ setLastMessage(latestMessage);
426
229
  }
427
230
  }).catch((error) => {
428
231
  console.error(`Error force refreshing channel ${channel == null ? void 0 : channel.id}:`, error);
@@ -431,7 +234,7 @@ const DialogsListItemComponent = function DialogsListItem2({
431
234
  }, 50);
432
235
  return () => clearTimeout(timer);
433
236
  }
434
- }, [channel == null ? void 0 : channel.id, forceRefresh, isMountedRef, refetchMessages, safeSend, parentId]);
237
+ }, [channel == null ? void 0 : channel.id, forceRefresh, isMountedRef, refetchMessages, parentId]);
435
238
  const channelMembers = useMemo(() => {
436
239
  var _a2, _b2, _c2;
437
240
  return (_c2 = (_b2 = (_a2 = channel == null ? void 0 : channel.members) == null ? void 0 : _a2.filter((ch) => {
@@ -446,57 +249,54 @@ const DialogsListItemComponent = function DialogsListItem2({
446
249
  var _a3;
447
250
  return (u == null ? void 0 : u.givenName) + " " + ((_a3 = u == null ? void 0 : u.familyName) != null ? _a3 : "");
448
251
  })) == 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
- });
252
+ setTitle(titleString);
455
253
  }
456
- }, [channelMembers, safeSend, isMountedRef]);
457
- const title = useMemo(() => {
458
- const titleString = safeContextProperty("title", "");
254
+ }, [channelMembers, isMountedRef]);
255
+ const displayTitle = useMemo(() => {
459
256
  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]);
257
+ return title.length > length ? title.substring(0, length - 3) + "..." : title;
258
+ }, [title]);
466
259
  useEffect(() => {
467
260
  var _a2, _b2;
468
261
  console.log(`DialogsListItem for channel ${channel == null ? void 0 : channel.id}: `, {
469
262
  hasLastMessage: !!lastMessage,
470
263
  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
264
+ messagesCount: messages.length
472
265
  });
473
- }, [channel == null ? void 0 : channel.id, lastMessage, safeContextProperty]);
474
- const handleChannelMessage = (channel2, newMessage2) => {
475
- if (state.context.messages.some((msg) => msg.id === newMessage2.id)) {
476
- console.log("Message already in local state, skipping update:", newMessage2.id);
477
- return;
478
- }
479
- console.log("Handling subscription message update at channel level:", newMessage2.id);
480
- safeSend({
481
- type: Actions.UPDATE_MESSAGES,
482
- data: {
483
- directLastMessage: newMessage2,
484
- messages: [...state.context.messages, newMessage2]
266
+ }, [channel == null ? void 0 : channel.id, lastMessage, messages.length]);
267
+ useEffect(() => {
268
+ var _a2;
269
+ if ((newMessage == null ? void 0 : newMessage.chatMessageAdded) && (channel == null ? void 0 : channel.id)) {
270
+ const incomingMessage = newMessage.chatMessageAdded;
271
+ if (messages.some((msg) => msg.id === incomingMessage.id)) {
272
+ console.log("Message already in local state, skipping update:", incomingMessage.id);
273
+ return;
485
274
  }
486
- });
487
- };
275
+ console.log("New message received from subscription:", {
276
+ channelId: channel.id,
277
+ messageId: incomingMessage.id,
278
+ message: ((_a2 = incomingMessage.message) == null ? void 0 : _a2.substring(0, 20)) + "...",
279
+ timestamp: incomingMessage.createdAt
280
+ });
281
+ setMessages((prevMessages) => [...prevMessages, incomingMessage]);
282
+ setLastMessage(incomingMessage);
283
+ }
284
+ }, [newMessage, channel == null ? void 0 : channel.id, messages]);
488
285
  useEffect(() => {
489
286
  if ((channel == null ? void 0 : channel.lastMessage) && channel.lastMessage.id) {
490
287
  console.log("Channel has lastMessage property:", channel.lastMessage.id);
491
- handleChannelMessage(channel, channel.lastMessage);
288
+ if (!messages.some((msg) => msg.id === channel.lastMessage.id)) {
289
+ setMessages((prevMessages) => [...prevMessages, channel.lastMessage]);
290
+ setLastMessage(channel.lastMessage);
291
+ }
492
292
  }
493
- }, [(_e = channel == null ? void 0 : channel.lastMessage) == null ? void 0 : _e.id]);
494
- 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: {
293
+ }, [(_c = channel == null ? void 0 : channel.lastMessage) == null ? void 0 : _c.id, messages]);
294
+ 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: {
495
295
  borderBottomWidth: 1,
496
296
  borderColor: "#e5e7eb",
497
297
  marginVertical: 0,
498
298
  paddingHorizontal: 10
499
- } }, /* @__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 && ((_f = channelMembers == null ? void 0 : channelMembers.slice(0, 1)) == null ? void 0 : _f.map((ch, i) => {
299
+ } }, /* @__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) => {
500
300
  var _a2;
501
301
  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: {
502
302
  width: "100%",
@@ -517,7 +317,7 @@ const DialogsListItemComponent = function DialogsListItem2({
517
317
  width: 10,
518
318
  height: 10
519
319
  } })));
520
- })))), /* @__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: () => {
320
+ })))), /* @__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: () => {
521
321
  var _a2;
522
322
  return subscribeToMore({
523
323
  document: OnChatMessageAddedDocument,
@@ -527,29 +327,15 @@ const DialogsListItemComponent = function DialogsListItem2({
527
327
  updateQuery: (prev, {
528
328
  subscriptionData
529
329
  }) => {
530
- var _a3, _b2, _c2, _d2, _e2, _f2;
330
+ var _a3;
531
331
  if (!subscriptionData.data)
532
332
  return prev;
533
333
  const newMessage2 = (_a3 = subscriptionData == null ? void 0 : subscriptionData.data) == null ? void 0 : _a3.chatMessageAdded;
534
- console.log("New message added (subscription):", {
535
- channelId: channel.id,
536
- messageId: newMessage2.id,
537
- message: ((_b2 = newMessage2.message) == null ? void 0 : _b2.substring(0, 20)) + "...",
538
- hasFiles: ((_d2 = (_c2 = newMessage2 == null ? void 0 : newMessage2.files) == null ? void 0 : _c2.data) == null ? void 0 : _d2.length) > 0,
539
- filesCount: ((_f2 = (_e2 = newMessage2 == null ? void 0 : newMessage2.files) == null ? void 0 : _e2.data) == null ? void 0 : _f2.length) || 0,
540
- timestamp: newMessage2.createdAt || newMessage2.updatedAt
541
- });
542
334
  if (isMountedRef.current) {
543
- console.log("Updating messages with new subscription message");
544
- const currentMessages = safeContextProperty("messages", []);
545
- const updatedMessages = [...currentMessages, newMessage2];
546
- safeSend({
547
- type: Actions.UPDATE_MESSAGES,
548
- data: {
549
- messages: updatedMessages,
550
- directLastMessage: newMessage2
551
- }
552
- });
335
+ if (!messages.some((msg) => msg.id === newMessage2.id)) {
336
+ setMessages((prevMessages) => [...prevMessages, newMessage2]);
337
+ setLastMessage(newMessage2);
338
+ }
553
339
  }
554
340
  const existingMessages = prev == null ? void 0 : prev.messages;
555
341
  const previousData = (existingMessages == null ? void 0 : existingMessages.data) ? [...existingMessages.data, newMessage2] : [];