@messenger-box/platform-mobile 10.0.3-alpha.16 → 10.0.3-alpha.18
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/routes.json +14 -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 -16
- package/lib/screens/inbox/components/CachedImage/index.js.map +1 -1
- package/lib/screens/inbox/components/SlackMessageContainer/SlackBubble.js +32 -21
- package/lib/screens/inbox/components/SlackMessageContainer/SlackBubble.js.map +1 -1
- package/lib/screens/inbox/containers/ConversationView.js +1175 -400
- package/lib/screens/inbox/containers/ConversationView.js.map +1 -1
- package/lib/screens/inbox/containers/Dialogs.js +290 -21
- package/lib/screens/inbox/containers/Dialogs.js.map +1 -1
- package/lib/screens/inbox/containers/ThreadConversationView.js +858 -351
- package/lib/screens/inbox/containers/ThreadConversationView.js.map +1 -1
- package/lib/screens/inbox/containers/workflow/conversation-xstate.js +380 -0
- package/lib/screens/inbox/containers/workflow/conversation-xstate.js.map +1 -0
- package/lib/screens/inbox/containers/workflow/dialogs-xstate.js +235 -0
- package/lib/screens/inbox/containers/workflow/dialogs-xstate.js.map +1 -0
- package/lib/screens/inbox/containers/workflow/thread-conversation-xstate.js +438 -0
- package/lib/screens/inbox/containers/workflow/thread-conversation-xstate.js.map +1 -0
- package/package.json +4 -4
- package/src/screens/inbox/components/CachedImage/consts.ts +4 -3
- package/src/screens/inbox/components/CachedImage/index.tsx +137 -17
- package/src/screens/inbox/components/SlackMessageContainer/SlackBubble.tsx +35 -9
- package/src/screens/inbox/containers/ConversationView.tsx +1510 -641
- package/src/screens/inbox/containers/Dialogs.tsx +415 -123
- package/src/screens/inbox/containers/ThreadConversationView.tsx +1053 -288
- package/src/screens/inbox/containers/workflow/apollo/handleResult.ts +20 -0
- package/src/screens/inbox/containers/workflow/conversation-xstate.ts +313 -0
- package/src/screens/inbox/containers/workflow/dialogs-xstate.ts +196 -0
- package/src/screens/inbox/containers/workflow/thread-conversation-xstate.ts +401 -0
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import React__default,{useState,
|
|
1
|
+
import React__default,{useRef,useCallback,useEffect,useState,useMemo}from'react';import {Box,FlatList,Center,Spinner,Heading,Input,InputField,Text}from'@admin-layout/gluestack-ui-mobile';import {Ionicons}from'@expo/vector-icons';import {useSelector,useDispatch}from'react-redux';import {useRoute,useNavigation,useIsFocused,useFocusEffect}from'@react-navigation/native';import {orderBy}from'lodash-es';import {DialogsListItem}from'../components/DialogsListItem.js';import {ServiceDialogsListItem}from'../components/ServiceDialogsListItem.js';import {useGetChannelsByUserWithServiceChannelsQuery}from'common/graphql';import {RoomType}from'common';import {userSelector}from'@adminide-stack/user-auth0-client';import {config}from'../config/config.js';import colors from'tailwindcss/colors';import {Actions,BaseState,MainState}from'./workflow/dialogs-xstate.js';var __defProp = Object.defineProperty;
|
|
2
|
+
var __defProps = Object.defineProperties;
|
|
3
|
+
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
2
4
|
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
3
5
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
4
6
|
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
@@ -14,6 +16,123 @@ var __spreadValues = (a, b) => {
|
|
|
14
16
|
}
|
|
15
17
|
return a;
|
|
16
18
|
};
|
|
19
|
+
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
20
|
+
function useSafeMachine(machine) {
|
|
21
|
+
const [state, setState] = useState({
|
|
22
|
+
context: {
|
|
23
|
+
channels: [],
|
|
24
|
+
refreshing: false,
|
|
25
|
+
loading: false,
|
|
26
|
+
error: null,
|
|
27
|
+
searchQuery: "",
|
|
28
|
+
selectedChannelId: null,
|
|
29
|
+
channelRole: null,
|
|
30
|
+
channelFilters: {},
|
|
31
|
+
supportServices: false
|
|
32
|
+
},
|
|
33
|
+
value: "idle"
|
|
34
|
+
});
|
|
35
|
+
const send = useCallback((event) => {
|
|
36
|
+
try {
|
|
37
|
+
console.log("Dialogs Event received:", event.type);
|
|
38
|
+
if (event.type === Actions.INITIAL_CONTEXT) {
|
|
39
|
+
setState((prev) => {
|
|
40
|
+
var _a, _b, _c, _d;
|
|
41
|
+
return __spreadProps(__spreadValues({}, prev), {
|
|
42
|
+
context: __spreadProps(__spreadValues({}, prev.context), {
|
|
43
|
+
channelRole: ((_a = event.data) == null ? void 0 : _a.channelRole) || null,
|
|
44
|
+
channelFilters: ((_b = event.data) == null ? void 0 : _b.channelFilters) || {},
|
|
45
|
+
supportServices: ((_c = event.data) == null ? void 0 : _c.supportServices) || false,
|
|
46
|
+
selectedChannelId: ((_d = event.data) == null ? void 0 : _d.selectedChannelId) || null
|
|
47
|
+
}),
|
|
48
|
+
value: BaseState.FetchChannels
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
} else if (event.type === Actions.SET_SEARCH_QUERY) {
|
|
52
|
+
setState((prev) => {
|
|
53
|
+
var _a;
|
|
54
|
+
return __spreadProps(__spreadValues({}, prev), {
|
|
55
|
+
context: __spreadProps(__spreadValues({}, prev.context), {
|
|
56
|
+
searchQuery: ((_a = event.data) == null ? void 0 : _a.searchQuery) || ""
|
|
57
|
+
})
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
} else if (event.type === Actions.REFRESH_CHANNELS) {
|
|
61
|
+
setState((prev) => __spreadProps(__spreadValues({}, prev), {
|
|
62
|
+
context: __spreadProps(__spreadValues({}, prev.context), {
|
|
63
|
+
refreshing: true
|
|
64
|
+
}),
|
|
65
|
+
value: MainState.RefreshChannels
|
|
66
|
+
}));
|
|
67
|
+
} else if (event.type === Actions.SELECT_CHANNEL) {
|
|
68
|
+
setState((prev) => {
|
|
69
|
+
var _a;
|
|
70
|
+
return __spreadProps(__spreadValues({}, prev), {
|
|
71
|
+
context: __spreadProps(__spreadValues({}, prev.context), {
|
|
72
|
+
selectedChannelId: ((_a = event.data) == null ? void 0 : _a.channelId) || null
|
|
73
|
+
}),
|
|
74
|
+
value: MainState.SelectChannel
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
} else if (event.type === Actions.START_LOADING) {
|
|
78
|
+
setState((prev) => __spreadProps(__spreadValues({}, prev), {
|
|
79
|
+
context: __spreadProps(__spreadValues({}, prev.context), {
|
|
80
|
+
loading: true
|
|
81
|
+
})
|
|
82
|
+
}));
|
|
83
|
+
} else if (event.type === Actions.STOP_LOADING) {
|
|
84
|
+
setState((prev) => __spreadProps(__spreadValues({}, prev), {
|
|
85
|
+
context: __spreadProps(__spreadValues({}, prev.context), {
|
|
86
|
+
loading: false
|
|
87
|
+
})
|
|
88
|
+
}));
|
|
89
|
+
} else if (event.type === "FETCH_CHANNELS_SUCCESS") {
|
|
90
|
+
setState((prev) => {
|
|
91
|
+
var _a;
|
|
92
|
+
return __spreadProps(__spreadValues({}, prev), {
|
|
93
|
+
context: __spreadProps(__spreadValues({}, prev.context), {
|
|
94
|
+
channels: ((_a = event.data) == null ? void 0 : _a.channels) || [],
|
|
95
|
+
loading: false,
|
|
96
|
+
refreshing: false
|
|
97
|
+
}),
|
|
98
|
+
value: BaseState.Idle
|
|
99
|
+
});
|
|
100
|
+
});
|
|
101
|
+
} else if (event.type === "REFRESH_CHANNELS_SUCCESS") {
|
|
102
|
+
setState((prev) => {
|
|
103
|
+
var _a;
|
|
104
|
+
return __spreadProps(__spreadValues({}, prev), {
|
|
105
|
+
context: __spreadProps(__spreadValues({}, prev.context), {
|
|
106
|
+
channels: ((_a = event.data) == null ? void 0 : _a.channels) || [],
|
|
107
|
+
refreshing: false
|
|
108
|
+
}),
|
|
109
|
+
value: BaseState.Idle
|
|
110
|
+
});
|
|
111
|
+
});
|
|
112
|
+
} else if (event.type === "ERROR") {
|
|
113
|
+
setState((prev) => {
|
|
114
|
+
var _a;
|
|
115
|
+
return __spreadProps(__spreadValues({}, prev), {
|
|
116
|
+
context: __spreadProps(__spreadValues({}, prev.context), {
|
|
117
|
+
error: ((_a = event.data) == null ? void 0 : _a.message) || "An error occurred",
|
|
118
|
+
loading: false,
|
|
119
|
+
refreshing: false
|
|
120
|
+
}),
|
|
121
|
+
value: BaseState.Error
|
|
122
|
+
});
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
} catch (err) {
|
|
126
|
+
console.error("Error in send function:", err);
|
|
127
|
+
}
|
|
128
|
+
}, []);
|
|
129
|
+
const stateWithMatches = useMemo(() => {
|
|
130
|
+
return __spreadProps(__spreadValues({}, state), {
|
|
131
|
+
matches: (value) => state.value === value
|
|
132
|
+
});
|
|
133
|
+
}, [state]);
|
|
134
|
+
return [stateWithMatches, send];
|
|
135
|
+
}
|
|
17
136
|
const DialogsComponent = (props) => {
|
|
18
137
|
var _a;
|
|
19
138
|
const {
|
|
@@ -29,8 +148,51 @@ const DialogsComponent = (props) => {
|
|
|
29
148
|
const auth = useSelector(userSelector);
|
|
30
149
|
useDispatch();
|
|
31
150
|
const navigation = useNavigation();
|
|
32
|
-
useIsFocused();
|
|
33
|
-
const
|
|
151
|
+
const isFocused = useIsFocused();
|
|
152
|
+
const isMountedRef = useRef(true);
|
|
153
|
+
const [state, send] = useSafeMachine();
|
|
154
|
+
useCallback(() => {
|
|
155
|
+
try {
|
|
156
|
+
return (state == null ? void 0 : state.context) || {};
|
|
157
|
+
} catch (error) {
|
|
158
|
+
console.error("Error accessing state.context:", error);
|
|
159
|
+
return {};
|
|
160
|
+
}
|
|
161
|
+
}, [state]);
|
|
162
|
+
const safeContextProperty = useCallback((property, defaultValue = null) => {
|
|
163
|
+
var _a2, _b;
|
|
164
|
+
try {
|
|
165
|
+
return (_b = (_a2 = state == null ? void 0 : state.context) == null ? void 0 : _a2[property]) != null ? _b : defaultValue;
|
|
166
|
+
} catch (error) {
|
|
167
|
+
console.error(`Error accessing state.context.${property}:`, error);
|
|
168
|
+
return defaultValue;
|
|
169
|
+
}
|
|
170
|
+
}, [state]);
|
|
171
|
+
useCallback((stateValue) => {
|
|
172
|
+
var _a2;
|
|
173
|
+
try {
|
|
174
|
+
return ((_a2 = state == null ? void 0 : state.matches) == null ? void 0 : _a2.call(state, stateValue)) || false;
|
|
175
|
+
} catch (error) {
|
|
176
|
+
console.error(`Error calling state.matches with ${stateValue}:`, error);
|
|
177
|
+
return false;
|
|
178
|
+
}
|
|
179
|
+
}, [state]);
|
|
180
|
+
const safeSend = useCallback((event) => {
|
|
181
|
+
try {
|
|
182
|
+
send(event);
|
|
183
|
+
} catch (error) {
|
|
184
|
+
console.error("Error sending event to state machine:", error, event);
|
|
185
|
+
}
|
|
186
|
+
}, [send]);
|
|
187
|
+
const stateRef = useRef(state);
|
|
188
|
+
useEffect(() => {
|
|
189
|
+
stateRef.current = state;
|
|
190
|
+
}, [state]);
|
|
191
|
+
useEffect(() => {
|
|
192
|
+
return () => {
|
|
193
|
+
isMountedRef.current = false;
|
|
194
|
+
};
|
|
195
|
+
}, []);
|
|
34
196
|
const {
|
|
35
197
|
data: userChannels,
|
|
36
198
|
loading: userChannelsLoading,
|
|
@@ -43,21 +205,118 @@ const DialogsComponent = (props) => {
|
|
|
43
205
|
supportServiceCriteria: {
|
|
44
206
|
type: RoomType.Service
|
|
45
207
|
}
|
|
208
|
+
},
|
|
209
|
+
onCompleted: (data) => {
|
|
210
|
+
var _a2, _b;
|
|
211
|
+
if (isMountedRef.current) {
|
|
212
|
+
const allChannels = [...(_a2 = data == null ? void 0 : data.supportServiceChannels) != null ? _a2 : [], ...(_b = data == null ? void 0 : data.channelsByUser) != null ? _b : []];
|
|
213
|
+
safeSend({
|
|
214
|
+
type: "FETCH_CHANNELS_SUCCESS",
|
|
215
|
+
data: {
|
|
216
|
+
channels: allChannels
|
|
217
|
+
}
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
},
|
|
221
|
+
onError: (error) => {
|
|
222
|
+
if (isMountedRef.current) {
|
|
223
|
+
safeSend({
|
|
224
|
+
type: "ERROR",
|
|
225
|
+
data: {
|
|
226
|
+
message: error.message
|
|
227
|
+
}
|
|
228
|
+
});
|
|
229
|
+
}
|
|
46
230
|
}
|
|
47
231
|
});
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
232
|
+
useEffect(() => {
|
|
233
|
+
console.log("Setting initial context");
|
|
234
|
+
safeSend({
|
|
235
|
+
type: Actions.INITIAL_CONTEXT,
|
|
236
|
+
data: {
|
|
237
|
+
channelRole,
|
|
238
|
+
channelFilters: channelFiltersRef.current,
|
|
239
|
+
supportServices,
|
|
240
|
+
selectedChannelId: params == null ? void 0 : params.channelId
|
|
241
|
+
}
|
|
242
|
+
});
|
|
243
|
+
}, []);
|
|
244
|
+
const hasRefreshedRef = useRef(false);
|
|
245
|
+
const channelFiltersRef = useRef(channelFilters);
|
|
246
|
+
const refreshChannels = useCallback(() => {
|
|
247
|
+
if (safeContextProperty("refreshing", false)) {
|
|
248
|
+
console.log("Skipping refresh - already in progress");
|
|
249
|
+
return Promise.resolve();
|
|
250
|
+
}
|
|
251
|
+
console.log("Starting channel refresh");
|
|
252
|
+
safeSend({
|
|
253
|
+
type: Actions.REFRESH_CHANNELS
|
|
254
|
+
});
|
|
255
|
+
const currentFilters = channelFiltersRef.current;
|
|
256
|
+
return getChannelsRefetch({
|
|
51
257
|
role: channelRole,
|
|
52
|
-
criteria:
|
|
258
|
+
criteria: currentFilters,
|
|
53
259
|
supportServices: supportServices ? true : false,
|
|
54
260
|
supportServiceCriteria: {
|
|
55
261
|
type: RoomType.Service
|
|
56
262
|
}
|
|
263
|
+
}).then((data) => {
|
|
264
|
+
var _a2, _b, _c, _d;
|
|
265
|
+
if (isMountedRef.current) {
|
|
266
|
+
const allChannels = [...(_b = (_a2 = data == null ? void 0 : data.data) == null ? void 0 : _a2.supportServiceChannels) != null ? _b : [], ...(_d = (_c = data == null ? void 0 : data.data) == null ? void 0 : _c.channelsByUser) != null ? _d : []];
|
|
267
|
+
console.log(`Refresh completed, found ${allChannels.length} channels`);
|
|
268
|
+
safeSend({
|
|
269
|
+
type: "REFRESH_CHANNELS_SUCCESS",
|
|
270
|
+
data: {
|
|
271
|
+
channels: allChannels
|
|
272
|
+
}
|
|
273
|
+
});
|
|
274
|
+
}
|
|
275
|
+
}).catch((error) => {
|
|
276
|
+
if (isMountedRef.current) {
|
|
277
|
+
console.error("Channel refresh error:", error.message);
|
|
278
|
+
safeSend({
|
|
279
|
+
type: "ERROR",
|
|
280
|
+
data: {
|
|
281
|
+
message: error.message
|
|
282
|
+
}
|
|
283
|
+
});
|
|
284
|
+
}
|
|
57
285
|
});
|
|
286
|
+
}, [channelRole, supportServices, getChannelsRefetch, safeSend, safeContextProperty]);
|
|
287
|
+
useEffect(() => {
|
|
288
|
+
const filtersChanged = JSON.stringify(channelFiltersRef.current) !== JSON.stringify(channelFilters);
|
|
289
|
+
if (filtersChanged) {
|
|
290
|
+
console.log("Channel filters changed, updating ref");
|
|
291
|
+
channelFiltersRef.current = channelFilters;
|
|
292
|
+
if (isMountedRef.current && safeContextProperty("channelRole") !== null) {
|
|
293
|
+
console.log("Refreshing due to filter change");
|
|
294
|
+
refreshChannels();
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
}, [channelFilters, refreshChannels, safeContextProperty]);
|
|
298
|
+
useFocusEffect(useCallback(() => {
|
|
299
|
+
if (!isFocused)
|
|
300
|
+
return;
|
|
301
|
+
console.log("Screen focused, checking if refresh needed");
|
|
302
|
+
if (isMountedRef.current && !hasRefreshedRef.current) {
|
|
303
|
+
console.log("Refreshing on focus");
|
|
304
|
+
hasRefreshedRef.current = true;
|
|
305
|
+
refreshChannels();
|
|
306
|
+
}
|
|
58
307
|
return () => {
|
|
308
|
+
console.log("Screen unfocused, resetting refresh state");
|
|
309
|
+
hasRefreshedRef.current = false;
|
|
59
310
|
};
|
|
60
|
-
}, [
|
|
311
|
+
}, [isFocused, refreshChannels]));
|
|
312
|
+
const handleRefresh = useCallback(() => {
|
|
313
|
+
if (safeContextProperty("refreshing", false)) {
|
|
314
|
+
console.log("Manual refresh ignored - refresh already in progress");
|
|
315
|
+
return;
|
|
316
|
+
}
|
|
317
|
+
console.log("Manual refresh triggered");
|
|
318
|
+
refreshChannels();
|
|
319
|
+
}, [refreshChannels, safeContextProperty]);
|
|
61
320
|
const channels = React__default.useMemo(() => {
|
|
62
321
|
var _a2, _b, _c;
|
|
63
322
|
const allChannels = [...(_a2 = userChannels == null ? void 0 : userChannels.supportServiceChannels) != null ? _a2 : [], ...(_b = userChannels == null ? void 0 : userChannels.channelsByUser) != null ? _b : []];
|
|
@@ -66,9 +325,15 @@ const DialogsComponent = (props) => {
|
|
|
66
325
|
return u !== null && ((_a3 = u == null ? void 0 : u.user) == null ? void 0 : _a3.id) != (auth == null ? void 0 : auth.id) && u.user.__typename == "UserAccount";
|
|
67
326
|
}))) != null ? _c : [];
|
|
68
327
|
return uChannels && orderBy(uChannels, ["updatedAt"], ["desc"]) || [];
|
|
69
|
-
}, [userChannels]);
|
|
328
|
+
}, [userChannels, auth == null ? void 0 : auth.id]);
|
|
70
329
|
const handleSelectChannel = useCallback((id, title) => {
|
|
71
330
|
var _a2;
|
|
331
|
+
safeSend({
|
|
332
|
+
type: Actions.SELECT_CHANNEL,
|
|
333
|
+
data: {
|
|
334
|
+
channelId: id
|
|
335
|
+
}
|
|
336
|
+
});
|
|
72
337
|
if (params == null ? void 0 : params.channelId) {
|
|
73
338
|
navigation.navigate(config.INBOX_MESSEGE_PATH, {
|
|
74
339
|
channelId: params == null ? void 0 : params.channelId,
|
|
@@ -84,9 +349,15 @@ const DialogsComponent = (props) => {
|
|
|
84
349
|
hideTabBar: true
|
|
85
350
|
});
|
|
86
351
|
}
|
|
87
|
-
}, []);
|
|
352
|
+
}, [params, navigation, channelRole, safeSend]);
|
|
88
353
|
const handleSelectServiceChannel = useCallback((id, title, postParentId) => {
|
|
89
354
|
var _a2;
|
|
355
|
+
safeSend({
|
|
356
|
+
type: Actions.SELECT_CHANNEL,
|
|
357
|
+
data: {
|
|
358
|
+
channelId: id
|
|
359
|
+
}
|
|
360
|
+
});
|
|
90
361
|
if (params == null ? void 0 : params.channelId) {
|
|
91
362
|
navigation.navigate((params == null ? void 0 : params.postParentId) || (params == null ? void 0 : params.postParentId) == 0 ? config.THREAD_MESSEGE_PATH : config.THREADS_PATH, {
|
|
92
363
|
channelId: params == null ? void 0 : params.channelId,
|
|
@@ -104,19 +375,17 @@ const DialogsComponent = (props) => {
|
|
|
104
375
|
hideTabBar: true
|
|
105
376
|
});
|
|
106
377
|
}
|
|
107
|
-
}, []);
|
|
108
|
-
const
|
|
109
|
-
|
|
110
|
-
setRefresh(true);
|
|
111
|
-
(_a2 = getChannelsRefetch({
|
|
112
|
-
role: channelRole,
|
|
113
|
-
criteria: channelFilters
|
|
114
|
-
})) == null ? void 0 : _a2.finally(() => setRefresh(false));
|
|
115
|
-
}, []);
|
|
116
|
-
return /* @__PURE__ */ React__default.createElement(Box, { className: "p-2" }, /* @__PURE__ */ React__default.createElement(FlatList, { data: channels && (channels == null ? void 0 : channels.length) > 0 ? channels : [], onRefresh: handleRefresh, refreshing, contentContainerStyle: {
|
|
378
|
+
}, [params, navigation, channelRole, safeSend]);
|
|
379
|
+
const searchQuery = safeContextProperty("searchQuery", "");
|
|
380
|
+
return /* @__PURE__ */ React__default.createElement(Box, { className: "p-2" }, /* @__PURE__ */ React__default.createElement(FlatList, { data: channels && (channels == null ? void 0 : channels.length) > 0 ? channels : [], onRefresh: handleRefresh, refreshing: safeContextProperty("refreshing", false), contentContainerStyle: {
|
|
117
381
|
minHeight: "100%"
|
|
118
382
|
}, ItemSeparatorComponent: () => /* @__PURE__ */ React__default.createElement(Box, { className: "h-0.5 bg-gray-200" }), renderItem: ({
|
|
119
383
|
item: channel
|
|
120
|
-
}) => (channel == null ? void 0 : channel.type) === RoomType.Service ? /* @__PURE__ */ React__default.createElement(ServiceDialogsListItem, { onOpen: handleSelectServiceChannel, currentUser: auth, channel, refreshing, selectedChannelId: params == null ? void 0 : params.channelId, role: channelRole }) : /* @__PURE__ */ React__default.createElement(DialogsListItem, { onOpen: handleSelectChannel, currentUser: auth, channel, selectedChannelId: params == null ? void 0 : params.channelId }), ListEmptyComponent: () => /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, userChannelsLoading ? /* @__PURE__ */ React__default.createElement(Center, { className: "flex-1 justify-center items-center" }, /* @__PURE__ */ React__default.createElement(Spinner, { color: colors.blue[500] })) : /* @__PURE__ */ React__default.createElement(Box, { className: "p-5" }, /* @__PURE__ */ React__default.createElement(Heading, null, "Chat"), /* @__PURE__ */ React__default.createElement(Input, { className: `h-[50] mt-3 rounded-[50] border-gray-200 border ` }, /* @__PURE__ */ React__default.createElement(InputField, { placeholder: "Search"
|
|
384
|
+
}) => (channel == null ? void 0 : channel.type) === RoomType.Service ? /* @__PURE__ */ React__default.createElement(ServiceDialogsListItem, { onOpen: handleSelectServiceChannel, currentUser: auth, channel, refreshing: safeContextProperty("refreshing", false), selectedChannelId: safeContextProperty("selectedChannelId", params == null ? void 0 : params.channelId), role: channelRole }) : /* @__PURE__ */ React__default.createElement(DialogsListItem, { onOpen: handleSelectChannel, currentUser: auth, channel, selectedChannelId: safeContextProperty("selectedChannelId", params == null ? void 0 : params.channelId) }), ListEmptyComponent: () => /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, userChannelsLoading || safeContextProperty("loading", false) ? /* @__PURE__ */ React__default.createElement(Center, { className: "flex-1 justify-center items-center" }, /* @__PURE__ */ React__default.createElement(Spinner, { color: colors.blue[500] })) : /* @__PURE__ */ React__default.createElement(Box, { className: "p-5" }, /* @__PURE__ */ React__default.createElement(Heading, null, "Chat"), /* @__PURE__ */ React__default.createElement(Input, { className: `h-[50] mt-3 rounded-[50] border-gray-200 border ` }, /* @__PURE__ */ React__default.createElement(InputField, { placeholder: "Search", value: searchQuery, onChangeText: (text) => safeSend({
|
|
385
|
+
type: Actions.SET_SEARCH_QUERY,
|
|
386
|
+
data: {
|
|
387
|
+
searchQuery: text
|
|
388
|
+
}
|
|
389
|
+
}) })), /* @__PURE__ */ React__default.createElement(Center, { className: "mt-6" }, /* @__PURE__ */ React__default.createElement(Ionicons, { name: "chatbubbles", size: 50 }), /* @__PURE__ */ React__default.createElement(Text, null, "You don't have any messages yet!")))), keyExtractor: (item, index) => "key" + index }));
|
|
121
390
|
};
|
|
122
391
|
const Dialogs = React__default.memo(DialogsComponent);export{Dialogs};//# sourceMappingURL=Dialogs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Dialogs.js","sources":["../../../../src/screens/inbox/containers/Dialogs.tsx"],"sourcesContent":["import React, { useCallback, useMemo, useEffect, useState } from 'react';\nimport {\n FlatList,\n Box,\n Heading,\n Input,\n InputField,\n Text,\n Icon,\n Center,\n Spinner,\n} from '@admin-layout/gluestack-ui-mobile';\nimport { Ionicons } from '@expo/vector-icons';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { useNavigation, useRoute, useIsFocused, useFocusEffect } from '@react-navigation/native';\nimport { orderBy, uniqBy, startCase } from 'lodash-es';\nimport { DialogsListItem } from '../components/DialogsListItem';\nimport { ServiceDialogsListItem } from '../components/ServiceDialogsListItem';\nimport { useGetChannelsByUserQuery, useGetChannelsByUserWithServiceChannelsQuery } from 'common/graphql';\nimport { RoomType } from 'common';\nimport { userSelector } from '@adminide-stack/user-auth0-client';\nimport { CHANGE_SETTINGS_ACTION } from '@admin-layout/client';\nimport { config } from '../config';\nimport colors from 'tailwindcss/colors';\n\nexport interface InboxProps {\n channelFilters?: Record<string, unknown>;\n channelRole?: string;\n supportServices: boolean;\n}\n\nconst DialogsComponent = (props: InboxProps) => {\n const { channelFilters: channelFilterProp, channelRole, supportServices } = props;\n const channelFilters = { ...channelFilterProp };\n channelFilters.type = channelFilters?.type ?? RoomType.Direct;\n const { params } = useRoute<any>();\n const auth = useSelector(userSelector);\n const dispatch = useDispatch();\n const navigation = useNavigation<any>();\n const isFocused = useIsFocused();\n const [refreshing, setRefresh] = useState<boolean>(false);\n // const [userDirectChannel, setUserDirectChannel] = useState<any>([]);\n\n const {\n data: userChannels,\n loading: userChannelsLoading,\n refetch: getChannelsRefetch,\n } = useGetChannelsByUserWithServiceChannelsQuery({\n variables: {\n role: channelRole,\n criteria: channelFilters,\n supportServices: supportServices ? true : false,\n supportServiceCriteria: {\n type: RoomType.Service,\n },\n },\n });\n\n // const {\n // data: userChannels,\n // loading: userChannelsLoading,\n // refetch: getChannelsRefetch,\n // } = useGetChannelsByUserQuery({\n // variables: {\n // role: channelRole,\n // criteria: channelFilters,\n // },\n // onCompleted: (data: any) => {\n // setRefresh(false);\n // },\n // });\n\n useFocusEffect(\n React.useCallback(() => {\n // Do something when the screen is focused\n setRefresh(false);\n //getChannelsRefetch({ role: channelRole, criteria: channelFilters });\n getChannelsRefetch({\n role: channelRole,\n criteria: channelFilters,\n supportServices: supportServices ? true : false,\n supportServiceCriteria: {\n type: RoomType.Service,\n },\n });\n return () => {\n // Do something when the screen is unfocused\n // Useful for cleanup functions\n };\n }, [channelFilters]),\n );\n\n // const channels = React.useMemo(() => {\n // if (!userChannels?.channelsByUser?.length) return null;\n // let uChannels: any =\n // userChannels?.channelsByUser?.filter((c: any) =>\n // c.members.some((u: any) => u !== null && u?.user?.id != auth?.id && u.user.__typename == 'UserAccount'),\n // ) ?? [];\n // return (uChannels && orderBy(uChannels, ['updatedAt'], ['desc'])) || [];\n // }, [userChannels]);\n\n const channels = React.useMemo(() => {\n const allChannels = [...(userChannels?.supportServiceChannels ?? []), ...(userChannels?.channelsByUser ?? [])];\n let uChannels: any =\n allChannels?.filter((c: any) =>\n c.members.some((u: any) => u !== null && u?.user?.id != auth?.id && u.user.__typename == 'UserAccount'),\n ) ?? [];\n return (uChannels && orderBy(uChannels, ['updatedAt'], ['desc'])) || [];\n }, [userChannels]);\n\n // useEffect(() => {\n // setTimeout(() => {\n // dispatch({\n // type: CHANGE_SETTINGS_ACTION,\n // payload: {\n // footerRender: false,\n // },\n // } as any);\n // }, 0);\n // return () => {\n // dispatch({\n // type: CHANGE_SETTINGS_ACTION,\n // payload: {\n // footerRender: true,\n // },\n // } as any);\n // };\n // }, []);\n\n // useEffect(() => {\n // if (userChannels?.channelsByUser) {\n // if (userChannels?.channelsByUser?.length == 0) {\n // setUserDirectChannel([]);\n // }\n // //Direct channel\n // let userDirectChannels: any =\n // userChannels?.channelsByUser\n // ?.filter((i: any) => i.type == 'DIRECT')\n // ?.filter((c: any) =>\n // c.members.some((u: any) => u?.user?.id != auth?.id && u.user.__typename == 'UserAccount'),\n // ) ?? [];\n\n // if (userDirectChannels?.length > 0) setUserDirectChannel(userDirectChannels);\n // }\n // }, [userChannels?.channelsByUser]);\n\n const handleSelectChannel = useCallback((id: any, title: any) => {\n if (params?.channelId) {\n navigation.navigate(config.INBOX_MESSEGE_PATH as any, {\n channelId: params?.channelId,\n role: params?.role,\n title: params?.title ?? null,\n hideTabBar: true,\n });\n } else {\n navigation.navigate(config.INBOX_MESSEGE_PATH as any, {\n channelId: id,\n role: channelRole,\n title: title,\n hideTabBar: true,\n });\n }\n }, []);\n\n const handleSelectServiceChannel = useCallback((id: any, title: any, postParentId: any) => {\n if (params?.channelId) {\n navigation.navigate(\n params?.postParentId || params?.postParentId == 0\n ? config.THREAD_MESSEGE_PATH\n : (config.THREADS_PATH as any),\n {\n channelId: params?.channelId,\n role: params?.role,\n title: params?.title ?? null,\n postParentId: params?.postParentId,\n hideTabBar: true,\n },\n );\n } else {\n navigation.navigate(\n postParentId || postParentId == 0 ? config.THREAD_MESSEGE_PATH : (config.THREADS_PATH as any),\n {\n channelId: id,\n role: channelRole,\n title: title,\n postParentId: postParentId,\n hideTabBar: true,\n },\n );\n }\n }, []);\n\n const handleRefresh = useCallback(() => {\n //if(userChannels?.channelsByUser?.length != channels?.length)setRefresh(true);\n setRefresh(true);\n getChannelsRefetch({ role: channelRole, criteria: channelFilters })?.finally(() => setRefresh(false));\n }, []);\n\n return (\n <Box className=\"p-2\">\n <FlatList\n data={channels && channels?.length > 0 ? channels : []}\n onRefresh={handleRefresh}\n refreshing={refreshing}\n contentContainerStyle={{ minHeight: '100%' }}\n ItemSeparatorComponent={() => <Box className=\"h-0.5 bg-gray-200\" />}\n renderItem={({ item: channel }: any) =>\n channel?.type === RoomType.Service ? (\n <ServiceDialogsListItem\n onOpen={handleSelectServiceChannel}\n currentUser={auth}\n channel={channel}\n refreshing={refreshing}\n selectedChannelId={params?.channelId}\n role={channelRole}\n />\n ) : (\n <DialogsListItem\n onOpen={handleSelectChannel}\n currentUser={auth}\n channel={channel}\n selectedChannelId={params?.channelId}\n />\n )\n }\n ListEmptyComponent={() => (\n <>\n {userChannelsLoading ? (\n <Center className=\"flex-1 justify-center items-center\">\n <Spinner color={colors.blue[500]} />\n </Center>\n ) : (\n <Box className=\"p-5\">\n <Heading>Chat</Heading>\n <Input className={`h-[50] mt-3 rounded-[50] border-gray-200 border `}>\n <InputField placeholder=\"Search\" />\n </Input>\n <Center className=\"mt-6\">\n <Ionicons name=\"chatbubbles\" size={50} />\n <Text>You don't have any messages yet!</Text>\n </Center>\n </Box>\n )}\n </>\n )}\n keyExtractor={(item, index) => 'key' + index}\n />\n </Box>\n );\n};\n\nexport const Dialogs = React.memo(DialogsComponent);\n"],"names":["React","_a"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Dialogs.js","sources":["../../../../src/screens/inbox/containers/Dialogs.tsx"],"sourcesContent":["import React, { useCallback, useMemo, useEffect, useState, useRef } from 'react';\nimport {\n FlatList,\n Box,\n Heading,\n Input,\n InputField,\n Text,\n Icon,\n Center,\n Spinner,\n} from '@admin-layout/gluestack-ui-mobile';\nimport { Ionicons } from '@expo/vector-icons';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { useNavigation, useRoute, useIsFocused, useFocusEffect } from '@react-navigation/native';\nimport { orderBy, uniqBy, startCase } from 'lodash-es';\nimport { DialogsListItem } from '../components/DialogsListItem';\nimport { ServiceDialogsListItem } from '../components/ServiceDialogsListItem';\nimport { useGetChannelsByUserQuery, useGetChannelsByUserWithServiceChannelsQuery } from 'common/graphql';\nimport { RoomType } from 'common';\nimport { userSelector } from '@adminide-stack/user-auth0-client';\nimport { CHANGE_SETTINGS_ACTION } from '@admin-layout/client';\nimport { config } from '../config';\nimport colors from 'tailwindcss/colors';\nimport { dialogsXstate, Actions as DialogsActions, BaseState, MainState } from './workflow/dialogs-xstate';\n\nexport interface InboxProps {\n channelFilters?: Record<string, unknown>;\n channelRole?: string;\n supportServices: boolean;\n}\n\n// Define state type for the state machine\ninterface SafeStateType {\n context: {\n channels: any[];\n refreshing: boolean;\n loading: boolean;\n error: string | null;\n searchQuery: string;\n selectedChannelId: string | null;\n channelRole: string | null;\n channelFilters: Record<string, any>;\n supportServices: boolean;\n };\n value: string;\n matches?: (stateValue: string) => boolean;\n}\n\n// Interface for the return type to ensure proper typing\ntype UseSafeMachineReturnType = [SafeStateType & { matches: (stateValue: string) => boolean }, (event: any) => void];\n\n// Create a safer version of useMachine to handle potential errors\nfunction useSafeMachine(machine): UseSafeMachineReturnType {\n // Initialize with default state\n const [state, setState] = useState<SafeStateType>({\n context: {\n channels: [],\n refreshing: false,\n loading: false,\n error: null,\n searchQuery: '',\n selectedChannelId: null,\n channelRole: null,\n channelFilters: {},\n supportServices: false,\n },\n value: 'idle',\n });\n\n // Create a safe send function\n const send = useCallback((event) => {\n try {\n // Log event for debugging\n console.log('Dialogs Event received:', event.type);\n\n // Handle specific events manually\n if (event.type === DialogsActions.INITIAL_CONTEXT) {\n setState((prev) => ({\n ...prev,\n context: {\n ...prev.context,\n channelRole: event.data?.channelRole || null,\n channelFilters: event.data?.channelFilters || {},\n supportServices: event.data?.supportServices || false,\n selectedChannelId: event.data?.selectedChannelId || null,\n },\n value: BaseState.FetchChannels,\n }));\n } else if (event.type === DialogsActions.SET_SEARCH_QUERY) {\n setState((prev) => ({\n ...prev,\n context: {\n ...prev.context,\n searchQuery: event.data?.searchQuery || '',\n },\n }));\n } else if (event.type === DialogsActions.REFRESH_CHANNELS) {\n setState((prev) => ({\n ...prev,\n context: {\n ...prev.context,\n refreshing: true,\n },\n value: MainState.RefreshChannels,\n }));\n } else if (event.type === DialogsActions.SELECT_CHANNEL) {\n setState((prev) => ({\n ...prev,\n context: {\n ...prev.context,\n selectedChannelId: event.data?.channelId || null,\n },\n value: MainState.SelectChannel,\n }));\n } else if (event.type === DialogsActions.START_LOADING) {\n setState((prev) => ({\n ...prev,\n context: {\n ...prev.context,\n loading: true,\n },\n }));\n } else if (event.type === DialogsActions.STOP_LOADING) {\n setState((prev) => ({\n ...prev,\n context: {\n ...prev.context,\n loading: false,\n },\n }));\n } else if (event.type === 'FETCH_CHANNELS_SUCCESS') {\n setState((prev) => ({\n ...prev,\n context: {\n ...prev.context,\n channels: event.data?.channels || [],\n loading: false,\n refreshing: false,\n },\n value: BaseState.Idle,\n }));\n } else if (event.type === 'REFRESH_CHANNELS_SUCCESS') {\n setState((prev) => ({\n ...prev,\n context: {\n ...prev.context,\n channels: event.data?.channels || [],\n refreshing: false,\n },\n value: BaseState.Idle,\n }));\n } else if (event.type === 'ERROR') {\n setState((prev) => ({\n ...prev,\n context: {\n ...prev.context,\n error: event.data?.message || 'An error occurred',\n loading: false,\n refreshing: false,\n },\n value: BaseState.Error,\n }));\n }\n } catch (err) {\n console.error('Error in send function:', err);\n }\n }, []);\n\n // Add a matches method for state compatibility\n const stateWithMatches = useMemo(() => {\n return {\n ...state,\n matches: (value: string) => state.value === value,\n };\n }, [state]);\n\n // Return as a tuple to match useMachine API\n return [stateWithMatches, send];\n}\n\nconst DialogsComponent = (props: InboxProps) => {\n const { channelFilters: channelFilterProp, channelRole, supportServices } = props;\n const channelFilters = { ...channelFilterProp };\n channelFilters.type = channelFilters?.type ?? RoomType.Direct;\n const { params } = useRoute<any>();\n const auth = useSelector(userSelector);\n const dispatch = useDispatch();\n const navigation = useNavigation<any>();\n const isFocused = useIsFocused();\n const isMountedRef = useRef(true);\n\n // Use our safer custom implementation instead of the problematic useMachine\n const [state, send] = useSafeMachine(dialogsXstate);\n\n // Define safe functions first to avoid \"used before declaration\" errors\n const safeContext = useCallback(() => {\n try {\n return state?.context || {};\n } catch (error) {\n console.error('Error accessing state.context:', error);\n return {};\n }\n }, [state]);\n\n const safeContextProperty = useCallback(\n (property, defaultValue = null) => {\n try {\n return state?.context?.[property] ?? defaultValue;\n } catch (error) {\n console.error(`Error accessing state.context.${property}:`, error);\n return defaultValue;\n }\n },\n [state],\n );\n\n const safeMatches = useCallback(\n (stateValue) => {\n try {\n return state?.matches?.(stateValue) || false;\n } catch (error) {\n console.error(`Error calling state.matches with ${stateValue}:`, error);\n return false;\n }\n },\n [state],\n );\n\n const safeSend = useCallback(\n (event) => {\n try {\n send(event);\n } catch (error) {\n console.error('Error sending event to state machine:', error, event);\n }\n },\n [send],\n );\n\n // Use a ref to track the current machine snapshot for safer access\n const stateRef = useRef(state);\n\n // Keep the ref updated with the latest snapshot\n useEffect(() => {\n stateRef.current = state;\n }, [state]);\n\n // Use cleanup function to prevent setting state after unmount\n useEffect(() => {\n return () => {\n isMountedRef.current = false;\n };\n }, []);\n\n const {\n data: userChannels,\n loading: userChannelsLoading,\n refetch: getChannelsRefetch,\n } = useGetChannelsByUserWithServiceChannelsQuery({\n variables: {\n role: channelRole,\n criteria: channelFilters,\n supportServices: supportServices ? true : false,\n supportServiceCriteria: {\n type: RoomType.Service,\n },\n },\n onCompleted: (data) => {\n if (isMountedRef.current) {\n const allChannels = [...(data?.supportServiceChannels ?? []), ...(data?.channelsByUser ?? [])];\n safeSend({\n type: 'FETCH_CHANNELS_SUCCESS',\n data: { channels: allChannels },\n });\n }\n },\n onError: (error) => {\n if (isMountedRef.current) {\n safeSend({\n type: 'ERROR',\n data: { message: error.message },\n });\n }\n },\n });\n\n // Set initial context once on mount, but don't fetch data as useFocusEffect will handle it\n useEffect(() => {\n console.log('Setting initial context');\n // Only set the initial context with configuration, but don't trigger data fetching\n // This prevents double fetching with useFocusEffect\n safeSend({\n type: DialogsActions.INITIAL_CONTEXT,\n data: {\n channelRole,\n channelFilters: channelFiltersRef.current,\n supportServices,\n selectedChannelId: params?.channelId,\n },\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []); // Empty dependency array ensures this runs only once on mount\n\n // Ref to track if we've already refreshed to prevent infinite loop\n const hasRefreshedRef = useRef(false);\n // Ref to store the current channelFilters to detect real changes\n const channelFiltersRef = useRef(channelFilters);\n\n // Shared function to handle channel refreshing\n const refreshChannels = useCallback(() => {\n // Skip if already refreshing to prevent loops\n if (safeContextProperty('refreshing', false)) {\n console.log('Skipping refresh - already in progress');\n return Promise.resolve();\n }\n\n console.log('Starting channel refresh');\n\n // Start refreshing\n safeSend({\n type: DialogsActions.REFRESH_CHANNELS,\n });\n\n // Use ref for filters to avoid dependency cycles\n const currentFilters = channelFiltersRef.current;\n\n // Fetch the channels\n return getChannelsRefetch({\n role: channelRole,\n criteria: currentFilters,\n supportServices: supportServices ? true : false,\n supportServiceCriteria: {\n type: RoomType.Service,\n },\n })\n .then((data) => {\n if (isMountedRef.current) {\n const allChannels = [\n ...(data?.data?.supportServiceChannels ?? []),\n ...(data?.data?.channelsByUser ?? []),\n ];\n console.log(`Refresh completed, found ${allChannels.length} channels`);\n safeSend({\n type: 'REFRESH_CHANNELS_SUCCESS',\n data: { channels: allChannels },\n });\n }\n })\n .catch((error) => {\n if (isMountedRef.current) {\n console.error('Channel refresh error:', error.message);\n safeSend({\n type: 'ERROR',\n data: { message: error.message },\n });\n }\n });\n }, [channelRole, supportServices, getChannelsRefetch, safeSend, safeContextProperty]);\n\n // Update the channelFiltersRef when channelFilters changes\n useEffect(() => {\n const filtersChanged = JSON.stringify(channelFiltersRef.current) !== JSON.stringify(channelFilters);\n if (filtersChanged) {\n console.log('Channel filters changed, updating ref');\n channelFiltersRef.current = channelFilters;\n\n // Only refresh if already mounted and initialized\n if (isMountedRef.current && safeContextProperty('channelRole') !== null) {\n console.log('Refreshing due to filter change');\n refreshChannels();\n }\n }\n }, [channelFilters, refreshChannels, safeContextProperty]);\n\n // Handle focus effects\n useFocusEffect(\n useCallback(() => {\n if (!isFocused) return;\n\n console.log('Screen focused, checking if refresh needed');\n\n // Only refresh on focus if we're not already loading and haven't refreshed\n if (isMountedRef.current && !hasRefreshedRef.current) {\n console.log('Refreshing on focus');\n hasRefreshedRef.current = true;\n refreshChannels();\n }\n\n return () => {\n // Reset the ref when the screen loses focus\n console.log('Screen unfocused, resetting refresh state');\n hasRefreshedRef.current = false;\n };\n }, [isFocused, refreshChannels]),\n );\n\n const handleRefresh = useCallback(() => {\n // Don't allow manual refresh while already refreshing\n if (safeContextProperty('refreshing', false)) {\n console.log('Manual refresh ignored - refresh already in progress');\n return;\n }\n\n console.log('Manual refresh triggered');\n refreshChannels();\n }, [refreshChannels, safeContextProperty]);\n\n const channels = React.useMemo(() => {\n const allChannels = [...(userChannels?.supportServiceChannels ?? []), ...(userChannels?.channelsByUser ?? [])];\n let uChannels: any =\n allChannels?.filter((c: any) =>\n c.members.some((u: any) => u !== null && u?.user?.id != auth?.id && u.user.__typename == 'UserAccount'),\n ) ?? [];\n return (uChannels && orderBy(uChannels, ['updatedAt'], ['desc'])) || [];\n }, [userChannels, auth?.id]);\n\n const handleSelectChannel = useCallback(\n (id: any, title: any) => {\n safeSend({\n type: DialogsActions.SELECT_CHANNEL,\n data: { channelId: id },\n });\n\n if (params?.channelId) {\n navigation.navigate(config.INBOX_MESSEGE_PATH as any, {\n channelId: params?.channelId,\n role: params?.role,\n title: params?.title ?? null,\n hideTabBar: true,\n });\n } else {\n navigation.navigate(config.INBOX_MESSEGE_PATH as any, {\n channelId: id,\n role: channelRole,\n title: title,\n hideTabBar: true,\n });\n }\n },\n [params, navigation, channelRole, safeSend],\n );\n\n const handleSelectServiceChannel = useCallback(\n (id: any, title: any, postParentId: any) => {\n safeSend({\n type: DialogsActions.SELECT_CHANNEL,\n data: { channelId: id },\n });\n\n if (params?.channelId) {\n navigation.navigate(\n params?.postParentId || params?.postParentId == 0\n ? config.THREAD_MESSEGE_PATH\n : (config.THREADS_PATH as any),\n {\n channelId: params?.channelId,\n role: params?.role,\n title: params?.title ?? null,\n postParentId: params?.postParentId,\n hideTabBar: true,\n },\n );\n } else {\n navigation.navigate(\n postParentId || postParentId == 0 ? config.THREAD_MESSEGE_PATH : (config.THREADS_PATH as any),\n {\n channelId: id,\n role: channelRole,\n title: title,\n postParentId: postParentId,\n hideTabBar: true,\n },\n );\n }\n },\n [params, navigation, channelRole, safeSend],\n );\n\n const searchQuery = safeContextProperty('searchQuery', '');\n\n return (\n <Box className=\"p-2\">\n <FlatList\n data={channels && channels?.length > 0 ? channels : []}\n onRefresh={handleRefresh}\n refreshing={safeContextProperty('refreshing', false)}\n contentContainerStyle={{ minHeight: '100%' }}\n ItemSeparatorComponent={() => <Box className=\"h-0.5 bg-gray-200\" />}\n renderItem={({ item: channel }: any) =>\n channel?.type === RoomType.Service ? (\n <ServiceDialogsListItem\n onOpen={handleSelectServiceChannel}\n currentUser={auth}\n channel={channel}\n refreshing={safeContextProperty('refreshing', false)}\n selectedChannelId={safeContextProperty('selectedChannelId', params?.channelId)}\n role={channelRole}\n />\n ) : (\n <DialogsListItem\n onOpen={handleSelectChannel}\n currentUser={auth}\n channel={channel}\n selectedChannelId={safeContextProperty('selectedChannelId', params?.channelId)}\n />\n )\n }\n ListEmptyComponent={() => (\n <>\n {userChannelsLoading || safeContextProperty('loading', false) ? (\n <Center className=\"flex-1 justify-center items-center\">\n <Spinner color={colors.blue[500]} />\n </Center>\n ) : (\n <Box className=\"p-5\">\n <Heading>Chat</Heading>\n <Input className={`h-[50] mt-3 rounded-[50] border-gray-200 border `}>\n <InputField\n placeholder=\"Search\"\n value={searchQuery}\n onChangeText={(text) =>\n safeSend({\n type: DialogsActions.SET_SEARCH_QUERY,\n data: { searchQuery: text },\n })\n }\n />\n </Input>\n <Center className=\"mt-6\">\n <Ionicons name=\"chatbubbles\" size={50} />\n <Text>You don't have any messages yet!</Text>\n </Center>\n </Box>\n )}\n </>\n )}\n keyExtractor={(item, index) => 'key' + index}\n />\n </Box>\n );\n};\n\nexport const Dialogs = React.memo(DialogsComponent);\n"],"names":["DialogsActions","_a","React"],"mappings":"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"}
|