@messenger-box/platform-mobile 10.0.3-alpha.20 → 10.0.3-alpha.201
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/components/messages-container-ui/BuildModeView.js +428 -0
- package/lib/components/messages-container-ui/BuildModeView.js.map +1 -0
- package/lib/components/messages-container-ui/MessagesContainerUI.js +55 -0
- package/lib/components/messages-container-ui/MessagesContainerUI.js.map +1 -0
- package/lib/components/messages-container-ui/PlanModeView.js +336 -0
- package/lib/components/messages-container-ui/PlanModeView.js.map +1 -0
- package/lib/compute.js +2 -3
- package/lib/compute.js.map +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/module.js.map +1 -1
- package/lib/queries/inboxQueries.js +62 -0
- package/lib/queries/inboxQueries.js.map +1 -0
- package/lib/routes.json +2 -3
- package/lib/screens/inbox/DialogMessages.js +8 -3
- package/lib/screens/inbox/DialogMessages.js.map +1 -1
- package/lib/screens/inbox/DialogThreadMessages.js +6 -11
- package/lib/screens/inbox/DialogThreadMessages.js.map +1 -1
- package/lib/screens/inbox/DialogThreads.js +58 -20
- package/lib/screens/inbox/DialogThreads.js.map +1 -1
- package/lib/screens/inbox/Inbox.js.map +1 -1
- package/lib/screens/inbox/components/CachedImage/consts.js +1 -1
- package/lib/screens/inbox/components/CachedImage/consts.js.map +1 -1
- package/lib/screens/inbox/components/CachedImage/index.js +125 -115
- package/lib/screens/inbox/components/CachedImage/index.js.map +1 -1
- package/lib/screens/inbox/components/DialogItem.js +160 -0
- package/lib/screens/inbox/components/DialogItem.js.map +1 -0
- package/lib/screens/inbox/components/GiftedChatInboxComponent.js +315 -0
- package/lib/screens/inbox/components/GiftedChatInboxComponent.js.map +1 -0
- package/lib/screens/inbox/components/SlackMessageContainer/ImageViewerModal.js +3 -1
- package/lib/screens/inbox/components/SlackMessageContainer/ImageViewerModal.js.map +1 -1
- package/lib/screens/inbox/components/SlackMessageContainer/PaymentMessage.js +194 -0
- package/lib/screens/inbox/components/SlackMessageContainer/PaymentMessage.js.map +1 -0
- package/lib/screens/inbox/components/SlackMessageContainer/SlackBubble.js +149 -36
- package/lib/screens/inbox/components/SlackMessageContainer/SlackBubble.js.map +1 -1
- package/lib/screens/inbox/components/SlackMessageContainer/SlackMessage.js +4 -5
- package/lib/screens/inbox/components/SlackMessageContainer/SlackMessage.js.map +1 -1
- package/lib/screens/inbox/components/SubscriptionHandler.js +22 -0
- package/lib/screens/inbox/components/SubscriptionHandler.js.map +1 -0
- package/lib/screens/inbox/components/ThreadsViewItem.js +67 -47
- package/lib/screens/inbox/components/ThreadsViewItem.js.map +1 -1
- package/lib/screens/inbox/config/config.js +4 -2
- package/lib/screens/inbox/config/config.js.map +1 -1
- package/lib/screens/inbox/containers/ConversationView.js +1099 -1094
- package/lib/screens/inbox/containers/ConversationView.js.map +1 -1
- package/lib/screens/inbox/containers/Dialogs.js +132 -534
- package/lib/screens/inbox/containers/Dialogs.js.map +1 -1
- package/lib/screens/inbox/containers/ThreadConversationView.js +876 -1357
- package/lib/screens/inbox/containers/ThreadConversationView.js.map +1 -1
- package/lib/screens/inbox/containers/ThreadsView.js +81 -54
- package/lib/screens/inbox/containers/ThreadsView.js.map +1 -1
- package/lib/screens/inbox/hooks/useInboxMessages.js +31 -0
- package/lib/screens/inbox/hooks/useInboxMessages.js.map +1 -0
- package/lib/screens/inbox/hooks/useSafeDialogThreadsMachine.js +108 -0
- package/lib/screens/inbox/hooks/useSafeDialogThreadsMachine.js.map +1 -0
- package/lib/screens/inbox/workflow/dialog-threads-xstate.js +151 -0
- package/lib/screens/inbox/workflow/dialog-threads-xstate.js.map +1 -0
- package/package.json +9 -7
- package/CHANGELOG.md +0 -164
- package/jest.config.js +0 -24
- package/lib/screens/inbox/components/DialogsListItem.js +0 -548
- package/lib/screens/inbox/components/DialogsListItem.js.map +0 -1
- package/lib/screens/inbox/components/ServiceDialogsListItem.js +0 -489
- package/lib/screens/inbox/components/ServiceDialogsListItem.js.map +0 -1
- package/lib/screens/inbox/components/workflow/dialogs-list-item-xstate.js +0 -175
- package/lib/screens/inbox/components/workflow/dialogs-list-item-xstate.js.map +0 -1
- package/lib/screens/inbox/components/workflow/service-dialogs-list-item-xstate.js +0 -191
- package/lib/screens/inbox/components/workflow/service-dialogs-list-item-xstate.js.map +0 -1
- package/lib/screens/inbox/containers/workflow/conversation-xstate.js +0 -380
- package/lib/screens/inbox/containers/workflow/conversation-xstate.js.map +0 -1
- package/lib/screens/inbox/containers/workflow/dialogs-xstate.js +0 -211
- package/lib/screens/inbox/containers/workflow/dialogs-xstate.js.map +0 -1
- package/lib/screens/inbox/containers/workflow/thread-conversation-xstate.js +0 -438
- package/lib/screens/inbox/containers/workflow/thread-conversation-xstate.js.map +0 -1
- package/rollup.config.mjs +0 -45
- package/src/components/index.ts +0 -0
- package/src/compute.ts +0 -63
- package/src/index.ts +0 -7
- package/src/module.ts +0 -10
- package/src/navigation/InboxNavigation.tsx +0 -102
- package/src/navigation/index.ts +0 -1
- package/src/screens/inbox/DialogMessages.tsx +0 -21
- package/src/screens/inbox/DialogThreadMessages.tsx +0 -97
- package/src/screens/inbox/DialogThreads.tsx +0 -129
- package/src/screens/inbox/Inbox.tsx +0 -17
- package/src/screens/inbox/components/CachedImage/consts.ts +0 -6
- package/src/screens/inbox/components/CachedImage/index.tsx +0 -223
- package/src/screens/inbox/components/DialogsHeader.tsx +0 -30
- package/src/screens/inbox/components/DialogsListItem.tsx +0 -819
- package/src/screens/inbox/components/ServiceDialogsListItem.tsx +0 -679
- package/src/screens/inbox/components/SlackMessageContainer/ImageViewerModal.tsx +0 -113
- package/src/screens/inbox/components/SlackMessageContainer/SlackBubble.tsx +0 -313
- package/src/screens/inbox/components/SlackMessageContainer/SlackMessage.tsx +0 -145
- package/src/screens/inbox/components/SlackMessageContainer/index.ts +0 -3
- package/src/screens/inbox/components/SupportServiceDialogsListItem.tsx +0 -301
- package/src/screens/inbox/components/ThreadsViewItem.tsx +0 -321
- package/src/screens/inbox/components/workflow/dialogs-list-item-xstate.ts +0 -145
- package/src/screens/inbox/components/workflow/service-dialogs-list-item-xstate.ts +0 -159
- package/src/screens/inbox/config/config.ts +0 -15
- package/src/screens/inbox/config/index.ts +0 -1
- package/src/screens/inbox/containers/ConversationView.tsx +0 -1782
- package/src/screens/inbox/containers/Dialogs.tsx +0 -794
- package/src/screens/inbox/containers/SupportServiceDialogs.tsx +0 -119
- package/src/screens/inbox/containers/ThreadConversationView.tsx +0 -2312
- package/src/screens/inbox/containers/ThreadsView.tsx +0 -305
- package/src/screens/inbox/containers/workflow/apollo/handleResult.ts +0 -20
- package/src/screens/inbox/containers/workflow/conversation-xstate.ts +0 -313
- package/src/screens/inbox/containers/workflow/dialogs-xstate.ts +0 -196
- package/src/screens/inbox/containers/workflow/thread-conversation-xstate.ts +0 -401
- package/src/screens/index.ts +0 -4
- package/tsconfig.json +0 -13
- package/webpack.config.js +0 -58
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React__default,{useState,useCallback,useEffect}from'react';import {Box,
|
|
1
|
+
import React__default,{useState,useCallback,useEffect}from'react';import {Box,Text,Button,Center,Spinner,FlatList}from'@admin-layout/gluestack-ui-mobile';import {useSelector,useDispatch}from'react-redux';import {useRoute,useNavigation,useIsFocused,useFocusEffect}from'@react-navigation/native';import {uniqBy,orderBy}from'lodash-es';import {useThreadCreatedUpdatedSubscription,THREAD_CREATED_UPDATED}from'../../../queries/inboxQueries.js';import {userSelector}from'@adminide-stack/user-auth0-client';import {ThreadViewItem}from'../components/ThreadsViewItem.js';import {config}from'../config/config.js';var __defProp = Object.defineProperty;
|
|
2
2
|
var __defProps = Object.defineProperties;
|
|
3
3
|
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
4
4
|
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
@@ -34,12 +34,47 @@ const ThreadsViewComponent = ({
|
|
|
34
34
|
const {
|
|
35
35
|
params
|
|
36
36
|
} = useRoute();
|
|
37
|
-
|
|
37
|
+
useSelector(userSelector);
|
|
38
38
|
useDispatch();
|
|
39
39
|
const navigation = useNavigation();
|
|
40
40
|
useIsFocused();
|
|
41
41
|
const [refreshing, setRefresh] = useState(false);
|
|
42
|
-
const
|
|
42
|
+
const {
|
|
43
|
+
data: threadCreatedUpdated
|
|
44
|
+
} = useThreadCreatedUpdatedSubscription({
|
|
45
|
+
variables: {
|
|
46
|
+
channelId: channelId == null ? void 0 : channelId.toString()
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
const subscribeToNewMessages = useCallback(() => {
|
|
50
|
+
return subscribeToMore({
|
|
51
|
+
document: THREAD_CREATED_UPDATED,
|
|
52
|
+
variables: {
|
|
53
|
+
channelId: channelId == null ? void 0 : channelId.toString()
|
|
54
|
+
},
|
|
55
|
+
updateQuery: (prev, {
|
|
56
|
+
subscriptionData
|
|
57
|
+
}) => {
|
|
58
|
+
if (!subscriptionData.data) return prev;
|
|
59
|
+
const newThread = subscriptionData.data.threadCreatedUpdated.data;
|
|
60
|
+
if (!newThread) return prev;
|
|
61
|
+
const threads2 = prev.threadMessages.data || [];
|
|
62
|
+
const index = threads2.findIndex((t) => t.id === newThread.id);
|
|
63
|
+
let updatedThreads;
|
|
64
|
+
if (index > -1) {
|
|
65
|
+
updatedThreads = [...threads2];
|
|
66
|
+
updatedThreads[index] = newThread;
|
|
67
|
+
} else {
|
|
68
|
+
updatedThreads = [newThread, ...threads2];
|
|
69
|
+
}
|
|
70
|
+
return __spreadProps(__spreadValues({}, prev), {
|
|
71
|
+
threadMessages: __spreadProps(__spreadValues({}, prev.threadMessages), {
|
|
72
|
+
data: uniqBy(updatedThreads, "id")
|
|
73
|
+
})
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
}, [channelId, subscribeToMore]);
|
|
43
78
|
useFocusEffect(React__default.useCallback(() => {
|
|
44
79
|
var _a;
|
|
45
80
|
navigation == null ? void 0 : navigation.setOptions({
|
|
@@ -51,23 +86,18 @@ const ThreadsViewComponent = ({
|
|
|
51
86
|
limit: MESSAGES_PER_PAGE,
|
|
52
87
|
repliesLimit2: 5
|
|
53
88
|
});
|
|
89
|
+
const unsubscribe = subscribeToNewMessages();
|
|
54
90
|
return () => {
|
|
91
|
+
if (unsubscribe) unsubscribe();
|
|
55
92
|
};
|
|
56
93
|
}, []));
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
oldThreads[i] = newThreads;
|
|
62
|
-
else
|
|
63
|
-
oldThreads.push(newThreads);
|
|
64
|
-
return oldThreads;
|
|
65
|
-
});
|
|
66
|
-
}, []);
|
|
94
|
+
React__default.useEffect(() => {
|
|
95
|
+
var _a;
|
|
96
|
+
if ((_a = threadCreatedUpdated == null ? void 0 : threadCreatedUpdated.threadCreatedUpdated) == null ? void 0 : _a.data) ;
|
|
97
|
+
}, [threadCreatedUpdated]);
|
|
67
98
|
const threads = React__default.useMemo(() => {
|
|
68
99
|
var _a, _b, _c, _d;
|
|
69
|
-
if (((_b = (_a = data == null ? void 0 : data.threadMessages) == null ? void 0 : _a.data) == null ? void 0 : _b.length) == 0)
|
|
70
|
-
return [];
|
|
100
|
+
if (((_b = (_a = data == null ? void 0 : data.threadMessages) == null ? void 0 : _a.data) == null ? void 0 : _b.length) == 0) return [];
|
|
71
101
|
const threadsFiltered = ((_c = data == null ? void 0 : data.threadMessages) == null ? void 0 : _c.data) ? uniqBy([...(_d = data == null ? void 0 : data.threadMessages) == null ? void 0 : _d.data], ({
|
|
72
102
|
id
|
|
73
103
|
}) => id) : [];
|
|
@@ -75,8 +105,7 @@ const ThreadsViewComponent = ({
|
|
|
75
105
|
}, [data]);
|
|
76
106
|
React__default.useMemo(() => {
|
|
77
107
|
var _a;
|
|
78
|
-
if (!(threads == null ? void 0 : threads.length))
|
|
79
|
-
return null;
|
|
108
|
+
if (!(threads == null ? void 0 : threads.length)) return null;
|
|
80
109
|
return ((_a = threads == null ? void 0 : threads.map((t) => t == null ? void 0 : t.replies)) == null ? void 0 : _a.flat(1)) || [];
|
|
81
110
|
}, [threads]);
|
|
82
111
|
const handleSelectThread = useCallback((id, title, postParentId) => {
|
|
@@ -89,61 +118,59 @@ const ThreadsViewComponent = ({
|
|
|
89
118
|
});
|
|
90
119
|
}, []);
|
|
91
120
|
const handleRefresh = useCallback(() => {
|
|
121
|
+
setRefresh(true);
|
|
92
122
|
refetch({
|
|
93
123
|
channelId: channelId == null ? void 0 : channelId.toString(),
|
|
94
124
|
role: role == null ? void 0 : role.toString(),
|
|
95
125
|
limit: MESSAGES_PER_PAGE,
|
|
96
126
|
repliesLimit2: 5
|
|
127
|
+
}).finally(() => {
|
|
128
|
+
setRefresh(false);
|
|
97
129
|
});
|
|
98
130
|
}, []);
|
|
99
131
|
const fetchMoreThreads = useCallback(() => {
|
|
100
132
|
refetch({
|
|
101
133
|
channelId: channelId == null ? void 0 : channelId.toString(),
|
|
102
134
|
role: role == null ? void 0 : role.toString(),
|
|
103
|
-
|
|
135
|
+
limit: MESSAGES_PER_PAGE,
|
|
136
|
+
repliesLimit2: 5
|
|
104
137
|
});
|
|
105
138
|
}, []);
|
|
106
|
-
|
|
107
|
-
|
|
139
|
+
if (error) {
|
|
140
|
+
return /* @__PURE__ */ React__default.createElement(Box, { style: {
|
|
141
|
+
flex: 1,
|
|
142
|
+
justifyContent: "center",
|
|
143
|
+
alignItems: "center"
|
|
144
|
+
} }, /* @__PURE__ */ React__default.createElement(Text, null, "Error loading threads. ", error.message), /* @__PURE__ */ React__default.createElement(Button, { onPress: handleRefresh, style: {
|
|
145
|
+
marginTop: 4
|
|
146
|
+
} }, /* @__PURE__ */ React__default.createElement(Text, null, "Try Again")));
|
|
147
|
+
}
|
|
148
|
+
return /* @__PURE__ */ React__default.createElement(Box, { style: {
|
|
108
149
|
flex: 1
|
|
109
|
-
},
|
|
110
|
-
|
|
111
|
-
},
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
}) => {
|
|
123
|
-
var _a, _b, _c, _d, _e, _f;
|
|
124
|
-
if (!subscriptionData.data)
|
|
125
|
-
return prev;
|
|
126
|
-
const newPostThreadData = (_b = (_a = subscriptionData == null ? void 0 : subscriptionData.data) == null ? void 0 : _a.threadCreatedUpdated) == null ? void 0 : _b.data;
|
|
127
|
-
const newMessage = (_d = (_c = subscriptionData == null ? void 0 : subscriptionData.data) == null ? void 0 : _c.threadCreatedUpdated) == null ? void 0 : _d.lastMessage;
|
|
128
|
-
const data2 = (_f = (_e = prev == null ? void 0 : prev.threadMessages) == null ? void 0 : _e.data) == null ? void 0 : _f.map((t) => t.id === (newPostThreadData == null ? void 0 : newPostThreadData.id) ? __spreadProps(__spreadValues({}, t), {
|
|
129
|
-
replies: [newMessage, ...t == null ? void 0 : t.replies],
|
|
130
|
-
replyCount: newPostThreadData == null ? void 0 : newPostThreadData.replyCount,
|
|
131
|
-
lastReplyAt: newPostThreadData == null ? void 0 : newPostThreadData.lastReplyAt,
|
|
132
|
-
updatedAt: newPostThreadData == null ? void 0 : newPostThreadData.updatedAt
|
|
133
|
-
}) : t);
|
|
134
|
-
return Object.assign({}, prev, {
|
|
135
|
-
threadMessages: __spreadProps(__spreadValues({}, prev == null ? void 0 : prev.threadMessages), {
|
|
136
|
-
data: data2
|
|
137
|
-
})
|
|
138
|
-
});
|
|
139
|
-
}
|
|
140
|
-
}) })), keyExtractor: (item, index) => "threads-view-key" + index, onEndReached: fetchMoreThreads, onEndReachedThreshold: 0.1 }));
|
|
150
|
+
} }, threadLoading && !(threads == null ? void 0 : threads.length) ? /* @__PURE__ */ React__default.createElement(Center, { style: {
|
|
151
|
+
flex: 1
|
|
152
|
+
} }, /* @__PURE__ */ React__default.createElement(Spinner, { size: "large" })) : (threads == null ? void 0 : threads.length) === 0 ? /* @__PURE__ */ React__default.createElement(Box, { style: {
|
|
153
|
+
flex: 1,
|
|
154
|
+
justifyContent: "center",
|
|
155
|
+
alignItems: "center"
|
|
156
|
+
} }, /* @__PURE__ */ React__default.createElement(Text, null, "No threads found")) : /* @__PURE__ */ React__default.createElement(FlatList, { data: threads, keyExtractor: (item) => item.id.toString(), renderItem: ({
|
|
157
|
+
item
|
|
158
|
+
}) => /* @__PURE__ */ React__default.createElement(ThreadViewItem, __spreadProps(__spreadValues({}, item), { onPress: handleSelectThread, channelId, channelsDetail })), refreshing, onRefresh: handleRefresh, onEndReached: fetchMoreThreads, onEndReachedThreshold: 0.5, contentContainerStyle: {
|
|
159
|
+
padding: 16
|
|
160
|
+
}, ItemSeparatorComponent: () => /* @__PURE__ */ React__default.createElement(Box, { style: {
|
|
161
|
+
height: 3
|
|
162
|
+
} }) }), /* @__PURE__ */ React__default.createElement(SubscriptionHandler, { subscribeToNewMessages, channelId }));
|
|
141
163
|
};
|
|
142
164
|
const SubscriptionHandler = ({
|
|
143
165
|
subscribeToNewMessages,
|
|
144
166
|
channelId
|
|
145
167
|
}) => {
|
|
146
|
-
useEffect(() =>
|
|
147
|
-
|
|
168
|
+
useEffect(() => {
|
|
169
|
+
const unsubscribe = subscribeToNewMessages();
|
|
170
|
+
return () => {
|
|
171
|
+
if (unsubscribe) unsubscribe();
|
|
172
|
+
};
|
|
173
|
+
}, [channelId]);
|
|
174
|
+
return null;
|
|
148
175
|
};
|
|
149
176
|
const ThreadsView = ThreadsViewComponent;export{ThreadsView};//# sourceMappingURL=ThreadsView.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ThreadsView.js","sources":["../../../../src/screens/inbox/containers/ThreadsView.tsx"],"sourcesContent":["import React, { useCallback, useMemo, useEffect, useState } from 'react';\nimport { FlatList, Box, Heading, Input, Text, Icon, Center, Spinner, Button } from '@admin-layout/gluestack-ui-mobile';\nimport { Ionicons } from '@expo/vector-icons';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { useNavigation, useRoute, useIsFocused, useFocusEffect } from '@react-navigation/native';\nimport { orderBy, uniqBy, startCase } from 'lodash-es';\nimport {\n useThreadMessagesQuery,\n OnThreadCreatedUpdatedDocument as THREAD_CHAT_ADDED,\n useOnThreadCreatedUpdatedSubscription,\n} from 'common/graphql';\nimport { userSelector } from '@adminide-stack/user-auth0-client';\nimport { CHANGE_SETTINGS_ACTION } from '@admin-layout/client';\nimport { ThreadViewItem } from '../components/ThreadsViewItem';\nimport { config } from '../config';\nconst { MESSAGES_PER_PAGE } = config;\n\nexport interface ThreadsViewProps {\n data: any;\n loading: boolean;\n refetch: any;\n subscribeToMore: any;\n error: any;\n channelId?: string;\n role?: string;\n channelsDetail?: any;\n refetchChannelDetail: (id: any) => Promise<any>;\n}\n\ninterface IThreadSubscriptionHandlerProps {\n subscribeToNewMessages: () => any;\n channelId: string | undefined;\n}\n\nconst ThreadsViewComponent = ({\n data,\n loading: threadLoading,\n refetch,\n subscribeToMore,\n error,\n channelId,\n role,\n channelsDetail,\n refetchChannelDetail,\n}: ThreadsViewProps) => {\n const { params } = useRoute<any>();\n const auth = useSelector(userSelector);\n const dispatch = useDispatch();\n const navigation = useNavigation<any>();\n const isFocused = useIsFocused();\n const [refreshing, setRefresh] = useState<boolean>(false);\n const [threadData, setThreadsData] = useState<any>([]);\n\n // const {\n // data,\n // loading: threadLoading,\n // error,\n // refetch,\n // subscribeToMore,\n // } = useThreadMessagesQuery({\n // variables: {\n // channelId: channelId?.toString(),\n // role: role?.toString(),\n // limit: MESSAGES_PER_PAGE,\n // repliesLimit2: 5,\n // },\n // // fetchPolicy: 'cache-and-network',\n // });\n\n // const { data: threadCreatedUpdated } = useOnThreadCreatedUpdatedSubscription({\n // variables: { channelId: channelId?.toString() },\n // });\n\n useFocusEffect(\n React.useCallback(() => {\n // Do something when the screen is focused\n navigation?.setOptions({ title: params?.title ?? 'Thread' });\n refetch({\n channelId: channelId?.toString(),\n role: role?.toString(),\n limit: MESSAGES_PER_PAGE,\n repliesLimit2: 5,\n });\n // .then(({ data }) => {\n // if (!data?.threadMessages?.data) {\n // return;\n // }\n\n // if (data?.threadMessages?.data?.length) {\n // const { data: newThreads } = data?.threadMessages;\n // setThreadsData((oldThreads: any) => uniqBy([...oldThreads, ...newThreads], ({ id }) => id));\n // }\n // });\n\n return () => {\n // Do something when the screen is unfocused\n // Useful for cleanup functions\n };\n }, []),\n );\n\n // React.useEffect(() => {\n // if (data?.threadMessages?.data?.length) {\n // const { data: newThreads } = data?.threadMessages;\n // setThreadsData((oldThreads: any) => uniqBy([...oldThreads, ...newThreads], ({ id }) => id));\n // }\n // }, [data]);\n\n // React.useEffect(() => {\n // if (threadCreatedUpdated?.threadCreatedUpdated?.data) {\n // const { data: newThreads } = threadCreatedUpdated?.threadCreatedUpdated;\n\n // setThreadsData((oldThreads: any) => {\n // const i = oldThreads.findIndex((el: any) => el.id === newThreads?.id);\n // if (i > -1) oldThreads[i] = newThreads; // (2)\n // else oldThreads.push(newThreads);\n // return oldThreads;\n // });\n // // setThreadsData((oldThreads: any) => uniqBy([...oldThreads, newThreads], ({ id }) => id));\n // }\n // }, [threadCreatedUpdated]);\n\n const setData = React.useCallback((newThreads: any) => {\n setThreadsData((oldThreads: any) => {\n const i = oldThreads.findIndex((el: any) => el.id === newThreads?.id);\n if (i > -1) oldThreads[i] = newThreads; // (2)\n else oldThreads.push(newThreads);\n return oldThreads;\n });\n // setThreadsData((oldThreads: any) => uniqBy([...oldThreads, newThreads], ({ id }) => id));\n }, []);\n\n // const threads = React.useMemo(() => {\n // if (!threadData?.length) return null;\n // return orderBy(threadData, ['updatedAt'], ['desc']) || [];\n // //return threadData || [];\n // }, [threadData]);\n\n const threads = React.useMemo(() => {\n // if (!data?.threadMessages?.data?.length) return null;\n // const { data: newThreads } = data?.threadMessages;\n if (data?.threadMessages?.data?.length == 0) return [];\n const threadsFiltered = data?.threadMessages?.data\n ? uniqBy([...data?.threadMessages?.data], ({ id }: any) => id)\n : [];\n return orderBy(threadsFiltered, ['updatedAt'], ['desc']) || [];\n }, [data]);\n\n const threadReplies = React.useMemo(() => {\n if (!threads?.length) return null;\n return threads?.map((t: any) => t?.replies)?.flat(1) || [];\n //return threadData || [];\n }, [threads]);\n\n const handleSelectThread = useCallback((id: any, title: any, postParentId: any) => {\n navigation.navigate(config.THREAD_MESSEGE_PATH as any, {\n channelId: id,\n role: role?.toString(),\n title: title,\n postParentId: postParentId,\n hideTabBar: true,\n });\n // if (params?.channelId) {\n // navigation.navigate(config.THREAD_MESSEGE_PATH as any, {\n // channelId: params?.channelId,\n // title: params?.title ?? null,\n // postParentId: postParentId,\n // hideTabBar: true,\n // });\n // } else {\n // navigation.navigate(config.THREAD_MESSEGE_PATH as any, {\n // channelId: id,\n // title: title,\n // postParentId: postParentId,\n // hideTabBar: true,\n // });\n // }\n }, []);\n\n const handleRefresh = useCallback(() => {\n refetch({\n channelId: channelId?.toString(),\n role: role?.toString(),\n limit: MESSAGES_PER_PAGE,\n repliesLimit2: 5,\n });\n // .then(({ data }) => {\n // if (!data?.threadMessages?.data) {\n // return;\n // }\n\n // if (data?.threadMessages?.data?.length) {\n // const { data: newThreads } = data?.threadMessages;\n // setThreadsData((oldThreads: any) => uniqBy([...oldThreads, ...newThreads], ({ id }) => id));\n // }\n // });\n }, []);\n\n const fetchMoreThreads = useCallback(() => {\n refetch({\n channelId: channelId?.toString(),\n role: role?.toString(),\n skip: threads?.length,\n });\n }, []);\n\n // if (!threadReplies || threadReplies?.length == 0) {\n // return (\n // <Center w=\"full\" bg={'f8f8f8'} height={'full'}>\n // You don't have any message yet!\n // </Center>\n // );\n // }\n console.log('threadLoading', threadLoading, ' threads?.length=', threads?.length);\n\n return (\n <Box className=\"flex-1 p-2 pb-0 bg-gray-100 dark:border-gray-600 dark:bg-gray-700\">\n <FlatList\n style={{ flex: 1 }}\n data={threads && threads?.length > 0 ? threads : []}\n onRefresh={handleRefresh}\n refreshing={threadLoading}\n contentContainerStyle={{ paddingBottom: 60 }}\n ItemSeparatorComponent={() => <Box className=\"h-0.5 bg-gray-200\" />}\n renderItem={({ item: thread, index }) => (\n <ThreadViewItem\n key={index}\n onOpen={handleSelectThread}\n currentUser={auth}\n thread={thread}\n role={role}\n setData={setData}\n />\n )}\n ListEmptyComponent={() => (\n <>\n {/* {!threadLoading || threads?.length == 0} */}\n {!threadLoading && threads?.length == 0 && (\n <Box className=\"p-5\">\n <Center className=\"mt-6\">\n <Ionicons name=\"chatbubbles\" size={50} />\n <Text>You don't have any message yet!</Text>\n </Center>\n </Box>\n )}\n </>\n )}\n ListFooterComponent={() => (\n <>\n <SubscriptionHandler\n channelId={channelId}\n subscribeToNewMessages={() =>\n subscribeToMore({\n document: THREAD_CHAT_ADDED,\n variables: {\n channelId: channelId?.toString(),\n postParentId: null,\n },\n updateQuery: (prev, { subscriptionData }: any) => {\n if (!subscriptionData.data) return prev;\n const newPostThreadData: any =\n subscriptionData?.data?.threadCreatedUpdated?.data;\n const newMessage: any =\n subscriptionData?.data?.threadCreatedUpdated?.lastMessage;\n const data = prev?.threadMessages?.data?.map((t: any) =>\n t.id === newPostThreadData?.id\n ? {\n ...t,\n replies: [newMessage, ...t?.replies],\n replyCount: newPostThreadData?.replyCount,\n lastReplyAt: newPostThreadData?.lastReplyAt,\n updatedAt: newPostThreadData?.updatedAt,\n }\n : t,\n );\n\n return Object.assign({}, prev, {\n threadMessages: {\n ...prev?.threadMessages,\n // totalCount: prev?.threadMessages?.totalCount + 1,\n data: data,\n },\n });\n },\n })\n }\n />\n </>\n )}\n keyExtractor={(item, index) => 'threads-view-key' + index}\n onEndReached={fetchMoreThreads}\n onEndReachedThreshold={0.1}\n />\n </Box>\n );\n};\n\nconst SubscriptionHandler = ({ subscribeToNewMessages, channelId }: IThreadSubscriptionHandlerProps) => {\n useEffect(() => subscribeToNewMessages(), [channelId]);\n return <></>;\n};\n\nexport const ThreadsView = ThreadsViewComponent;\n\n// export const ThreadsView = React.memo(ThreadsViewComponent);\n"],"names":["React","THREAD_CHAT_ADDED","data"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ThreadsView.js","sources":["../../../../src/screens/inbox/containers/ThreadsView.tsx"],"sourcesContent":["import React, { useCallback, useMemo, useEffect, useState } from 'react';\nimport { FlatList, Box, Heading, Input, Text, Icon, Center, Spinner, Button } from '@admin-layout/gluestack-ui-mobile';\nimport { Ionicons } from '@expo/vector-icons';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { useNavigation, useRoute, useIsFocused, useFocusEffect } from '@react-navigation/native';\nimport { orderBy, uniqBy, startCase } from 'lodash-es';\nimport {\n useThreadMessagesQuery,\n THREAD_CREATED_UPDATED,\n useThreadCreatedUpdatedSubscription,\n} from '../../../queries/inboxQueries';\nimport { userSelector } from '@adminide-stack/user-auth0-client';\nimport { CHANGE_SETTINGS_ACTION } from '@admin-layout/client';\nimport { ThreadViewItem } from '../components/ThreadsViewItem';\nimport { config } from '../config';\nimport { Actions } from '../workflow/dialog-threads-xstate';\nconst { MESSAGES_PER_PAGE } = config;\n\nexport interface ThreadsViewProps {\n data: any;\n loading: boolean;\n refetch: any;\n subscribeToMore: any;\n error: any;\n channelId?: string;\n role?: string;\n channelsDetail?: any;\n refetchChannelDetail: (id: any) => Promise<any>;\n}\n\ninterface IThreadSubscriptionHandlerProps {\n subscribeToNewMessages: () => any;\n channelId: string | undefined;\n}\n\nconst ThreadsViewComponent = ({\n data,\n loading: threadLoading,\n refetch,\n subscribeToMore,\n error,\n channelId,\n role,\n channelsDetail,\n refetchChannelDetail,\n}: ThreadsViewProps) => {\n const { params } = useRoute<any>();\n const auth = useSelector(userSelector);\n const dispatch = useDispatch();\n const navigation = useNavigation<any>();\n const isFocused = useIsFocused();\n const [refreshing, setRefresh] = useState<boolean>(false);\n\n // Use thread subscription for real-time updates\n const { data: threadCreatedUpdated } = useThreadCreatedUpdatedSubscription({\n variables: { channelId: channelId?.toString() },\n });\n\n // Subscribe to thread updates\n const subscribeToNewMessages = useCallback(() => {\n return subscribeToMore({\n document: THREAD_CREATED_UPDATED,\n variables: { channelId: channelId?.toString() },\n updateQuery: (prev: any, { subscriptionData }: any) => {\n if (!subscriptionData.data) return prev;\n\n const newThread = subscriptionData.data.threadCreatedUpdated.data;\n if (!newThread) return prev;\n\n const threads = prev.threadMessages.data || [];\n const index = threads.findIndex((t: any) => t.id === newThread.id);\n\n let updatedThreads;\n if (index > -1) {\n // Update existing thread\n updatedThreads = [...threads];\n updatedThreads[index] = newThread;\n } else {\n // Add new thread\n updatedThreads = [newThread, ...threads];\n }\n\n return {\n ...prev,\n threadMessages: {\n ...prev.threadMessages,\n data: uniqBy(updatedThreads, 'id'),\n },\n };\n },\n });\n }, [channelId, subscribeToMore]);\n\n useFocusEffect(\n React.useCallback(() => {\n // Do something when the screen is focused\n navigation?.setOptions({ title: params?.title ?? 'Thread' });\n refetch({\n channelId: channelId?.toString(),\n role: role?.toString(),\n limit: MESSAGES_PER_PAGE,\n repliesLimit2: 5,\n });\n\n // Setup subscription\n const unsubscribe = subscribeToNewMessages();\n\n return () => {\n // Unsubscribe on cleanup\n if (unsubscribe) unsubscribe();\n };\n }, []),\n );\n\n // Effect for thread updates from subscription\n React.useEffect(() => {\n if (threadCreatedUpdated?.threadCreatedUpdated?.data) {\n // The subscription handler will handle updates\n }\n }, [threadCreatedUpdated]);\n\n const threads = React.useMemo(() => {\n if (data?.threadMessages?.data?.length == 0) return [];\n const threadsFiltered = data?.threadMessages?.data\n ? uniqBy([...data?.threadMessages?.data], ({ id }: any) => id)\n : [];\n return orderBy(threadsFiltered, ['updatedAt'], ['desc']) || [];\n }, [data]);\n\n const threadReplies = React.useMemo(() => {\n if (!threads?.length) return null;\n return threads?.map((t: any) => t?.replies)?.flat(1) || [];\n }, [threads]);\n\n const handleSelectThread = useCallback((id: any, title: any, postParentId: any) => {\n navigation.navigate(config.THREAD_MESSEGE_PATH as any, {\n channelId: id,\n role: role?.toString(),\n title: title,\n postParentId: postParentId,\n hideTabBar: true,\n });\n }, []);\n\n const handleRefresh = useCallback(() => {\n setRefresh(true);\n refetch({\n channelId: channelId?.toString(),\n role: role?.toString(),\n limit: MESSAGES_PER_PAGE,\n repliesLimit2: 5,\n }).finally(() => {\n setRefresh(false);\n });\n }, []);\n\n const fetchMoreThreads = useCallback(() => {\n refetch({\n channelId: channelId?.toString(),\n role: role?.toString(),\n limit: MESSAGES_PER_PAGE,\n repliesLimit2: 5,\n });\n }, []);\n\n if (error) {\n return (\n <Box style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>\n <Text>Error loading threads. {error.message}</Text>\n <Button onPress={handleRefresh} style={{ marginTop: 4 }}>\n <Text>Try Again</Text>\n </Button>\n </Box>\n );\n }\n\n return (\n <Box style={{ flex: 1 }}>\n {threadLoading && !threads?.length ? (\n <Center style={{ flex: 1 }}>\n <Spinner size=\"large\" />\n </Center>\n ) : threads?.length === 0 ? (\n <Box style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>\n <Text>No threads found</Text>\n </Box>\n ) : (\n <FlatList\n data={threads}\n keyExtractor={(item) => item.id.toString()}\n renderItem={({ item }) => (\n <ThreadViewItem\n {...item}\n onPress={handleSelectThread}\n channelId={channelId}\n channelsDetail={channelsDetail}\n />\n )}\n refreshing={refreshing}\n onRefresh={handleRefresh}\n onEndReached={fetchMoreThreads}\n onEndReachedThreshold={0.5}\n contentContainerStyle={{ padding: 16 }}\n ItemSeparatorComponent={() => <Box style={{ height: 3 }} />}\n />\n )}\n <SubscriptionHandler subscribeToNewMessages={subscribeToNewMessages} channelId={channelId} />\n </Box>\n );\n};\n\n// Component to handle subscription logic\nconst SubscriptionHandler = ({ subscribeToNewMessages, channelId }: IThreadSubscriptionHandlerProps) => {\n useEffect(() => {\n const unsubscribe = subscribeToNewMessages();\n return () => {\n if (unsubscribe) unsubscribe();\n };\n }, [channelId]);\n\n return null;\n};\n\nexport const ThreadsView = ThreadsViewComponent;\n"],"names":["threads","React"],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import {useCallback}from'react';function useInboxMessages({
|
|
2
|
+
useQueryHook,
|
|
3
|
+
queryVariables,
|
|
4
|
+
subscriptionDocument,
|
|
5
|
+
subscriptionVariables,
|
|
6
|
+
updateQuery,
|
|
7
|
+
onError
|
|
8
|
+
}) {
|
|
9
|
+
const {
|
|
10
|
+
data,
|
|
11
|
+
loading,
|
|
12
|
+
error,
|
|
13
|
+
refetch,
|
|
14
|
+
subscribeToMore
|
|
15
|
+
} = useQueryHook(queryVariables);
|
|
16
|
+
const subscribe = useCallback(() => {
|
|
17
|
+
return subscribeToMore({
|
|
18
|
+
document: subscriptionDocument,
|
|
19
|
+
variables: subscriptionVariables,
|
|
20
|
+
updateQuery,
|
|
21
|
+
onError
|
|
22
|
+
});
|
|
23
|
+
}, [subscribeToMore, subscriptionDocument, subscriptionVariables, updateQuery, onError]);
|
|
24
|
+
return {
|
|
25
|
+
data,
|
|
26
|
+
loading,
|
|
27
|
+
error,
|
|
28
|
+
refetch,
|
|
29
|
+
subscribe
|
|
30
|
+
};
|
|
31
|
+
}export{useInboxMessages};//# sourceMappingURL=useInboxMessages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useInboxMessages.js","sources":["../../../../src/screens/inbox/hooks/useInboxMessages.ts"],"sourcesContent":["import { useCallback } from 'react';\n\n/**\n * useInboxMessages - a generic hook for fetching and subscribing to messages\n *\n * @param useQueryHook - Apollo query hook (e.g., useChannelMessagesQuery)\n * @param queryVariables - variables for the query\n * @param subscriptionDocument - GraphQL subscription document\n * @param subscriptionVariables - variables for the subscription\n * @param updateQuery - Apollo updateQuery function (optional)\n * @param onError - error handler (optional)\n * @returns { data, loading, error, refetch, subscribe }\n */\nexport function useInboxMessages({\n useQueryHook,\n queryVariables,\n subscriptionDocument,\n subscriptionVariables,\n updateQuery,\n onError,\n}) {\n const { data, loading, error, refetch, subscribeToMore } = useQueryHook(queryVariables);\n\n const subscribe = useCallback(() => {\n return subscribeToMore({\n document: subscriptionDocument,\n variables: subscriptionVariables,\n updateQuery,\n onError,\n });\n }, [subscribeToMore, subscriptionDocument, subscriptionVariables, updateQuery, onError]);\n\n return { data, loading, error, refetch, subscribe };\n}\n"],"names":[],"mappings":"gCAaO,SAAS,gBAAA,CAAiB;AAAA,EAC/B,YAAA;AAAA,EACA,cAAA;AAAA,EACA,oBAAA;AAAA,EACA,qBAAA;AAAA,EACA,WAAA;AAAA,EACA;AACF,CAAA,EAAG;AACD,EAAA,MAAM;AAAA,IACJ,IAAA;AAAA,IACA,OAAA;AAAA,IACA,KAAA;AAAA,IACA,OAAA;AAAA,IACA;AAAA,GACF,GAAI,aAAa,cAAc,CAAA;AAC/B,EAAA,MAAM,SAAA,GAAY,YAAY,MAAM;AAClC,IAAA,OAAO,eAAA,CAAgB;AAAA,MACrB,QAAA,EAAU,oBAAA;AAAA,MACV,SAAA,EAAW,qBAAA;AAAA,MACX,WAAA;AAAA,MACA;AAAA,KACD,CAAA;AAAA,EACH,GAAG,CAAC,eAAA,EAAiB,sBAAsB,qBAAA,EAAuB,WAAA,EAAa,OAAO,CAAC,CAAA;AACvF,EAAA,OAAO;AAAA,IACL,IAAA;AAAA,IACA,OAAA;AAAA,IACA,KAAA;AAAA,IACA,OAAA;AAAA,IACA;AAAA,GACF;AACF"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import {useState,useCallback,useMemo}from'react';import {BaseState,Actions}from'../workflow/dialog-threads-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 useSafeDialogThreadsMachine() {
|
|
21
|
+
const [state, setState] = useState({
|
|
22
|
+
context: {
|
|
23
|
+
channelId: void 0,
|
|
24
|
+
postParentId: void 0,
|
|
25
|
+
role: void 0,
|
|
26
|
+
channelsDetail: null,
|
|
27
|
+
threadData: [],
|
|
28
|
+
loading: true,
|
|
29
|
+
error: null
|
|
30
|
+
},
|
|
31
|
+
value: BaseState.Idle,
|
|
32
|
+
matches: (value) => value === BaseState.Idle
|
|
33
|
+
});
|
|
34
|
+
const matches = useCallback((value) => value === state.value, [state.value]);
|
|
35
|
+
useMemo(() => {
|
|
36
|
+
setState((prev) => __spreadProps(__spreadValues({}, prev), {
|
|
37
|
+
matches
|
|
38
|
+
}));
|
|
39
|
+
}, [matches]);
|
|
40
|
+
const send = useCallback((event) => {
|
|
41
|
+
try {
|
|
42
|
+
if (event.type === Actions.INITIALIZE) {
|
|
43
|
+
setState((prev) => {
|
|
44
|
+
var _a, _b, _c;
|
|
45
|
+
return __spreadProps(__spreadValues({}, prev), {
|
|
46
|
+
context: __spreadProps(__spreadValues({}, prev.context), {
|
|
47
|
+
channelId: (_a = event.data) == null ? void 0 : _a.channelId,
|
|
48
|
+
postParentId: (_b = event.data) == null ? void 0 : _b.postParentId,
|
|
49
|
+
role: (_c = event.data) == null ? void 0 : _c.role,
|
|
50
|
+
loading: true,
|
|
51
|
+
error: null
|
|
52
|
+
}),
|
|
53
|
+
value: BaseState.LoadingChannel
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
} else if (event.type === Actions.SET_CHANNEL_DETAIL) {
|
|
57
|
+
setState((prev) => {
|
|
58
|
+
var _a;
|
|
59
|
+
return __spreadProps(__spreadValues({}, prev), {
|
|
60
|
+
context: __spreadProps(__spreadValues({}, prev.context), {
|
|
61
|
+
channelsDetail: (_a = event.data) == null ? void 0 : _a.channelsDetail,
|
|
62
|
+
loading: false
|
|
63
|
+
}),
|
|
64
|
+
value: BaseState.LoadingThreads
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
} else if (event.type === Actions.SET_THREADS) {
|
|
68
|
+
setState((prev) => {
|
|
69
|
+
var _a;
|
|
70
|
+
return __spreadProps(__spreadValues({}, prev), {
|
|
71
|
+
context: __spreadProps(__spreadValues({}, prev.context), {
|
|
72
|
+
threadData: ((_a = event.data) == null ? void 0 : _a.threadData) || [],
|
|
73
|
+
loading: false
|
|
74
|
+
}),
|
|
75
|
+
value: BaseState.Active
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
} else if (event.type === Actions.FETCH_THREADS) {
|
|
79
|
+
setState((prev) => __spreadProps(__spreadValues({}, prev), {
|
|
80
|
+
context: __spreadProps(__spreadValues({}, prev.context), {
|
|
81
|
+
loading: true
|
|
82
|
+
}),
|
|
83
|
+
value: BaseState.LoadingThreads
|
|
84
|
+
}));
|
|
85
|
+
} else if (event.type === Actions.ERROR) {
|
|
86
|
+
setState((prev) => {
|
|
87
|
+
var _a;
|
|
88
|
+
return __spreadProps(__spreadValues({}, prev), {
|
|
89
|
+
context: __spreadProps(__spreadValues({}, prev.context), {
|
|
90
|
+
error: (_a = event.data) == null ? void 0 : _a.error,
|
|
91
|
+
loading: false
|
|
92
|
+
}),
|
|
93
|
+
value: BaseState.Error
|
|
94
|
+
});
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
} catch (error) {
|
|
98
|
+
setState((prev) => __spreadProps(__spreadValues({}, prev), {
|
|
99
|
+
context: __spreadProps(__spreadValues({}, prev.context), {
|
|
100
|
+
error,
|
|
101
|
+
loading: false
|
|
102
|
+
}),
|
|
103
|
+
value: BaseState.Error
|
|
104
|
+
}));
|
|
105
|
+
}
|
|
106
|
+
}, []);
|
|
107
|
+
return [state, send];
|
|
108
|
+
}export{useSafeDialogThreadsMachine};//# sourceMappingURL=useSafeDialogThreadsMachine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSafeDialogThreadsMachine.js","sources":["../../../../src/screens/inbox/hooks/useSafeDialogThreadsMachine.ts"],"sourcesContent":["import { useState, useCallback, useMemo } from 'react';\nimport { BaseState, Actions, dialogThreadsXstate } from '../workflow/dialog-threads-xstate';\n\n// Define proper types for the state and context\nexport interface DialogThreadsContext {\n channelId?: string;\n postParentId?: string | number;\n role?: string;\n channelsDetail: any;\n threadData: any[];\n loading: boolean;\n error: any;\n}\n\nexport interface DialogThreadsState {\n context: DialogThreadsContext;\n value: BaseState;\n matches: (stateValue: string) => boolean;\n}\n\n// Define proper action types\nexport type DialogThreadsEvent =\n | { type: typeof Actions.INITIALIZE; data: { channelId?: string; postParentId?: string | number; role?: string } }\n | { type: typeof Actions.FETCH_CHANNEL_DETAIL; data: { id: string } }\n | { type: typeof Actions.SET_CHANNEL_DETAIL; data: { channelsDetail: any } }\n | { type: typeof Actions.FETCH_THREADS; data?: any }\n | { type: typeof Actions.SET_THREADS; data: { threadData: any[] } }\n | { type: typeof Actions.ERROR; data: { error: any } };\n\n/**\n * Custom hook to safely use the dialog threads state machine\n * This provides a fallback implementation in case useMachine from XState has issues\n */\nexport function useSafeDialogThreadsMachine(): [DialogThreadsState, (event: DialogThreadsEvent) => void] {\n // Initialize with default state from the machine's initial context\n const [state, setState] = useState<DialogThreadsState>({\n context: {\n channelId: undefined,\n postParentId: undefined,\n role: undefined,\n channelsDetail: null,\n threadData: [],\n loading: true,\n error: null,\n },\n value: BaseState.Idle,\n matches: (value: string) => value === BaseState.Idle,\n });\n\n // Create a memoized function to determine state matching\n const matches = useCallback((value: string) => value === state.value, [state.value]);\n\n // Update the matches function when state changes\n useMemo(() => {\n setState((prev) => ({\n ...prev,\n matches,\n }));\n }, [matches]);\n\n // Create a safe send function to handle events\n const send = useCallback((event: DialogThreadsEvent) => {\n try {\n // Handle specific events based on the event type\n if (event.type === Actions.INITIALIZE) {\n setState((prev) => ({\n ...prev,\n context: {\n ...prev.context,\n channelId: event.data?.channelId,\n postParentId: event.data?.postParentId,\n role: event.data?.role,\n loading: true,\n error: null,\n },\n value: BaseState.LoadingChannel,\n }));\n } else if (event.type === Actions.SET_CHANNEL_DETAIL) {\n setState((prev) => ({\n ...prev,\n context: {\n ...prev.context,\n channelsDetail: event.data?.channelsDetail,\n loading: false,\n },\n value: BaseState.LoadingThreads,\n }));\n } else if (event.type === Actions.SET_THREADS) {\n setState((prev) => ({\n ...prev,\n context: {\n ...prev.context,\n threadData: event.data?.threadData || [],\n loading: false,\n },\n value: BaseState.Active,\n }));\n } else if (event.type === Actions.FETCH_THREADS) {\n setState((prev) => ({\n ...prev,\n context: {\n ...prev.context,\n loading: true,\n },\n value: BaseState.LoadingThreads,\n }));\n } else if (event.type === Actions.ERROR) {\n setState((prev) => ({\n ...prev,\n context: {\n ...prev.context,\n error: event.data?.error,\n loading: false,\n },\n value: BaseState.Error,\n }));\n }\n } catch (error) {\n // Handle errors gracefully\n setState((prev) => ({\n ...prev,\n context: {\n ...prev.context,\n error,\n loading: false,\n },\n value: BaseState.Error,\n }));\n }\n }, []);\n\n // Return as a tuple to match useMachine API\n return [state, send];\n}\n\nexport default useSafeDialogThreadsMachine;\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import {setup,assign}from'xstate';var BaseState = /* @__PURE__ */ ((BaseState2) => {
|
|
2
|
+
BaseState2["Idle"] = "idle";
|
|
3
|
+
BaseState2["LoadingChannel"] = "loadingChannel";
|
|
4
|
+
BaseState2["LoadingThreads"] = "loadingThreads";
|
|
5
|
+
BaseState2["Active"] = "active";
|
|
6
|
+
BaseState2["Error"] = "error";
|
|
7
|
+
return BaseState2;
|
|
8
|
+
})(BaseState || {});
|
|
9
|
+
var Actions = /* @__PURE__ */ ((Actions2) => {
|
|
10
|
+
Actions2["INITIALIZE"] = "INITIALIZE";
|
|
11
|
+
Actions2["FETCH_CHANNEL_DETAIL"] = "FETCH_CHANNEL_DETAIL";
|
|
12
|
+
Actions2["SET_CHANNEL_DETAIL"] = "SET_CHANNEL_DETAIL";
|
|
13
|
+
Actions2["FETCH_THREADS"] = "FETCH_THREADS";
|
|
14
|
+
Actions2["SET_THREADS"] = "SET_THREADS";
|
|
15
|
+
Actions2["ERROR"] = "ERROR";
|
|
16
|
+
return Actions2;
|
|
17
|
+
})(Actions || {});
|
|
18
|
+
setup({
|
|
19
|
+
types: {
|
|
20
|
+
context: {},
|
|
21
|
+
events: {}
|
|
22
|
+
},
|
|
23
|
+
actions: {
|
|
24
|
+
setInitialContext: assign({
|
|
25
|
+
channelId: ({
|
|
26
|
+
event
|
|
27
|
+
}) => {
|
|
28
|
+
if (event.type === "INITIALIZE" /* INITIALIZE */) {
|
|
29
|
+
return event.data.channelId;
|
|
30
|
+
}
|
|
31
|
+
return void 0;
|
|
32
|
+
},
|
|
33
|
+
postParentId: ({
|
|
34
|
+
event
|
|
35
|
+
}) => {
|
|
36
|
+
if (event.type === "INITIALIZE" /* INITIALIZE */) {
|
|
37
|
+
return event.data.postParentId;
|
|
38
|
+
}
|
|
39
|
+
return void 0;
|
|
40
|
+
},
|
|
41
|
+
role: ({
|
|
42
|
+
event
|
|
43
|
+
}) => {
|
|
44
|
+
if (event.type === "INITIALIZE" /* INITIALIZE */) {
|
|
45
|
+
return event.data.role;
|
|
46
|
+
}
|
|
47
|
+
return void 0;
|
|
48
|
+
},
|
|
49
|
+
loading: true,
|
|
50
|
+
error: null
|
|
51
|
+
}),
|
|
52
|
+
setChannelDetail: assign({
|
|
53
|
+
channelsDetail: ({
|
|
54
|
+
event
|
|
55
|
+
}) => {
|
|
56
|
+
if (event.type === "SET_CHANNEL_DETAIL" /* SET_CHANNEL_DETAIL */) {
|
|
57
|
+
return event.data.channelsDetail;
|
|
58
|
+
}
|
|
59
|
+
return null;
|
|
60
|
+
},
|
|
61
|
+
loading: false
|
|
62
|
+
}),
|
|
63
|
+
setThreads: assign({
|
|
64
|
+
threadData: ({
|
|
65
|
+
event
|
|
66
|
+
}) => {
|
|
67
|
+
if (event.type === "SET_THREADS" /* SET_THREADS */) {
|
|
68
|
+
return event.data.threadData;
|
|
69
|
+
}
|
|
70
|
+
return [];
|
|
71
|
+
},
|
|
72
|
+
loading: false
|
|
73
|
+
}),
|
|
74
|
+
setError: assign({
|
|
75
|
+
error: ({
|
|
76
|
+
event
|
|
77
|
+
}) => {
|
|
78
|
+
if (event.type === "ERROR" /* ERROR */) {
|
|
79
|
+
return event.data.error;
|
|
80
|
+
}
|
|
81
|
+
return null;
|
|
82
|
+
},
|
|
83
|
+
loading: false
|
|
84
|
+
}),
|
|
85
|
+
setLoading: assign({
|
|
86
|
+
loading: true
|
|
87
|
+
})
|
|
88
|
+
}
|
|
89
|
+
}).createMachine({
|
|
90
|
+
id: "dialogThreads",
|
|
91
|
+
initial: "idle" /* Idle */,
|
|
92
|
+
context: {
|
|
93
|
+
channelId: void 0,
|
|
94
|
+
postParentId: void 0,
|
|
95
|
+
role: void 0,
|
|
96
|
+
channelsDetail: null,
|
|
97
|
+
threadData: [],
|
|
98
|
+
loading: true,
|
|
99
|
+
error: null
|
|
100
|
+
},
|
|
101
|
+
states: {
|
|
102
|
+
["idle" /* Idle */]: {
|
|
103
|
+
on: {
|
|
104
|
+
["INITIALIZE" /* INITIALIZE */]: {
|
|
105
|
+
target: "loadingChannel" /* LoadingChannel */,
|
|
106
|
+
actions: "setInitialContext"
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
},
|
|
110
|
+
["loadingChannel" /* LoadingChannel */]: {
|
|
111
|
+
on: {
|
|
112
|
+
["SET_CHANNEL_DETAIL" /* SET_CHANNEL_DETAIL */]: {
|
|
113
|
+
target: "loadingThreads" /* LoadingThreads */,
|
|
114
|
+
actions: "setChannelDetail"
|
|
115
|
+
},
|
|
116
|
+
["ERROR" /* ERROR */]: {
|
|
117
|
+
target: "error" /* Error */,
|
|
118
|
+
actions: "setError"
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
},
|
|
122
|
+
["loadingThreads" /* LoadingThreads */]: {
|
|
123
|
+
on: {
|
|
124
|
+
["SET_THREADS" /* SET_THREADS */]: {
|
|
125
|
+
target: "active" /* Active */,
|
|
126
|
+
actions: "setThreads"
|
|
127
|
+
},
|
|
128
|
+
["ERROR" /* ERROR */]: {
|
|
129
|
+
target: "error" /* Error */,
|
|
130
|
+
actions: "setError"
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
},
|
|
134
|
+
["active" /* Active */]: {
|
|
135
|
+
on: {
|
|
136
|
+
["FETCH_THREADS" /* FETCH_THREADS */]: {
|
|
137
|
+
target: "loadingThreads" /* LoadingThreads */,
|
|
138
|
+
actions: "setLoading"
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
},
|
|
142
|
+
["error" /* Error */]: {
|
|
143
|
+
on: {
|
|
144
|
+
["INITIALIZE" /* INITIALIZE */]: {
|
|
145
|
+
target: "loadingChannel" /* LoadingChannel */,
|
|
146
|
+
actions: "setInitialContext"
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
});export{Actions,BaseState};//# sourceMappingURL=dialog-threads-xstate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dialog-threads-xstate.js","sources":["../../../../src/screens/inbox/workflow/dialog-threads-xstate.ts"],"sourcesContent":["import { assign, setup } from 'xstate';\nimport { threadsMachineConfig } from '../machines/threadsMachine';\n\nexport enum BaseState {\n Idle = 'idle',\n LoadingChannel = 'loadingChannel',\n LoadingThreads = 'loadingThreads',\n Active = 'active',\n Error = 'error',\n}\n\nexport enum Actions {\n INITIALIZE = 'INITIALIZE',\n FETCH_CHANNEL_DETAIL = 'FETCH_CHANNEL_DETAIL',\n SET_CHANNEL_DETAIL = 'SET_CHANNEL_DETAIL',\n FETCH_THREADS = 'FETCH_THREADS',\n SET_THREADS = 'SET_THREADS',\n ERROR = 'ERROR',\n}\n\n// Type definitions for the event data\ntype InitializeEventData = { channelId?: string; postParentId?: string; role?: string };\ntype ChannelDetailEventData = { id: string };\ntype SetChannelDetailEventData = { channelsDetail: any };\ntype SetThreadsEventData = { threadData: any[] };\ntype ErrorEventData = { error: any };\n\nexport const dialogThreadsXstate = setup({\n types: {\n context: {} as {\n channelId?: string;\n postParentId?: string;\n role?: string;\n channelsDetail: any;\n threadData: any[];\n loading: boolean;\n error: any;\n },\n events: {} as\n | { type: typeof Actions.INITIALIZE; data: InitializeEventData }\n | { type: typeof Actions.FETCH_CHANNEL_DETAIL; data: ChannelDetailEventData }\n | { type: typeof Actions.SET_CHANNEL_DETAIL; data: SetChannelDetailEventData }\n | { type: typeof Actions.FETCH_THREADS; data?: {} }\n | { type: typeof Actions.SET_THREADS; data: SetThreadsEventData }\n | { type: typeof Actions.ERROR; data: ErrorEventData },\n },\n actions: {\n setInitialContext: assign({\n channelId: ({ event }) => {\n if (event.type === Actions.INITIALIZE) {\n return event.data.channelId;\n }\n return undefined;\n },\n postParentId: ({ event }) => {\n if (event.type === Actions.INITIALIZE) {\n return event.data.postParentId;\n }\n return undefined;\n },\n role: ({ event }) => {\n if (event.type === Actions.INITIALIZE) {\n return event.data.role;\n }\n return undefined;\n },\n loading: true,\n error: null,\n }),\n setChannelDetail: assign({\n channelsDetail: ({ event }) => {\n if (event.type === Actions.SET_CHANNEL_DETAIL) {\n return event.data.channelsDetail;\n }\n return null;\n },\n loading: false,\n }),\n setThreads: assign({\n threadData: ({ event }) => {\n if (event.type === Actions.SET_THREADS) {\n return event.data.threadData;\n }\n return [];\n },\n loading: false,\n }),\n setError: assign({\n error: ({ event }) => {\n if (event.type === Actions.ERROR) {\n return event.data.error;\n }\n return null;\n },\n loading: false,\n }),\n setLoading: assign({\n loading: true,\n }),\n },\n}).createMachine({\n id: 'dialogThreads',\n initial: BaseState.Idle,\n context: {\n channelId: undefined,\n postParentId: undefined,\n role: undefined,\n channelsDetail: null,\n threadData: [],\n loading: true,\n error: null,\n },\n states: {\n [BaseState.Idle]: {\n on: {\n [Actions.INITIALIZE]: {\n target: BaseState.LoadingChannel,\n actions: 'setInitialContext',\n },\n },\n },\n [BaseState.LoadingChannel]: {\n on: {\n [Actions.SET_CHANNEL_DETAIL]: {\n target: BaseState.LoadingThreads,\n actions: 'setChannelDetail',\n },\n [Actions.ERROR]: {\n target: BaseState.Error,\n actions: 'setError',\n },\n },\n },\n [BaseState.LoadingThreads]: {\n on: {\n [Actions.SET_THREADS]: {\n target: BaseState.Active,\n actions: 'setThreads',\n },\n [Actions.ERROR]: {\n target: BaseState.Error,\n actions: 'setError',\n },\n },\n },\n [BaseState.Active]: {\n on: {\n [Actions.FETCH_THREADS]: {\n target: BaseState.LoadingThreads,\n actions: 'setLoading',\n },\n },\n },\n [BaseState.Error]: {\n on: {\n [Actions.INITIALIZE]: {\n target: BaseState.LoadingChannel,\n actions: 'setInitialContext',\n },\n },\n },\n },\n});\n"],"names":["BaseState","Actions"],"mappings":"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"}
|