@messenger-box/slack-ui-mobile 10.0.3-alpha.36 → 10.0.3-alpha.37
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/screens/Home/Components/Channels/Channels.js +91 -103
- package/lib/screens/Home/Components/Channels/Channels.js.map +1 -1
- package/lib/screens/Home/Components/DirectChannels/DirectChannels.js +163 -231
- package/lib/screens/Home/Components/DirectChannels/DirectChannels.js.map +1 -1
- package/lib/screens/Home/Components/Teams/Teams.js +76 -91
- package/lib/screens/Home/Components/Teams/Teams.js.map +1 -1
- package/lib/screens/Home/HomeScreen.js +3 -5
- package/lib/screens/Home/HomeScreen.js.map +1 -1
- package/package.json +3 -3
- package/lib/screens/Home/Components/Channels/channels-xstate.js +0 -247
- package/lib/screens/Home/Components/Channels/channels-xstate.js.map +0 -1
- package/lib/screens/Home/Components/Channels/useSafeChannelsMachine.js +0 -128
- package/lib/screens/Home/Components/Channels/useSafeChannelsMachine.js.map +0 -1
- package/lib/screens/Home/Components/DirectChannels/directChannels-xstate.js +0 -202
- package/lib/screens/Home/Components/DirectChannels/directChannels-xstate.js.map +0 -1
- package/lib/screens/Home/Components/DirectChannels/useSafeDirectChannelsMachine.js +0 -108
- package/lib/screens/Home/Components/DirectChannels/useSafeDirectChannelsMachine.js.map +0 -1
- package/lib/screens/Home/Components/Teams/hooks/useSafeMachine.js +0 -96
- package/lib/screens/Home/Components/Teams/hooks/useSafeMachine.js.map +0 -1
- package/lib/screens/Home/Components/Teams/workflow/teams-xstate.js +0 -198
- package/lib/screens/Home/Components/Teams/workflow/teams-xstate.js.map +0 -1
|
@@ -1,4 +1,23 @@
|
|
|
1
|
-
import {useNavigation,useIsFocused,useFocusEffect}from'@react-navigation/native';import React__default,{useState,useContext,useEffect,useCallback,useMemo}from'react';import {TouchableOpacity}from'react-native';import'../../../../constants/device.js';import'../../../../constants/globalStyles.js';import'../../../../constants/Layout.js';import {NavigationRoutes}from'../../../../constants/routes.js';import {HStack,Text,Box,
|
|
1
|
+
import {useNavigation,useIsFocused,useFocusEffect}from'@react-navigation/native';import React__default,{useState,useContext,useEffect,useCallback,useMemo}from'react';import {TouchableOpacity}from'react-native';import'../../../../constants/device.js';import'../../../../constants/globalStyles.js';import'../../../../constants/Layout.js';import {NavigationRoutes}from'../../../../constants/routes.js';import {HStack,Text,Box,VStack,FlatList}from'@admin-layout/gluestack-ui-mobile';import {userSelector}from'@adminide-stack/user-auth0-client';import {useSelector,shallowEqual}from'react-redux';import {take,orderBy,uniqBy}from'lodash-es';import {RoomType}from'common';import {useGetChannelsByUserQuery}from'common/graphql';import {Feather,MaterialIcons,FontAwesome}from'@expo/vector-icons';import'expo-font';import'expo-splash-screen';import {useDrawerLayout}from'../../../../hooks/useDrawerLayout.js';import'../../../../hooks/useExpoNotificationProvider.js';import colors from'tailwindcss/colors';import {RefetchContext}from'../../HomeScreen.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 defaultChannelType = [RoomType.Channel, RoomType.Private, RoomType.Public];
|
|
2
21
|
const Channels = () => {
|
|
3
22
|
const navigation = useNavigation();
|
|
4
23
|
const [expandable, setExpendable] = useState(true);
|
|
@@ -10,17 +29,14 @@ const Channels = () => {
|
|
|
10
29
|
const {
|
|
11
30
|
shouldRefetch
|
|
12
31
|
} = useContext(RefetchContext);
|
|
13
|
-
const [state,
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
error
|
|
20
|
-
} = state.context;
|
|
32
|
+
const [state, setState] = useState({
|
|
33
|
+
channels: [],
|
|
34
|
+
error: null,
|
|
35
|
+
channelsSkip: 0,
|
|
36
|
+
showMoreChannels: true
|
|
37
|
+
});
|
|
21
38
|
const {
|
|
22
39
|
data: userChannels,
|
|
23
|
-
loading: userChannelsLoading,
|
|
24
40
|
refetch: reFetchUserChannels,
|
|
25
41
|
fetchMore: fetchMoreUserChannels
|
|
26
42
|
} = useGetChannelsByUserQuery({
|
|
@@ -35,49 +51,30 @@ const Channels = () => {
|
|
|
35
51
|
fetchPolicy: "cache-and-network",
|
|
36
52
|
nextFetchPolicy: "cache-first",
|
|
37
53
|
onCompleted(data) {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
channels: (data == null ? void 0 : data.channelsByUser) || []
|
|
42
|
-
}
|
|
43
|
-
});
|
|
54
|
+
setState((prev) => __spreadProps(__spreadValues({}, prev), {
|
|
55
|
+
channels: (data == null ? void 0 : data.channelsByUser) || []
|
|
56
|
+
}));
|
|
44
57
|
},
|
|
45
|
-
onError(
|
|
46
|
-
const isChannelServiceError =
|
|
47
|
-
const errorMessage = isChannelServiceError ? "Channel service is temporarily unavailable. Please try again later." :
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
message: errorMessage
|
|
52
|
-
}
|
|
53
|
-
});
|
|
58
|
+
onError(error) {
|
|
59
|
+
const isChannelServiceError = error.message.includes("Service 'ChannelService.getAll' is not found");
|
|
60
|
+
const errorMessage = isChannelServiceError ? "Channel service is temporarily unavailable. Please try again later." : error.message;
|
|
61
|
+
setState((prev) => __spreadProps(__spreadValues({}, prev), {
|
|
62
|
+
error: errorMessage
|
|
63
|
+
}));
|
|
54
64
|
},
|
|
55
65
|
skip: !orgName
|
|
56
66
|
});
|
|
57
67
|
useEffect(() => {
|
|
58
|
-
if (orgName) {
|
|
59
|
-
send({
|
|
60
|
-
type: "INITIAL_CONTEXT",
|
|
61
|
-
data: {
|
|
62
|
-
orgName
|
|
63
|
-
}
|
|
64
|
-
});
|
|
65
|
-
}
|
|
66
68
|
return () => {
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
69
|
+
setState((prev) => __spreadProps(__spreadValues({}, prev), {
|
|
70
|
+
channels: [],
|
|
71
|
+
channelsSkip: 0,
|
|
72
|
+
showMoreChannels: true
|
|
73
|
+
}));
|
|
70
74
|
};
|
|
71
|
-
}, [orgName
|
|
75
|
+
}, [orgName]);
|
|
72
76
|
const reFetchChannels = useCallback(() => {
|
|
73
|
-
if (state.context.channelsLoading) {
|
|
74
|
-
console.log("Skipping channels refetch - already in progress");
|
|
75
|
-
return;
|
|
76
|
-
}
|
|
77
77
|
if (orgName) {
|
|
78
|
-
send({
|
|
79
|
-
type: "REFETCH_CHANNELS"
|
|
80
|
-
});
|
|
81
78
|
reFetchUserChannels({
|
|
82
79
|
criteria: {
|
|
83
80
|
orgName,
|
|
@@ -88,40 +85,34 @@ const Channels = () => {
|
|
|
88
85
|
}).then((res) => {
|
|
89
86
|
var _a;
|
|
90
87
|
if ((_a = res == null ? void 0 : res.data) == null ? void 0 : _a.channelsByUser) {
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
channels: res.data.channelsByUser
|
|
95
|
-
}
|
|
96
|
-
});
|
|
88
|
+
setState((prev) => __spreadProps(__spreadValues({}, prev), {
|
|
89
|
+
channels: res.data.channelsByUser
|
|
90
|
+
}));
|
|
97
91
|
}
|
|
98
|
-
}).catch((
|
|
99
|
-
const isChannelServiceError =
|
|
100
|
-
const errorMessage = isChannelServiceError ? "Channels are temporarily unavailable. Please try again later." :
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
message: errorMessage
|
|
105
|
-
}
|
|
106
|
-
});
|
|
92
|
+
}).catch((error) => {
|
|
93
|
+
const isChannelServiceError = error.message && error.message.includes("Service 'ChannelService.getAll' is not found");
|
|
94
|
+
const errorMessage = isChannelServiceError ? "Channels are temporarily unavailable. Please try again later." : error.message || "Failed to fetch channels";
|
|
95
|
+
setState((prev) => __spreadProps(__spreadValues({}, prev), {
|
|
96
|
+
error: errorMessage
|
|
97
|
+
}));
|
|
107
98
|
});
|
|
108
99
|
}
|
|
109
|
-
}, [orgName,
|
|
100
|
+
}, [orgName, reFetchUserChannels]);
|
|
110
101
|
useEffect(() => {
|
|
111
102
|
if (shouldRefetch && orgName) {
|
|
112
103
|
reFetchChannels();
|
|
113
104
|
}
|
|
114
105
|
}, [shouldRefetch, orgName, reFetchChannels]);
|
|
115
106
|
useFocusEffect(useCallback(() => {
|
|
116
|
-
if (orgName
|
|
107
|
+
if (orgName) {
|
|
117
108
|
reFetchChannels();
|
|
118
109
|
}
|
|
119
|
-
}, [orgName
|
|
110
|
+
}, [orgName]));
|
|
120
111
|
useCallback((skip) => {
|
|
121
112
|
var _a;
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
});
|
|
113
|
+
setState((prev) => __spreadProps(__spreadValues({}, prev), {
|
|
114
|
+
channelsSkip: prev.channels.length
|
|
115
|
+
}));
|
|
125
116
|
(_a = fetchMoreUserChannels({
|
|
126
117
|
variables: {
|
|
127
118
|
criteria: {
|
|
@@ -133,23 +124,23 @@ const Channels = () => {
|
|
|
133
124
|
}
|
|
134
125
|
})) == null ? void 0 : _a.then((res) => {
|
|
135
126
|
var _a2;
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
});
|
|
127
|
+
const newChannels = ((_a2 = res == null ? void 0 : res.data) == null ? void 0 : _a2.channelsByUser) || [];
|
|
128
|
+
const showMore = newChannels.length > 0;
|
|
129
|
+
setState((prev) => __spreadProps(__spreadValues({}, prev), {
|
|
130
|
+
channels: [...prev.channels, ...newChannels],
|
|
131
|
+
showMoreChannels: showMore
|
|
132
|
+
}));
|
|
142
133
|
});
|
|
143
|
-
}, [orgName,
|
|
134
|
+
}, [orgName, fetchMoreUserChannels]);
|
|
144
135
|
const organizationChannels = useMemo(() => {
|
|
145
|
-
var _a;
|
|
146
|
-
return channels && (channels == null ? void 0 :
|
|
136
|
+
var _a, _b;
|
|
137
|
+
return state.channels && ((_a = state.channels) == null ? void 0 : _a.length) && take(orderBy(uniqBy((_b = [...state.channels]) == null ? void 0 : _b.filter((i) => i.type !== RoomType.Direct), ({
|
|
147
138
|
id
|
|
148
139
|
}) => id), [(ch) => {
|
|
149
140
|
var _a2;
|
|
150
141
|
return (_a2 = ch == null ? void 0 : ch.title) == null ? void 0 : _a2.toLowerCase();
|
|
151
142
|
}], ["asc"]), 10) || [];
|
|
152
|
-
}, [channels]);
|
|
143
|
+
}, [state.channels]);
|
|
153
144
|
const openInbox = useCallback((id, title, totalMembers, type) => {
|
|
154
145
|
navigation.navigate(NavigationRoutes.DialogMessages, {
|
|
155
146
|
channelId: id == null ? void 0 : id.toString(),
|
|
@@ -168,24 +159,18 @@ const Channels = () => {
|
|
|
168
159
|
}, style: {
|
|
169
160
|
paddingVertical: 2,
|
|
170
161
|
paddingHorizontal: 12
|
|
171
|
-
} }, /* @__PURE__ */ React__default.createElement(HStack, { space: "md", className: "items-center" }, /* @__PURE__ */ React__default.createElement(
|
|
162
|
+
} }, /* @__PURE__ */ React__default.createElement(HStack, { space: "md", className: "items-center" }, /* @__PURE__ */ React__default.createElement(Text, { className: "text-gray-600 flex-none" }, "#"), /* @__PURE__ */ React__default.createElement(Text, { className: "text-gray-900 flex-1 text-base" }, item.title))), [openInbox]);
|
|
172
163
|
const ListEmptyComponent = useCallback(() => {
|
|
173
164
|
return /* @__PURE__ */ React__default.createElement(Box, { style: {
|
|
174
165
|
padding: 12
|
|
175
|
-
} },
|
|
176
|
-
alignItems: "center",
|
|
177
|
-
paddingVertical: 16
|
|
178
|
-
} }, /* @__PURE__ */ React__default.createElement(Spinner, { color: "#4A154B", size: "small" }), /* @__PURE__ */ React__default.createElement(Text, { style: {
|
|
179
|
-
marginTop: 8,
|
|
180
|
-
color: "#616061"
|
|
181
|
-
} }, "Loading channels...")) : error ? /* @__PURE__ */ React__default.createElement(Box, { style: {
|
|
166
|
+
} }, state.error ? /* @__PURE__ */ React__default.createElement(Box, { style: {
|
|
182
167
|
padding: 8,
|
|
183
168
|
backgroundColor: "#FFF4F4",
|
|
184
169
|
borderRadius: 4
|
|
185
170
|
} }, /* @__PURE__ */ React__default.createElement(Text, { color: "#E01E5A", style: {
|
|
186
171
|
marginBottom: 8,
|
|
187
172
|
fontWeight: "500"
|
|
188
|
-
} }, error), /* @__PURE__ */ React__default.createElement(TouchableOpacity, { onPress: reFetchChannels }, /* @__PURE__ */ React__default.createElement(HStack, { space: "sm", style: {
|
|
173
|
+
} }, state.error), /* @__PURE__ */ React__default.createElement(TouchableOpacity, { onPress: reFetchChannels }, /* @__PURE__ */ React__default.createElement(HStack, { space: "sm", style: {
|
|
189
174
|
alignItems: "center"
|
|
190
175
|
} }, /* @__PURE__ */ React__default.createElement(Feather, { name: "refresh-cw", color: "#1264A3", size: 16 }), /* @__PURE__ */ React__default.createElement(Text, { color: "#1264A3", style: {
|
|
191
176
|
fontWeight: "500"
|
|
@@ -201,9 +186,10 @@ const Channels = () => {
|
|
|
201
186
|
color: "#616061",
|
|
202
187
|
textAlign: "center"
|
|
203
188
|
} }, "No channels available")));
|
|
204
|
-
}, [
|
|
189
|
+
}, [state.error, reFetchChannels]);
|
|
205
190
|
const ListFooterComponent = useCallback(() => {
|
|
206
|
-
|
|
191
|
+
var _a;
|
|
192
|
+
return /* @__PURE__ */ React__default.createElement(VStack, null, state.showMoreChannels && ((_a = state.channels) == null ? void 0 : _a.length) > 10 && /* @__PURE__ */ React__default.createElement(TouchableOpacity, { onPress: () => navigation.navigate(NavigationRoutes.Channels, {
|
|
207
193
|
orgName
|
|
208
194
|
}), style: {
|
|
209
195
|
paddingVertical: 8,
|
|
@@ -211,27 +197,29 @@ const Channels = () => {
|
|
|
211
197
|
} }, /* @__PURE__ */ React__default.createElement(HStack, { space: "md", className: "items-center" }, /* @__PURE__ */ React__default.createElement(MaterialIcons, { color: "#616061", name: "search", size: 18 }), /* @__PURE__ */ React__default.createElement(Text, { style: {
|
|
212
198
|
fontSize: 16,
|
|
213
199
|
color: "#616061"
|
|
214
|
-
} }, "Browse all
|
|
200
|
+
} }, "Browse all Channels"))), /* @__PURE__ */ React__default.createElement(TouchableOpacity, { onPress: () => navigation.navigate(NavigationRoutes.AddChannel, {
|
|
215
201
|
orgName
|
|
216
202
|
}), style: {
|
|
217
|
-
|
|
203
|
+
paddingVertical: 5,
|
|
218
204
|
paddingHorizontal: 12
|
|
219
205
|
} }, /* @__PURE__ */ React__default.createElement(HStack, { space: "md", className: "items-center" }, /* @__PURE__ */ React__default.createElement(Feather, { color: "#616061", name: "plus", size: 18 }), /* @__PURE__ */ React__default.createElement(Text, { style: {
|
|
220
206
|
fontSize: 16,
|
|
221
207
|
color: "#616061"
|
|
222
|
-
} }, "Add
|
|
223
|
-
}, [
|
|
208
|
+
} }, "Add Channels"))));
|
|
209
|
+
}, [state.channels, state.showMoreChannels, orgName, navigation]);
|
|
224
210
|
const SectionHeader = useCallback(() => {
|
|
225
|
-
return /* @__PURE__ */ React__default.createElement(TouchableOpacity, { style: {
|
|
226
|
-
paddingVertical:
|
|
227
|
-
paddingHorizontal:
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
}
|
|
236
|
-
|
|
237
|
-
|
|
211
|
+
return /* @__PURE__ */ React__default.createElement(TouchableOpacity, { onPress: () => setExpendable(!expandable), style: {
|
|
212
|
+
paddingVertical: 6,
|
|
213
|
+
paddingHorizontal: 16
|
|
214
|
+
} }, /* @__PURE__ */ React__default.createElement(HStack, { className: "justify-between items-center" }, /* @__PURE__ */ React__default.createElement(Text, { className: "font-semibold", style: {
|
|
215
|
+
fontSize: 15,
|
|
216
|
+
color: "#1D1C1D"
|
|
217
|
+
} }, "Channels"), /* @__PURE__ */ React__default.createElement(FontAwesome, { name: expandable ? "chevron-down" : "chevron-left", color: colors.gray[800], size: 12 })));
|
|
218
|
+
}, [expandable]);
|
|
219
|
+
if (!expandable) {
|
|
220
|
+
return /* @__PURE__ */ React__default.createElement(SectionHeader, null);
|
|
221
|
+
}
|
|
222
|
+
return /* @__PURE__ */ React__default.createElement(Box, null, /* @__PURE__ */ React__default.createElement(SectionHeader, null), (organizationChannels == null ? void 0 : organizationChannels.length) > 0 ? /* @__PURE__ */ React__default.createElement(FlatList, { keyExtractor: (item) => ((item == null ? void 0 : item.id) || "channel") + "-" + (item == null ? void 0 : item.title), data: organizationChannels, renderItem: renderChannelItem, ListFooterComponent, style: {
|
|
223
|
+
marginTop: 6
|
|
224
|
+
}, scrollEnabled: false }) : /* @__PURE__ */ React__default.createElement(Box, null, /* @__PURE__ */ React__default.createElement(ListEmptyComponent, null), /* @__PURE__ */ React__default.createElement(ListFooterComponent, null)));
|
|
225
|
+
};export{Channels as default};//# sourceMappingURL=Channels.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Channels.js","sources":["../../../../../src/screens/Home/Components/Channels/Channels.tsx"],"sourcesContent":["import { useIsFocused, useFocusEffect } from '@react-navigation/native';\nimport React, { useState, useEffect, useCallback, useMemo, useContext } from 'react';\nimport { TouchableOpacity } from 'react-native';\nimport { NavigationRoutes } from '../../../../constants';\nimport { Pressable, View, FlatList, Box, Text, Spinner, HStack, VStack, Icon } from '@admin-layout/gluestack-ui-mobile';\nimport { userSelector } from '@adminide-stack/user-auth0-client';\nimport { useSelector, shallowEqual } from 'react-redux';\nimport { useNavigation } from '@react-navigation/native';\nimport styles from '../../styles';\nimport { orderBy, uniqBy, take } from 'lodash-es';\nimport { RoomType } from 'common';\nimport { useGetChannelsByUserQuery } from 'common/graphql';\nimport { FontAwesome, Feather, MaterialIcons } from '@expo/vector-icons';\nimport { useDrawerLayout } from '../../../../hooks';\nimport colors from 'tailwindcss/colors';\nimport { channelsXstate } from './channels-xstate';\nimport { useSafeChannelsMachine } from './useSafeChannelsMachine';\nimport { RefetchContext } from '../../HomeScreen';\n\nconst defaultChannelType = [RoomType.Channel, RoomType.Private, RoomType.Public];\n\nconst Channels = () => {\n const navigation = useNavigation<any>();\n const [expandable, setExpendable] = useState(true);\n const user: any = useSelector(userSelector, shallowEqual);\n const { orgName } = useDrawerLayout();\n const isFocused = useIsFocused();\n const { shouldRefetch } = useContext(RefetchContext);\n\n // Using the safe XState machine hook\n const [state, send] = useSafeChannelsMachine(channelsXstate);\n\n const { channels, loading, channelsLoading, showMoreChannels, error } = state.context;\n\n // GraphQL Queries\n const {\n data: userChannels,\n loading: userChannelsLoading,\n refetch: reFetchUserChannels,\n fetchMore: fetchMoreUserChannels,\n } = useGetChannelsByUserQuery({\n variables: {\n criteria: {\n orgName: orgName,\n type: defaultChannelType,\n team: null,\n },\n limit: 11,\n },\n fetchPolicy: 'cache-and-network',\n nextFetchPolicy: 'cache-first',\n onCompleted(data) {\n send({\n type: 'SET_CHANNELS',\n data: { channels: data?.channelsByUser || [] },\n });\n },\n onError(error) {\n // Check specifically for ChannelService error\n const isChannelServiceError = error.message.includes(\"Service 'ChannelService.getAll' is not found\");\n const errorMessage = isChannelServiceError\n ? 'Channel service is temporarily unavailable. Please try again later.'\n : error.message;\n\n // Update state to reflect the error\n send({\n type: 'ERROR',\n data: { message: errorMessage },\n });\n },\n // Skip the query if organization name is not available\n skip: !orgName,\n });\n\n // Initialize XState with the org name on mount\n useEffect(() => {\n if (orgName) {\n send({\n type: 'INITIAL_CONTEXT',\n data: { orgName },\n });\n }\n\n return () => {\n send({ type: 'CLEAR_DATA' });\n };\n }, [orgName, send]);\n\n const reFetchChannels = useCallback(() => {\n // Skip refetch if we're already loading\n if (state.context.channelsLoading) {\n console.log('Skipping channels refetch - already in progress');\n return;\n }\n\n if (orgName) {\n send({ type: 'REFETCH_CHANNELS' });\n reFetchUserChannels({\n criteria: {\n orgName: orgName,\n type: defaultChannelType,\n team: null,\n },\n limit: 11,\n })\n .then((res) => {\n if (res?.data?.channelsByUser) {\n send({\n type: 'SET_CHANNELS',\n data: { channels: res.data.channelsByUser },\n });\n }\n })\n .catch((error) => {\n // Check specifically for ChannelService error\n const isChannelServiceError =\n error.message && error.message.includes(\"Service 'ChannelService.getAll' is not found\");\n const errorMessage = isChannelServiceError\n ? 'Channels are temporarily unavailable. Please try again later.'\n : error.message || 'Failed to fetch channels';\n\n send({\n type: 'ERROR',\n data: { message: errorMessage },\n });\n });\n }\n }, [orgName, send, state.context.channelsLoading, reFetchUserChannels]);\n\n // Use RefetchContext to control when to refetch data\n useEffect(() => {\n if (shouldRefetch && orgName) {\n reFetchChannels();\n }\n }, [shouldRefetch, orgName, reFetchChannels]);\n\n // Focus effect to fetch data when screen is focused\n useFocusEffect(\n useCallback(() => {\n if (orgName && (!channels || channels.length === 0)) {\n reFetchChannels();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [orgName, channels]),\n );\n\n const fetchMoreChannels = useCallback(\n (skip: number) => {\n send({ type: 'FETCH_MORE_CHANNELS' });\n fetchMoreUserChannels({\n variables: {\n criteria: {\n orgName: orgName,\n type: defaultChannelType,\n team: null,\n },\n skip,\n },\n })?.then((res: any) => {\n send({\n type: 'FETCH_MORE_CHANNELS_SUCCESS',\n data: { channels: res?.data?.channelsByUser || [] },\n });\n });\n },\n [orgName, send, fetchMoreUserChannels],\n );\n\n const organizationChannels = useMemo(() => {\n return (\n (channels &&\n channels?.length &&\n take(\n orderBy(\n uniqBy(\n [...channels]?.filter((i: any) => i.type !== RoomType.Direct),\n ({ id }) => id,\n ),\n [(ch: any) => ch?.title?.toLowerCase()],\n ['asc'],\n ),\n 10,\n )) ||\n []\n );\n }, [channels]);\n\n const openInbox = useCallback(\n (id: any, title: any, totalMembers: any, type?: any) => {\n navigation.navigate(NavigationRoutes.DialogMessages, {\n channelId: id?.toString(),\n title: title?.toString(),\n totalMembers: totalMembers,\n channelType: type,\n orgName: orgName,\n hideTabBar: true,\n });\n },\n [orgName, navigation],\n );\n\n const renderChannelItem = useCallback(\n ({ item }) => (\n <TouchableOpacity\n onPress={() => openInbox(item?.id, item?.title, item?.members?.length, item?.type)}\n style={{ paddingVertical: 2, paddingHorizontal: 12 }}\n >\n <HStack space=\"md\" className=\"items-center\">\n {/* <Box\n style={{\n width: 25,\n height: 25,\n borderRadius: 4,\n alignItems: 'center',\n justifyContent: 'center',\n }}\n className=\"bg-slate-100 rounded-lg\"\n >\n <Text className=\"text-black font-medium\">#</Text>\n </Box> */}\n <Feather name=\"hash\" size={18} color=\"black\" />\n <Text className=\"text-gray-900 flex-1 text-base\">{item.title}</Text>\n </HStack>\n </TouchableOpacity>\n ),\n [openInbox],\n );\n\n const ListEmptyComponent = useCallback(() => {\n return (\n <Box style={{ padding: 12 }}>\n {channelsLoading ? (\n <Box style={{ alignItems: 'center', paddingVertical: 16 }}>\n <Spinner color=\"#4A154B\" size=\"small\" />\n <Text style={{ marginTop: 8, color: '#616061' }}>Loading channels...</Text>\n </Box>\n ) : error ? (\n <Box style={{ padding: 8, backgroundColor: '#FFF4F4', borderRadius: 4 }}>\n <Text color=\"#E01E5A\" style={{ marginBottom: 8, fontWeight: '500' }}>\n {error}\n </Text>\n <TouchableOpacity onPress={reFetchChannels}>\n <HStack space=\"sm\" style={{ alignItems: 'center' }}>\n <Feather name=\"refresh-cw\" color=\"#1264A3\" size={16} />\n <Text color=\"#1264A3\" style={{ fontWeight: '500' }}>\n Retry\n </Text>\n </HStack>\n </TouchableOpacity>\n </Box>\n ) : (\n <Box style={{ alignItems: 'center', paddingVertical: 16 }}>\n <Box style={{ padding: 12, marginBottom: 8, borderRadius: 24, backgroundColor: '#F8F8F8' }}>\n <Feather name=\"hash\" color=\"#616061\" size={20} />\n </Box>\n <Text style={{ color: '#616061', textAlign: 'center' }}>No channels available</Text>\n </Box>\n )}\n </Box>\n );\n }, [channelsLoading, error, reFetchChannels]);\n\n const ListFooterComponent = useCallback(() => {\n return (\n <VStack>\n {showMoreChannels && channels?.length > 10 && (\n <TouchableOpacity\n onPress={() => navigation.navigate(NavigationRoutes.Channels, { orgName })}\n style={{ paddingVertical: 8, paddingHorizontal: 12 }}\n >\n <HStack space=\"md\" className=\"items-center\">\n <MaterialIcons color=\"#616061\" name=\"search\" size={18} />\n <Text style={{ fontSize: 16, color: '#616061' }}>Browse all channels</Text>\n </HStack>\n </TouchableOpacity>\n )}\n\n <TouchableOpacity\n onPress={() => navigation.navigate(NavigationRoutes.AddChannel, { orgName })}\n style={{ paddingBottom: 5, paddingHorizontal: 12 }}\n >\n <HStack space=\"md\" className=\"items-center\">\n <Feather color=\"#616061\" name=\"plus\" size={18} />\n <Text style={{ fontSize: 16, color: '#616061' }}>Add Channel</Text>\n </HStack>\n </TouchableOpacity>\n </VStack>\n );\n }, [showMoreChannels, channels?.length, navigation, orgName]);\n\n const SectionHeader = useCallback(() => {\n return (\n <TouchableOpacity\n style={{\n paddingVertical: 8,\n paddingHorizontal: 12,\n marginBottom: 4,\n }}\n onPress={() => setExpendable(!expandable)}\n >\n <HStack className=\"items-center justify-between\">\n <Text className=\"text-gray-900 font-bold text-lg\">Channels</Text>\n <HStack space=\"sm\" className=\"items-center\">\n {channelsLoading && <Spinner size=\"small\" color=\"#4A154B\" />}\n <MaterialIcons\n name={expandable ? 'keyboard-arrow-up' : 'keyboard-arrow-down'}\n color=\"#616061\"\n size={22}\n />\n </HStack>\n </HStack>\n </TouchableOpacity>\n );\n }, [expandable, channelsLoading]);\n\n return (\n <View style={{ flex: 1 }}>\n <SectionHeader />\n\n {expandable && (\n <FlatList\n data={organizationChannels}\n renderItem={renderChannelItem}\n keyExtractor={(item) => String(item.id)}\n ListEmptyComponent={ListEmptyComponent}\n ListFooterComponent={ListFooterComponent}\n showsVerticalScrollIndicator={false}\n initialNumToRender={10}\n maxToRenderPerBatch={10}\n windowSize={5}\n contentContainerStyle={{\n flexGrow: 1,\n }}\n />\n )}\n </View>\n );\n};\n\nexport default React.memo(Channels);\n"],"names":["error","_a","React"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Channels.js","sources":["../../../../../src/screens/Home/Components/Channels/Channels.tsx"],"sourcesContent":["import { useIsFocused, useFocusEffect } from '@react-navigation/native';\nimport React, { useState, useEffect, useCallback, useMemo, useContext } from 'react';\nimport { TouchableOpacity } from 'react-native';\nimport { NavigationRoutes } from '../../../../constants';\nimport { Pressable, View, FlatList, Box, Text, HStack, VStack, Icon } from '@admin-layout/gluestack-ui-mobile';\nimport { userSelector } from '@adminide-stack/user-auth0-client';\nimport { useSelector, shallowEqual } from 'react-redux';\nimport { useNavigation } from '@react-navigation/native';\nimport styles from '../../styles';\nimport { orderBy, uniqBy, take } from 'lodash-es';\nimport { RoomType } from 'common';\nimport { useGetChannelsByUserQuery } from 'common/graphql';\nimport { FontAwesome, Feather, MaterialIcons } from '@expo/vector-icons';\nimport { useDrawerLayout } from '../../../../hooks';\nimport colors from 'tailwindcss/colors';\nimport { RefetchContext } from '../../HomeScreen';\n\nconst defaultChannelType = [RoomType.Channel, RoomType.Private, RoomType.Public];\n\nconst Channels = () => {\n const navigation = useNavigation<any>();\n const [expandable, setExpendable] = useState(true);\n const user: any = useSelector(userSelector, shallowEqual);\n const { orgName } = useDrawerLayout();\n const isFocused = useIsFocused();\n const { shouldRefetch } = useContext(RefetchContext);\n\n // Simplified state without loading indicators\n const [state, setState] = useState({\n channels: [],\n error: null,\n channelsSkip: 0,\n showMoreChannels: true,\n });\n\n // GraphQL Queries\n const {\n data: userChannels,\n refetch: reFetchUserChannels,\n fetchMore: fetchMoreUserChannels,\n } = useGetChannelsByUserQuery({\n variables: {\n criteria: {\n orgName: orgName,\n type: defaultChannelType,\n team: null,\n },\n limit: 11,\n },\n fetchPolicy: 'cache-and-network',\n nextFetchPolicy: 'cache-first',\n onCompleted(data) {\n setState((prev) => ({\n ...prev,\n channels: data?.channelsByUser || [],\n }));\n },\n onError(error) {\n // Check specifically for ChannelService error\n const isChannelServiceError = error.message.includes(\"Service 'ChannelService.getAll' is not found\");\n const errorMessage = isChannelServiceError\n ? 'Channel service is temporarily unavailable. Please try again later.'\n : error.message;\n\n // Update state to reflect the error\n setState((prev) => ({\n ...prev,\n error: errorMessage,\n }));\n },\n // Skip the query if organization name is not available\n skip: !orgName,\n });\n\n // Clean up state on unmount\n useEffect(() => {\n return () => {\n setState((prev) => ({\n ...prev,\n channels: [],\n channelsSkip: 0,\n showMoreChannels: true,\n }));\n };\n }, [orgName]);\n\n const reFetchChannels = useCallback(() => {\n if (orgName) {\n reFetchUserChannels({\n criteria: {\n orgName: orgName,\n type: defaultChannelType,\n team: null,\n },\n limit: 11,\n })\n .then((res) => {\n if (res?.data?.channelsByUser) {\n setState((prev) => ({\n ...prev,\n channels: res.data.channelsByUser,\n }));\n }\n })\n .catch((error) => {\n // Check specifically for ChannelService error\n const isChannelServiceError =\n error.message && error.message.includes(\"Service 'ChannelService.getAll' is not found\");\n const errorMessage = isChannelServiceError\n ? 'Channels are temporarily unavailable. Please try again later.'\n : error.message || 'Failed to fetch channels';\n\n setState((prev) => ({\n ...prev,\n error: errorMessage,\n }));\n });\n }\n }, [orgName, reFetchUserChannels]);\n\n // Use RefetchContext to control when to refetch data\n useEffect(() => {\n if (shouldRefetch && orgName) {\n reFetchChannels();\n }\n }, [shouldRefetch, orgName, reFetchChannels]);\n\n // Focus effect to fetch data when screen is focused\n useFocusEffect(\n useCallback(() => {\n if (orgName) {\n reFetchChannels();\n }\n }, [orgName]),\n );\n\n const fetchMoreChannels = useCallback(\n (skip: number) => {\n setState((prev) => ({\n ...prev,\n channelsSkip: prev.channels.length,\n }));\n\n fetchMoreUserChannels({\n variables: {\n criteria: {\n orgName: orgName,\n type: defaultChannelType,\n team: null,\n },\n skip,\n },\n })?.then((res: any) => {\n const newChannels = res?.data?.channelsByUser || [];\n const showMore = newChannels.length > 0;\n\n setState((prev) => ({\n ...prev,\n channels: [...prev.channels, ...newChannels],\n showMoreChannels: showMore,\n }));\n });\n },\n [orgName, fetchMoreUserChannels],\n );\n\n const organizationChannels = useMemo(() => {\n return (\n (state.channels &&\n state.channels?.length &&\n take(\n orderBy(\n uniqBy(\n [...state.channels]?.filter((i: any) => i.type !== RoomType.Direct),\n ({ id }) => id,\n ),\n [(ch: any) => ch?.title?.toLowerCase()],\n ['asc'],\n ),\n 10,\n )) ||\n []\n );\n }, [state.channels]);\n\n const openInbox = useCallback(\n (id: any, title: any, totalMembers: any, type?: any) => {\n navigation.navigate(NavigationRoutes.DialogMessages, {\n channelId: id?.toString(),\n title: title?.toString(),\n totalMembers: totalMembers,\n channelType: type,\n orgName: orgName,\n hideTabBar: true,\n });\n },\n [orgName, navigation],\n );\n\n const renderChannelItem = useCallback(\n ({ item }) => (\n <TouchableOpacity\n onPress={() => openInbox(item?.id, item?.title, item?.members?.length, item?.type)}\n style={{ paddingVertical: 2, paddingHorizontal: 12 }}\n >\n <HStack space=\"md\" className=\"items-center\">\n <Text className=\"text-gray-600 flex-none\">#</Text>\n <Text className=\"text-gray-900 flex-1 text-base\">{item.title}</Text>\n </HStack>\n </TouchableOpacity>\n ),\n [openInbox],\n );\n\n const ListEmptyComponent = useCallback(() => {\n return (\n <Box style={{ padding: 12 }}>\n {state.error ? (\n <Box style={{ padding: 8, backgroundColor: '#FFF4F4', borderRadius: 4 }}>\n <Text color=\"#E01E5A\" style={{ marginBottom: 8, fontWeight: '500' }}>\n {state.error}\n </Text>\n <TouchableOpacity onPress={reFetchChannels}>\n <HStack space=\"sm\" style={{ alignItems: 'center' }}>\n <Feather name=\"refresh-cw\" color=\"#1264A3\" size={16} />\n <Text color=\"#1264A3\" style={{ fontWeight: '500' }}>\n Retry\n </Text>\n </HStack>\n </TouchableOpacity>\n </Box>\n ) : (\n <Box style={{ alignItems: 'center', paddingVertical: 16 }}>\n <Box style={{ padding: 12, marginBottom: 8, borderRadius: 24, backgroundColor: '#F8F8F8' }}>\n <Feather name=\"hash\" color=\"#616061\" size={20} />\n </Box>\n <Text style={{ color: '#616061', textAlign: 'center' }}>No channels available</Text>\n </Box>\n )}\n </Box>\n );\n }, [state.error, reFetchChannels]);\n\n const ListFooterComponent = useCallback(() => {\n return (\n <VStack>\n {state.showMoreChannels && state.channels?.length > 10 && (\n <TouchableOpacity\n onPress={() => navigation.navigate(NavigationRoutes.Channels, { orgName })}\n style={{ paddingVertical: 8, paddingHorizontal: 12 }}\n >\n <HStack space=\"md\" className=\"items-center\">\n <MaterialIcons color=\"#616061\" name=\"search\" size={18} />\n <Text style={{ fontSize: 16, color: '#616061' }}>Browse all Channels</Text>\n </HStack>\n </TouchableOpacity>\n )}\n\n <TouchableOpacity\n onPress={() => navigation.navigate(NavigationRoutes.AddChannel, { orgName })}\n style={{ paddingVertical: 5, paddingHorizontal: 12 }}\n >\n <HStack space=\"md\" className=\"items-center\">\n <Feather color=\"#616061\" name=\"plus\" size={18} />\n <Text style={{ fontSize: 16, color: '#616061' }}>Add Channels</Text>\n </HStack>\n </TouchableOpacity>\n </VStack>\n );\n }, [state.channels, state.showMoreChannels, orgName, navigation]);\n\n const SectionHeader = useCallback(() => {\n return (\n <TouchableOpacity\n onPress={() => setExpendable(!expandable)}\n style={{ paddingVertical: 6, paddingHorizontal: 16 }}\n >\n <HStack className=\"justify-between items-center\">\n <Text className=\"font-semibold\" style={{ fontSize: 15, color: '#1D1C1D' }}>\n Channels\n </Text>\n <FontAwesome\n name={expandable ? 'chevron-down' : 'chevron-left'}\n color={colors.gray[800]}\n size={12}\n />\n </HStack>\n </TouchableOpacity>\n );\n }, [expandable]);\n\n if (!expandable) {\n return <SectionHeader />;\n }\n\n return (\n <Box>\n <SectionHeader />\n {organizationChannels?.length > 0 ? (\n <FlatList\n keyExtractor={(item) => (item?.id || 'channel') + '-' + item?.title}\n data={organizationChannels}\n renderItem={renderChannelItem}\n ListFooterComponent={ListFooterComponent}\n style={{ marginTop: 6 }}\n scrollEnabled={false}\n />\n ) : (\n <Box>\n <ListEmptyComponent />\n <ListFooterComponent />\n </Box>\n )}\n </Box>\n );\n};\n\nexport default Channels;\n"],"names":["_a","React"],"mappings":";;;;;;;;;;;;;;;;;;;AAgBA,MAAM,qBAAqB,CAAC,QAAA,CAAS,SAAS,QAAS,CAAA,OAAA,EAAS,SAAS,MAAM,CAAA;AAC/E,MAAM,WAAW,MAAM;AACrB,EAAA,MAAM,aAAa,aAAmB,EAAA;AACtC,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,SAAS,IAAI,CAAA;AACjD,EAAkB,WAAY,CAAA,YAAA,EAAc,YAAY;AACxD,EAAM,MAAA;AAAA,IACJ;AAAA,MACE,eAAgB,EAAA;AACpB,EAAkB,YAAa;AAC/B,EAAM,MAAA;AAAA,IACJ;AAAA,GACF,GAAI,WAAW,cAAc,CAAA;AAG7B,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,QAAS,CAAA;AAAA,IACjC,UAAU,EAAC;AAAA,IACX,KAAO,EAAA,IAAA;AAAA,IACP,YAAc,EAAA,CAAA;AAAA,IACd,gBAAkB,EAAA;AAAA,GACnB,CAAA;AAGD,EAAM,MAAA;AAAA,IACJ,IAAM,EAAA,YAAA;AAAA,IACN,OAAS,EAAA,mBAAA;AAAA,IACT,SAAW,EAAA;AAAA,MACT,yBAA0B,CAAA;AAAA,IAC5B,SAAW,EAAA;AAAA,MACT,QAAU,EAAA;AAAA,QACR,OAAA;AAAA,QACA,IAAM,EAAA,kBAAA;AAAA,QACN,IAAM,EAAA;AAAA,OACR;AAAA,MACA,KAAO,EAAA;AAAA,KACT;AAAA,IACA,WAAa,EAAA,mBAAA;AAAA,IACb,eAAiB,EAAA,aAAA;AAAA,IACjB,YAAY,IAAM,EAAA;AAChB,MAAS,QAAA,CAAA,CAAA,IAAA,KAAS,iCACb,IADa,CAAA,EAAA;AAAA,QAEhB,QAAA,EAAA,CAAU,IAAM,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAA,cAAA,KAAkB;AAAC,OACnC,CAAA,CAAA;AAAA,KACJ;AAAA,IACA,QAAQ,KAAO,EAAA;AAEb,MAAA,MAAM,qBAAwB,GAAA,KAAA,CAAM,OAAQ,CAAA,QAAA,CAAS,8CAA8C,CAAA;AACnG,MAAM,MAAA,YAAA,GAAe,qBAAwB,GAAA,qEAAA,GAAwE,KAAM,CAAA,OAAA;AAG3H,MAAS,QAAA,CAAA,CAAA,IAAA,KAAS,iCACb,IADa,CAAA,EAAA;AAAA,QAEhB,KAAO,EAAA;AAAA,OACP,CAAA,CAAA;AAAA,KACJ;AAAA,IAEA,MAAM,CAAC;AAAA,GACR,CAAA;AAGD,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,OAAO,MAAM;AACX,MAAS,QAAA,CAAA,CAAA,IAAA,KAAS,iCACb,IADa,CAAA,EAAA;AAAA,QAEhB,UAAU,EAAC;AAAA,QACX,YAAc,EAAA,CAAA;AAAA,QACd,gBAAkB,EAAA;AAAA,OAClB,CAAA,CAAA;AAAA,KACJ;AAAA,GACF,EAAG,CAAC,OAAO,CAAC,CAAA;AACZ,EAAM,MAAA,eAAA,GAAkB,YAAY,MAAM;AACxC,IAAA,IAAI,OAAS,EAAA;AACX,MAAoB,mBAAA,CAAA;AAAA,QAClB,QAAU,EAAA;AAAA,UACR,OAAA;AAAA,UACA,IAAM,EAAA,kBAAA;AAAA,UACN,IAAM,EAAA;AAAA,SACR;AAAA,QACA,KAAO,EAAA;AAAA,OACR,CAAE,CAAA,IAAA,CAAK,CAAO,GAAA,KAAA;AA9FrB,QAAA,IAAA,EAAA;AA+FQ,QAAI,IAAA,CAAA,EAAA,GAAA,GAAA,IAAA,IAAA,GAAA,MAAA,GAAA,GAAA,CAAK,IAAL,KAAA,IAAA,GAAA,MAAA,GAAA,EAAA,CAAW,cAAgB,EAAA;AAC7B,UAAS,QAAA,CAAA,CAAA,IAAA,KAAS,iCACb,IADa,CAAA,EAAA;AAAA,YAEhB,QAAA,EAAU,IAAI,IAAK,CAAA;AAAA,WACnB,CAAA,CAAA;AAAA;AACJ,OACD,CAAE,CAAA,KAAA,CAAM,CAAS,KAAA,KAAA;AAEhB,QAAA,MAAM,wBAAwB,KAAM,CAAA,OAAA,IAAW,KAAM,CAAA,OAAA,CAAQ,SAAS,8CAA8C,CAAA;AACpH,QAAA,MAAM,YAAe,GAAA,qBAAA,GAAwB,+DAAkE,GAAA,KAAA,CAAM,OAAW,IAAA,0BAAA;AAChI,QAAS,QAAA,CAAA,CAAA,IAAA,KAAS,iCACb,IADa,CAAA,EAAA;AAAA,UAEhB,KAAO,EAAA;AAAA,SACP,CAAA,CAAA;AAAA,OACH,CAAA;AAAA;AACH,GACC,EAAA,CAAC,OAAS,EAAA,mBAAmB,CAAC,CAAA;AAGjC,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,iBAAiB,OAAS,EAAA;AAC5B,MAAgB,eAAA,EAAA;AAAA;AAClB,GACC,EAAA,CAAC,aAAe,EAAA,OAAA,EAAS,eAAe,CAAC,CAAA;AAG5C,EAAA,cAAA,CAAe,YAAY,MAAM;AAC/B,IAAA,IAAI,OAAS,EAAA;AACX,MAAgB,eAAA,EAAA;AAAA;AAClB,GACC,EAAA,CAAC,OAAO,CAAC,CAAC,CAAA;AACb,EAA0B,WAAY,CAAA,CAAC,IAAiB,KAAA;AA9H1D,IAAA,IAAA,EAAA;AA+HI,IAAS,QAAA,CAAA,CAAA,IAAA,KAAS,iCACb,IADa,CAAA,EAAA;AAAA,MAEhB,YAAA,EAAc,KAAK,QAAS,CAAA;AAAA,KAC5B,CAAA,CAAA;AACF,IAAsB,CAAA,EAAA,GAAA,qBAAA,CAAA;AAAA,MACpB,SAAW,EAAA;AAAA,QACT,QAAU,EAAA;AAAA,UACR,OAAA;AAAA,UACA,IAAM,EAAA,kBAAA;AAAA,UACN,IAAM,EAAA;AAAA,SACR;AAAA,QACA;AAAA;AACF,KACD,CAAA,KATD,IASI,GAAA,MAAA,GAAA,EAAA,CAAA,IAAA,CAAK,CAAC,GAAa,KAAA;AA5I3B,MAAAA,IAAAA,GAAAA;AA6IM,MAAA,MAAM,gBAAcA,GAAA,GAAA,GAAA,IAAA,IAAA,GAAA,MAAA,GAAA,GAAA,CAAK,SAAL,IAAAA,GAAAA,MAAAA,GAAAA,GAAAA,CAAW,mBAAkB,EAAC;AAClD,MAAM,MAAA,QAAA,GAAW,YAAY,MAAS,GAAA,CAAA;AACtC,MAAS,QAAA,CAAA,CAAA,IAAA,KAAS,iCACb,IADa,CAAA,EAAA;AAAA,QAEhB,UAAU,CAAC,GAAG,IAAK,CAAA,QAAA,EAAU,GAAG,WAAW,CAAA;AAAA,QAC3C,gBAAkB,EAAA;AAAA,OAClB,CAAA,CAAA;AAAA,KACJ,CAAA;AAAA,GACC,EAAA,CAAC,OAAS,EAAA,qBAAqB,CAAC;AACnC,EAAM,MAAA,oBAAA,GAAuB,QAAQ,MAAM;AAtJ7C,IAAA,IAAA,EAAA,EAAA,EAAA;AAuJI,IAAO,OAAA,KAAA,CAAM,cAAY,EAAM,GAAA,KAAA,CAAA,QAAA,KAAN,mBAAgB,MAAU,CAAA,IAAA,IAAA,CAAK,OAAQ,CAAA,MAAA,CAAA,CAAO,EAAC,GAAA,CAAA,GAAG,MAAM,QAAQ,CAAA,KAAlB,mBAAqB,MAAO,CAAA,CAAC,MAAW,CAAE,CAAA,IAAA,KAAS,QAAS,CAAA,MAAA,CAAA,EAAS,CAAC;AAAA,MAC3I;AAAA,KACI,KAAA,EAAE,CAAG,EAAA,CAAC,CAAC,EAAS,KAAA;AAzJ1B,MAAAA,IAAAA,GAAAA;AAyJ6B,MAAA,OAAA,CAAAA,GAAA,GAAA,EAAA,IAAA,IAAA,GAAA,MAAA,GAAA,EAAA,CAAI,KAAJ,KAAA,IAAA,GAAA,MAAA,GAAAA,GAAW,CAAA,WAAA,EAAA;AAAA,KAAa,GAAG,CAAC,KAAK,CAAC,CAAG,EAAA,EAAE,KAAK,EAAC;AAAA,GACrE,EAAA,CAAC,KAAM,CAAA,QAAQ,CAAC,CAAA;AACnB,EAAA,MAAM,YAAY,WAAY,CAAA,CAAC,EAAS,EAAA,KAAA,EAAY,cAAmB,IAAe,KAAA;AACpF,IAAW,UAAA,CAAA,QAAA,CAAS,iBAAiB,cAAgB,EAAA;AAAA,MACnD,WAAW,EAAI,IAAA,IAAA,GAAA,MAAA,GAAA,EAAA,CAAA,QAAA,EAAA;AAAA,MACf,OAAO,KAAO,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAA,QAAA,EAAA;AAAA,MACd,YAAA;AAAA,MACA,WAAa,EAAA,IAAA;AAAA,MACb,OAAA;AAAA,MACA,UAAY,EAAA;AAAA,KACb,CAAA;AAAA,GACA,EAAA,CAAC,OAAS,EAAA,UAAU,CAAC,CAAA;AACxB,EAAM,MAAA,iBAAA,GAAoB,YAAY,CAAC;AAAA,IACrC;AAAA,GACI,qBAAAC,cAAA,CAAA,aAAA,CAAC,gBAAiB,EAAA,EAAA,OAAA,EAAS,MAAG;AAvKtC,IAAA,IAAA,EAAA;AAuKyC,IAAU,OAAA,SAAA,CAAA,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAM,IAAI,IAAM,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAA,KAAA,EAAA,CAAO,kCAAM,OAAN,KAAA,IAAA,GAAA,MAAA,GAAA,EAAA,CAAe,MAAQ,EAAA,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAM,IAAI,CAAA;AAAA,GAAA,EAAG,KAAO,EAAA;AAAA,IACjH,eAAiB,EAAA,CAAA;AAAA,IACjB,iBAAmB,EAAA;AAAA,GACrB,EAAA,kBACeA,cAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAO,KAAM,EAAA,IAAA,EAAK,WAAU,cACzB,EAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,IAAK,EAAA,EAAA,SAAA,EAAU,yBAA0B,EAAA,EAAA,GAAC,mBAC1CA,cAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAK,SAAU,EAAA,gCAAA,EAAA,EAAkC,IAAK,CAAA,KAAM,CACjE,CACJ,CAAA,EAAqB,CAAC,SAAS,CAAC,CAAA;AAC1C,EAAM,MAAA,kBAAA,GAAqB,YAAY,MAAM;AAC3C,IAAO,uBAAAA,cAAA,CAAA,aAAA,CAAC,OAAI,KAAO,EAAA;AAAA,MACjB,OAAS,EAAA;AAAA,KAEE,EAAA,EAAA,KAAA,CAAM,KAAQ,mBAAAA,cAAA,CAAA,aAAA,CAAC,OAAI,KAAO,EAAA;AAAA,MACnC,OAAS,EAAA,CAAA;AAAA,MACT,eAAiB,EAAA,SAAA;AAAA,MACjB,YAAc,EAAA;AAAA,KAEE,EAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,IAAK,EAAA,EAAA,KAAA,EAAM,WAAU,KAAO,EAAA;AAAA,MAC3C,YAAc,EAAA,CAAA;AAAA,MACd,UAAY,EAAA;AAAA,KAEO,EAAA,EAAA,KAAA,CAAM,KACX,CAAA,kBACCA,cAAA,CAAA,aAAA,CAAA,gBAAA,EAAA,EAAiB,OAAS,EAAA,eAAA,EAAA,kBACtBA,cAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAO,KAAM,EAAA,IAAA,EAAK,KAAO,EAAA;AAAA,MAC1C,UAAY,EAAA;AAAA,KAEQ,EAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,OAAQ,EAAA,EAAA,IAAA,EAAK,cAAa,KAAM,EAAA,SAAA,EAAU,IAAM,EAAA,EAAA,EAAI,CACrD,kBAAAA,cAAA,CAAA,aAAA,CAAC,IAAK,EAAA,EAAA,KAAA,EAAM,WAAU,KAAO,EAAA;AAAA,MAC/C,UAAY,EAAA;AAAA,KACd,EAAA,EAAG,OAEiB,CACJ,CACJ,CACJ,CAAS,mBAAAA,cAAA,CAAA,aAAA,CAAC,OAAI,KAAO,EAAA;AAAA,MACjC,UAAY,EAAA,QAAA;AAAA,MACZ,eAAiB,EAAA;AAAA,KACnB,EAAA,kBACmBA,cAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EAAI,KAAO,EAAA;AAAA,MAC1B,OAAS,EAAA,EAAA;AAAA,MACT,YAAc,EAAA,CAAA;AAAA,MACd,YAAc,EAAA,EAAA;AAAA,MACd,eAAiB,EAAA;AAAA,KAEC,EAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,OAAQ,EAAA,EAAA,IAAA,EAAK,MAAO,EAAA,KAAA,EAAM,SAAU,EAAA,IAAA,EAAM,EAAI,EAAA,CACnD,CACA,kBAAAA,cAAA,CAAA,aAAA,CAAC,QAAK,KAAO,EAAA;AAAA,MAC3B,KAAO,EAAA,SAAA;AAAA,MACP,SAAW,EAAA;AAAA,KACb,EAAA,EAAG,uBAAqB,CACZ,CACR,CAAA;AAAA,GACP,EAAA,CAAC,KAAM,CAAA,KAAA,EAAO,eAAe,CAAC,CAAA;AACjC,EAAM,MAAA,mBAAA,GAAsB,YAAY,MAAM;AA9NhD,IAAA,IAAA,EAAA;AA+NI,IAAA,oDAAQ,MACK,EAAA,IAAA,EAAA,KAAA,CAAM,gBAAoB,IAAA,CAAA,CAAA,EAAA,GAAA,KAAA,CAAM,aAAN,IAAgB,GAAA,MAAA,GAAA,EAAA,CAAA,MAAA,IAAS,EAAM,oBAAAA,cAAA,CAAA,aAAA,CAAC,oBAAiB,OAAS,EAAA,MAAM,UAAW,CAAA,QAAA,CAAS,iBAAiB,QAAU,EAAA;AAAA,MAClJ;AAAA,KACD,GAAG,KAAO,EAAA;AAAA,MACT,eAAiB,EAAA,CAAA;AAAA,MACjB,iBAAmB,EAAA;AAAA,yBAEFA,cAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAO,OAAM,IAAK,EAAA,SAAA,EAAU,kCACxBA,cAAA,CAAA,aAAA,CAAA,aAAA,EAAA,EAAc,KAAM,EAAA,SAAA,EAAU,MAAK,QAAS,EAAA,IAAA,EAAM,IAAI,CACvD,kBAAAA,cAAA,CAAA,aAAA,CAAC,QAAK,KAAO,EAAA;AAAA,MAC7B,QAAU,EAAA,EAAA;AAAA,MACV,KAAO,EAAA;AAAA,KACN,EAAA,EAAA,qBAAmB,CACR,CACJ,CAEJ,kBAAAA,cAAA,CAAA,aAAA,CAAC,gBAAiB,EAAA,EAAA,OAAA,EAAS,MAAM,UAAA,CAAW,QAAS,CAAA,gBAAA,CAAiB,UAAY,EAAA;AAAA,MAC1F;AAAA,KACD,GAAG,KAAO,EAAA;AAAA,MACT,eAAiB,EAAA,CAAA;AAAA,MACjB,iBAAmB,EAAA;AAAA,yBAENA,cAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAO,OAAM,IAAK,EAAA,SAAA,EAAU,kCACxBA,cAAA,CAAA,aAAA,CAAA,OAAA,EAAA,EAAQ,KAAM,EAAA,SAAA,EAAU,MAAK,MAAO,EAAA,IAAA,EAAM,IAAI,CAC/C,kBAAAA,cAAA,CAAA,aAAA,CAAC,QAAK,KAAO,EAAA;AAAA,MACzB,QAAU,EAAA,EAAA;AAAA,MACV,KAAO,EAAA;AAAA,KACN,EAAA,EAAA,cAAY,CACL,CACJ,CACJ,CAAA;AAAA,GACV,EAAG,CAAC,KAAM,CAAA,QAAA,EAAU,MAAM,gBAAkB,EAAA,OAAA,EAAS,UAAU,CAAC,CAAA;AAChE,EAAM,MAAA,aAAA,GAAgB,YAAY,MAAM;AACtC,IAAO,uBAAAA,cAAA,CAAA,aAAA,CAAC,oBAAiB,OAAS,EAAA,MAAM,cAAc,CAAC,UAAU,GAAG,KAAO,EAAA;AAAA,MACzE,eAAiB,EAAA,CAAA;AAAA,MACjB,iBAAmB,EAAA;AAAA,KACrB,EAAA,+CACa,MAAO,EAAA,EAAA,SAAA,EAAU,kDACbA,cAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAK,SAAU,EAAA,eAAA,EAAgB,KAAO,EAAA;AAAA,MACjD,QAAU,EAAA,EAAA;AAAA,MACV,KAAO,EAAA;AAAA,SACN,UAES,CAAA,kBACCA,cAAA,CAAA,aAAA,CAAA,WAAA,EAAA,EAAY,MAAM,UAAa,GAAA,cAAA,GAAiB,cAAgB,EAAA,KAAA,EAAO,OAAO,IAAK,CAAA,GAAA,CAAA,EAAM,IAAM,EAAA,EAAA,EAAI,CACxG,CACJ,CAAA;AAAA,GACV,EAAG,CAAC,UAAU,CAAC,CAAA;AACf,EAAA,IAAI,CAAC,UAAY,EAAA;AACf,IAAA,oDAAQ,aAAc,EAAA,IAAA,CAAA;AAAA;AAExB,EAAO,uBAAAA,cAAA,CAAA,aAAA,CAAC,2BACGA,cAAA,CAAA,aAAA,CAAA,aAAA,EAAA,IAAc,IACd,oBAAsB,IAAA,IAAA,GAAA,MAAA,GAAA,oBAAA,CAAA,MAAA,IAAS,CAAI,mBAAAA,cAAA,CAAA,aAAA,CAAC,QAAS,EAAA,EAAA,YAAA,EAAc,YAAS,IAAM,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAA,EAAA,KAAM,SAAa,IAAA,GAAA,IAAM,IAAM,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAA,KAAA,CAAA,EAAO,MAAM,oBAAsB,EAAA,UAAA,EAAY,iBAAmB,EAAA,mBAAA,EAA0C,KAAO,EAAA;AAAA,IACnO,SAAW,EAAA;AAAA,GACV,EAAA,aAAA,EAAe,KAAO,EAAA,CAAA,mBAAMA,cAAA,CAAA,aAAA,CAAA,GAAA,EAAA,IAAA,kBACdA,cAAA,CAAA,aAAA,CAAA,kBAAA,EAAA,IAAmB,CACpB,kBAAAA,cAAA,CAAA,aAAA,CAAC,mBAAoB,EAAA,IAAA,CACzB,CACR,CAAA;AACR"}
|