@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.
- package/CHANGELOG.md +8 -0
- package/lib/screens/inbox/components/CachedImage/index.js +125 -93
- package/lib/screens/inbox/components/CachedImage/index.js.map +1 -1
- package/lib/screens/inbox/components/DialogsListItem.js +74 -288
- package/lib/screens/inbox/components/DialogsListItem.js.map +1 -1
- package/lib/screens/inbox/components/ServiceDialogsListItem.js +184 -415
- package/lib/screens/inbox/components/ServiceDialogsListItem.js.map +1 -1
- package/lib/screens/inbox/components/SlackMessageContainer/SlackBubble.js +0 -2
- package/lib/screens/inbox/components/SlackMessageContainer/SlackBubble.js.map +1 -1
- package/lib/screens/inbox/containers/ConversationView.js +621 -951
- package/lib/screens/inbox/containers/ConversationView.js.map +1 -1
- package/lib/screens/inbox/containers/Dialogs.js +212 -628
- package/lib/screens/inbox/containers/Dialogs.js.map +1 -1
- package/lib/screens/inbox/containers/ThreadConversationView.js +409 -1364
- package/lib/screens/inbox/containers/ThreadConversationView.js.map +1 -1
- package/package.json +3 -3
- package/src/screens/inbox/components/CachedImage/index.tsx +191 -140
- package/src/screens/inbox/components/DialogsListItem.tsx +122 -386
- package/src/screens/inbox/components/ServiceDialogsListItem.tsx +69 -377
- package/src/screens/inbox/components/SlackMessageContainer/SlackBubble.tsx +2 -4
- package/src/screens/inbox/containers/ConversationView.tsx +793 -1064
- package/src/screens/inbox/containers/ConversationView.tsx.bk +1467 -0
- package/src/screens/inbox/containers/Dialogs.tsx +301 -763
- package/src/screens/inbox/containers/ThreadConversationView.tsx +661 -1887
- package/lib/screens/inbox/components/workflow/dialogs-list-item-xstate.js +0 -175
- package/lib/screens/inbox/components/workflow/dialogs-list-item-xstate.js.map +0 -1
- package/lib/screens/inbox/components/workflow/service-dialogs-list-item-xstate.js +0 -191
- package/lib/screens/inbox/components/workflow/service-dialogs-list-item-xstate.js.map +0 -1
- package/lib/screens/inbox/containers/workflow/conversation-xstate.js +0 -380
- package/lib/screens/inbox/containers/workflow/conversation-xstate.js.map +0 -1
- package/lib/screens/inbox/containers/workflow/dialogs-xstate.js +0 -211
- package/lib/screens/inbox/containers/workflow/dialogs-xstate.js.map +0 -1
- package/lib/screens/inbox/containers/workflow/thread-conversation-xstate.js +0 -438
- package/lib/screens/inbox/containers/workflow/thread-conversation-xstate.js.map +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React__default,{useRef,
|
|
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
|
|
67
|
+
var _a, _b, _c, _d;
|
|
199
68
|
const isMountedRef = useRef(true);
|
|
200
69
|
const parentId = null;
|
|
201
|
-
const [
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
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
|
-
|
|
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
|
-
}, [
|
|
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
|
-
|
|
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
|
-
|
|
297
|
-
|
|
298
|
-
data: {
|
|
299
|
-
messages: result.data.messages.data
|
|
300
|
-
}
|
|
301
|
-
});
|
|
141
|
+
setMessages(result.data.messages.data);
|
|
142
|
+
setLastMessage(latestMessage);
|
|
302
143
|
}
|
|
303
|
-
|
|
304
|
-
type: Actions.STOP_LOADING
|
|
305
|
-
});
|
|
144
|
+
setLoading(false);
|
|
306
145
|
}).catch((err) => {
|
|
307
146
|
console.error("Error refreshing dialog state:", err);
|
|
308
|
-
|
|
309
|
-
type: Actions.STOP_LOADING
|
|
310
|
-
});
|
|
147
|
+
setLoading(false);
|
|
311
148
|
});
|
|
312
149
|
}
|
|
313
|
-
}, [channel == null ? void 0 : channel.id, refetchMessages,
|
|
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
|
-
|
|
327
|
-
type: Actions.START_LOADING
|
|
328
|
-
});
|
|
162
|
+
setLoading(true);
|
|
329
163
|
const fetchFreshData = async () => {
|
|
330
|
-
var _a2, _b2, _c2, _d2,
|
|
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 (((
|
|
340
|
-
const currentMessages =
|
|
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
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
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
|
-
|
|
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,
|
|
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
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
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,
|
|
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
|
-
|
|
450
|
-
type: Actions.SET_TITLE,
|
|
451
|
-
data: {
|
|
452
|
-
title: titleString
|
|
453
|
-
}
|
|
454
|
-
});
|
|
252
|
+
setTitle(titleString);
|
|
455
253
|
}
|
|
456
|
-
}, [channelMembers,
|
|
457
|
-
const
|
|
458
|
-
const titleString = safeContextProperty("title", "");
|
|
254
|
+
}, [channelMembers, isMountedRef]);
|
|
255
|
+
const displayTitle = useMemo(() => {
|
|
459
256
|
const length = 30;
|
|
460
|
-
return
|
|
461
|
-
}, [
|
|
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:
|
|
264
|
+
messagesCount: messages.length
|
|
472
265
|
});
|
|
473
|
-
}, [channel == null ? void 0 : channel.id, lastMessage,
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
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
|
-
|
|
288
|
+
if (!messages.some((msg) => msg.id === channel.lastMessage.id)) {
|
|
289
|
+
setMessages((prevMessages) => [...prevMessages, channel.lastMessage]);
|
|
290
|
+
setLastMessage(channel.lastMessage);
|
|
291
|
+
}
|
|
492
292
|
}
|
|
493
|
-
}, [(
|
|
494
|
-
return /* @__PURE__ */ React__default.createElement(Pressable, { onPress: () => onOpen(channel == null ? void 0 : channel.id,
|
|
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 && ((
|
|
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"}-${
|
|
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
|
|
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
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
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] : [];
|