@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.
Files changed (21) hide show
  1. package/lib/screens/Home/Components/Channels/Channels.js +91 -103
  2. package/lib/screens/Home/Components/Channels/Channels.js.map +1 -1
  3. package/lib/screens/Home/Components/DirectChannels/DirectChannels.js +163 -231
  4. package/lib/screens/Home/Components/DirectChannels/DirectChannels.js.map +1 -1
  5. package/lib/screens/Home/Components/Teams/Teams.js +76 -91
  6. package/lib/screens/Home/Components/Teams/Teams.js.map +1 -1
  7. package/lib/screens/Home/HomeScreen.js +3 -5
  8. package/lib/screens/Home/HomeScreen.js.map +1 -1
  9. package/package.json +3 -3
  10. package/lib/screens/Home/Components/Channels/channels-xstate.js +0 -247
  11. package/lib/screens/Home/Components/Channels/channels-xstate.js.map +0 -1
  12. package/lib/screens/Home/Components/Channels/useSafeChannelsMachine.js +0 -128
  13. package/lib/screens/Home/Components/Channels/useSafeChannelsMachine.js.map +0 -1
  14. package/lib/screens/Home/Components/DirectChannels/directChannels-xstate.js +0 -202
  15. package/lib/screens/Home/Components/DirectChannels/directChannels-xstate.js.map +0 -1
  16. package/lib/screens/Home/Components/DirectChannels/useSafeDirectChannelsMachine.js +0 -108
  17. package/lib/screens/Home/Components/DirectChannels/useSafeDirectChannelsMachine.js.map +0 -1
  18. package/lib/screens/Home/Components/Teams/hooks/useSafeMachine.js +0 -96
  19. package/lib/screens/Home/Components/Teams/hooks/useSafeMachine.js.map +0 -1
  20. package/lib/screens/Home/Components/Teams/workflow/teams-xstate.js +0 -198
  21. 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,Spinner,VStack,View,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}from'@expo/vector-icons';import'expo-font';import'expo-splash-screen';import {useDrawerLayout}from'../../../../hooks/useDrawerLayout.js';import'../../../../hooks/useExpoNotificationProvider.js';import'./channels-xstate.js';import {useSafeChannelsMachine}from'./useSafeChannelsMachine.js';import {RefetchContext}from'../../HomeScreen.js';const defaultChannelType = [RoomType.Channel, RoomType.Private, RoomType.Public];
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, send] = useSafeChannelsMachine();
14
- const {
15
- channels,
16
- loading,
17
- channelsLoading,
18
- showMoreChannels,
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
- send({
39
- type: "SET_CHANNELS",
40
- data: {
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(error2) {
46
- const isChannelServiceError = error2.message.includes("Service 'ChannelService.getAll' is not found");
47
- const errorMessage = isChannelServiceError ? "Channel service is temporarily unavailable. Please try again later." : error2.message;
48
- send({
49
- type: "ERROR",
50
- data: {
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
- send({
68
- type: "CLEAR_DATA"
69
- });
69
+ setState((prev) => __spreadProps(__spreadValues({}, prev), {
70
+ channels: [],
71
+ channelsSkip: 0,
72
+ showMoreChannels: true
73
+ }));
70
74
  };
71
- }, [orgName, send]);
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
- send({
92
- type: "SET_CHANNELS",
93
- data: {
94
- channels: res.data.channelsByUser
95
- }
96
- });
88
+ setState((prev) => __spreadProps(__spreadValues({}, prev), {
89
+ channels: res.data.channelsByUser
90
+ }));
97
91
  }
98
- }).catch((error2) => {
99
- const isChannelServiceError = error2.message && error2.message.includes("Service 'ChannelService.getAll' is not found");
100
- const errorMessage = isChannelServiceError ? "Channels are temporarily unavailable. Please try again later." : error2.message || "Failed to fetch channels";
101
- send({
102
- type: "ERROR",
103
- data: {
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, send, state.context.channelsLoading, reFetchUserChannels]);
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 && (!channels || channels.length === 0)) {
107
+ if (orgName) {
117
108
  reFetchChannels();
118
109
  }
119
- }, [orgName, channels]));
110
+ }, [orgName]));
120
111
  useCallback((skip) => {
121
112
  var _a;
122
- send({
123
- type: "FETCH_MORE_CHANNELS"
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
- send({
137
- type: "FETCH_MORE_CHANNELS_SUCCESS",
138
- data: {
139
- channels: ((_a2 = res == null ? void 0 : res.data) == null ? void 0 : _a2.channelsByUser) || []
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, send, fetchMoreUserChannels]);
134
+ }, [orgName, fetchMoreUserChannels]);
144
135
  const organizationChannels = useMemo(() => {
145
- var _a;
146
- return channels && (channels == null ? void 0 : channels.length) && take(orderBy(uniqBy((_a = [...channels]) == null ? void 0 : _a.filter((i) => i.type !== RoomType.Direct), ({
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(Feather, { name: "hash", size: 18, color: "black" }), /* @__PURE__ */ React__default.createElement(Text, { className: "text-gray-900 flex-1 text-base" }, item.title))), [openInbox]);
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
- } }, channelsLoading ? /* @__PURE__ */ React__default.createElement(Box, { style: {
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
- }, [channelsLoading, error, reFetchChannels]);
189
+ }, [state.error, reFetchChannels]);
205
190
  const ListFooterComponent = useCallback(() => {
206
- return /* @__PURE__ */ React__default.createElement(VStack, null, showMoreChannels && (channels == null ? void 0 : channels.length) > 10 && /* @__PURE__ */ React__default.createElement(TouchableOpacity, { onPress: () => navigation.navigate(NavigationRoutes.Channels, {
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 channels"))), /* @__PURE__ */ React__default.createElement(TouchableOpacity, { onPress: () => navigation.navigate(NavigationRoutes.AddChannel, {
200
+ } }, "Browse all Channels"))), /* @__PURE__ */ React__default.createElement(TouchableOpacity, { onPress: () => navigation.navigate(NavigationRoutes.AddChannel, {
215
201
  orgName
216
202
  }), style: {
217
- paddingBottom: 5,
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 Channel"))));
223
- }, [showMoreChannels, channels == null ? void 0 : channels.length, navigation, orgName]);
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: 8,
227
- paddingHorizontal: 12,
228
- marginBottom: 4
229
- }, onPress: () => setExpendable(!expandable) }, /* @__PURE__ */ React__default.createElement(HStack, { className: "items-center justify-between" }, /* @__PURE__ */ React__default.createElement(Text, { className: "text-gray-900 font-bold text-lg" }, "Channels"), /* @__PURE__ */ React__default.createElement(HStack, { space: "sm", className: "items-center" }, channelsLoading && /* @__PURE__ */ React__default.createElement(Spinner, { size: "small", color: "#4A154B" }), /* @__PURE__ */ React__default.createElement(MaterialIcons, { name: expandable ? "keyboard-arrow-up" : "keyboard-arrow-down", color: "#616061", size: 22 }))));
230
- }, [expandable, channelsLoading]);
231
- return /* @__PURE__ */ React__default.createElement(View, { style: {
232
- flex: 1
233
- } }, /* @__PURE__ */ React__default.createElement(SectionHeader, null), expandable && /* @__PURE__ */ React__default.createElement(FlatList, { data: organizationChannels, renderItem: renderChannelItem, keyExtractor: (item) => String(item.id), ListEmptyComponent, ListFooterComponent, showsVerticalScrollIndicator: false, initialNumToRender: 10, maxToRenderPerBatch: 10, windowSize: 5, contentContainerStyle: {
234
- flexGrow: 1
235
- } }));
236
- };
237
- var Channels$1 = React__default.memo(Channels);export{Channels$1 as default};//# sourceMappingURL=Channels.js.map
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":"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"}