@messenger-box/platform-mobile 10.0.3-alpha.46 → 10.0.3-alpha.47
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +4 -0
- package/lib/queries/inboxQueries.js +3 -4
- package/lib/queries/inboxQueries.js.map +1 -1
- package/lib/screens/inbox/DialogThreads.js +5 -2
- package/lib/screens/inbox/DialogThreads.js.map +1 -1
- package/lib/screens/inbox/config/config.js +2 -2
- package/lib/screens/inbox/config/config.js.map +1 -1
- package/lib/screens/inbox/containers/ConversationView.js +26 -8
- package/lib/screens/inbox/containers/ConversationView.js.map +1 -1
- package/lib/screens/inbox/containers/Dialogs.js +9 -18
- package/lib/screens/inbox/containers/Dialogs.js.map +1 -1
- package/package.json +4 -4
- package/src/queries/inboxQueries.ts +7 -6
- package/src/screens/inbox/DialogThreads.tsx +2 -1
- package/src/screens/inbox/config/config.ts +2 -2
- package/src/screens/inbox/containers/ConversationView.tsx +25 -7
- package/src/screens/inbox/containers/Dialogs.tsx +25 -21
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React__default,{useState,useRef,useCallback,useMemo,useEffect}from'react';import {Center,Spinner,Text,Box,Heading,Input,InputField,FlatList}from'@admin-layout/gluestack-ui-mobile';import {Ionicons}from'@expo/vector-icons';import {useSelector}from'react-redux';import {useRoute,useNavigation,useFocusEffect}from'@react-navigation/native';import {DialogsListItem}from'../components/DialogsListItem.js';import {ServiceDialogsListItem}from'../components/ServiceDialogsListItem.js';import {useChannelsQuery,CHAT_MESSAGE_ADDED}from'../../../queries/inboxQueries.js';import {RoomType}from'common';import {userSelector}from'@adminide-stack/user-auth0-client';import {config}from'../config/config.js';import colors from'tailwindcss/colors';import {SubscriptionHandler}from'../components/SubscriptionHandler.js';var __defProp = Object.defineProperty;
|
|
1
|
+
import React__default,{useState,useRef,useCallback,useMemo,useEffect}from'react';import {Center,Spinner,Text,Box,Heading,Input,InputField,FlatList}from'@admin-layout/gluestack-ui-mobile';import {Ionicons}from'@expo/vector-icons';import {useSelector,shallowEqual}from'react-redux';import {useRoute,useNavigation,useFocusEffect}from'@react-navigation/native';import {DialogsListItem}from'../components/DialogsListItem.js';import {ServiceDialogsListItem}from'../components/ServiceDialogsListItem.js';import {useChannelsQuery,CHAT_MESSAGE_ADDED}from'../../../queries/inboxQueries.js';import {RoomType}from'common';import {userSelector}from'@adminide-stack/user-auth0-client';import {config}from'../config/config.js';import colors from'tailwindcss/colors';import {SubscriptionHandler}from'../components/SubscriptionHandler.js';var __defProp = Object.defineProperty;
|
|
2
2
|
var __defProps = Object.defineProperties;
|
|
3
3
|
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
4
4
|
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
@@ -18,20 +18,18 @@ var __spreadValues = (a, b) => {
|
|
|
18
18
|
};
|
|
19
19
|
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
20
20
|
const DialogsComponent = (props) => {
|
|
21
|
-
var _a;
|
|
22
21
|
const {
|
|
23
22
|
channelFilters: channelFilterProp,
|
|
24
23
|
channelRole,
|
|
25
24
|
supportServices
|
|
26
25
|
} = props;
|
|
27
26
|
const channelFilters = __spreadValues({}, channelFilterProp);
|
|
28
|
-
channelFilters.type =
|
|
27
|
+
channelFilters.type = [RoomType.Direct, RoomType.Service];
|
|
29
28
|
const {
|
|
30
29
|
params
|
|
31
30
|
} = useRoute();
|
|
32
|
-
const auth = useSelector(userSelector);
|
|
31
|
+
const auth = useSelector(userSelector, shallowEqual);
|
|
33
32
|
const navigation = useNavigation();
|
|
34
|
-
console.log("---dialogs component---orgName---", params == null ? void 0 : params.orgName);
|
|
35
33
|
const [searchQuery, setSearchQuery] = useState("");
|
|
36
34
|
const [selectedChannelId, setSelectedChannelId] = useState((params == null ? void 0 : params.channelId) || null);
|
|
37
35
|
const [page, setPage] = useState(1);
|
|
@@ -53,14 +51,12 @@ const DialogsComponent = (props) => {
|
|
|
53
51
|
variables: {
|
|
54
52
|
role: channelRole,
|
|
55
53
|
criteria: channelFilters,
|
|
56
|
-
supportServices:
|
|
57
|
-
supportServiceCriteria: {
|
|
58
|
-
type: RoomType.Service
|
|
59
|
-
},
|
|
54
|
+
supportServices: false,
|
|
60
55
|
limit: 15,
|
|
61
56
|
skip: 0
|
|
62
57
|
},
|
|
63
|
-
notifyOnNetworkStatusChange: true
|
|
58
|
+
notifyOnNetworkStatusChange: true,
|
|
59
|
+
fetchPolicy: "cache-and-network"
|
|
64
60
|
});
|
|
65
61
|
const processChannels = useCallback((rawChannels = []) => {
|
|
66
62
|
if (!(rawChannels == null ? void 0 : rawChannels.length))
|
|
@@ -74,11 +70,7 @@ const DialogsComponent = (props) => {
|
|
|
74
70
|
const sortChannels = useCallback((channels2) => {
|
|
75
71
|
if (!(channels2 == null ? void 0 : channels2.length))
|
|
76
72
|
return [];
|
|
77
|
-
return
|
|
78
|
-
const dateA = new Date((a == null ? void 0 : a.updatedAt) || (a == null ? void 0 : a.createdAt)).getTime();
|
|
79
|
-
const dateB = new Date((b == null ? void 0 : b.updatedAt) || (b == null ? void 0 : b.createdAt)).getTime();
|
|
80
|
-
return dateB - dateA;
|
|
81
|
-
});
|
|
73
|
+
return channels2;
|
|
82
74
|
}, []);
|
|
83
75
|
const handleSelectChannel = useCallback((id, title) => {
|
|
84
76
|
if (activeChannelRef.current === id) {
|
|
@@ -129,7 +121,7 @@ const DialogsComponent = (props) => {
|
|
|
129
121
|
const handleSearchChange = useCallback((text) => {
|
|
130
122
|
setSearchQuery(text);
|
|
131
123
|
}, []);
|
|
132
|
-
const allChannels = useMemo(() => [...(data == null ? void 0 : data.
|
|
124
|
+
const allChannels = useMemo(() => [...(data == null ? void 0 : data.channelsByUser) || []], [data]);
|
|
133
125
|
const channels = useMemo(() => sortChannels(processChannels(allChannels)), [allChannels, processChannels, sortChannels]);
|
|
134
126
|
const displayChannels = useMemo(() => {
|
|
135
127
|
if (!searchQuery.trim())
|
|
@@ -232,8 +224,7 @@ const DialogsComponent = (props) => {
|
|
|
232
224
|
if (!fetchMoreResult)
|
|
233
225
|
return prev;
|
|
234
226
|
return __spreadProps(__spreadValues({}, fetchMoreResult), {
|
|
235
|
-
channelsByUser: [...prev.channelsByUser || [], ...fetchMoreResult.channelsByUser || []]
|
|
236
|
-
supportServiceChannels: [...prev.supportServiceChannels || [], ...fetchMoreResult.supportServiceChannels || []]
|
|
227
|
+
channelsByUser: [...prev.channelsByUser || [], ...fetchMoreResult.channelsByUser || []]
|
|
237
228
|
});
|
|
238
229
|
}
|
|
239
230
|
}).catch((error) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Dialogs.js","sources":["../../../../src/screens/inbox/containers/Dialogs.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useRef, useState, useMemo } from 'react';\nimport { FlatList, Box, Heading, Input, InputField, Text, Center, Spinner } from '@admin-layout/gluestack-ui-mobile';\nimport { Ionicons } from '@expo/vector-icons';\nimport { useSelector } from 'react-redux';\nimport { useNavigation, useRoute, useFocusEffect } from '@react-navigation/native';\nimport { DialogsListItem } from '../components/DialogsListItem';\nimport { ServiceDialogsListItem } from '../components/ServiceDialogsListItem';\nimport { useChannelsQuery, CHAT_MESSAGE_ADDED } from '../../../queries/inboxQueries';\nimport { RoomType } from 'common';\nimport { userSelector } from '@adminide-stack/user-auth0-client';\nimport { config } from '../config';\nimport colors from 'tailwindcss/colors';\nimport { SubscriptionHandler } from '../components/SubscriptionHandler';\n\nexport interface InboxProps {\n channelFilters?: Record<string, unknown>;\n channelRole?: string;\n supportServices: boolean;\n}\n\nconst DialogsComponent = (props: InboxProps) => {\n const { channelFilters: channelFilterProp, channelRole, supportServices } = props;\n const channelFilters = { ...channelFilterProp };\n channelFilters.type = channelFilters?.type ?? RoomType.Direct;\n const { params } = useRoute<any>();\n const auth = useSelector(userSelector);\n const navigation = useNavigation<any>();\n console.log('---dialogs component---orgName---', params?.orgName);\n // Local state for UI control\n const [searchQuery, setSearchQuery] = useState('');\n const [selectedChannelId, setSelectedChannelId] = useState<string | null>(params?.channelId || null);\n const [page, setPage] = useState(1);\n const [isLoadingMore, setIsLoadingMore] = useState(false);\n\n // Create a ref to track if component is mounted\n const isMountedRef = useRef(true);\n const focusRefreshRef = useRef<number | null>(null);\n const lastRefreshTimeRef = useRef(Date.now());\n const MIN_REFRESH_INTERVAL = 2000;\n\n // Add lastNavigationTimestamp to track when the user navigates away\n const lastNavigationTimestamp = useRef(0);\n // Track active channel to prevent duplicate clicks on the same channel\n const activeChannelRef = useRef<string | null>(null);\n // Hold a timeout ref to reset active channel status\n const resetActiveChannelTimeoutRef = useRef<NodeJS.Timeout | null>(null);\n\n // Apollo query with pagination and optimistic updates\n const { data, loading, refetch, fetchMore, subscribeToMore } = useChannelsQuery({\n variables: {\n role: channelRole,\n criteria: channelFilters,\n supportServices: supportServices ? true : false,\n supportServiceCriteria: {\n type: RoomType.Service,\n },\n limit: 15,\n skip: 0,\n },\n notifyOnNetworkStatusChange: true,\n });\n\n // Memoize processChannels and sortChannels to avoid unnecessary recalculations\n const processChannels = useCallback(\n (rawChannels = []) => {\n if (!rawChannels?.length) return [];\n return rawChannels.filter((c) => {\n if (!c?.members) return false;\n return c.members.some(\n (member) => member?.user && member.user.id !== auth?.id && member.user.__typename === 'UserAccount',\n );\n });\n },\n [auth?.id],\n );\n\n const sortChannels = useCallback((channels) => {\n if (!channels?.length) return [];\n return [...channels].sort((a, b) => {\n const dateA = new Date(a?.updatedAt || a?.createdAt).getTime();\n const dateB = new Date(b?.updatedAt || b?.createdAt).getTime();\n return dateB - dateA;\n });\n }, []);\n\n // Navigation handlers with debounce to prevent double taps\n const handleSelectChannel = useCallback(\n (id, title) => {\n if (activeChannelRef.current === id) {\n console.log('📱 Ignoring repeated tap on channel:', id);\n return;\n }\n activeChannelRef.current = id;\n if (resetActiveChannelTimeoutRef.current) {\n clearTimeout(resetActiveChannelTimeoutRef.current);\n }\n resetActiveChannelTimeoutRef.current = setTimeout(() => {\n activeChannelRef.current = null;\n }, 2000);\n setSelectedChannelId(id);\n console.log('📱 Navigating to channel:', id);\n navigation.navigate(config.INBOX_MESSEGE_PATH, {\n channelId: id,\n role: channelRole,\n title: title,\n hideTabBar: true,\n timestamp: new Date().getTime(),\n orgName: params?.orgName,\n });\n },\n [navigation, channelRole],\n );\n\n const handleSelectServiceChannel = useCallback(\n (id, title, postParentId) => {\n if (activeChannelRef.current === id) {\n console.log('📱 Ignoring repeated tap on service channel:', id);\n return;\n }\n activeChannelRef.current = id;\n if (resetActiveChannelTimeoutRef.current) {\n clearTimeout(resetActiveChannelTimeoutRef.current);\n }\n resetActiveChannelTimeoutRef.current = setTimeout(() => {\n activeChannelRef.current = null;\n }, 2000);\n setSelectedChannelId(id);\n console.log('📱 Navigating to service channel:', id);\n navigation.navigate(postParentId || postParentId === 0 ? config.THREAD_MESSEGE_PATH : config.THREADS_PATH, {\n channelId: id,\n role: channelRole,\n title: title,\n postParentId: postParentId,\n hideTabBar: true,\n orgName: params?.orgName,\n });\n },\n [navigation, channelRole],\n );\n\n // Handle search query changes\n const handleSearchChange = useCallback((text: string) => {\n setSearchQuery(text);\n }, []);\n\n // Memoize allChannels and channels\n const allChannels = useMemo(\n () => [...(data?.supportServiceChannels || []), ...(data?.channelsByUser || [])],\n [data],\n );\n const channels = useMemo(\n () => sortChannels(processChannels(allChannels)),\n [allChannels, processChannels, sortChannels],\n );\n\n // Memoize filteredChannels\n const displayChannels = useMemo(() => {\n if (!searchQuery.trim()) return channels;\n const query = searchQuery.toLowerCase();\n return channels.filter((channel) => {\n if (channel.title && channel.title.toLowerCase().includes(query)) return true;\n if (channel.members) {\n return channel.members.some((member) => {\n const user = member?.user;\n if (!user) return false;\n const fullName = `${user.givenName || ''} ${user.familyName || ''}`.toLowerCase();\n return fullName.includes(query) || (user.username && user.username.toLowerCase().includes(query));\n });\n }\n return false;\n });\n }, [channels, searchQuery]);\n\n // Memoize renderItem to avoid re-renders\n const renderItem = useCallback(\n ({ item: channel }) => {\n const key = `${channel.type === RoomType.Service ? 'service' : 'direct'}-${channel.id}`;\n return channel?.type === RoomType.Service ? (\n <ServiceDialogsListItem\n key={key}\n onOpen={handleSelectServiceChannel}\n currentUser={auth}\n channel={channel}\n refreshing={loading}\n selectedChannelId={selectedChannelId}\n role={channelRole}\n />\n ) : (\n <DialogsListItem\n key={key}\n onOpen={handleSelectChannel}\n currentUser={auth}\n channel={channel}\n selectedChannelId={selectedChannelId}\n forceRefresh={true}\n />\n );\n },\n [auth, channelRole, handleSelectChannel, handleSelectServiceChannel, loading, selectedChannelId],\n );\n\n // Memoize ListFooterComponent and ListEmptyComponent\n const ListFooterComponent = useMemo(\n () =>\n isLoadingMore ? (\n <Center className=\"py-4\">\n <Spinner color={colors.blue[500]} size=\"small\" />\n </Center>\n ) : null,\n [isLoadingMore],\n );\n\n const ListEmptyComponent = useMemo(() => {\n if (loading && displayChannels.length === 0) {\n return (\n <Center className=\"flex-1 justify-center items-center\" style={{ height: 300 }}>\n <Spinner color={colors.blue[500]} size=\"large\" />\n <Text className=\"mt-4 text-gray-500\">Loading conversations...</Text>\n </Center>\n );\n }\n return (\n <Box className=\"p-6\">\n <Box className=\"mb-6\">\n <Heading className=\"text-2xl font-bold\">Direct Messages</Heading>\n <Text className=\"text-gray-600 mt-1\">Private conversations with other users</Text>\n </Box>\n <Input\n className=\"mb-8 h-[50] rounded-md border-gray-300 border\"\n size=\"md\"\n style={{\n paddingVertical: 8,\n marginBottom: 10,\n borderColor: '#d1d5db',\n borderRadius: 10,\n }}\n >\n <InputField\n placeholder=\"Search messages...\"\n onChangeText={handleSearchChange}\n value={searchQuery}\n />\n </Input>\n <Center className=\"items-center\" style={{ paddingVertical: 5 }}>\n <Box className=\"w-16 h-16 rounded-full bg-blue-500 flex items-center justify-center mb-5\">\n <Ionicons name=\"chatbubble-ellipses\" size={30} color=\"white\" />\n </Box>\n <Text className=\"text-2xl font-bold text-center mb-2\">No messages yet</Text>\n <Text className=\"text-gray-600 text-center mb-8\">\n When you start conversations with others,{'\\n'}\n they'll appear here.\n </Text>\n </Center>\n </Box>\n );\n }, [loading, displayChannels.length, handleSearchChange, searchQuery]);\n\n // Handle component cleanup\n useEffect(() => {\n return () => {\n isMountedRef.current = false;\n // Clear any active timeouts\n if (resetActiveChannelTimeoutRef.current) {\n clearTimeout(resetActiveChannelTimeoutRef.current);\n }\n };\n }, []);\n\n // Reset activeChannelRef when returning to this screen\n useFocusEffect(\n useCallback(() => {\n // When screen gains focus, check if we're coming back from a detail screen\n const now = Date.now();\n\n // Reset active channel ref if enough time has passed since last navigation\n if (now - lastNavigationTimestamp.current > 300) {\n activeChannelRef.current = null;\n console.log('Reset active channel reference on focus');\n }\n\n return () => {\n // When losing focus, update the timestamp\n lastNavigationTimestamp.current = Date.now();\n };\n }, []),\n );\n\n // Handle refresh on focus\n useFocusEffect(\n useCallback(() => {\n console.log('📱 Focus effect triggered for Dialogs screen');\n\n // Refresh when returning to the screen if enough time has passed\n const performRefresh = () => {\n const now = Date.now();\n if (now - lastRefreshTimeRef.current < MIN_REFRESH_INTERVAL) {\n console.log('⏩ Skipping refresh: too soon after previous refresh');\n return;\n }\n\n console.log('🔄 Performing refresh on screen focus');\n if (isMountedRef.current) {\n lastRefreshTimeRef.current = now;\n refetch();\n }\n };\n\n const focusRefreshTimeout = setTimeout(performRefresh, 100);\n return () => clearTimeout(focusRefreshTimeout);\n }, [refetch]),\n );\n\n // Handle pull-to-refresh\n const handlePullToRefresh = useCallback(() => {\n const now = Date.now();\n focusRefreshRef.current = now;\n\n console.log('🔄 Pull-to-refresh triggered');\n refetch();\n }, [refetch]);\n\n // Load more channels\n const handleLoadMore = useCallback(() => {\n if (isLoadingMore || !data || channels.length < 10) {\n console.log('Skip loading more: already loading or all data loaded');\n return;\n }\n\n console.log('Loading more channels at page:', page + 1);\n setIsLoadingMore(true);\n\n fetchMore({\n variables: {\n skip: page * 15,\n },\n updateQuery: (prev, { fetchMoreResult }) => {\n setIsLoadingMore(false);\n setPage((prevPage) => prevPage + 1);\n\n if (!fetchMoreResult) return prev;\n\n // Combine previous and new results\n return {\n ...fetchMoreResult,\n channelsByUser: [...(prev.channelsByUser || []), ...(fetchMoreResult.channelsByUser || [])],\n supportServiceChannels: [\n ...(prev.supportServiceChannels || []),\n ...(fetchMoreResult.supportServiceChannels || []),\n ],\n };\n },\n }).catch((error) => {\n console.error('Error loading more channels:', error);\n setIsLoadingMore(false);\n });\n }, [fetchMore, isLoadingMore, data, channels.length, page]);\n\n return (\n <Box className=\"p-2\">\n <SubscriptionHandler\n subscribeToMore={subscribeToMore}\n document={CHAT_MESSAGE_ADDED}\n variables={{}}\n updateQuery={undefined}\n />\n <FlatList\n data={displayChannels}\n onRefresh={handlePullToRefresh}\n refreshing={loading && !isLoadingMore}\n contentContainerStyle={{ minHeight: '100%' }}\n ItemSeparatorComponent={React.useCallback(\n () => (\n <Box className=\"h-0.5 bg-gray-200\" />\n ),\n [],\n )}\n renderItem={renderItem}\n ListFooterComponent={ListFooterComponent}\n onEndReached={handleLoadMore}\n onEndReachedThreshold={0.5}\n initialNumToRender={5}\n maxToRenderPerBatch={5}\n windowSize={5}\n removeClippedSubviews={true}\n updateCellsBatchingPeriod={100}\n getItemLayout={React.useCallback((data, index) => ({ length: 80, offset: 80 * index, index }), [])}\n keyExtractor={React.useCallback((item) => `channel-${item.id}`, [])}\n ListEmptyComponent={ListEmptyComponent}\n />\n </Box>\n );\n};\n\nexport const Dialogs = React.memo(DialogsComponent);\n"],"names":["channels","React","data"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Dialogs.js","sources":["../../../../src/screens/inbox/containers/Dialogs.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useRef, useState, useMemo } from 'react';\nimport { FlatList, Box, Heading, Input, InputField, Text, Center, Spinner } from '@admin-layout/gluestack-ui-mobile';\nimport { Ionicons } from '@expo/vector-icons';\nimport { useSelector, shallowEqual } from 'react-redux';\nimport { useNavigation, useRoute, useFocusEffect } from '@react-navigation/native';\nimport { DialogsListItem } from '../components/DialogsListItem';\nimport { ServiceDialogsListItem } from '../components/ServiceDialogsListItem';\nimport { useChannelsQuery, CHAT_MESSAGE_ADDED } from '../../../queries/inboxQueries';\nimport { RoomType } from 'common';\nimport { userSelector } from '@adminide-stack/user-auth0-client';\nimport { config } from '../config';\nimport colors from 'tailwindcss/colors';\nimport { SubscriptionHandler } from '../components/SubscriptionHandler';\n\nexport interface InboxProps {\n channelFilters?: Record<string, unknown>;\n channelRole?: string;\n supportServices: boolean;\n}\n\nconst DialogsComponent = (props: InboxProps) => {\n const { channelFilters: channelFilterProp, channelRole, supportServices } = props;\n const channelFilters = { ...channelFilterProp };\n // channelFilters.type = channelFilters?.type ?? RoomType.Direct;\n channelFilters.type = [RoomType.Direct, RoomType.Service];\n const { params } = useRoute<any>();\n const auth = useSelector(userSelector, shallowEqual);\n const navigation = useNavigation<any>();\n // Local state for UI control\n const [searchQuery, setSearchQuery] = useState('');\n const [selectedChannelId, setSelectedChannelId] = useState<string | null>(params?.channelId || null);\n const [page, setPage] = useState(1);\n const [isLoadingMore, setIsLoadingMore] = useState(false);\n\n // Create a ref to track if component is mounted\n const isMountedRef = useRef(true);\n const focusRefreshRef = useRef<number | null>(null);\n const lastRefreshTimeRef = useRef(Date.now());\n const MIN_REFRESH_INTERVAL = 2000;\n\n // Add lastNavigationTimestamp to track when the user navigates away\n const lastNavigationTimestamp = useRef(0);\n // Track active channel to prevent duplicate clicks on the same channel\n const activeChannelRef = useRef<string | null>(null);\n // Hold a timeout ref to reset active channel status\n const resetActiveChannelTimeoutRef = useRef<NodeJS.Timeout | null>(null);\n\n // Apollo query with pagination and optimistic updates\n const { data, loading, refetch, fetchMore, subscribeToMore } = useChannelsQuery({\n variables: {\n role: channelRole,\n criteria: channelFilters,\n supportServices: false,\n // supportServices: supportServices ? true : false,\n // supportServiceCriteria: {\n // type: RoomType.Service,\n // },\n limit: 15,\n skip: 0,\n },\n notifyOnNetworkStatusChange: true,\n fetchPolicy: 'cache-and-network',\n });\n\n // Memoize processChannels and sortChannels to avoid unnecessary recalculations\n const processChannels = useCallback(\n (rawChannels = []) => {\n if (!rawChannels?.length) return [];\n return rawChannels.filter((c) => {\n if (!c?.members) return false;\n return c.members.some(\n (member) => member?.user && member.user.id !== auth?.id && member.user.__typename === 'UserAccount',\n );\n });\n },\n [auth?.id],\n );\n\n const sortChannels = useCallback((channels) => {\n if (!channels?.length) return [];\n return channels;\n // return [...channels].sort((a, b) => {\n // const dateA = new Date(a?.updatedAt || a?.createdAt).getTime();\n // const dateB = new Date(b?.updatedAt || b?.createdAt).getTime();\n // return dateB - dateA;\n // });\n }, []);\n\n // Navigation handlers with debounce to prevent double taps\n const handleSelectChannel = useCallback(\n (id, title) => {\n if (activeChannelRef.current === id) {\n console.log('📱 Ignoring repeated tap on channel:', id);\n return;\n }\n activeChannelRef.current = id;\n if (resetActiveChannelTimeoutRef.current) {\n clearTimeout(resetActiveChannelTimeoutRef.current);\n }\n resetActiveChannelTimeoutRef.current = setTimeout(() => {\n activeChannelRef.current = null;\n }, 2000);\n setSelectedChannelId(id);\n console.log('📱 Navigating to channel:', id);\n navigation.navigate(config.INBOX_MESSEGE_PATH, {\n channelId: id,\n role: channelRole,\n title: title,\n hideTabBar: true,\n timestamp: new Date().getTime(),\n orgName: params?.orgName,\n });\n },\n [navigation, channelRole],\n );\n\n const handleSelectServiceChannel = useCallback(\n (id, title, postParentId) => {\n if (activeChannelRef.current === id) {\n console.log('📱 Ignoring repeated tap on service channel:', id);\n return;\n }\n activeChannelRef.current = id;\n if (resetActiveChannelTimeoutRef.current) {\n clearTimeout(resetActiveChannelTimeoutRef.current);\n }\n resetActiveChannelTimeoutRef.current = setTimeout(() => {\n activeChannelRef.current = null;\n }, 2000);\n setSelectedChannelId(id);\n console.log('📱 Navigating to service channel:', id);\n navigation.navigate(postParentId || postParentId === 0 ? config.THREAD_MESSEGE_PATH : config.THREADS_PATH, {\n channelId: id,\n role: channelRole,\n title: title,\n postParentId: postParentId,\n hideTabBar: true,\n orgName: params?.orgName,\n });\n },\n [navigation, channelRole],\n );\n\n // Handle search query changes\n const handleSearchChange = useCallback((text: string) => {\n setSearchQuery(text);\n }, []);\n\n // Memoize allChannels and channels\n // const allChannels = useMemo(\n // () => [...(data?.supportServiceChannels || []), ...(data?.channelsByUser || [])],\n // [data],\n // );\n const allChannels = useMemo(() => [...(data?.channelsByUser || [])], [data]);\n const channels = useMemo(\n () => sortChannels(processChannels(allChannels)),\n [allChannels, processChannels, sortChannels],\n );\n\n // Memoize filteredChannels\n const displayChannels = useMemo(() => {\n if (!searchQuery.trim()) return channels;\n const query = searchQuery.toLowerCase();\n return channels.filter((channel) => {\n if (channel.title && channel.title.toLowerCase().includes(query)) return true;\n if (channel.members) {\n return channel.members.some((member) => {\n const user = member?.user;\n if (!user) return false;\n const fullName = `${user.givenName || ''} ${user.familyName || ''}`.toLowerCase();\n return fullName.includes(query) || (user.username && user.username.toLowerCase().includes(query));\n });\n }\n return false;\n });\n }, [channels, searchQuery]);\n\n // Memoize renderItem to avoid re-renders\n const renderItem = useCallback(\n ({ item: channel }) => {\n const key = `${channel.type === RoomType.Service ? 'service' : 'direct'}-${channel.id}`;\n return channel?.type === RoomType.Service ? (\n <ServiceDialogsListItem\n key={key}\n onOpen={handleSelectServiceChannel}\n currentUser={auth}\n channel={channel}\n refreshing={loading}\n selectedChannelId={selectedChannelId}\n role={channelRole}\n />\n ) : (\n <DialogsListItem\n key={key}\n onOpen={handleSelectChannel}\n currentUser={auth}\n channel={channel}\n selectedChannelId={selectedChannelId}\n forceRefresh={true}\n />\n );\n },\n [auth, channelRole, handleSelectChannel, handleSelectServiceChannel, loading, selectedChannelId],\n );\n\n // Memoize ListFooterComponent and ListEmptyComponent\n const ListFooterComponent = useMemo(\n () =>\n isLoadingMore ? (\n <Center className=\"py-4\">\n <Spinner color={colors.blue[500]} size=\"small\" />\n </Center>\n ) : null,\n [isLoadingMore],\n );\n\n const ListEmptyComponent = useMemo(() => {\n if (loading && displayChannels.length === 0) {\n return (\n <Center className=\"flex-1 justify-center items-center\" style={{ height: 300 }}>\n <Spinner color={colors.blue[500]} size=\"large\" />\n <Text className=\"mt-4 text-gray-500\">Loading conversations...</Text>\n </Center>\n );\n }\n return (\n <Box className=\"p-6\">\n <Box className=\"mb-6\">\n <Heading className=\"text-2xl font-bold\">Direct Messages</Heading>\n <Text className=\"text-gray-600 mt-1\">Private conversations with other users</Text>\n </Box>\n <Input\n className=\"mb-8 h-[50] rounded-md border-gray-300 border\"\n size=\"md\"\n style={{\n paddingVertical: 8,\n marginBottom: 10,\n borderColor: '#d1d5db',\n borderRadius: 10,\n }}\n >\n <InputField\n placeholder=\"Search messages...\"\n onChangeText={handleSearchChange}\n value={searchQuery}\n />\n </Input>\n <Center className=\"items-center\" style={{ paddingVertical: 5 }}>\n <Box className=\"w-16 h-16 rounded-full bg-blue-500 flex items-center justify-center mb-5\">\n <Ionicons name=\"chatbubble-ellipses\" size={30} color=\"white\" />\n </Box>\n <Text className=\"text-2xl font-bold text-center mb-2\">No messages yet</Text>\n <Text className=\"text-gray-600 text-center mb-8\">\n When you start conversations with others,{'\\n'}\n they'll appear here.\n </Text>\n </Center>\n </Box>\n );\n }, [loading, displayChannels.length, handleSearchChange, searchQuery]);\n\n // Handle component cleanup\n useEffect(() => {\n return () => {\n isMountedRef.current = false;\n // Clear any active timeouts\n if (resetActiveChannelTimeoutRef.current) {\n clearTimeout(resetActiveChannelTimeoutRef.current);\n }\n };\n }, []);\n\n // Reset activeChannelRef when returning to this screen\n useFocusEffect(\n useCallback(() => {\n // When screen gains focus, check if we're coming back from a detail screen\n const now = Date.now();\n\n // Reset active channel ref if enough time has passed since last navigation\n if (now - lastNavigationTimestamp.current > 300) {\n activeChannelRef.current = null;\n console.log('Reset active channel reference on focus');\n }\n\n return () => {\n // When losing focus, update the timestamp\n lastNavigationTimestamp.current = Date.now();\n };\n }, []),\n );\n\n // Handle refresh on focus\n useFocusEffect(\n useCallback(() => {\n console.log('📱 Focus effect triggered for Dialogs screen');\n\n // Refresh when returning to the screen if enough time has passed\n const performRefresh = () => {\n const now = Date.now();\n if (now - lastRefreshTimeRef.current < MIN_REFRESH_INTERVAL) {\n console.log('⏩ Skipping refresh: too soon after previous refresh');\n return;\n }\n\n console.log('🔄 Performing refresh on screen focus');\n if (isMountedRef.current) {\n lastRefreshTimeRef.current = now;\n refetch();\n }\n };\n\n const focusRefreshTimeout = setTimeout(performRefresh, 100);\n return () => clearTimeout(focusRefreshTimeout);\n }, [refetch]),\n );\n\n // Handle pull-to-refresh\n const handlePullToRefresh = useCallback(() => {\n const now = Date.now();\n focusRefreshRef.current = now;\n\n console.log('🔄 Pull-to-refresh triggered');\n refetch();\n }, [refetch]);\n\n // Load more channels\n const handleLoadMore = useCallback(() => {\n if (isLoadingMore || !data || channels.length < 10) {\n console.log('Skip loading more: already loading or all data loaded');\n return;\n }\n\n console.log('Loading more channels at page:', page + 1);\n setIsLoadingMore(true);\n\n fetchMore({\n variables: {\n skip: page * 15,\n },\n updateQuery: (prev, { fetchMoreResult }) => {\n setIsLoadingMore(false);\n setPage((prevPage) => prevPage + 1);\n\n if (!fetchMoreResult) return prev;\n\n // Combine previous and new results\n return {\n ...fetchMoreResult,\n channelsByUser: [...(prev.channelsByUser || []), ...(fetchMoreResult.channelsByUser || [])],\n // supportServiceChannels: [\n // ...(prev.supportServiceChannels || []),\n // ...(fetchMoreResult.supportServiceChannels || []),\n // ],\n };\n },\n }).catch((error) => {\n console.error('Error loading more channels:', error);\n setIsLoadingMore(false);\n });\n }, [fetchMore, isLoadingMore, data, channels.length, page]);\n\n return (\n <Box className=\"p-2\">\n <SubscriptionHandler\n subscribeToMore={subscribeToMore}\n document={CHAT_MESSAGE_ADDED}\n variables={{}}\n updateQuery={undefined}\n />\n <FlatList\n data={displayChannels}\n onRefresh={handlePullToRefresh}\n refreshing={loading && !isLoadingMore}\n contentContainerStyle={{ minHeight: '100%' }}\n ItemSeparatorComponent={React.useCallback(\n () => (\n <Box className=\"h-0.5 bg-gray-200\" />\n ),\n [],\n )}\n renderItem={renderItem}\n ListFooterComponent={ListFooterComponent}\n onEndReached={handleLoadMore}\n onEndReachedThreshold={0.5}\n initialNumToRender={5}\n maxToRenderPerBatch={5}\n windowSize={5}\n removeClippedSubviews={true}\n updateCellsBatchingPeriod={100}\n getItemLayout={React.useCallback((data, index) => ({ length: 80, offset: 80 * index, index }), [])}\n keyExtractor={React.useCallback((item) => `channel-${item.id}`, [])}\n ListEmptyComponent={ListEmptyComponent}\n />\n </Box>\n );\n};\n\nexport const Dialogs = React.memo(DialogsComponent);\n"],"names":["channels","React","data"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@messenger-box/platform-mobile",
|
|
3
|
-
"version": "10.0.3-alpha.
|
|
3
|
+
"version": "10.0.3-alpha.47",
|
|
4
4
|
"description": "Sample core for higher packages to depend on",
|
|
5
5
|
"license": "ISC",
|
|
6
6
|
"author": "CDMBase LLC",
|
|
@@ -22,8 +22,8 @@
|
|
|
22
22
|
"watch-ts": "tsc --watch"
|
|
23
23
|
},
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"@messenger-box/core": "10.0.3-alpha.
|
|
26
|
-
"@messenger-box/platform-client": "10.0.3-alpha.
|
|
25
|
+
"@messenger-box/core": "10.0.3-alpha.47",
|
|
26
|
+
"@messenger-box/platform-client": "10.0.3-alpha.47",
|
|
27
27
|
"base-64": "1.0.0",
|
|
28
28
|
"react-native-gifted-chat": "1.0.4"
|
|
29
29
|
},
|
|
@@ -43,5 +43,5 @@
|
|
|
43
43
|
"typescript": {
|
|
44
44
|
"definition": "lib/index.d.ts"
|
|
45
45
|
},
|
|
46
|
-
"gitHead": "
|
|
46
|
+
"gitHead": "493161f9e7fc123cce6bc90f5c2f2006c7a59645"
|
|
47
47
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
// Imports from common/graphql
|
|
2
2
|
import {
|
|
3
3
|
useGetChannelsByUserWithServiceChannelsQuery,
|
|
4
|
+
useGetChannelsByUserQuery,
|
|
4
5
|
OnChatMessageAddedDocument,
|
|
5
6
|
OnThreadCreatedUpdatedDocument,
|
|
6
7
|
useViewChannelDetailQuery,
|
|
@@ -28,10 +29,10 @@ import { useCallback } from 'react';
|
|
|
28
29
|
* @returns Query result with data, loading state, refetch and fetchMore functions
|
|
29
30
|
*/
|
|
30
31
|
export const useChannelsQuery = (options: any = {}) => {
|
|
31
|
-
return
|
|
32
|
+
return useGetChannelsByUserQuery({
|
|
32
33
|
...options,
|
|
33
34
|
fetchPolicy: 'cache-and-network',
|
|
34
|
-
nextFetchPolicy: 'network-only',
|
|
35
|
+
//nextFetchPolicy: 'network-only',
|
|
35
36
|
});
|
|
36
37
|
};
|
|
37
38
|
|
|
@@ -236,10 +237,10 @@ export const useInboxChannels = () => {
|
|
|
236
237
|
return {
|
|
237
238
|
...fetchMoreResult,
|
|
238
239
|
channelsByUser: [...(prev.channelsByUser || []), ...(fetchMoreResult.channelsByUser || [])],
|
|
239
|
-
supportServiceChannels: [
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
],
|
|
240
|
+
// supportServiceChannels: [
|
|
241
|
+
// ...(prev.supportServiceChannels || []),
|
|
242
|
+
// ...(fetchMoreResult.supportServiceChannels || []),
|
|
243
|
+
// ],
|
|
243
244
|
};
|
|
244
245
|
},
|
|
245
246
|
});
|
|
@@ -39,7 +39,8 @@ export function DialogThreads({ channelId, postParentId, role }) {
|
|
|
39
39
|
repliesLimit2: 5,
|
|
40
40
|
},
|
|
41
41
|
});
|
|
42
|
-
|
|
42
|
+
console.log('threadsData', threadsData?.threadMessages?.totalCount);
|
|
43
|
+
console.log('channelid', channelId);
|
|
43
44
|
// Initialize the machine with props
|
|
44
45
|
React.useEffect(() => {
|
|
45
46
|
send({
|
|
@@ -10,6 +10,6 @@ export const config = cleanEnv(process['APP_ENV'] || process.env, {
|
|
|
10
10
|
THREADS_PATH: str({ default: 'MainStack.Thread' }),
|
|
11
11
|
CALL_TO_ACTION_PATH: str({ default: 'MainStack.GuestReservationRequestDetail' }),
|
|
12
12
|
CALL_TO_ACTION_BOX_BGCOLOR: str({ default: '#0084ff' }),
|
|
13
|
-
CALL_TO_ACTION_BUTTON_BORDERCOLOR: str({ default: '#
|
|
14
|
-
CALL_TO_ACTION_TEXT_COLOR: str({ default: '#
|
|
13
|
+
CALL_TO_ACTION_BUTTON_BORDERCOLOR: str({ default: '#000' }),
|
|
14
|
+
CALL_TO_ACTION_TEXT_COLOR: str({ default: '#000' }),
|
|
15
15
|
});
|
|
@@ -371,7 +371,12 @@ const ConversationViewComponent = ({ channelId: initialChannelId, role, isShowTh
|
|
|
371
371
|
// Required fields that Apollo expects in the cache
|
|
372
372
|
propsConfiguration: {
|
|
373
373
|
__typename: 'MachineConfiguration' as const,
|
|
374
|
+
id: null,
|
|
374
375
|
resource: '' as any,
|
|
376
|
+
contents: null,
|
|
377
|
+
keys: null,
|
|
378
|
+
target: null,
|
|
379
|
+
overrides: null,
|
|
375
380
|
},
|
|
376
381
|
props: {},
|
|
377
382
|
files: {
|
|
@@ -659,7 +664,12 @@ const ConversationViewComponent = ({ channelId: initialChannelId, role, isShowTh
|
|
|
659
664
|
// Required fields that Apollo expects in the cache
|
|
660
665
|
propsConfiguration: {
|
|
661
666
|
__typename: 'MachineConfiguration' as const,
|
|
667
|
+
id: null,
|
|
662
668
|
resource: '' as any,
|
|
669
|
+
contents: null,
|
|
670
|
+
keys: null,
|
|
671
|
+
target: null,
|
|
672
|
+
overrides: null,
|
|
663
673
|
},
|
|
664
674
|
props: {},
|
|
665
675
|
files: {
|
|
@@ -937,7 +947,12 @@ const ConversationViewComponent = ({ channelId: initialChannelId, role, isShowTh
|
|
|
937
947
|
// Required fields that Apollo expects in the cache
|
|
938
948
|
propsConfiguration: {
|
|
939
949
|
__typename: 'MachineConfiguration' as const,
|
|
950
|
+
id: null,
|
|
940
951
|
resource: '' as any,
|
|
952
|
+
contents: null,
|
|
953
|
+
keys: null,
|
|
954
|
+
target: null,
|
|
955
|
+
overrides: null,
|
|
941
956
|
},
|
|
942
957
|
props: {},
|
|
943
958
|
files: {
|
|
@@ -1362,22 +1377,25 @@ const ConversationViewComponent = ({ channelId: initialChannelId, role, isShowTh
|
|
|
1362
1377
|
<>
|
|
1363
1378
|
{attachment?.callToAction && action ? (
|
|
1364
1379
|
<Box className={`bg-[${CALL_TO_ACTION_BOX_BGCOLOR}] rounded-[15] pb-2`}>
|
|
1380
|
+
<MessageText
|
|
1381
|
+
{...props}
|
|
1382
|
+
containerStyle={{
|
|
1383
|
+
left: { paddingLeft: 0, marginLeft: 0 },
|
|
1384
|
+
}}
|
|
1385
|
+
textStyle={{
|
|
1386
|
+
left: { marginLeft: 0 },
|
|
1387
|
+
}}
|
|
1388
|
+
/>
|
|
1365
1389
|
<Button
|
|
1366
1390
|
variant={'outline'}
|
|
1367
1391
|
size={'sm'}
|
|
1368
|
-
className={`border-[${CALL_TO_ACTION_BUTTON_BORDERCOLOR}]
|
|
1392
|
+
className={`border-[${CALL_TO_ACTION_BUTTON_BORDERCOLOR}] my-2 rounded-full `}
|
|
1369
1393
|
onPress={() => action && params && navigation.navigate(action, params)}
|
|
1370
1394
|
>
|
|
1371
1395
|
<ButtonText className={`color-[${CALL_TO_ACTION_TEXT_COLOR}]`}>
|
|
1372
1396
|
{attachment.callToAction.title}
|
|
1373
1397
|
</ButtonText>
|
|
1374
1398
|
</Button>
|
|
1375
|
-
<MessageText
|
|
1376
|
-
{...props}
|
|
1377
|
-
textStyle={{
|
|
1378
|
-
left: { marginLeft: 5, color: CALL_TO_ACTION_TEXT_COLOR, paddingHorizontal: 2 },
|
|
1379
|
-
}}
|
|
1380
|
-
/>
|
|
1381
1399
|
</Box>
|
|
1382
1400
|
) : (
|
|
1383
1401
|
<TouchableHighlight
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React, { useCallback, useEffect, useRef, useState, useMemo } from 'react';
|
|
2
2
|
import { FlatList, Box, Heading, Input, InputField, Text, Center, Spinner } from '@admin-layout/gluestack-ui-mobile';
|
|
3
3
|
import { Ionicons } from '@expo/vector-icons';
|
|
4
|
-
import { useSelector } from 'react-redux';
|
|
4
|
+
import { useSelector, shallowEqual } from 'react-redux';
|
|
5
5
|
import { useNavigation, useRoute, useFocusEffect } from '@react-navigation/native';
|
|
6
6
|
import { DialogsListItem } from '../components/DialogsListItem';
|
|
7
7
|
import { ServiceDialogsListItem } from '../components/ServiceDialogsListItem';
|
|
@@ -21,11 +21,11 @@ export interface InboxProps {
|
|
|
21
21
|
const DialogsComponent = (props: InboxProps) => {
|
|
22
22
|
const { channelFilters: channelFilterProp, channelRole, supportServices } = props;
|
|
23
23
|
const channelFilters = { ...channelFilterProp };
|
|
24
|
-
channelFilters.type = channelFilters?.type ?? RoomType.Direct;
|
|
24
|
+
// channelFilters.type = channelFilters?.type ?? RoomType.Direct;
|
|
25
|
+
channelFilters.type = [RoomType.Direct, RoomType.Service];
|
|
25
26
|
const { params } = useRoute<any>();
|
|
26
|
-
const auth = useSelector(userSelector);
|
|
27
|
+
const auth = useSelector(userSelector, shallowEqual);
|
|
27
28
|
const navigation = useNavigation<any>();
|
|
28
|
-
console.log('---dialogs component---orgName---', params?.orgName);
|
|
29
29
|
// Local state for UI control
|
|
30
30
|
const [searchQuery, setSearchQuery] = useState('');
|
|
31
31
|
const [selectedChannelId, setSelectedChannelId] = useState<string | null>(params?.channelId || null);
|
|
@@ -50,14 +50,16 @@ const DialogsComponent = (props: InboxProps) => {
|
|
|
50
50
|
variables: {
|
|
51
51
|
role: channelRole,
|
|
52
52
|
criteria: channelFilters,
|
|
53
|
-
supportServices:
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
53
|
+
supportServices: false,
|
|
54
|
+
// supportServices: supportServices ? true : false,
|
|
55
|
+
// supportServiceCriteria: {
|
|
56
|
+
// type: RoomType.Service,
|
|
57
|
+
// },
|
|
57
58
|
limit: 15,
|
|
58
59
|
skip: 0,
|
|
59
60
|
},
|
|
60
61
|
notifyOnNetworkStatusChange: true,
|
|
62
|
+
fetchPolicy: 'cache-and-network',
|
|
61
63
|
});
|
|
62
64
|
|
|
63
65
|
// Memoize processChannels and sortChannels to avoid unnecessary recalculations
|
|
@@ -76,11 +78,12 @@ const DialogsComponent = (props: InboxProps) => {
|
|
|
76
78
|
|
|
77
79
|
const sortChannels = useCallback((channels) => {
|
|
78
80
|
if (!channels?.length) return [];
|
|
79
|
-
return
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
81
|
+
return channels;
|
|
82
|
+
// return [...channels].sort((a, b) => {
|
|
83
|
+
// const dateA = new Date(a?.updatedAt || a?.createdAt).getTime();
|
|
84
|
+
// const dateB = new Date(b?.updatedAt || b?.createdAt).getTime();
|
|
85
|
+
// return dateB - dateA;
|
|
86
|
+
// });
|
|
84
87
|
}, []);
|
|
85
88
|
|
|
86
89
|
// Navigation handlers with debounce to prevent double taps
|
|
@@ -144,10 +147,11 @@ const DialogsComponent = (props: InboxProps) => {
|
|
|
144
147
|
}, []);
|
|
145
148
|
|
|
146
149
|
// Memoize allChannels and channels
|
|
147
|
-
const allChannels = useMemo(
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
);
|
|
150
|
+
// const allChannels = useMemo(
|
|
151
|
+
// () => [...(data?.supportServiceChannels || []), ...(data?.channelsByUser || [])],
|
|
152
|
+
// [data],
|
|
153
|
+
// );
|
|
154
|
+
const allChannels = useMemo(() => [...(data?.channelsByUser || [])], [data]);
|
|
151
155
|
const channels = useMemo(
|
|
152
156
|
() => sortChannels(processChannels(allChannels)),
|
|
153
157
|
[allChannels, processChannels, sortChannels],
|
|
@@ -343,10 +347,10 @@ const DialogsComponent = (props: InboxProps) => {
|
|
|
343
347
|
return {
|
|
344
348
|
...fetchMoreResult,
|
|
345
349
|
channelsByUser: [...(prev.channelsByUser || []), ...(fetchMoreResult.channelsByUser || [])],
|
|
346
|
-
supportServiceChannels: [
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
],
|
|
350
|
+
// supportServiceChannels: [
|
|
351
|
+
// ...(prev.supportServiceChannels || []),
|
|
352
|
+
// ...(fetchMoreResult.supportServiceChannels || []),
|
|
353
|
+
// ],
|
|
350
354
|
};
|
|
351
355
|
},
|
|
352
356
|
}).catch((error) => {
|