@messenger-box/slack-ui-mobile 10.0.3-alpha.20 → 10.0.3-alpha.23
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 +114 -18
- package/lib/screens/Home/Components/Channels/Channels.js.map +1 -1
- package/lib/screens/Home/{workflow/home-xstate.js → Components/Channels/channels-xstate.js} +3 -117
- package/lib/screens/Home/Components/Channels/channels-xstate.js.map +1 -0
- package/lib/screens/Home/Components/Channels/useSafeChannelsMachine.js +128 -0
- package/lib/screens/Home/Components/Channels/useSafeChannelsMachine.js.map +1 -0
- package/lib/screens/Home/Components/DirectChannels/DirectChannels.js +143 -37
- package/lib/screens/Home/Components/DirectChannels/DirectChannels.js.map +1 -1
- package/lib/screens/Home/Components/DirectChannels/directChannels-xstate.js +202 -0
- package/lib/screens/Home/Components/DirectChannels/directChannels-xstate.js.map +1 -0
- package/lib/screens/Home/Components/DirectChannels/useSafeDirectChannelsMachine.js +108 -0
- package/lib/screens/Home/Components/DirectChannels/useSafeDirectChannelsMachine.js.map +1 -0
- package/lib/screens/Home/Components/Teams/Teams.js +79 -16
- package/lib/screens/Home/Components/Teams/Teams.js.map +1 -1
- package/lib/screens/Home/Components/Teams/hooks/useSafeMachine.js +96 -0
- package/lib/screens/Home/Components/Teams/hooks/useSafeMachine.js.map +1 -0
- package/lib/screens/Home/Components/Teams/workflow/teams-xstate.js +198 -0
- package/lib/screens/Home/Components/Teams/workflow/teams-xstate.js.map +1 -0
- package/lib/screens/Home/HomeScreen.js +58 -484
- package/lib/screens/Home/HomeScreen.js.map +1 -1
- package/lib/screens/Teams/Teams.js +8 -7
- package/lib/screens/Teams/Teams.js.map +1 -1
- package/package.json +6 -4
- package/lib/screens/Home/workflow/home-xstate.js.map +0 -1
|
@@ -1,10 +1,5 @@
|
|
|
1
|
-
import {useNavigation,useIsFocused,useFocusEffect}from'@react-navigation/native';import React__default,{useState}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 {View,HStack,Text,Spinner,Pressable,Box,FlatList}from'@admin-layout/gluestack-ui-mobile';import {userSelector}from'@adminide-stack/user-auth0-client';import {useSelector}from'react-redux';import styles from'../../styles.js';import {take,orderBy,uniqBy
|
|
2
|
-
|
|
3
|
-
loading,
|
|
4
|
-
reFetchChannels,
|
|
5
|
-
fetchMoreChannels,
|
|
6
|
-
showMore
|
|
7
|
-
}) => {
|
|
1
|
+
import {useNavigation,useIsFocused,useFocusEffect}from'@react-navigation/native';import React__default,{useState,useEffect}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 {View,HStack,Text,Spinner,Pressable,Box,FlatList}from'@admin-layout/gluestack-ui-mobile';import {userSelector}from'@adminide-stack/user-auth0-client';import {useSelector,shallowEqual}from'react-redux';import styles from'../../styles.js';import {take,orderBy,uniqBy}from'lodash-es';import {RoomType}from'common';import {useGetChannelsByUserQuery}from'common/graphql';import {MaterialIcons}from'@expo/vector-icons';import'expo-font';import'expo-splash-screen';import {useDrawerLayout}from'../../../../hooks/useDrawerLayout.js';import'../../../../hooks/useExpoNotificationProvider.js';import {useDisclose}from'../../../../hooks/useDisclose.js';import colors from'tailwindcss/colors';import'./channels-xstate.js';import {useSafeChannelsMachine}from'./useSafeChannelsMachine.js';const defaultChannelType = [RoomType.Channel, RoomType.Private, RoomType.Public];
|
|
2
|
+
const Channels = () => {
|
|
8
3
|
const {
|
|
9
4
|
isOpen,
|
|
10
5
|
onOpen,
|
|
@@ -12,18 +7,118 @@ import {useNavigation,useIsFocused,useFocusEffect}from'@react-navigation/native'
|
|
|
12
7
|
} = useDisclose();
|
|
13
8
|
const navigation = useNavigation();
|
|
14
9
|
const [expandable, setExpendable] = useState(true);
|
|
15
|
-
useSelector(userSelector);
|
|
10
|
+
useSelector(userSelector, shallowEqual);
|
|
16
11
|
const {
|
|
17
12
|
orgName
|
|
18
13
|
} = useDrawerLayout();
|
|
19
14
|
useIsFocused();
|
|
15
|
+
const [state, send] = useSafeChannelsMachine();
|
|
16
|
+
const {
|
|
17
|
+
channels,
|
|
18
|
+
loading,
|
|
19
|
+
channelsLoading,
|
|
20
|
+
showMoreChannels
|
|
21
|
+
} = state.context;
|
|
22
|
+
const {
|
|
23
|
+
data: userChannels,
|
|
24
|
+
loading: userChannelsLoading,
|
|
25
|
+
refetch: reFetchUserChannels,
|
|
26
|
+
fetchMore: fetchMoreUserChannels
|
|
27
|
+
} = useGetChannelsByUserQuery({
|
|
28
|
+
variables: {
|
|
29
|
+
criteria: {
|
|
30
|
+
orgName,
|
|
31
|
+
type: defaultChannelType,
|
|
32
|
+
team: null
|
|
33
|
+
},
|
|
34
|
+
limit: 21
|
|
35
|
+
},
|
|
36
|
+
onCompleted(data) {
|
|
37
|
+
send({
|
|
38
|
+
type: "SET_CHANNELS",
|
|
39
|
+
data: {
|
|
40
|
+
channels: (data == null ? void 0 : data.channelsByUser) || []
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
useEffect(() => {
|
|
46
|
+
if (orgName) {
|
|
47
|
+
console.log("Channels: Initializing state with orgName:", orgName);
|
|
48
|
+
send({
|
|
49
|
+
type: "INITIAL_CONTEXT",
|
|
50
|
+
data: {
|
|
51
|
+
orgName
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
return () => {
|
|
56
|
+
send({
|
|
57
|
+
type: "CLEAR_DATA"
|
|
58
|
+
});
|
|
59
|
+
};
|
|
60
|
+
}, [orgName]);
|
|
20
61
|
useFocusEffect(React__default.useCallback(() => {
|
|
21
62
|
if (!channels || channels.length === 0) {
|
|
22
63
|
reFetchChannels();
|
|
23
64
|
}
|
|
24
65
|
return () => {
|
|
25
66
|
};
|
|
26
|
-
}, [
|
|
67
|
+
}, [channels]));
|
|
68
|
+
const reFetchChannels = React__default.useCallback(() => {
|
|
69
|
+
if (state.context.channelsLoading) {
|
|
70
|
+
console.log("Skipping channels refetch - already in progress");
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
if (orgName) {
|
|
74
|
+
console.log("Refetching channels");
|
|
75
|
+
send({
|
|
76
|
+
type: "REFETCH_CHANNELS"
|
|
77
|
+
});
|
|
78
|
+
reFetchUserChannels({
|
|
79
|
+
criteria: {
|
|
80
|
+
orgName,
|
|
81
|
+
type: defaultChannelType,
|
|
82
|
+
team: null
|
|
83
|
+
},
|
|
84
|
+
limit: 21
|
|
85
|
+
}).then((res) => {
|
|
86
|
+
var _a;
|
|
87
|
+
if ((_a = res == null ? void 0 : res.data) == null ? void 0 : _a.channelsByUser) {
|
|
88
|
+
send({
|
|
89
|
+
type: "SET_CHANNELS",
|
|
90
|
+
data: {
|
|
91
|
+
channels: res.data.channelsByUser
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
}, [orgName, send, state.context.channelsLoading]);
|
|
98
|
+
const fetchMoreChannels = React__default.useCallback((skip) => {
|
|
99
|
+
var _a;
|
|
100
|
+
send({
|
|
101
|
+
type: "FETCH_MORE_CHANNELS"
|
|
102
|
+
});
|
|
103
|
+
(_a = fetchMoreUserChannels({
|
|
104
|
+
variables: {
|
|
105
|
+
criteria: {
|
|
106
|
+
orgName,
|
|
107
|
+
type: defaultChannelType,
|
|
108
|
+
team: null
|
|
109
|
+
},
|
|
110
|
+
skip
|
|
111
|
+
}
|
|
112
|
+
})) == null ? void 0 : _a.then((res) => {
|
|
113
|
+
var _a2;
|
|
114
|
+
send({
|
|
115
|
+
type: "FETCH_MORE_CHANNELS_SUCCESS",
|
|
116
|
+
data: {
|
|
117
|
+
channels: ((_a2 = res == null ? void 0 : res.data) == null ? void 0 : _a2.channelsByUser) || []
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
});
|
|
121
|
+
}, [orgName, send]);
|
|
27
122
|
React__default.useMemo(() => {
|
|
28
123
|
var _a;
|
|
29
124
|
return channels && (channels == null ? void 0 : channels.length) && take(orderBy(uniqBy((_a = [...channels]) == null ? void 0 : _a.filter((i) => i.type !== RoomType.Direct), ({
|
|
@@ -52,24 +147,25 @@ import {useNavigation,useIsFocused,useFocusEffect}from'@react-navigation/native'
|
|
|
52
147
|
fontSize: 15,
|
|
53
148
|
fontWeight: "600",
|
|
54
149
|
color: "#1f2937"
|
|
55
|
-
} }, "Channels"), /* @__PURE__ */ React__default.createElement(HStack, { space: "sm", className: "items-center" },
|
|
150
|
+
} }, "Channels"), /* @__PURE__ */ React__default.createElement(HStack, { space: "sm", className: "items-center" }, channelsLoading && /* @__PURE__ */ React__default.createElement(Spinner, { size: "small", color: "$blue600" }), /* @__PURE__ */ React__default.createElement(Pressable, { onPress: () => navigation.navigate(NavigationRoutes.AddChannel) }, /* @__PURE__ */ React__default.createElement(Box, { className: "rounded-md w-6 h-6 justify-center items-center" }, /* @__PURE__ */ React__default.createElement(Text, { className: "text-lg text-slate-700" }, "+"))), expandable ? /* @__PURE__ */ React__default.createElement(MaterialIcons, { color: "#4b5563", name: "keyboard-arrow-up", size: 22 }) : /* @__PURE__ */ React__default.createElement(MaterialIcons, { color: "#4b5563", name: "keyboard-arrow-down", size: 22 })))), expandable && /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, !channelsLoading && !(channels == null ? void 0 : channels.length) ? /* @__PURE__ */ React__default.createElement(Box, { className: "py-2 px-1" }, /* @__PURE__ */ React__default.createElement(Text, { color: colors.gray[600] }, "No channels available")) : /* @__PURE__ */ React__default.createElement(FlatList, { style: {
|
|
56
151
|
paddingVertical: 4
|
|
57
|
-
}, scrollEnabled: false, data: channels && !
|
|
152
|
+
}, scrollEnabled: false, data: channels && !channelsLoading ? channels == null ? void 0 : channels.filter((i) => (i == null ? void 0 : i.type) !== RoomType.Direct) : [], renderItem: ({
|
|
58
153
|
item
|
|
59
154
|
}) => {
|
|
60
|
-
var _a;
|
|
61
155
|
return /* @__PURE__ */ React__default.createElement(Pressable, { onPress: () => {
|
|
62
|
-
var
|
|
63
|
-
return openInbox(item == null ? void 0 : item.id, item == null ? void 0 : item.title, (
|
|
156
|
+
var _a;
|
|
157
|
+
return openInbox(item == null ? void 0 : item.id, item == null ? void 0 : item.title, (_a = item == null ? void 0 : item.members) == null ? void 0 : _a.length, item == null ? void 0 : item.type);
|
|
64
158
|
} }, /* @__PURE__ */ React__default.createElement(Box, { style: {
|
|
65
159
|
paddingVertical: 8,
|
|
66
160
|
paddingHorizontal: 1,
|
|
67
161
|
marginVertical: 1
|
|
68
162
|
} }, /* @__PURE__ */ React__default.createElement(HStack, { space: "md", className: "flex-1 items-center" }, /* @__PURE__ */ React__default.createElement(Box, { style: {
|
|
69
163
|
width: 24,
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
164
|
+
height: 24,
|
|
165
|
+
borderRadius: 4,
|
|
166
|
+
alignItems: "center",
|
|
167
|
+
justifyContent: "center"
|
|
168
|
+
} }, /* @__PURE__ */ React__default.createElement(Text, { className: "text-black font-medium" }, "#")), /* @__PURE__ */ React__default.createElement(Text, { className: "text-gray-700 flex-1" }, item.title))));
|
|
169
|
+
}, keyExtractor: (item) => String(item.id) }), showMoreChannels && (channels == null ? void 0 : channels.length) >= 20 && /* @__PURE__ */ React__default.createElement(Pressable, { onPress: () => fetchMoreChannels(channels == null ? void 0 : channels.length), className: "px-1 py-3" }, /* @__PURE__ */ React__default.createElement(Text, { className: "text-blue-600 font-medium" }, "Show more channels..."))));
|
|
74
170
|
};
|
|
75
171
|
var Channels$1 = React__default.memo(Channels);export{Channels$1 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, useLayoutEffect } from 'react';\nimport { TouchableOpacity, Share, Modal } from 'react-native';\nimport { NavigationRoutes } from '../../../../constants';\nimport {\n Pressable,\n View,\n Image,\n FlatList,\n Icon,\n AddIcon,\n Box,\n Text,\n Avatar,\n Spinner,\n VStack,\n HStack,\n Button,\n ButtonText,\n} from '@admin-layout/gluestack-ui-mobile';\nimport { userSelector, isUserAuthenticated } from '@adminide-stack/user-auth0-client';\nimport { useSelector } from 'react-redux';\nimport { useNavigation } from '@react-navigation/native';\nimport { navigationRef } from '@common-stack/client-react';\nimport styles from '../../styles';\nimport { startCase, orderBy, uniqBy, take } from 'lodash-es';\nimport { RoomType } from 'common';\nimport { useGetChannelsByUserQuery } from 'common/graphql';\nimport { FontAwesome, Feather, Octicons, MaterialIcons } from '@expo/vector-icons';\nimport { useDrawerLayout, useDisclose } from '../../../../hooks';\nimport colors from 'tailwindcss/colors';\nimport ActionSheet from '../../../../components/Actionsheet';\n\nconst Channels = ({ channels, loading, reFetchChannels, fetchMoreChannels, showMore }) => {\n const { isOpen, onOpen, onClose } = useDisclose();\n const navigation = useNavigation<any>();\n const [expandable, setExpendable] = useState(true);\n const user: any = useSelector(userSelector);\n const { orgName } = useDrawerLayout();\n const isFocused = useIsFocused();\n const actionItems = [\n {\n id: 1,\n label: 'Create Channel',\n onPress: () => navigation.navigate(NavigationRoutes.Channels, { orgName }),\n },\n {\n id: 2,\n label: 'Browse Channels',\n onPress: () => navigation.navigate(NavigationRoutes.Channels, { orgName }),\n },\n ];\n\n useFocusEffect(\n React.useCallback(() => {\n // Only fetch channels when first focused or when we don't have any channels\n if (!channels || channels.length === 0) {\n reFetchChannels();\n }\n\n return () => {\n // Do something when the screen is unfocused\n // Useful for cleanup functions\n };\n }, [reFetchChannels, channels]),\n );\n\n const organizationChannels = React.useMemo(() => {\n //Direct channel\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 20,\n )) ||\n []\n );\n }, [channels]);\n\n const openInbox = React.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],\n );\n\n return (\n <View style={[styles.channelContainer, { paddingHorizontal: 10 }]}>\n <TouchableOpacity\n style={[styles.headingContainer, { paddingVertical: 8, marginBottom: 4 }]}\n onPress={() => setExpendable(!expandable)}\n >\n <HStack className=\"flex-1 items-center justify-between\">\n <Text style={{ fontSize: 15, fontWeight: '600', color: '#1f2937' }}>Channels</Text>\n <HStack space={'sm'} className=\"items-center\">\n {loading && <Spinner size={'small'} color={'$blue600'} />}\n <Pressable onPress={() => navigation.navigate(NavigationRoutes.AddChannel)}>\n <Box className=\"rounded-md w-6 h-6 justify-center items-center\">\n <Text className=\"text-lg text-slate-700\">+</Text>\n </Box>\n </Pressable>\n {expandable ? (\n <MaterialIcons color={'#4b5563'} name={'keyboard-arrow-up'} size={22} />\n ) : (\n <MaterialIcons color={'#4b5563'} name={'keyboard-arrow-down'} size={22} />\n )}\n </HStack>\n </HStack>\n </TouchableOpacity>\n\n {expandable && (\n <>\n {!loading && !channels?.length ? (\n <Box className=\"py-2 px-1\">\n <Text color={colors.gray[600]}>No channels available</Text>\n </Box>\n ) : (\n <FlatList\n style={{ paddingVertical: 4 }}\n scrollEnabled={false}\n data={channels && !loading ? channels?.filter((i: any) => i?.type !== RoomType.Direct) : []}\n renderItem={({ item }) => {\n return (\n <Pressable\n onPress={() =>\n openInbox(item?.id, item?.title, item?.members?.length, item?.type)\n }\n >\n <Box style={{ paddingVertical: 8, paddingHorizontal: 1, marginVertical: 1 }}>\n <HStack space={'md'} className=\"flex-1 items-center\">\n <Box\n style={{\n width: 24,\n justifyContent: 'center',\n alignItems: 'center',\n }}\n >\n <Octicons name=\"hash\" size={18} color=\"#4b5563\" />\n </Box>\n <Text className=\"text-gray-800 text-base font-medium\">\n {startCase((item?.title || item?.displayName || '')?.toLowerCase())}\n </Text>\n </HStack>\n </Box>\n </Pressable>\n );\n }}\n keyExtractor={(item, index) => `${index}-${item?.id}`}\n />\n )}\n\n {showMore && channels?.length >= 20 && (\n <Pressable onPress={() => fetchMoreChannels(channels?.length)} className=\"px-1 py-3\">\n <Text className=\"text-blue-600 font-medium\">Show more channels...</Text>\n </Pressable>\n )}\n </>\n )}\n </View>\n );\n};\n\nexport default React.memo(Channels);\n"],"names":["React","_a"],"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, useLayoutEffect } from 'react';\nimport { TouchableOpacity, Share, Modal } from 'react-native';\nimport { NavigationRoutes } from '../../../../constants';\nimport {\n Pressable,\n View,\n Image,\n FlatList,\n Icon,\n AddIcon,\n Box,\n Text,\n Avatar,\n Spinner,\n VStack,\n HStack,\n Button,\n ButtonText,\n} from '@admin-layout/gluestack-ui-mobile';\nimport { userSelector, isUserAuthenticated } from '@adminide-stack/user-auth0-client';\nimport { useSelector, shallowEqual } from 'react-redux';\nimport { useNavigation } from '@react-navigation/native';\nimport { navigationRef } from '@common-stack/client-react';\nimport styles from '../../styles';\nimport { startCase, orderBy, uniqBy, take } from 'lodash-es';\nimport { RoomType } from 'common';\nimport { useGetChannelsByUserQuery } from 'common/graphql';\nimport { FontAwesome, Feather, Octicons, MaterialIcons } from '@expo/vector-icons';\nimport { useDrawerLayout, useDisclose } from '../../../../hooks';\nimport colors from 'tailwindcss/colors';\nimport ActionSheet from '../../../../components/Actionsheet';\nimport { channelsXstate } from './channels-xstate';\nimport { useSafeChannelsMachine } from './useSafeChannelsMachine';\n\nconst defaultChannelType = [RoomType.Channel, RoomType.Private, RoomType.Public];\n\nconst Channels = () => {\n const { isOpen, onOpen, onClose } = useDisclose();\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\n // Using the safe XState machine hook\n const [state, send] = useSafeChannelsMachine(channelsXstate);\n\n const { channels, loading, channelsLoading, showMoreChannels } = state.context;\n\n const actionItems = [\n {\n id: 1,\n label: 'Create Channel',\n onPress: () => navigation.navigate(NavigationRoutes.Channels, { orgName }),\n },\n {\n id: 2,\n label: 'Browse Channels',\n onPress: () => navigation.navigate(NavigationRoutes.Channels, { orgName }),\n },\n ];\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: 21,\n },\n onCompleted(data) {\n send({\n type: 'SET_CHANNELS',\n data: { channels: data?.channelsByUser || [] },\n });\n },\n });\n\n // Initialize XState with the org name on mount\n useEffect(() => {\n if (orgName) {\n console.log('Channels: Initializing state with orgName:', orgName);\n send({\n type: 'INITIAL_CONTEXT',\n data: { orgName },\n });\n }\n\n return () => {\n send({ type: 'CLEAR_DATA' });\n };\n }, [orgName]);\n\n useFocusEffect(\n React.useCallback(() => {\n // Only fetch channels when first focused or when we don't have any channels\n if (!channels || channels.length === 0) {\n reFetchChannels();\n }\n\n return () => {\n // Do something when the screen is unfocused\n // Useful for cleanup functions\n };\n }, [channels]),\n );\n\n const reFetchChannels = React.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 console.log('Refetching channels');\n send({ type: 'REFETCH_CHANNELS' });\n reFetchUserChannels({\n criteria: {\n orgName: orgName,\n type: defaultChannelType,\n team: null,\n },\n limit: 21,\n }).then((res) => {\n if (res?.data?.channelsByUser) {\n send({\n type: 'SET_CHANNELS',\n data: { channels: res.data.channelsByUser },\n });\n }\n });\n }\n }, [orgName, send, state.context.channelsLoading]);\n\n const fetchMoreChannels = React.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],\n );\n\n const organizationChannels = React.useMemo(() => {\n //Direct channel\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 20,\n )) ||\n []\n );\n }, [channels]);\n\n const openInbox = React.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],\n );\n\n return (\n <View style={[styles.channelContainer, { paddingHorizontal: 10 }]}>\n <TouchableOpacity\n style={[styles.headingContainer, { paddingVertical: 8, marginBottom: 4 }]}\n onPress={() => setExpendable(!expandable)}\n >\n <HStack className=\"flex-1 items-center justify-between\">\n <Text style={{ fontSize: 15, fontWeight: '600', color: '#1f2937' }}>Channels</Text>\n <HStack space={'sm'} className=\"items-center\">\n {channelsLoading && <Spinner size={'small'} color={'$blue600'} />}\n <Pressable onPress={() => navigation.navigate(NavigationRoutes.AddChannel)}>\n <Box className=\"rounded-md w-6 h-6 justify-center items-center\">\n <Text className=\"text-lg text-slate-700\">+</Text>\n </Box>\n </Pressable>\n {expandable ? (\n <MaterialIcons color={'#4b5563'} name={'keyboard-arrow-up'} size={22} />\n ) : (\n <MaterialIcons color={'#4b5563'} name={'keyboard-arrow-down'} size={22} />\n )}\n </HStack>\n </HStack>\n </TouchableOpacity>\n\n {expandable && (\n <>\n {!channelsLoading && !channels?.length ? (\n <Box className=\"py-2 px-1\">\n <Text color={colors.gray[600]}>No channels available</Text>\n </Box>\n ) : (\n <FlatList\n style={{ paddingVertical: 4 }}\n scrollEnabled={false}\n data={\n channels && !channelsLoading\n ? channels?.filter((i: any) => i?.type !== RoomType.Direct)\n : []\n }\n renderItem={({ item }) => {\n return (\n <Pressable\n onPress={() =>\n openInbox(item?.id, item?.title, item?.members?.length, item?.type)\n }\n >\n <Box style={{ paddingVertical: 8, paddingHorizontal: 1, marginVertical: 1 }}>\n <HStack space={'md'} className=\"flex-1 items-center\">\n <Box\n style={{\n width: 24,\n height: 24,\n borderRadius: 4,\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n <Text className=\"text-black font-medium\">#</Text>\n </Box>\n <Text className=\"text-gray-700 flex-1\">{item.title}</Text>\n </HStack>\n </Box>\n </Pressable>\n );\n }}\n keyExtractor={(item) => String(item.id)}\n />\n )}\n\n {showMoreChannels && channels?.length >= 20 && (\n <Pressable onPress={() => fetchMoreChannels(channels?.length)} className=\"px-1 py-3\">\n <Text className=\"text-blue-600 font-medium\">Show more channels...</Text>\n </Pressable>\n )}\n </>\n )}\n </View>\n );\n};\n\nexport default React.memo(Channels);\n"],"names":["React","_a"],"mappings":"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"}
|
|
@@ -25,14 +25,6 @@ var BaseState = /* @__PURE__ */ ((BaseState2) => {
|
|
|
25
25
|
BaseState2["FetchData"] = "fetchData";
|
|
26
26
|
return BaseState2;
|
|
27
27
|
})(BaseState || {});
|
|
28
|
-
var MainState = /* @__PURE__ */ ((MainState2) => {
|
|
29
|
-
MainState2["FetchMoreChannels"] = "fetchMoreChannels";
|
|
30
|
-
MainState2["RefetchTeams"] = "refetchTeams";
|
|
31
|
-
MainState2["RefetchChannels"] = "refetchChannels";
|
|
32
|
-
MainState2["RefetchDirectChannels"] = "refetchDirectChannels";
|
|
33
|
-
MainState2["AddDirectChannel"] = "addDirectChannel";
|
|
34
|
-
return MainState2;
|
|
35
|
-
})(MainState || {});
|
|
36
28
|
setup({
|
|
37
29
|
types: {
|
|
38
30
|
context: {},
|
|
@@ -48,8 +40,6 @@ setup({
|
|
|
48
40
|
error: ((_a = event.data) == null ? void 0 : _a.message) || "An error occurred",
|
|
49
41
|
loading: false,
|
|
50
42
|
channelsLoading: false,
|
|
51
|
-
teamsLoading: false,
|
|
52
|
-
directChannelsLoading: false,
|
|
53
43
|
moreChannelsLoading: false
|
|
54
44
|
});
|
|
55
45
|
}),
|
|
@@ -60,8 +50,6 @@ setup({
|
|
|
60
50
|
return __spreadProps(__spreadValues({}, context), {
|
|
61
51
|
loading: false,
|
|
62
52
|
channelsLoading: false,
|
|
63
|
-
teamsLoading: false,
|
|
64
|
-
directChannelsLoading: false,
|
|
65
53
|
moreChannelsLoading: false
|
|
66
54
|
});
|
|
67
55
|
}),
|
|
@@ -73,22 +61,9 @@ setup({
|
|
|
73
61
|
return merge(__spreadProps(__spreadValues({}, context), {
|
|
74
62
|
orgName: ((_a = event.data) == null ? void 0 : _a.orgName) || null,
|
|
75
63
|
loading: true,
|
|
76
|
-
channelsLoading: true
|
|
77
|
-
teamsLoading: true,
|
|
78
|
-
directChannelsLoading: true
|
|
64
|
+
channelsLoading: true
|
|
79
65
|
}));
|
|
80
66
|
}),
|
|
81
|
-
setTeams: assign(({
|
|
82
|
-
context,
|
|
83
|
-
event
|
|
84
|
-
}) => {
|
|
85
|
-
var _a;
|
|
86
|
-
return __spreadProps(__spreadValues({}, context), {
|
|
87
|
-
teams: ((_a = event.data) == null ? void 0 : _a.teams) || [],
|
|
88
|
-
teamsLoading: false,
|
|
89
|
-
loading: false
|
|
90
|
-
});
|
|
91
|
-
}),
|
|
92
67
|
setChannels: assign(({
|
|
93
68
|
context,
|
|
94
69
|
event
|
|
@@ -100,17 +75,6 @@ setup({
|
|
|
100
75
|
loading: false
|
|
101
76
|
});
|
|
102
77
|
}),
|
|
103
|
-
setDirectChannels: assign(({
|
|
104
|
-
context,
|
|
105
|
-
event
|
|
106
|
-
}) => {
|
|
107
|
-
var _a;
|
|
108
|
-
return __spreadProps(__spreadValues({}, context), {
|
|
109
|
-
directChannels: ((_a = event.data) == null ? void 0 : _a.directChannels) || [],
|
|
110
|
-
directChannelsLoading: false,
|
|
111
|
-
loading: false
|
|
112
|
-
});
|
|
113
|
-
}),
|
|
114
78
|
addMoreChannels: assign(({
|
|
115
79
|
context,
|
|
116
80
|
event
|
|
@@ -136,9 +100,7 @@ setup({
|
|
|
136
100
|
context
|
|
137
101
|
}) => {
|
|
138
102
|
return __spreadProps(__spreadValues({}, context), {
|
|
139
|
-
teams: [],
|
|
140
103
|
channels: [],
|
|
141
|
-
directChannels: [],
|
|
142
104
|
channelsSkip: 0,
|
|
143
105
|
showMoreChannels: true
|
|
144
106
|
});
|
|
@@ -156,31 +118,15 @@ setup({
|
|
|
156
118
|
return __spreadProps(__spreadValues({}, context), {
|
|
157
119
|
loading: false,
|
|
158
120
|
channelsLoading: false,
|
|
159
|
-
teamsLoading: false,
|
|
160
|
-
directChannelsLoading: false,
|
|
161
121
|
moreChannelsLoading: false
|
|
162
122
|
});
|
|
163
123
|
}),
|
|
164
|
-
startTeamsLoading: assign(({
|
|
165
|
-
context
|
|
166
|
-
}) => {
|
|
167
|
-
return __spreadProps(__spreadValues({}, context), {
|
|
168
|
-
teamsLoading: true
|
|
169
|
-
});
|
|
170
|
-
}),
|
|
171
124
|
startChannelsLoading: assign(({
|
|
172
125
|
context
|
|
173
126
|
}) => {
|
|
174
127
|
return __spreadProps(__spreadValues({}, context), {
|
|
175
128
|
channelsLoading: true
|
|
176
129
|
});
|
|
177
|
-
}),
|
|
178
|
-
startDirectChannelsLoading: assign(({
|
|
179
|
-
context
|
|
180
|
-
}) => {
|
|
181
|
-
return __spreadProps(__spreadValues({}, context), {
|
|
182
|
-
directChannelsLoading: true
|
|
183
|
-
});
|
|
184
130
|
})
|
|
185
131
|
},
|
|
186
132
|
guards: {
|
|
@@ -205,17 +151,13 @@ setup({
|
|
|
205
151
|
}
|
|
206
152
|
}
|
|
207
153
|
}).createMachine({
|
|
208
|
-
id: "
|
|
154
|
+
id: "channels",
|
|
209
155
|
initial: "idle" /* Idle */,
|
|
210
156
|
context: {
|
|
211
157
|
orgName: null,
|
|
212
|
-
teams: [],
|
|
213
158
|
channels: [],
|
|
214
|
-
directChannels: [],
|
|
215
159
|
loading: false,
|
|
216
160
|
channelsLoading: false,
|
|
217
|
-
teamsLoading: false,
|
|
218
|
-
directChannelsLoading: false,
|
|
219
161
|
moreChannelsLoading: false,
|
|
220
162
|
error: null,
|
|
221
163
|
channelsSkip: 0,
|
|
@@ -233,22 +175,10 @@ setup({
|
|
|
233
175
|
actions: ["updateChannelsSkip"],
|
|
234
176
|
guard: "hasMoreChannels"
|
|
235
177
|
},
|
|
236
|
-
["REFETCH_TEAMS" /* REFETCH_TEAMS */]: {
|
|
237
|
-
target: "refetchTeams" /* RefetchTeams */,
|
|
238
|
-
actions: ["startTeamsLoading"]
|
|
239
|
-
},
|
|
240
178
|
["REFETCH_CHANNELS" /* REFETCH_CHANNELS */]: {
|
|
241
179
|
target: "refetchChannels" /* RefetchChannels */,
|
|
242
180
|
actions: ["startChannelsLoading"]
|
|
243
181
|
},
|
|
244
|
-
["REFETCH_DIRECT_CHANNELS" /* REFETCH_DIRECT_CHANNELS */]: {
|
|
245
|
-
target: "refetchDirectChannels" /* RefetchDirectChannels */,
|
|
246
|
-
actions: ["startDirectChannelsLoading"]
|
|
247
|
-
},
|
|
248
|
-
["ADD_DIRECT_CHANNEL" /* ADD_DIRECT_CHANNEL */]: {
|
|
249
|
-
target: "addDirectChannel" /* AddDirectChannel */,
|
|
250
|
-
actions: ["startDirectChannelsLoading"]
|
|
251
|
-
},
|
|
252
182
|
["CLEAR_DATA" /* CLEAR_DATA */]: {
|
|
253
183
|
target: "idle" /* Idle */,
|
|
254
184
|
actions: ["clearData"]
|
|
@@ -273,18 +203,10 @@ setup({
|
|
|
273
203
|
},
|
|
274
204
|
["fetchData" /* FetchData */]: {
|
|
275
205
|
on: {
|
|
276
|
-
["SET_TEAMS" /* SET_TEAMS */]: {
|
|
277
|
-
target: "idle" /* Idle */,
|
|
278
|
-
actions: ["setTeams"]
|
|
279
|
-
},
|
|
280
206
|
["SET_CHANNELS" /* SET_CHANNELS */]: {
|
|
281
207
|
target: "idle" /* Idle */,
|
|
282
208
|
actions: ["setChannels"]
|
|
283
209
|
},
|
|
284
|
-
["SET_DIRECT_CHANNELS" /* SET_DIRECT_CHANNELS */]: {
|
|
285
|
-
target: "idle" /* Idle */,
|
|
286
|
-
actions: ["setDirectChannels"]
|
|
287
|
-
},
|
|
288
210
|
TIMEOUT: {
|
|
289
211
|
target: "idle" /* Idle */,
|
|
290
212
|
actions: ["handleEmptyData"]
|
|
@@ -309,18 +231,6 @@ setup({
|
|
|
309
231
|
}
|
|
310
232
|
}
|
|
311
233
|
},
|
|
312
|
-
["refetchTeams" /* RefetchTeams */]: {
|
|
313
|
-
on: {
|
|
314
|
-
["SET_TEAMS" /* SET_TEAMS */]: {
|
|
315
|
-
target: "idle" /* Idle */,
|
|
316
|
-
actions: ["setTeams"]
|
|
317
|
-
},
|
|
318
|
-
["ERROR" /* ERROR */]: {
|
|
319
|
-
target: "error" /* Error */,
|
|
320
|
-
actions: []
|
|
321
|
-
}
|
|
322
|
-
}
|
|
323
|
-
},
|
|
324
234
|
["refetchChannels" /* RefetchChannels */]: {
|
|
325
235
|
on: {
|
|
326
236
|
["SET_CHANNELS" /* SET_CHANNELS */]: {
|
|
@@ -332,30 +242,6 @@ setup({
|
|
|
332
242
|
actions: []
|
|
333
243
|
}
|
|
334
244
|
}
|
|
335
|
-
},
|
|
336
|
-
["refetchDirectChannels" /* RefetchDirectChannels */]: {
|
|
337
|
-
on: {
|
|
338
|
-
["SET_DIRECT_CHANNELS" /* SET_DIRECT_CHANNELS */]: {
|
|
339
|
-
target: "idle" /* Idle */,
|
|
340
|
-
actions: ["setDirectChannels"]
|
|
341
|
-
},
|
|
342
|
-
["ERROR" /* ERROR */]: {
|
|
343
|
-
target: "error" /* Error */,
|
|
344
|
-
actions: []
|
|
345
|
-
}
|
|
346
|
-
}
|
|
347
|
-
},
|
|
348
|
-
["addDirectChannel" /* AddDirectChannel */]: {
|
|
349
|
-
on: {
|
|
350
|
-
["REFETCH_DIRECT_CHANNELS" /* REFETCH_DIRECT_CHANNELS */]: {
|
|
351
|
-
target: "refetchDirectChannels" /* RefetchDirectChannels */,
|
|
352
|
-
actions: []
|
|
353
|
-
},
|
|
354
|
-
["ERROR" /* ERROR */]: {
|
|
355
|
-
target: "error" /* Error */,
|
|
356
|
-
actions: []
|
|
357
|
-
}
|
|
358
|
-
}
|
|
359
245
|
}
|
|
360
246
|
}
|
|
361
|
-
});export{BaseState
|
|
247
|
+
});export{BaseState};//# sourceMappingURL=channels-xstate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"channels-xstate.js","sources":["../../../../../src/screens/Home/Components/Channels/channels-xstate.ts"],"sourcesContent":["import { assign, setup } from 'xstate';\nimport { merge } from 'lodash-es';\nimport { RoomType } from 'common';\n\nexport const enum Actions {\n INITIAL_CONTEXT = 'INITIAL_CONTEXT',\n ERROR_HANDLED = 'ERROR_HANDLED',\n SET_CHANNELS = 'SET_CHANNELS',\n CLEAR_DATA = 'CLEAR_DATA',\n START_LOADING = 'START_LOADING',\n STOP_LOADING = 'STOP_LOADING',\n FETCH_MORE_CHANNELS = 'FETCH_MORE_CHANNELS',\n REFETCH_CHANNELS = 'REFETCH_CHANNELS',\n FETCH_MORE_CHANNELS_SUCCESS = 'FETCH_MORE_CHANNELS_SUCCESS',\n ERROR = 'ERROR',\n}\n\nexport const enum BaseState {\n Idle = 'idle',\n Error = 'error',\n Loading = 'loading',\n Done = 'done',\n FetchData = 'fetchData',\n}\n\nexport const enum MainState {\n FetchMoreChannels = 'fetchMoreChannels',\n RefetchChannels = 'refetchChannels',\n}\n\n// Define event types for better type safety\ntype ChannelEvent =\n | { type: 'INITIAL_CONTEXT'; data?: { orgName?: string } }\n | { type: 'ERROR_HANDLED' }\n | { type: 'SET_CHANNELS'; data?: { channels?: any[] } }\n | { type: 'CLEAR_DATA' }\n | { type: 'START_LOADING' }\n | { type: 'STOP_LOADING' }\n | { type: 'FETCH_MORE_CHANNELS' }\n | { type: 'REFETCH_CHANNELS' }\n | { type: 'FETCH_MORE_CHANNELS_SUCCESS'; data?: { channels?: any[] } }\n | { type: 'ERROR'; data?: { message?: string } };\n\nexport const channelsXstate = setup({\n types: {\n context: {} as {\n orgName: string | null;\n channels: any[];\n loading: boolean;\n channelsLoading: boolean;\n moreChannelsLoading: boolean;\n error: string | null;\n channelsSkip: number;\n showMoreChannels: boolean;\n },\n events: {} as ChannelEvent,\n },\n actions: {\n errorState: assign(({ context, event }: { context: any; event: any }) => {\n return {\n ...context,\n error: event.data?.message || 'An error occurred',\n loading: false,\n channelsLoading: false,\n moreChannelsLoading: false,\n };\n }),\n handleEmptyData: assign(({ context }: { context: any }) => {\n console.log('No data available, setting loading to false');\n return {\n ...context,\n loading: false,\n channelsLoading: false,\n moreChannelsLoading: false,\n };\n }),\n setInitialContext: assign(({ context, event }: { context: any; event: any }) => {\n return merge({\n ...context,\n orgName: event.data?.orgName || null,\n loading: true,\n channelsLoading: true,\n });\n }),\n setChannels: assign(({ context, event }: { context: any; event: any }) => {\n return {\n ...context,\n channels: event.data?.channels || [],\n channelsLoading: false,\n loading: false,\n };\n }),\n addMoreChannels: assign(({ context, event }: { context: any; event: any }) => {\n const newChannels = event.data?.channels || [];\n const showMore = newChannels.length > 0;\n\n return {\n ...context,\n channels: [...context.channels, ...newChannels],\n moreChannelsLoading: false,\n showMoreChannels: showMore,\n };\n }),\n updateChannelsSkip: assign(({ context }) => {\n return {\n ...context,\n channelsSkip: context.channels.length,\n moreChannelsLoading: true,\n };\n }),\n clearData: assign(({ context }) => {\n return {\n ...context,\n channels: [],\n channelsSkip: 0,\n showMoreChannels: true,\n };\n }),\n startLoading: assign(({ context }) => {\n return {\n ...context,\n loading: true,\n };\n }),\n stopLoading: assign(({ context }) => {\n return {\n ...context,\n loading: false,\n channelsLoading: false,\n moreChannelsLoading: false,\n };\n }),\n startChannelsLoading: assign(({ context }) => {\n return {\n ...context,\n channelsLoading: true,\n };\n }),\n },\n guards: {\n hasMoreChannels: ({ context }) => {\n return context.showMoreChannels;\n },\n },\n schemas: {\n events: {\n type: 'object',\n properties: {\n type: { type: 'string' },\n data: { type: 'object' },\n },\n required: ['type'],\n },\n },\n}).createMachine({\n id: 'channels',\n initial: BaseState.Idle,\n context: {\n orgName: null,\n channels: [],\n loading: false,\n channelsLoading: false,\n moreChannelsLoading: false,\n error: null,\n channelsSkip: 0,\n showMoreChannels: true,\n },\n states: {\n [BaseState.Idle]: {\n on: {\n [Actions.INITIAL_CONTEXT]: {\n target: BaseState.FetchData,\n actions: ['setInitialContext'],\n },\n [Actions.FETCH_MORE_CHANNELS]: {\n target: MainState.FetchMoreChannels,\n actions: ['updateChannelsSkip'],\n guard: 'hasMoreChannels',\n },\n [Actions.REFETCH_CHANNELS]: {\n target: MainState.RefetchChannels,\n actions: ['startChannelsLoading'],\n },\n [Actions.CLEAR_DATA]: {\n target: BaseState.Idle,\n actions: ['clearData'],\n },\n [Actions.START_LOADING]: {\n target: BaseState.Idle,\n actions: ['startLoading'],\n },\n [Actions.STOP_LOADING]: {\n target: BaseState.Idle,\n actions: ['stopLoading'],\n },\n },\n },\n [BaseState.Error]: {\n entry: ['errorState'],\n on: {\n [Actions.ERROR_HANDLED]: {\n target: BaseState.Idle,\n },\n },\n },\n [BaseState.FetchData]: {\n on: {\n [Actions.SET_CHANNELS]: {\n target: BaseState.Idle,\n actions: ['setChannels'],\n },\n TIMEOUT: {\n target: BaseState.Idle,\n actions: ['handleEmptyData'],\n },\n },\n after: {\n 5000: {\n target: BaseState.Idle,\n actions: ['handleEmptyData'],\n },\n },\n },\n [MainState.FetchMoreChannels]: {\n on: {\n [Actions.FETCH_MORE_CHANNELS_SUCCESS]: {\n target: BaseState.Idle,\n actions: ['addMoreChannels'],\n },\n [Actions.ERROR]: {\n target: BaseState.Error,\n actions: [],\n },\n },\n },\n [MainState.RefetchChannels]: {\n on: {\n [Actions.SET_CHANNELS]: {\n target: BaseState.Idle,\n actions: ['setChannels'],\n },\n [Actions.ERROR]: {\n target: BaseState.Error,\n actions: [],\n },\n },\n },\n },\n});\n"],"names":["BaseState"],"mappings":"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"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import {useState,useCallback}from'react';import {BaseState}from'./channels-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
|
+
function useSafeChannelsMachine(machine) {
|
|
21
|
+
const [state, setState] = useState({
|
|
22
|
+
context: {
|
|
23
|
+
orgName: null,
|
|
24
|
+
channels: [],
|
|
25
|
+
loading: false,
|
|
26
|
+
channelsLoading: false,
|
|
27
|
+
moreChannelsLoading: false,
|
|
28
|
+
error: null,
|
|
29
|
+
channelsSkip: 0,
|
|
30
|
+
showMoreChannels: true
|
|
31
|
+
},
|
|
32
|
+
value: "idle"
|
|
33
|
+
});
|
|
34
|
+
const send = useCallback((event) => {
|
|
35
|
+
var _a;
|
|
36
|
+
try {
|
|
37
|
+
console.log("Channels Event received:", event.type);
|
|
38
|
+
if (event.type === "INITIAL_CONTEXT") {
|
|
39
|
+
setState((prev) => {
|
|
40
|
+
var _a2;
|
|
41
|
+
return __spreadProps(__spreadValues({}, prev), {
|
|
42
|
+
context: __spreadProps(__spreadValues({}, prev.context), {
|
|
43
|
+
orgName: ((_a2 = event.data) == null ? void 0 : _a2.orgName) || null,
|
|
44
|
+
loading: true,
|
|
45
|
+
channelsLoading: true
|
|
46
|
+
}),
|
|
47
|
+
value: BaseState.FetchData
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
} else if (event.type === "SET_CHANNELS") {
|
|
51
|
+
setState((prev) => {
|
|
52
|
+
var _a2;
|
|
53
|
+
return __spreadProps(__spreadValues({}, prev), {
|
|
54
|
+
context: __spreadProps(__spreadValues({}, prev.context), {
|
|
55
|
+
channels: ((_a2 = event.data) == null ? void 0 : _a2.channels) || [],
|
|
56
|
+
channelsLoading: false
|
|
57
|
+
}),
|
|
58
|
+
value: "idle"
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
} else if (event.type === "CLEAR_DATA") {
|
|
62
|
+
setState((prev) => __spreadProps(__spreadValues({}, prev), {
|
|
63
|
+
context: __spreadProps(__spreadValues({}, prev.context), {
|
|
64
|
+
channels: [],
|
|
65
|
+
channelsSkip: 0,
|
|
66
|
+
showMoreChannels: true
|
|
67
|
+
})
|
|
68
|
+
}));
|
|
69
|
+
} else if (event.type === "FETCH_MORE_CHANNELS") {
|
|
70
|
+
setState((prev) => __spreadProps(__spreadValues({}, prev), {
|
|
71
|
+
context: __spreadProps(__spreadValues({}, prev.context), {
|
|
72
|
+
channelsSkip: prev.context.channels.length,
|
|
73
|
+
moreChannelsLoading: true
|
|
74
|
+
}),
|
|
75
|
+
value: "fetchMoreChannels"
|
|
76
|
+
}));
|
|
77
|
+
} else if (event.type === "REFETCH_CHANNELS") {
|
|
78
|
+
setState((prev) => __spreadProps(__spreadValues({}, prev), {
|
|
79
|
+
context: __spreadProps(__spreadValues({}, prev.context), {
|
|
80
|
+
channelsLoading: true
|
|
81
|
+
}),
|
|
82
|
+
value: "refetchChannels"
|
|
83
|
+
}));
|
|
84
|
+
} else if (event.type === "FETCH_MORE_CHANNELS_SUCCESS") {
|
|
85
|
+
const newChannels = ((_a = event.data) == null ? void 0 : _a.channels) || [];
|
|
86
|
+
const showMore = newChannels.length > 0;
|
|
87
|
+
setState((prev) => __spreadProps(__spreadValues({}, prev), {
|
|
88
|
+
context: __spreadProps(__spreadValues({}, prev.context), {
|
|
89
|
+
channels: [...prev.context.channels, ...newChannels],
|
|
90
|
+
showMoreChannels: showMore,
|
|
91
|
+
moreChannelsLoading: false
|
|
92
|
+
}),
|
|
93
|
+
value: "idle"
|
|
94
|
+
}));
|
|
95
|
+
} else if (event.type === "START_LOADING") {
|
|
96
|
+
setState((prev) => __spreadProps(__spreadValues({}, prev), {
|
|
97
|
+
context: __spreadProps(__spreadValues({}, prev.context), {
|
|
98
|
+
loading: true
|
|
99
|
+
})
|
|
100
|
+
}));
|
|
101
|
+
} else if (event.type === "STOP_LOADING") {
|
|
102
|
+
setState((prev) => __spreadProps(__spreadValues({}, prev), {
|
|
103
|
+
context: __spreadProps(__spreadValues({}, prev.context), {
|
|
104
|
+
loading: false,
|
|
105
|
+
channelsLoading: false,
|
|
106
|
+
moreChannelsLoading: false
|
|
107
|
+
})
|
|
108
|
+
}));
|
|
109
|
+
} else if (event.type === "ERROR") {
|
|
110
|
+
setState((prev) => {
|
|
111
|
+
var _a2;
|
|
112
|
+
return __spreadProps(__spreadValues({}, prev), {
|
|
113
|
+
context: __spreadProps(__spreadValues({}, prev.context), {
|
|
114
|
+
error: ((_a2 = event.data) == null ? void 0 : _a2.message) || "An error occurred",
|
|
115
|
+
loading: false,
|
|
116
|
+
channelsLoading: false,
|
|
117
|
+
moreChannelsLoading: false
|
|
118
|
+
}),
|
|
119
|
+
value: "error"
|
|
120
|
+
});
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
} catch (error) {
|
|
124
|
+
console.error("Error in useSafeChannelsMachine send function:", error);
|
|
125
|
+
}
|
|
126
|
+
}, []);
|
|
127
|
+
return [state, send];
|
|
128
|
+
}export{useSafeChannelsMachine};//# sourceMappingURL=useSafeChannelsMachine.js.map
|