@messenger-box/platform-mobile 10.0.3-alpha.23 → 10.0.3-alpha.232
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/lib/components/messages-container-ui/BuildModeView.js +428 -0
- package/lib/components/messages-container-ui/BuildModeView.js.map +1 -0
- package/lib/components/messages-container-ui/MessagesContainerUI.js +55 -0
- package/lib/components/messages-container-ui/MessagesContainerUI.js.map +1 -0
- package/lib/components/messages-container-ui/PlanModeView.js +336 -0
- package/lib/components/messages-container-ui/PlanModeView.js.map +1 -0
- package/lib/compute.js +2 -3
- package/lib/compute.js.map +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/module.js.map +1 -1
- package/lib/queries/inboxQueries.js +62 -0
- package/lib/queries/inboxQueries.js.map +1 -0
- package/lib/routes.json +2 -3
- package/lib/screens/inbox/DialogMessages.js +8 -3
- package/lib/screens/inbox/DialogMessages.js.map +1 -1
- package/lib/screens/inbox/DialogThreadMessages.js +6 -11
- package/lib/screens/inbox/DialogThreadMessages.js.map +1 -1
- package/lib/screens/inbox/DialogThreads.js +9 -11
- package/lib/screens/inbox/DialogThreads.js.map +1 -1
- package/lib/screens/inbox/Inbox.js.map +1 -1
- package/lib/screens/inbox/components/CachedImage/consts.js +1 -1
- package/lib/screens/inbox/components/CachedImage/consts.js.map +1 -1
- package/lib/screens/inbox/components/CachedImage/index.js +125 -96
- package/lib/screens/inbox/components/CachedImage/index.js.map +1 -1
- package/lib/screens/inbox/components/DialogItem.js +160 -0
- package/lib/screens/inbox/components/DialogItem.js.map +1 -0
- package/lib/screens/inbox/components/GiftedChatInboxComponent.js +315 -0
- package/lib/screens/inbox/components/GiftedChatInboxComponent.js.map +1 -0
- package/lib/screens/inbox/components/SlackMessageContainer/ImageViewerModal.js +3 -1
- package/lib/screens/inbox/components/SlackMessageContainer/ImageViewerModal.js.map +1 -1
- package/lib/screens/inbox/components/SlackMessageContainer/PaymentMessage.js +194 -0
- package/lib/screens/inbox/components/SlackMessageContainer/PaymentMessage.js.map +1 -0
- package/lib/screens/inbox/components/SlackMessageContainer/SlackBubble.js +149 -36
- package/lib/screens/inbox/components/SlackMessageContainer/SlackBubble.js.map +1 -1
- package/lib/screens/inbox/components/SlackMessageContainer/SlackMessage.js +4 -5
- package/lib/screens/inbox/components/SlackMessageContainer/SlackMessage.js.map +1 -1
- package/lib/screens/inbox/components/SubscriptionHandler.js +22 -0
- package/lib/screens/inbox/components/SubscriptionHandler.js.map +1 -0
- package/lib/screens/inbox/components/ThreadsViewItem.js +2 -4
- package/lib/screens/inbox/components/ThreadsViewItem.js.map +1 -1
- package/lib/screens/inbox/config/config.js +4 -2
- package/lib/screens/inbox/config/config.js.map +1 -1
- package/lib/screens/inbox/containers/ConversationView.js +1093 -1090
- package/lib/screens/inbox/containers/ConversationView.js.map +1 -1
- package/lib/screens/inbox/containers/Dialogs.js +130 -577
- package/lib/screens/inbox/containers/Dialogs.js.map +1 -1
- package/lib/screens/inbox/containers/ThreadConversationView.js +864 -1408
- package/lib/screens/inbox/containers/ThreadConversationView.js.map +1 -1
- package/lib/screens/inbox/containers/ThreadsView.js +9 -15
- package/lib/screens/inbox/containers/ThreadsView.js.map +1 -1
- package/lib/screens/inbox/hooks/useInboxMessages.js +31 -0
- package/lib/screens/inbox/hooks/useInboxMessages.js.map +1 -0
- package/lib/screens/inbox/hooks/useSafeDialogThreadsMachine.js +1 -1
- package/lib/screens/inbox/hooks/useSafeDialogThreadsMachine.js.map +1 -1
- package/lib/screens/inbox/workflow/dialog-threads-xstate.js.map +1 -1
- package/package.json +10 -8
- package/CHANGELOG.md +0 -172
- package/jest.config.js +0 -24
- package/lib/screens/inbox/components/DialogsListItem.js +0 -548
- package/lib/screens/inbox/components/DialogsListItem.js.map +0 -1
- package/lib/screens/inbox/components/ServiceDialogsListItem.js +0 -489
- package/lib/screens/inbox/components/ServiceDialogsListItem.js.map +0 -1
- 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
- package/rollup.config.mjs +0 -45
- package/src/components/index.ts +0 -0
- package/src/compute.ts +0 -63
- package/src/index.ts +0 -7
- package/src/module.ts +0 -10
- package/src/navigation/InboxNavigation.tsx +0 -102
- package/src/navigation/index.ts +0 -1
- package/src/screens/inbox/DialogMessages.tsx +0 -21
- package/src/screens/inbox/DialogThreadMessages.tsx +0 -97
- package/src/screens/inbox/DialogThreads.tsx +0 -125
- package/src/screens/inbox/Inbox.tsx +0 -17
- package/src/screens/inbox/components/CachedImage/consts.ts +0 -6
- package/src/screens/inbox/components/CachedImage/index.tsx +0 -223
- package/src/screens/inbox/components/DialogsHeader.tsx +0 -30
- package/src/screens/inbox/components/DialogsListItem.tsx +0 -819
- package/src/screens/inbox/components/ServiceDialogsListItem.tsx +0 -679
- package/src/screens/inbox/components/SlackMessageContainer/ImageViewerModal.tsx +0 -113
- package/src/screens/inbox/components/SlackMessageContainer/SlackBubble.tsx +0 -313
- package/src/screens/inbox/components/SlackMessageContainer/SlackMessage.tsx +0 -145
- package/src/screens/inbox/components/SlackMessageContainer/index.ts +0 -3
- package/src/screens/inbox/components/SmartLoader.tsx +0 -61
- package/src/screens/inbox/components/SupportServiceDialogsListItem.tsx +0 -301
- package/src/screens/inbox/components/ThreadsViewItem.tsx +0 -233
- package/src/screens/inbox/components/workflow/dialogs-list-item-xstate.ts +0 -145
- package/src/screens/inbox/components/workflow/service-dialogs-list-item-xstate.ts +0 -159
- package/src/screens/inbox/config/config.ts +0 -15
- package/src/screens/inbox/config/index.ts +0 -1
- package/src/screens/inbox/containers/ConversationView.tsx +0 -1784
- package/src/screens/inbox/containers/Dialogs.tsx +0 -829
- package/src/screens/inbox/containers/SupportServiceDialogs.tsx +0 -119
- package/src/screens/inbox/containers/ThreadConversationView.tsx +0 -2295
- package/src/screens/inbox/containers/ThreadsView.tsx +0 -224
- package/src/screens/inbox/containers/workflow/apollo/handleResult.ts +0 -20
- package/src/screens/inbox/containers/workflow/conversation-xstate.ts +0 -313
- package/src/screens/inbox/containers/workflow/dialogs-xstate.ts +0 -196
- package/src/screens/inbox/containers/workflow/thread-conversation-xstate.ts +0 -401
- package/src/screens/inbox/hooks/useSafeDialogThreadsMachine.ts +0 -136
- package/src/screens/inbox/index.ts +0 -37
- package/src/screens/inbox/machines/threadsMachine.ts +0 -147
- package/src/screens/inbox/workflow/dialog-threads-xstate.ts +0 -163
- package/src/screens/index.ts +0 -4
- package/tsconfig.json +0 -13
- package/webpack.config.js +0 -58
|
@@ -1,548 +0,0 @@
|
|
|
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;
|
|
2
|
-
var __defProps = Object.defineProperties;
|
|
3
|
-
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
4
|
-
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
5
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
-
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
7
|
-
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
8
|
-
var __spreadValues = (a, b) => {
|
|
9
|
-
for (var prop in b || (b = {}))
|
|
10
|
-
if (__hasOwnProp.call(b, prop))
|
|
11
|
-
__defNormalProp(a, prop, b[prop]);
|
|
12
|
-
if (__getOwnPropSymbols)
|
|
13
|
-
for (var prop of __getOwnPropSymbols(b)) {
|
|
14
|
-
if (__propIsEnum.call(b, prop))
|
|
15
|
-
__defNormalProp(a, prop, b[prop]);
|
|
16
|
-
}
|
|
17
|
-
return a;
|
|
18
|
-
};
|
|
19
|
-
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
20
|
-
const createdAtText = (value) => {
|
|
21
|
-
if (!value)
|
|
22
|
-
return "";
|
|
23
|
-
let date = new Date(value);
|
|
24
|
-
if (isToday(date))
|
|
25
|
-
return "Today";
|
|
26
|
-
if (isYesterday(date))
|
|
27
|
-
return "Yesterday";
|
|
28
|
-
return format(new Date(value), "MMM dd, yyyy");
|
|
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
|
-
const LastMessageComponent = ({
|
|
152
|
-
subscribeToNewMessages,
|
|
153
|
-
title,
|
|
154
|
-
lastMessage,
|
|
155
|
-
channelId
|
|
156
|
-
}) => {
|
|
157
|
-
var _a, _b;
|
|
158
|
-
React__default.useEffect(() => {
|
|
159
|
-
const unsubscribe = subscribeToNewMessages();
|
|
160
|
-
return () => {
|
|
161
|
-
if (unsubscribe && typeof unsubscribe === "function") {
|
|
162
|
-
unsubscribe();
|
|
163
|
-
}
|
|
164
|
-
};
|
|
165
|
-
}, [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
|
-
const count = 30;
|
|
177
|
-
const channelTitle = (title == null ? void 0 : title.slice(0, count)) + ((title == null ? void 0 : title.length) > count ? "..." : "") || "";
|
|
178
|
-
let displayMessage = "No messages yet";
|
|
179
|
-
if (lastMessage) {
|
|
180
|
-
if (lastMessage.message && lastMessage.message.trim() !== "") {
|
|
181
|
-
displayMessage = lastMessage.message;
|
|
182
|
-
} else if (((_b = (_a = lastMessage.files) == null ? void 0 : _a.data) == null ? void 0 : _b.length) > 0) {
|
|
183
|
-
displayMessage = "\u{1F4CE} File attachment";
|
|
184
|
-
} else {
|
|
185
|
-
displayMessage = "(Empty message)";
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
const displayDate = (lastMessage == null ? void 0 : lastMessage.createdAt) ? createdAtText(lastMessage.createdAt) : (lastMessage == null ? void 0 : lastMessage.updatedAt) ? createdAtText(lastMessage.updatedAt) : "";
|
|
189
|
-
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" }, channelTitle), /* @__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] }, displayDate)));
|
|
190
|
-
};
|
|
191
|
-
const DialogsListItemComponent = function DialogsListItem2({
|
|
192
|
-
currentUser,
|
|
193
|
-
selectedChannelId,
|
|
194
|
-
channel,
|
|
195
|
-
onOpen,
|
|
196
|
-
forceRefresh
|
|
197
|
-
}) {
|
|
198
|
-
var _a, _b, _c, _d, _e;
|
|
199
|
-
const isMountedRef = useRef(true);
|
|
200
|
-
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]);
|
|
226
|
-
const {
|
|
227
|
-
data: messagesQuery,
|
|
228
|
-
loading: messageLoading,
|
|
229
|
-
refetch: refetchMessages,
|
|
230
|
-
subscribeToMore
|
|
231
|
-
} = useMessagesQuery({
|
|
232
|
-
variables: {
|
|
233
|
-
channelId: (_a = channel == null ? void 0 : channel.id) == null ? void 0 : _a.toString(),
|
|
234
|
-
parentId,
|
|
235
|
-
limit: 10
|
|
236
|
-
},
|
|
237
|
-
fetchPolicy: "cache-and-network",
|
|
238
|
-
refetchWritePolicy: "overwrite",
|
|
239
|
-
nextFetchPolicy: "network-only",
|
|
240
|
-
onCompleted: (data) => {
|
|
241
|
-
var _a2, _b2;
|
|
242
|
-
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");
|
|
243
|
-
},
|
|
244
|
-
onError: (error) => {
|
|
245
|
-
console.error(`Error fetching messages for channel ${channel == null ? void 0 : channel.id}:`, error);
|
|
246
|
-
}
|
|
247
|
-
});
|
|
248
|
-
const {
|
|
249
|
-
data: newMessage,
|
|
250
|
-
loading: newMsgLoading,
|
|
251
|
-
error: newMsgError
|
|
252
|
-
} = useOnChatMessageAddedSubscription({
|
|
253
|
-
variables: {
|
|
254
|
-
channelId: (_b = channel == null ? void 0 : channel.id) == null ? void 0 : _b.toString()
|
|
255
|
-
}
|
|
256
|
-
});
|
|
257
|
-
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
|
-
}
|
|
267
|
-
return () => {
|
|
268
|
-
isMountedRef.current = false;
|
|
269
|
-
};
|
|
270
|
-
}, [channel == null ? void 0 : channel.id, currentUser, safeSend]);
|
|
271
|
-
const refreshDialogState = useCallback(() => {
|
|
272
|
-
var _a2;
|
|
273
|
-
if ((channel == null ? void 0 : channel.id) && isMountedRef.current) {
|
|
274
|
-
console.log("Forcing dialog state refresh for channel:", channel == null ? void 0 : channel.id);
|
|
275
|
-
safeSend({
|
|
276
|
-
type: Actions.START_LOADING
|
|
277
|
-
});
|
|
278
|
-
const options = {
|
|
279
|
-
channelId: (_a2 = channel == null ? void 0 : channel.id) == null ? void 0 : _a2.toString(),
|
|
280
|
-
parentId,
|
|
281
|
-
limit: 10
|
|
282
|
-
};
|
|
283
|
-
refetchMessages(options).then((result) => {
|
|
284
|
-
var _a3, _b2, _c2;
|
|
285
|
-
if (((_b2 = (_a3 = result.data) == null ? void 0 : _a3.messages) == null ? void 0 : _b2.data) && isMountedRef.current) {
|
|
286
|
-
console.log(`Refreshed ${result.data.messages.data.length} messages for channel ${channel == null ? void 0 : channel.id}`);
|
|
287
|
-
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());
|
|
288
|
-
const latestMessage = sortedMessages.length > 0 ? sortedMessages[0] : null;
|
|
289
|
-
if (latestMessage) {
|
|
290
|
-
console.log("Latest message after refresh:", {
|
|
291
|
-
id: latestMessage.id,
|
|
292
|
-
message: ((_c2 = latestMessage.message) == null ? void 0 : _c2.substring(0, 20)) + "...",
|
|
293
|
-
date: latestMessage.createdAt || latestMessage.updatedAt
|
|
294
|
-
});
|
|
295
|
-
}
|
|
296
|
-
safeSend({
|
|
297
|
-
type: Actions.UPDATE_MESSAGES,
|
|
298
|
-
data: {
|
|
299
|
-
messages: result.data.messages.data
|
|
300
|
-
}
|
|
301
|
-
});
|
|
302
|
-
}
|
|
303
|
-
safeSend({
|
|
304
|
-
type: Actions.STOP_LOADING
|
|
305
|
-
});
|
|
306
|
-
}).catch((err) => {
|
|
307
|
-
console.error("Error refreshing dialog state:", err);
|
|
308
|
-
safeSend({
|
|
309
|
-
type: Actions.STOP_LOADING
|
|
310
|
-
});
|
|
311
|
-
});
|
|
312
|
-
}
|
|
313
|
-
}, [channel == null ? void 0 : channel.id, refetchMessages, safeSend, isMountedRef, parentId]);
|
|
314
|
-
const firstRenderRef = useRef(true);
|
|
315
|
-
useRef(0);
|
|
316
|
-
useFocusEffect(React__default.useCallback(() => {
|
|
317
|
-
if (!(channel == null ? void 0 : channel.id))
|
|
318
|
-
return;
|
|
319
|
-
console.log("DialogsListItem focused for channel:", channel == null ? void 0 : channel.id);
|
|
320
|
-
if (firstRenderRef.current) {
|
|
321
|
-
console.log("Skipping initial focus refresh for channel:", channel == null ? void 0 : channel.id);
|
|
322
|
-
firstRenderRef.current = false;
|
|
323
|
-
return;
|
|
324
|
-
}
|
|
325
|
-
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
|
-
});
|
|
329
|
-
const fetchFreshData = async () => {
|
|
330
|
-
var _a2, _b2, _c2, _d2, _e2, _f;
|
|
331
|
-
try {
|
|
332
|
-
const options = {
|
|
333
|
-
channelId: (_a2 = channel == null ? void 0 : channel.id) == null ? void 0 : _a2.toString(),
|
|
334
|
-
parentId,
|
|
335
|
-
limit: 10
|
|
336
|
-
};
|
|
337
|
-
const result = await refetchMessages(options);
|
|
338
|
-
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", []);
|
|
341
|
-
const fetchedMessages = result.data.messages.data;
|
|
342
|
-
console.log("Data comparison:", {
|
|
343
|
-
currentCount: currentMessages.length,
|
|
344
|
-
fetchedCount: fetchedMessages.length,
|
|
345
|
-
isDifferent: JSON.stringify(currentMessages) !== JSON.stringify(fetchedMessages)
|
|
346
|
-
});
|
|
347
|
-
safeSend({
|
|
348
|
-
type: Actions.UPDATE_MESSAGES,
|
|
349
|
-
data: {
|
|
350
|
-
messages: fetchedMessages
|
|
351
|
-
}
|
|
352
|
-
});
|
|
353
|
-
}
|
|
354
|
-
} catch (error) {
|
|
355
|
-
console.error("Error refetching messages on focus:", error);
|
|
356
|
-
} finally {
|
|
357
|
-
if (isMountedRef.current) {
|
|
358
|
-
safeSend({
|
|
359
|
-
type: Actions.STOP_LOADING
|
|
360
|
-
});
|
|
361
|
-
}
|
|
362
|
-
}
|
|
363
|
-
};
|
|
364
|
-
fetchFreshData();
|
|
365
|
-
return () => {
|
|
366
|
-
};
|
|
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]);
|
|
393
|
-
useEffect(() => {
|
|
394
|
-
if ((channel == null ? void 0 : channel.id) && isMountedRef.current) {
|
|
395
|
-
const timer = setTimeout(() => {
|
|
396
|
-
if (isMountedRef.current) {
|
|
397
|
-
console.log("Initial data refresh for channel:", channel.id);
|
|
398
|
-
refreshDialogState();
|
|
399
|
-
}
|
|
400
|
-
}, 100);
|
|
401
|
-
return () => {
|
|
402
|
-
clearTimeout(timer);
|
|
403
|
-
};
|
|
404
|
-
}
|
|
405
|
-
}, [channel == null ? void 0 : channel.id, refreshDialogState, isMountedRef]);
|
|
406
|
-
useEffect(() => {
|
|
407
|
-
if (forceRefresh && (channel == null ? void 0 : channel.id) && isMountedRef.current) {
|
|
408
|
-
console.log(`Force refreshing messages for channel ${channel == null ? void 0 : channel.id} due to forceRefresh prop`);
|
|
409
|
-
const timer = setTimeout(() => {
|
|
410
|
-
var _a2;
|
|
411
|
-
if (isMountedRef.current && refetchMessages) {
|
|
412
|
-
refetchMessages({
|
|
413
|
-
channelId: (_a2 = channel == null ? void 0 : channel.id) == null ? void 0 : _a2.toString(),
|
|
414
|
-
parentId,
|
|
415
|
-
limit: 10
|
|
416
|
-
}).then((result) => {
|
|
417
|
-
var _a3, _b2;
|
|
418
|
-
if (((_b2 = (_a3 = result == null ? void 0 : result.data) == null ? void 0 : _a3.messages) == null ? void 0 : _b2.data) && isMountedRef.current) {
|
|
419
|
-
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
|
-
});
|
|
426
|
-
}
|
|
427
|
-
}).catch((error) => {
|
|
428
|
-
console.error(`Error force refreshing channel ${channel == null ? void 0 : channel.id}:`, error);
|
|
429
|
-
});
|
|
430
|
-
}
|
|
431
|
-
}, 50);
|
|
432
|
-
return () => clearTimeout(timer);
|
|
433
|
-
}
|
|
434
|
-
}, [channel == null ? void 0 : channel.id, forceRefresh, isMountedRef, refetchMessages, safeSend, parentId]);
|
|
435
|
-
const channelMembers = useMemo(() => {
|
|
436
|
-
var _a2, _b2, _c2;
|
|
437
|
-
return (_c2 = (_b2 = (_a2 = channel == null ? void 0 : channel.members) == null ? void 0 : _a2.filter((ch) => {
|
|
438
|
-
var _a3, _b3;
|
|
439
|
-
return ((_a3 = ch == null ? void 0 : ch.user) == null ? void 0 : _a3.id) != (currentUser == null ? void 0 : currentUser.id) && ((_b3 = ch == null ? void 0 : ch.user) == null ? void 0 : _b3.__typename) == "UserAccount";
|
|
440
|
-
})) == null ? void 0 : _b2.map((m) => m == null ? void 0 : m.user)) != null ? _c2 : null;
|
|
441
|
-
}, [currentUser, channel]);
|
|
442
|
-
useEffect(() => {
|
|
443
|
-
var _a2, _b2, _c2;
|
|
444
|
-
if (channelMembers && isMountedRef.current) {
|
|
445
|
-
const titleString = (_c2 = (_b2 = (_a2 = channelMembers == null ? void 0 : channelMembers.map((u) => {
|
|
446
|
-
var _a3;
|
|
447
|
-
return (u == null ? void 0 : u.givenName) + " " + ((_a3 = u == null ? void 0 : u.familyName) != null ? _a3 : "");
|
|
448
|
-
})) == 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
|
-
});
|
|
455
|
-
}
|
|
456
|
-
}, [channelMembers, safeSend, isMountedRef]);
|
|
457
|
-
const title = useMemo(() => {
|
|
458
|
-
const titleString = safeContextProperty("title", "");
|
|
459
|
-
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]);
|
|
466
|
-
useEffect(() => {
|
|
467
|
-
var _a2, _b2;
|
|
468
|
-
console.log(`DialogsListItem for channel ${channel == null ? void 0 : channel.id}: `, {
|
|
469
|
-
hasLastMessage: !!lastMessage,
|
|
470
|
-
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
|
|
472
|
-
});
|
|
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: {
|
|
475
|
-
borderBottomWidth: 1,
|
|
476
|
-
borderColor: "#e5e7eb",
|
|
477
|
-
marginVertical: 0,
|
|
478
|
-
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) => {
|
|
480
|
-
var _a2;
|
|
481
|
-
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
|
-
width: "100%",
|
|
483
|
-
height: "100%",
|
|
484
|
-
backgroundColor: "#e5e7eb",
|
|
485
|
-
borderRadius: 5
|
|
486
|
-
}, className: "items-center justify-center bg-gray-200 rounded-md" }, /* @__PURE__ */ React__default.createElement(Text, { style: {
|
|
487
|
-
fontSize: 12,
|
|
488
|
-
fontWeight: "bold",
|
|
489
|
-
color: "#000"
|
|
490
|
-
} }, channelMembers == null ? void 0 : channelMembers.length)), (channelMembers == null ? void 0 : channelMembers.length) == 1 && /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, /* @__PURE__ */ React__default.createElement(AvatarImage, { alt: "user image", style: {
|
|
491
|
-
borderRadius: 6,
|
|
492
|
-
borderWidth: 2,
|
|
493
|
-
borderColor: "#fff"
|
|
494
|
-
}, source: {
|
|
495
|
-
uri: ch == null ? void 0 : ch.picture
|
|
496
|
-
} }), /* @__PURE__ */ React__default.createElement(AvatarBadge, { style: {
|
|
497
|
-
width: 10,
|
|
498
|
-
height: 10
|
|
499
|
-
} })));
|
|
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: () => {
|
|
501
|
-
var _a2;
|
|
502
|
-
return subscribeToMore({
|
|
503
|
-
document: OnChatMessageAddedDocument,
|
|
504
|
-
variables: {
|
|
505
|
-
channelId: (_a2 = channel.id) == null ? void 0 : _a2.toString()
|
|
506
|
-
},
|
|
507
|
-
updateQuery: (prev, {
|
|
508
|
-
subscriptionData
|
|
509
|
-
}) => {
|
|
510
|
-
var _a3, _b2, _c2, _d2, _e2, _f;
|
|
511
|
-
if (!subscriptionData.data)
|
|
512
|
-
return prev;
|
|
513
|
-
const newMessage2 = (_a3 = subscriptionData == null ? void 0 : subscriptionData.data) == null ? void 0 : _a3.chatMessageAdded;
|
|
514
|
-
console.log("New message added (subscription):", {
|
|
515
|
-
channelId: channel.id,
|
|
516
|
-
messageId: newMessage2.id,
|
|
517
|
-
message: ((_b2 = newMessage2.message) == null ? void 0 : _b2.substring(0, 20)) + "...",
|
|
518
|
-
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,
|
|
520
|
-
timestamp: newMessage2.createdAt || newMessage2.updatedAt
|
|
521
|
-
});
|
|
522
|
-
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
|
-
});
|
|
533
|
-
}
|
|
534
|
-
const existingMessages = prev == null ? void 0 : prev.messages;
|
|
535
|
-
const previousData = (existingMessages == null ? void 0 : existingMessages.data) ? [...existingMessages.data, newMessage2] : [];
|
|
536
|
-
const totalMsgCount = (existingMessages == null ? void 0 : existingMessages.totalCount) + 1;
|
|
537
|
-
const merged = __spreadProps(__spreadValues({}, prev), {
|
|
538
|
-
messages: __spreadProps(__spreadValues({}, existingMessages), {
|
|
539
|
-
data: previousData,
|
|
540
|
-
totalCount: totalMsgCount
|
|
541
|
-
})
|
|
542
|
-
});
|
|
543
|
-
return merged;
|
|
544
|
-
}
|
|
545
|
-
});
|
|
546
|
-
} }))));
|
|
547
|
-
};
|
|
548
|
-
const DialogsListItem = React__default.memo(DialogsListItemComponent);export{DialogsListItem,DialogsListItemComponent};//# sourceMappingURL=DialogsListItem.js.map
|