@droppii-org/chat-mobile 0.2.97 → 0.2.99
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/module/hooks/conversation/useSingleAccessGuard.js +33 -0
- package/lib/module/hooks/conversation/useSingleAccessGuard.js.map +1 -0
- package/lib/module/hooks/groups/useGroupAccessGuard.js +26 -17
- package/lib/module/hooks/groups/useGroupAccessGuard.js.map +1 -1
- package/lib/module/screens/chat-detail/ChatDetail.js +58 -47
- package/lib/module/screens/chat-detail/ChatDetail.js.map +1 -1
- package/lib/module/screens/chat-detail/components/ChatDetailLoading.js +38 -0
- package/lib/module/screens/chat-detail/components/ChatDetailLoading.js.map +1 -0
- package/lib/module/store/message.js +1 -1
- package/lib/module/store/message.js.map +1 -1
- package/lib/module/utils/conversation.js +21 -0
- package/lib/module/utils/conversation.js.map +1 -1
- package/lib/module/utils/message.js +2 -3
- package/lib/module/utils/message.js.map +1 -1
- package/lib/typescript/src/hooks/conversation/useSingleAccessGuard.d.ts +16 -0
- package/lib/typescript/src/hooks/conversation/useSingleAccessGuard.d.ts.map +1 -0
- package/lib/typescript/src/hooks/groups/useGroupAccessGuard.d.ts +6 -0
- package/lib/typescript/src/hooks/groups/useGroupAccessGuard.d.ts.map +1 -1
- package/lib/typescript/src/screens/chat-detail/ChatDetail.d.ts +2 -2
- package/lib/typescript/src/screens/chat-detail/ChatDetail.d.ts.map +1 -1
- package/lib/typescript/src/screens/chat-detail/components/ChatDetailLoading.d.ts +2 -0
- package/lib/typescript/src/screens/chat-detail/components/ChatDetailLoading.d.ts.map +1 -0
- package/lib/typescript/src/utils/conversation.d.ts +17 -0
- package/lib/typescript/src/utils/conversation.d.ts.map +1 -1
- package/lib/typescript/src/utils/message.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/hooks/conversation/useSingleAccessGuard.ts +44 -0
- package/src/hooks/groups/useGroupAccessGuard.ts +28 -19
- package/src/screens/chat-detail/ChatDetail.tsx +80 -43
- package/src/screens/chat-detail/components/ChatDetailLoading.tsx +31 -0
- package/src/store/message.ts +1 -1
- package/src/utils/conversation.ts +31 -0
- package/src/utils/message.ts +6 -3
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { useEffect, useRef } from 'react';
|
|
4
|
+
import { isConversationParticipant, isSingleConversationId } from "../../utils/conversation.js";
|
|
5
|
+
import { showAccessBlockedModal } from "../groups/useGroupAccessGuard.js";
|
|
6
|
+
/**
|
|
7
|
+
* 1v1 conversations have no membership guard of their own — a deeplink into a
|
|
8
|
+
* 1v1 the logged-in account isn't part of never syncs a local conversation
|
|
9
|
+
* record, so this can't rely on a synced `ConversationItem` and instead reads
|
|
10
|
+
* the participant ids straight off the "si_<userA>_<userB>" conversationId.
|
|
11
|
+
* No-ops for anything that isn't a 1v1 conversationId.
|
|
12
|
+
*/
|
|
13
|
+
export const useSingleAccessGuard = ({
|
|
14
|
+
conversationId,
|
|
15
|
+
currentUserId,
|
|
16
|
+
onBlocked
|
|
17
|
+
}) => {
|
|
18
|
+
const hasBlockedRef = useRef(false);
|
|
19
|
+
const onBlockedRef = useRef(onBlocked);
|
|
20
|
+
onBlockedRef.current = onBlocked;
|
|
21
|
+
useEffect(() => {
|
|
22
|
+
hasBlockedRef.current = false;
|
|
23
|
+
}, [conversationId]);
|
|
24
|
+
useEffect(() => {
|
|
25
|
+
if (!isSingleConversationId(conversationId)) return;
|
|
26
|
+
if (!currentUserId) return;
|
|
27
|
+
if (isConversationParticipant(conversationId, currentUserId)) return;
|
|
28
|
+
if (hasBlockedRef.current) return;
|
|
29
|
+
hasBlockedRef.current = true;
|
|
30
|
+
showAccessBlockedModal(() => onBlockedRef.current());
|
|
31
|
+
}, [conversationId, currentUserId]);
|
|
32
|
+
};
|
|
33
|
+
//# sourceMappingURL=useSingleAccessGuard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useEffect","useRef","isConversationParticipant","isSingleConversationId","showAccessBlockedModal","useSingleAccessGuard","conversationId","currentUserId","onBlocked","hasBlockedRef","onBlockedRef","current"],"sourceRoot":"../../../../src","sources":["hooks/conversation/useSingleAccessGuard.ts"],"mappings":";;AAAA,SAASA,SAAS,EAAEC,MAAM,QAAQ,OAAO;AACzC,SACEC,yBAAyB,EACzBC,sBAAsB,QACjB,6BAA0B;AACjC,SAASC,sBAAsB,QAAQ,kCAA+B;AAStE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,oBAAoB,GAAGA,CAAC;EACnCC,cAAc;EACdC,aAAa;EACbC;AACM,CAAC,KAAK;EACZ,MAAMC,aAAa,GAAGR,MAAM,CAAC,KAAK,CAAC;EACnC,MAAMS,YAAY,GAAGT,MAAM,CAACO,SAAS,CAAC;EACtCE,YAAY,CAACC,OAAO,GAAGH,SAAS;EAEhCR,SAAS,CAAC,MAAM;IACdS,aAAa,CAACE,OAAO,GAAG,KAAK;EAC/B,CAAC,EAAE,CAACL,cAAc,CAAC,CAAC;EAEpBN,SAAS,CAAC,MAAM;IACd,IAAI,CAACG,sBAAsB,CAACG,cAAc,CAAC,EAAE;IAC7C,IAAI,CAACC,aAAa,EAAE;IACpB,IAAIL,yBAAyB,CAACI,cAAc,EAAEC,aAAa,CAAC,EAAE;IAC9D,IAAIE,aAAa,CAACE,OAAO,EAAE;IAC3BF,aAAa,CAACE,OAAO,GAAG,IAAI;IAE5BP,sBAAsB,CAAC,MAAMM,YAAY,CAACC,OAAO,CAAC,CAAC,CAAC;EACtD,CAAC,EAAE,CAACL,cAAc,EAAEC,aAAa,CAAC,CAAC;AACrC,CAAC","ignoreList":[]}
|
|
@@ -9,6 +9,31 @@ import { trans } from "../../translation/index.js";
|
|
|
9
9
|
import { ChatEvent } from "../../types/events.js";
|
|
10
10
|
import { wasSelfExitedGroup } from "../../utils/groupExit.js";
|
|
11
11
|
import { conversationQueryKeys } from "../query-keys.js";
|
|
12
|
+
/**
|
|
13
|
+
* The "you can't open this conversation" modal — shared by the group
|
|
14
|
+
* non-member guard and the 1v1 non-participant check in ChatDetail, so both
|
|
15
|
+
* present the exact same blocked experience.
|
|
16
|
+
*/
|
|
17
|
+
export const showAccessBlockedModal = onAcknowledge => {
|
|
18
|
+
UIUtils.alert.open({
|
|
19
|
+
title: trans('group:access_blocked_title'),
|
|
20
|
+
message: trans('group:access_blocked_desc'),
|
|
21
|
+
primaryIndex: 0,
|
|
22
|
+
buttonType: 'horizontal-button',
|
|
23
|
+
// Drop any alert raised while this one is up rather than stacking it —
|
|
24
|
+
// OnGroupDismissed fires twice for the group owner.
|
|
25
|
+
ignoreStack: true,
|
|
26
|
+
// Force an acknowledgement: dismissing by tapping outside would leave the
|
|
27
|
+
// user sitting in a conversation they cannot access.
|
|
28
|
+
touchOutsideToDismiss: false,
|
|
29
|
+
buttons: [{
|
|
30
|
+
label: trans('group:access_blocked_button'),
|
|
31
|
+
kind: 'primary',
|
|
32
|
+
onPress: onAcknowledge
|
|
33
|
+
}]
|
|
34
|
+
});
|
|
35
|
+
};
|
|
36
|
+
|
|
12
37
|
/**
|
|
13
38
|
* Resolves whether the current user may open `groupID`, per the group-access
|
|
14
39
|
* spec: private non-members and dismissed groups are blocked outright, while
|
|
@@ -57,23 +82,7 @@ export const useGroupAccessGuard = ({
|
|
|
57
82
|
if (hasBlockedRef.current) return;
|
|
58
83
|
hasBlockedRef.current = true;
|
|
59
84
|
setAccessState('blocked');
|
|
60
|
-
|
|
61
|
-
title: trans('group:access_blocked_title'),
|
|
62
|
-
message: trans('group:access_blocked_desc'),
|
|
63
|
-
primaryIndex: 0,
|
|
64
|
-
buttonType: 'horizontal-button',
|
|
65
|
-
// Drop any alert raised while this one is up rather than stacking it —
|
|
66
|
-
// OnGroupDismissed fires twice for the group owner.
|
|
67
|
-
ignoreStack: true,
|
|
68
|
-
// Force an acknowledgement: dismissing by tapping outside would leave the
|
|
69
|
-
// user sitting in a conversation they cannot access.
|
|
70
|
-
touchOutsideToDismiss: false,
|
|
71
|
-
buttons: [{
|
|
72
|
-
label: trans('group:access_blocked_button'),
|
|
73
|
-
kind: 'primary',
|
|
74
|
-
onPress: () => onBlockedRef.current()
|
|
75
|
-
}]
|
|
76
|
-
});
|
|
85
|
+
showAccessBlockedModal(() => onBlockedRef.current());
|
|
77
86
|
}, []);
|
|
78
87
|
const applyResult = useCallback(result => {
|
|
79
88
|
if (result.state === 'blocked') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useCallback","useEffect","useRef","useState","DeviceEventEmitter","OpenIMSDK","GroupStatus","GroupVisibility","useQueryClient","UIUtils","trans","ChatEvent","wasSelfExitedGroup","conversationQueryKeys","
|
|
1
|
+
{"version":3,"names":["useCallback","useEffect","useRef","useState","DeviceEventEmitter","OpenIMSDK","GroupStatus","GroupVisibility","useQueryClient","UIUtils","trans","ChatEvent","wasSelfExitedGroup","conversationQueryKeys","showAccessBlockedModal","onAcknowledge","alert","open","title","message","primaryIndex","buttonType","ignoreStack","touchOutsideToDismiss","buttons","label","kind","onPress","evaluateAccess","groupID","info","getSpecifiedGroupsInfo","state","status","Dismissed","isMember","isJoinGroup","visibility","Public","useGroupAccessGuard","onBlocked","queryClient","groupIdRef","current","activeGroupId","accessState","setAccessState","hasBlockedRef","onBlockedRef","block","applyResult","result","cancelled","then","catch","error","console","sub","addListener","GroupRemoved","payload","reason","remove","isViewOnly","wasViewOnlyRef","invalidateQueries","queryKey","joinedGroup","isCheckingAccess"],"sourceRoot":"../../../../src","sources":["hooks/groups/useGroupAccessGuard.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import { memo, useCallback, useEffect, useRef } from 'react';
|
|
4
|
-
import {
|
|
4
|
+
import { DeviceEventEmitter } from 'react-native';
|
|
5
5
|
import { useKeyboardScrollToEnd } from '@legendapp/list/keyboard';
|
|
6
6
|
import { useSafeAreaInsets } from 'react-native-safe-area-context';
|
|
7
|
-
import {
|
|
7
|
+
import { KContainer } from '@droppii/libs';
|
|
8
8
|
import { useNavigation, useRoute } from '@react-navigation/native';
|
|
9
9
|
import { usePinMessage } from "../../hooks/message/usePinMessage.js";
|
|
10
10
|
import { PinnedMessageBar } from "./PinnedMessageBar.js";
|
|
@@ -17,21 +17,24 @@ import { ChatComposer } from "./ChatComposer.js";
|
|
|
17
17
|
import { shouldShowAddMember } from "./conversationHeader.utils.js";
|
|
18
18
|
import { normalizeUrl } from "../../utils/url.js";
|
|
19
19
|
import { MessageToolboxOverlay } from "./messageToolbox/MessageToolboxOverlay.js";
|
|
20
|
-
import { useGetConversationDetail, useGetConversationTarget } from "../../hooks/conversation/useGetConversationDetail.js";
|
|
20
|
+
import { useGetConversationDetail, useGetConversationTarget, useSyncConversationById } from "../../hooks/conversation/useGetConversationDetail.js";
|
|
21
21
|
import { GroupJoinSource } from '@droppii/openim-rn-client-sdk';
|
|
22
22
|
import { useMessages } from "../../hooks/message/useMessages.js";
|
|
23
23
|
import { ChatEvent } from "../../types/events.js";
|
|
24
24
|
import { useSetIsShowFLashMessage } from "../../context/global.js";
|
|
25
25
|
import { useJoinGroup } from "../../hooks/groups/useJoinGroup.js";
|
|
26
26
|
import { useGroupAccessGuard } from "../../hooks/groups/useGroupAccessGuard.js";
|
|
27
|
+
import { useSingleAccessGuard } from "../../hooks/conversation/useSingleAccessGuard.js";
|
|
28
|
+
import { useIsJoinedGroup } from "../../hooks/useIsJoinedGroup.js";
|
|
27
29
|
import { UIUtils } from "../../utils/UIUtils.js";
|
|
28
30
|
import { trans } from "../../translation/index.js";
|
|
31
|
+
import { getGroupIdFromConversationId } from "../../utils/conversation.js";
|
|
32
|
+
import { ChatDetailLoading } from "./components/ChatDetailLoading.js";
|
|
29
33
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
30
34
|
const ChatDetail = /*#__PURE__*/memo(({
|
|
31
|
-
|
|
35
|
+
conversationId,
|
|
32
36
|
targetUserId = '',
|
|
33
37
|
targetGroupId = '',
|
|
34
|
-
targetBotId = '',
|
|
35
38
|
targetMessageId = '',
|
|
36
39
|
showAddMember,
|
|
37
40
|
onBack,
|
|
@@ -47,15 +50,6 @@ const ChatDetail = /*#__PURE__*/memo(({
|
|
|
47
50
|
const mediaViewerRef = useRef(null);
|
|
48
51
|
const messageToolboxRef = useRef(null);
|
|
49
52
|
const currentUser = useUserStore(s => s.user);
|
|
50
|
-
const {
|
|
51
|
-
conversationId,
|
|
52
|
-
isLoading: isLoadingConversation
|
|
53
|
-
} = useGetConversationDetail({
|
|
54
|
-
targetConversationId,
|
|
55
|
-
targetUserId,
|
|
56
|
-
targetGroupId,
|
|
57
|
-
targetBotId
|
|
58
|
-
});
|
|
59
53
|
const conversation = useConversation(conversationId);
|
|
60
54
|
const {
|
|
61
55
|
data: target
|
|
@@ -105,7 +99,12 @@ const ChatDetail = /*#__PURE__*/memo(({
|
|
|
105
99
|
const {
|
|
106
100
|
isCheckingAccess
|
|
107
101
|
} = useGroupAccessGuard({
|
|
108
|
-
groupID: conversation?.groupID || targetGroupId,
|
|
102
|
+
groupID: conversation?.groupID || targetGroupId || getGroupIdFromConversationId(conversationId),
|
|
103
|
+
onBlocked: handleAccessBlocked
|
|
104
|
+
});
|
|
105
|
+
useSingleAccessGuard({
|
|
106
|
+
conversationId,
|
|
107
|
+
currentUserId: currentUser?.userID,
|
|
109
108
|
onBlocked: handleAccessBlocked
|
|
110
109
|
});
|
|
111
110
|
|
|
@@ -191,7 +190,7 @@ const ChatDetail = /*#__PURE__*/memo(({
|
|
|
191
190
|
messages: messages,
|
|
192
191
|
conversationId: conversationId,
|
|
193
192
|
customMessageItemFactory: customMessageItemFactory,
|
|
194
|
-
isLoading: initLoading ||
|
|
193
|
+
isLoading: initLoading || isCheckingAccess,
|
|
195
194
|
onLoadMoreOld: getMoreOldMessages,
|
|
196
195
|
hasMoreOld: hasMoreOld,
|
|
197
196
|
moreOldLoading: moreOldLoading,
|
|
@@ -223,43 +222,55 @@ const ChatDetail = /*#__PURE__*/memo(({
|
|
|
223
222
|
})]
|
|
224
223
|
});
|
|
225
224
|
});
|
|
226
|
-
|
|
225
|
+
|
|
226
|
+
// Resolve conversation/group/join-status data before ChatDetail mounts, so the
|
|
227
|
+
// header and composer never render with an incomplete or stale group-membership
|
|
228
|
+
// state on a cold-start deeplink open (DROPPII-30942).
|
|
229
|
+
const ConversationDataGate = props => {
|
|
230
|
+
const {
|
|
231
|
+
targetConversationId,
|
|
232
|
+
targetUserId,
|
|
233
|
+
targetGroupId,
|
|
234
|
+
targetBotId
|
|
235
|
+
} = props;
|
|
236
|
+
const hasTarget = !!(targetConversationId || targetUserId || targetGroupId || targetBotId);
|
|
237
|
+
const {
|
|
238
|
+
conversationId,
|
|
239
|
+
isLoading: isLoadingConversation
|
|
240
|
+
} = useGetConversationDetail({
|
|
241
|
+
targetConversationId,
|
|
242
|
+
targetUserId,
|
|
243
|
+
targetGroupId: targetGroupId || getGroupIdFromConversationId(targetConversationId),
|
|
244
|
+
targetBotId
|
|
245
|
+
});
|
|
246
|
+
const conversation = useConversation(conversationId);
|
|
247
|
+
const {
|
|
248
|
+
isFetching: isSyncingConversation,
|
|
249
|
+
isFetched: isConversationSynced
|
|
250
|
+
} = useSyncConversationById(conversationId, !!conversation);
|
|
251
|
+
const {
|
|
252
|
+
isLoading: isCheckingJoinStatus
|
|
253
|
+
} = useIsJoinedGroup(conversation?.groupID);
|
|
254
|
+
const isConversationResolved = !!conversationId && (!!conversation || isConversationSynced && !isSyncingConversation);
|
|
255
|
+
const isReady = !hasTarget || !isLoadingConversation && isConversationResolved && (!conversation?.groupID || !isCheckingJoinStatus);
|
|
256
|
+
if (!isReady) {
|
|
257
|
+
return /*#__PURE__*/_jsx(ChatDetailLoading, {});
|
|
258
|
+
}
|
|
259
|
+
return /*#__PURE__*/_jsx(ChatDetail, {
|
|
260
|
+
...props,
|
|
261
|
+
conversationId: conversationId
|
|
262
|
+
});
|
|
263
|
+
};
|
|
264
|
+
const SdkReadyGate = props => {
|
|
227
265
|
const isUserLoaded = useUserStore(s => s.user != null);
|
|
228
|
-
const navigation = useNavigation();
|
|
229
266
|
|
|
230
267
|
// Handle sdk not loaded yet when navigate using deeplink
|
|
231
268
|
if (!isUserLoaded) {
|
|
232
|
-
return /*#__PURE__*/
|
|
233
|
-
flex: true,
|
|
234
|
-
edges: ['bottom'],
|
|
235
|
-
children: [/*#__PURE__*/_jsx(KNavigation.Header, {
|
|
236
|
-
theme: "light",
|
|
237
|
-
alignment: "left",
|
|
238
|
-
size: "small",
|
|
239
|
-
disableCenterSpace: true,
|
|
240
|
-
shadow: true,
|
|
241
|
-
leftButton: {
|
|
242
|
-
id: 'back',
|
|
243
|
-
icon: {
|
|
244
|
-
size: 24,
|
|
245
|
-
vectorName: 'arrow-left-o',
|
|
246
|
-
vectorProvider: 'DroppiiNew',
|
|
247
|
-
tintColor: KColors.primary.normal
|
|
248
|
-
},
|
|
249
|
-
onPress: navigation.goBack
|
|
250
|
-
}
|
|
251
|
-
}), /*#__PURE__*/_jsx(KContainer.View, {
|
|
252
|
-
flex: true,
|
|
253
|
-
center: true,
|
|
254
|
-
children: /*#__PURE__*/_jsx(ActivityIndicator, {
|
|
255
|
-
size: "small",
|
|
256
|
-
color: KColors.primary.normal
|
|
257
|
-
})
|
|
258
|
-
})]
|
|
259
|
-
});
|
|
269
|
+
return /*#__PURE__*/_jsx(ChatDetailLoading, {});
|
|
260
270
|
}
|
|
261
|
-
return /*#__PURE__*/_jsx(
|
|
271
|
+
return /*#__PURE__*/_jsx(ConversationDataGate, {
|
|
262
272
|
...props
|
|
263
273
|
});
|
|
264
274
|
};
|
|
275
|
+
export default SdkReadyGate;
|
|
265
276
|
//# sourceMappingURL=ChatDetail.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["memo","useCallback","useEffect","useRef","ActivityIndicator","DeviceEventEmitter","useKeyboardScrollToEnd","useSafeAreaInsets","KColors","KContainer","KNavigation","useNavigation","useRoute","usePinMessage","PinnedMessageBar","openPinnedMessagesSheet","MediaViewerModal","useConversation","useConversationStore","useUserStore","ChatDetailHeader","ChatListLegend","ChatComposer","shouldShowAddMember","normalizeUrl","MessageToolboxOverlay","useGetConversationDetail","useGetConversationTarget","GroupJoinSource","useMessages","ChatEvent","useSetIsShowFLashMessage","useJoinGroup","useGroupAccessGuard","UIUtils","trans","jsx","_jsx","jsxs","_jsxs","ChatDetail","targetConversationId","targetUserId","targetGroupId","targetBotId","targetMessageId","showAddMember","onBack","onPressSearch","onPressAddMember","onPressMenu","onPressUrl","customMessageItemFactory","pannelActions","groupJoinSource","navigation","mediaViewerRef","messageToolboxRef","currentUser","s","user","conversationId","isLoading","isLoadingConversation","conversation","data","target","isComposeDisabled","isActive","handleBackDefault","goBack","handleMediaPress","items","index","current","show","messages","initLoading","moreOldLoading","moreNewLoading","getMoreOldMessages","getMoreNewMessages","hasMoreOld","hasMoreNew","startClientMsgId","peerType","mutate","joinGroup","isPending","isJoiningGroup","setShowFLashMessage","pinnedMessages","pinMessage","unpinMessage","getState","setCurrentConversation","undefined","handleAccessBlocked","isCheckingAccess","groupID","onBlocked","subscription","addListener","TargetMessageUnavailable","toast","open","title","theme","remove","params","targetMessage","find","m","clientMsgID","emit","ScrollToMessage","clientMessageId","resolvedShowAddMember","insets","listRef","freeze","scrollMessageToEnd","handlePressUrl","url","handleMessageLongPress","message","rect","groupPosition","handlePressPinnedMessageBar","currentUserId","userID","onPressMessage","handlePressMenu","handlePressJoinGroup","reqMsg","joinSource","Search","groupName","showName","Page","flex","edges","children","onPressAvatar","onPress","onLoadMoreOld","onLoadMoreNew","onMediaPress","onLongPress","keyboardOffset","bottom","isEmptyMessage","length","onPressJoinGroup","ref","onPinMessage","onUnpinMessage","props","isUserLoaded","Header","alignment","size","disableCenterSpace","shadow","leftButton","id","icon","vectorName","vectorProvider","tintColor","primary","normal","View","center","color"],"sourceRoot":"../../../../src","sources":["screens/chat-detail/ChatDetail.tsx"],"mappings":";;AAAA,SAASA,IAAI,EAAEC,WAAW,EAAEC,SAAS,EAAEC,MAAM,QAAQ,OAAO;AAC5D,SAASC,iBAAiB,EAAEC,kBAAkB,QAAQ,cAAc;AAEpE,SAASC,sBAAsB,QAAQ,0BAA0B;AAEjE,SAASC,iBAAiB,QAAQ,gCAAgC;AAClE,SAASC,OAAO,EAAEC,UAAU,EAAEC,WAAW,QAAQ,eAAe;AAChE,SAASC,aAAa,EAAEC,QAAQ,QAAQ,0BAA0B;AAClE,SAASC,aAAa,QAAQ,sCAAmC;AACjE,SAASC,gBAAgB,QAAQ,uBAAoB;AACrD,SAASC,uBAAuB,QAAQ,0BAAuB;AAC/D,SACEC,gBAAgB,QAEX,sCAAmC;AAC1C,SACEC,eAAe,EACfC,oBAAoB,EACpBC,YAAY,QACP,sBAAa;AACpB,OAAOC,gBAAgB,MAAM,uBAAoB;AACjD,SAASC,cAAc,QAAQ,qBAAkB;AACjD,SAASC,YAAY,QAAQ,mBAAgB;AAC7C,SAASC,mBAAmB,QAAQ,+BAA4B;AAEhE,SAASC,YAAY,QAAQ,oBAAiB;AAC9C,SAASC,qBAAqB,QAAQ,2CAAwC;AAK9E,SACEC,wBAAwB,EACxBC,wBAAwB,QACnB,sDAAmD;AAC1D,SACEC,eAAe,QAEV,+BAA+B;AACtC,SAASC,WAAW,QAAQ,oCAAiC;AAC7D,SAASC,SAAS,QAAQ,uBAAoB;AAC9C,SAASC,wBAAwB,QAAQ,yBAAsB;AAC/D,SAASC,YAAY,QAAQ,oCAAiC;AAC9D,SAASC,mBAAmB,QAAQ,2CAAwC;AAC5E,SAASC,OAAO,QAAQ,wBAAqB;AAC7C,SAASC,KAAK,QAAQ,4BAAmB;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAE1C,MAAMC,UAAU,gBAAGxC,IAAI,CACrB,CAAC;EACCyC,oBAAoB,GAAG,EAAE;EACzBC,YAAY,GAAG,EAAE;EACjBC,aAAa,GAAG,EAAE;EAClBC,WAAW,GAAG,EAAE;EAChBC,eAAe,GAAG,EAAE;EACpBC,aAAa;EACbC,MAAM;EACNC,aAAa;EACbC,gBAAgB;EAChBC,WAAW;EACXC,UAAU;EACVC,wBAAwB;EACxBC,aAAa;EACbC;AACe,CAAC,KAAK;EACrB,MAAMC,UAAU,GAAG5C,aAAa,CAAC,CAAC;EAClC,MAAM6C,cAAc,GAAGrD,MAAM,CAAyB,IAAI,CAAC;EAC3D,MAAMsD,iBAAiB,GAAGtD,MAAM,CAAoB,IAAI,CAAC;EACzD,MAAMuD,WAAW,GAAGvC,YAAY,CAAEwC,CAAC,IAAKA,CAAC,CAACC,IAAI,CAAC;EAE/C,MAAM;IAAEC,cAAc;IAAEC,SAAS,EAAEC;EAAsB,CAAC,GACxDrC,wBAAwB,CAAC;IACvBe,oBAAoB;IACpBC,YAAY;IACZC,aAAa;IACbC;EACF,CAAC,CAAC;EAEJ,MAAMoB,YAAY,GAAG/C,eAAe,CAAC4C,cAAc,CAAC;EAEpD,MAAM;IAAEI,IAAI,EAAEC;EAAO,CAAC,GAAGvC,wBAAwB,CAACkC,cAAc,CAAC;EACjE,MAAMM,iBAAiB,GAAG,CAAC,CAACD,MAAM,IAAI,CAACA,MAAM,CAACE,QAAQ;EAEtD,MAAMC,iBAAiB,GAAGpE,WAAW,CAAC,MAAM;IAC1CsD,UAAU,CAACe,MAAM,CAAC,CAAC;EACrB,CAAC,EAAE,CAACf,UAAU,CAAC,CAAC;EAEhB,MAAMgB,gBAAgB,GAAGtE,WAAW,CAClC,CACEuE,KAAoD,EACpDC,KAAc,KACX;IACHjB,cAAc,CAACkB,OAAO,EAAEC,IAAI,CAACH,KAAK,EAAEC,KAAK,CAAC;EAC5C,CAAC,EACD,EACF,CAAC;EAED,MAAM;IACJG,QAAQ;IACRC,WAAW;IACXC,cAAc;IACdC,cAAc;IACdC,kBAAkB;IAClBC,kBAAkB;IAClBC,UAAU;IACVC;EACF,CAAC,GAAGtD,WAAW,CAAC;IACdgC,cAAc;IACduB,gBAAgB,EAAEvC,eAAe;IACjCwC,QAAQ,EAAErB,YAAY,EAAEqB;EAC1B,CAAC,CAAC;EAEF,MAAM;IAAEC,MAAM,EAAEC,SAAS;IAAEC,SAAS,EAAEC;EAAe,CAAC,GAAGzD,YAAY,CAAC,CAAC;EAEvE,MAAM0D,mBAAmB,GAAG3D,wBAAwB,CAAC,CAAC;EAEtD,MAAM;IAAE4D,cAAc;IAAEC,UAAU;IAAEC;EAAa,CAAC,GAChDhF,aAAa,CAACgD,cAAc,CAAC;EAE/B3D,SAAS,CAAC,MAAM;IACdgB,oBAAoB,CACjB4E,QAAQ,CAAC,CAAC,CACVC,sBAAsB,CAAClC,cAAc,EAAEnB,YAAY,EAAEC,aAAa,CAAC;IACtE+C,mBAAmB,CAAC,KAAK,CAAC;IAC1B,OAAO,MAAM;MACXxE,oBAAoB,CACjB4E,QAAQ,CAAC,CAAC,CACVC,sBAAsB,CAACC,SAAS,EAAEA,SAAS,EAAEA,SAAS,CAAC;MAC1DN,mBAAmB,CAAC,IAAI,CAAC;IAC3B,CAAC;EACH,CAAC,EAAE,CAAC7B,cAAc,EAAEnB,YAAY,EAAEC,aAAa,EAAE+C,mBAAmB,CAAC,CAAC;EAEtE,MAAMO,mBAAmB,GAAGhG,WAAW,CAAC,MAAM;IAC5C,CAAC8C,MAAM,IAAIsB,iBAAiB,EAAE,CAAC;EACjC,CAAC,EAAE,CAACtB,MAAM,EAAEsB,iBAAiB,CAAC,CAAC;EAE/B,MAAM;IAAE6B;EAAiB,CAAC,GAAGjE,mBAAmB,CAAC;IAC/CkE,OAAO,EAAEnC,YAAY,EAAEmC,OAAO,IAAIxD,aAAa;IAC/CyD,SAAS,EAAEH;EACb,CAAC,CAAC;;EAEF;EACA/F,SAAS,CAAC,MAAM;IACd,MAAMmG,YAAY,GAAGhG,kBAAkB,CAACiG,WAAW,CACjDxE,SAAS,CAACyE,wBAAwB,EAClC,MAAM;MACJrE,OAAO,CAACsE,KAAK,CAACC,IAAI,CAAC;QACjBC,KAAK,EAAEvE,KAAK,CAAC,iCAAiC,CAAC;QAC/CwE,KAAK,EAAE;MACT,CAAC,CAAC;MACF,CAAC5D,MAAM,IAAIsB,iBAAiB,EAAE,CAAC;IACjC,CACF,CAAC;IACD,OAAO,MAAMgC,YAAY,CAACO,MAAM,CAAC,CAAC;EACpC,CAAC,EAAE,CAAC7D,MAAM,EAAEsB,iBAAiB,CAAC,CAAC;;EAE/B;EACA,MAAMwC,MAAM,GAAGjG,QAAQ,CAAC,CAAC,CAACiG,MAAM;EAChC3G,SAAS,CAAC,MAAM;IACd,IAAI,CAAC2C,eAAe,IAAIgC,WAAW,EAAE;IACrC,MAAMiC,aAAa,GAAGlC,QAAQ,CAACmC,IAAI,CAChCC,CAAC,IAAKA,CAAC,CAACC,WAAW,KAAKpE,eAC3B,CAAC;IACD,IAAI,CAACiE,aAAa,EAAE;IAEpBzG,kBAAkB,CAAC6G,IAAI,CAACpF,SAAS,CAACqF,eAAe,EAAE;MACjDC,eAAe,EAAEvE;IACnB,CAAC,CAAC;IACF;EACF,CAAC,EAAE,CAACgE,MAAM,CAAC,CAAC;EAEZ,MAAMQ,qBAAqB,GACzBvE,aAAa,IAAIvB,mBAAmB,CAACyC,YAAY,CAAC;EAEpD,MAAMsD,MAAM,GAAG/G,iBAAiB,CAAC,CAAC;EAElC,MAAMgH,OAAO,GAAGpH,MAAM,CAAgB,IAAI,CAAC;EAC3C,MAAM;IAAEqH,MAAM;IAAEC;EAAmB,CAAC,GAAGnH,sBAAsB,CAAC;IAC5DiH;EACF,CAAC,CAAC;EAEF,MAAMG,cAAc,GAAGzH,WAAW,CAC/B0H,GAAW,IAAK;IACfxE,UAAU,GAAG3B,YAAY,CAACmG,GAAG,CAAC,CAAC;EACjC,CAAC,EACD,CAACxE,UAAU,CACb,CAAC;EAED,MAAMyE,sBAAsB,GAAG3H,WAAW,CACxC,CAAC4H,OAAO,EAAEC,IAAI,EAAEC,aAAa,KAAK;IAChCtE,iBAAiB,CAACiB,OAAO,EAAEC,IAAI,CAACkD,OAAO,EAAEC,IAAI,EAAEC,aAAa,CAAC;EAC/D,CAAC,EACD,EACF,CAAC;EAED,MAAMC,2BAA2B,GAAG/H,WAAW,CAAC,MAAM;IACpDc,uBAAuB,CAAC;MACtBkH,aAAa,EAAEvE,WAAW,EAAEwE,MAAM;MAClCrC,YAAY;MACZzC,wBAAwB;MACxB+E,cAAc,EAAGN,OAAoB,IAAK;QACxCxH,kBAAkB,CAAC6G,IAAI,CAACpF,SAAS,CAACqF,eAAe,EAAE;UACjDC,eAAe,EAAES,OAAO,EAAEZ;QAC5B,CAAC,CAAC;MACJ;IACF,CAAC,CAAC;EACJ,CAAC,EAAE,CAACvD,WAAW,EAAEmC,YAAY,EAAEzC,wBAAwB,CAAC,CAAC;EAEzD,MAAMgF,eAAe,GAAGnI,WAAW,CAAC,MAAM;IACxCiD,WAAW,GAAGW,cAAc,CAAC;EAC/B,CAAC,EAAE,CAACA,cAAc,EAAEX,WAAW,CAAC,CAAC;EAEjC,MAAMmF,oBAAoB,GAAGpI,WAAW,CAAC,MAAM;IAC7C,IAAI,CAAC+D,YAAY,EAAEmC,OAAO,EAAE;IAC5BZ,SAAS,CAAC;MACRY,OAAO,EAAEnC,YAAY,EAAEmC,OAAO;MAC9BmC,MAAM,EAAE,EAAE;MACVC,UAAU,EAAEjF,eAAe,IAAI1B,eAAe,CAAC4G,MAAM;MACrDC,SAAS,EAAEzE,YAAY,EAAE0E,QAAQ,IAAI;IACvC,CAAC,CAAC;EACJ,CAAC,EAAE,CACDpF,eAAe,EACfU,YAAY,EAAEmC,OAAO,EACrBZ,SAAS,EACTvB,YAAY,EAAE0E,QAAQ,CACvB,CAAC;EAEF,oBACEnG,KAAA,CAAC9B,UAAU,CAACkI,IAAI;IAACC,IAAI;IAACC,KAAK,EAAE,CAAC,QAAQ,CAAE;IAAAC,QAAA,gBACtCzG,IAAA,CAACjB,gBAAgB;MACfyC,cAAc,EAAEA,cAAe;MAC/BnB,YAAY,EAAEA,YAAa;MAC3BI,aAAa,EAAEuE,qBAAsB;MACrCtE,MAAM,EAAEA,MAAM,IAAIsB,iBAAkB;MACpCrB,aAAa,EAAEA,aAAc;MAC7BC,gBAAgB,EAAEA,gBAAiB;MACnCC,WAAW,EAAEkF,eAAgB;MAC7BW,aAAa,EAAEX;IAAgB,CAChC,CAAC,eAEF/F,IAAA,CAACvB,gBAAgB;MACf8D,QAAQ,EAAEe,cAAe;MACzBsC,aAAa,EAAEvE,WAAW,EAAEwE,MAAO;MACnCc,OAAO,EAAEhB;IAA4B,CACtC,CAAC,eAEF3F,IAAA,CAAChB,cAAc;MACbuD,QAAQ,EAAEA,QAAS;MACnBf,cAAc,EAAEA,cAAe;MAC/BT,wBAAwB,EAAEA,wBAAyB;MACnDU,SAAS,EAAEe,WAAW,IAAId,qBAAqB,IAAImC,gBAAiB;MACpE+C,aAAa,EAAEjE,kBAAmB;MAClCE,UAAU,EAAEA,UAAW;MACvBJ,cAAc,EAAEA,cAAe;MAC/BoE,aAAa,EAAEjE,kBAAmB;MAClCE,UAAU,EAAEA,UAAW;MACvBJ,cAAc,EAAEA,cAAe;MAC/BoE,YAAY,EAAE5E,gBAAiB;MAC/BpB,UAAU,EAAEuE,cAAe;MAC3B0B,WAAW,EAAExB,sBAAuB;MACpCL,OAAO,EAAEA,OAAQ;MACjBC,MAAM,EAAEA,MAAO;MACfC,kBAAkB,EAAEA,kBAAmB;MACvC4B,cAAc,EAAE/B,MAAM,CAACgC;IAAO,CAC/B,CAAC,eAEFjH,IAAA,CAACf,YAAY;MACXiI,cAAc,EAAE3E,QAAQ,EAAE4E,MAAM,KAAK,CAAE;MACvCnG,aAAa,EAAEA,aAAc;MAC7Bc,iBAAiB,EAAEA,iBAAkB;MACrCsF,gBAAgB,EAAEpB,oBAAqB;MACvC5C,cAAc,EAAEA;IAAe,CAChC,CAAC,eAEFpD,IAAA,CAACrB,gBAAgB;MAAC0I,GAAG,EAAElG;IAAe,CAAE,CAAC,eACzCnB,IAAA,CAACZ,qBAAqB;MACpBiI,GAAG,EAAEjG,iBAAkB;MACvBwE,aAAa,EAAEvE,WAAW,EAAEwE,MAAO;MACnC9E,wBAAwB,EAAEA,wBAAyB;MACnDuG,YAAY,EAAE/D,UAAW;MACzBgE,cAAc,EAAE/D,YAAa;MAC7B2B,MAAM,EAAEA;IAAO,CAChB,CAAC;EAAA,CACa,CAAC;AAEtB,CACF,CAAC;AAED,eAAgBqC,KAAsB,IAAK;EACzC,MAAMC,YAAY,GAAG3I,YAAY,CAAEwC,CAAC,IAAKA,CAAC,CAACC,IAAI,IAAI,IAAI,CAAC;EAExD,MAAML,UAAU,GAAG5C,aAAa,CAAC,CAAC;;EAElC;EACA,IAAI,CAACmJ,YAAY,EAAE;IACjB,oBACEvH,KAAA,CAAC9B,UAAU,CAACkI,IAAI;MAACC,IAAI;MAACC,KAAK,EAAE,CAAC,QAAQ,CAAE;MAAAC,QAAA,gBACtCzG,IAAA,CAAC3B,WAAW,CAACqJ,MAAM;QACjBpD,KAAK,EAAC,OAAO;QACbqD,SAAS,EAAC,MAAM;QAChBC,IAAI,EAAC,OAAO;QACZC,kBAAkB;QAClBC,MAAM;QACNC,UAAU,EAAE;UACVC,EAAE,EAAE,MAAM;UACVC,IAAI,EAAE;YACJL,IAAI,EAAE,EAAE;YACRM,UAAU,EAAE,cAAc;YAC1BC,cAAc,EAAE,YAAY;YAC5BC,SAAS,EAAEjK,OAAO,CAACkK,OAAO,CAACC;UAC7B,CAAC;UACD3B,OAAO,EAAEzF,UAAU,CAACe;QACtB;MAAE,CACH,CAAC,eACFjC,IAAA,CAAC5B,UAAU,CAACmK,IAAI;QAAChC,IAAI;QAACiC,MAAM;QAAA/B,QAAA,eAC1BzG,IAAA,CAACjC,iBAAiB;UAAC6J,IAAI,EAAC,OAAO;UAACa,KAAK,EAAEtK,OAAO,CAACkK,OAAO,CAACC;QAAO,CAAE;MAAC,CAClD,CAAC;IAAA,CACH,CAAC;EAEtB;EAEA,oBAAOtI,IAAA,CAACG,UAAU;IAAA,GAAKqH;EAAK,CAAG,CAAC;AAClC,CAAC","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["memo","useCallback","useEffect","useRef","DeviceEventEmitter","useKeyboardScrollToEnd","useSafeAreaInsets","KContainer","useNavigation","useRoute","usePinMessage","PinnedMessageBar","openPinnedMessagesSheet","MediaViewerModal","useConversation","useConversationStore","useUserStore","ChatDetailHeader","ChatListLegend","ChatComposer","shouldShowAddMember","normalizeUrl","MessageToolboxOverlay","useGetConversationDetail","useGetConversationTarget","useSyncConversationById","GroupJoinSource","useMessages","ChatEvent","useSetIsShowFLashMessage","useJoinGroup","useGroupAccessGuard","useSingleAccessGuard","useIsJoinedGroup","UIUtils","trans","getGroupIdFromConversationId","ChatDetailLoading","jsx","_jsx","jsxs","_jsxs","ChatDetail","conversationId","targetUserId","targetGroupId","targetMessageId","showAddMember","onBack","onPressSearch","onPressAddMember","onPressMenu","onPressUrl","customMessageItemFactory","pannelActions","groupJoinSource","navigation","mediaViewerRef","messageToolboxRef","currentUser","s","user","conversation","data","target","isComposeDisabled","isActive","handleBackDefault","goBack","handleMediaPress","items","index","current","show","messages","initLoading","moreOldLoading","moreNewLoading","getMoreOldMessages","getMoreNewMessages","hasMoreOld","hasMoreNew","startClientMsgId","peerType","mutate","joinGroup","isPending","isJoiningGroup","setShowFLashMessage","pinnedMessages","pinMessage","unpinMessage","getState","setCurrentConversation","undefined","handleAccessBlocked","isCheckingAccess","groupID","onBlocked","currentUserId","userID","subscription","addListener","TargetMessageUnavailable","toast","open","title","theme","remove","params","targetMessage","find","m","clientMsgID","emit","ScrollToMessage","clientMessageId","resolvedShowAddMember","insets","listRef","freeze","scrollMessageToEnd","handlePressUrl","url","handleMessageLongPress","message","rect","groupPosition","handlePressPinnedMessageBar","onPressMessage","handlePressMenu","handlePressJoinGroup","reqMsg","joinSource","Search","groupName","showName","Page","flex","edges","children","onPressAvatar","onPress","isLoading","onLoadMoreOld","onLoadMoreNew","onMediaPress","onLongPress","keyboardOffset","bottom","isEmptyMessage","length","onPressJoinGroup","ref","onPinMessage","onUnpinMessage","ConversationDataGate","props","targetConversationId","targetBotId","hasTarget","isLoadingConversation","isFetching","isSyncingConversation","isFetched","isConversationSynced","isCheckingJoinStatus","isConversationResolved","isReady","SdkReadyGate","isUserLoaded"],"sourceRoot":"../../../../src","sources":["screens/chat-detail/ChatDetail.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { KColors, KContainer, KNavigation } from '@droppii/libs';
|
|
4
|
+
import { ActivityIndicator } from 'react-native';
|
|
5
|
+
import { useNavigation } from '@react-navigation/native';
|
|
6
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
7
|
+
export const ChatDetailLoading = () => {
|
|
8
|
+
const navigation = useNavigation();
|
|
9
|
+
return /*#__PURE__*/_jsxs(KContainer.Page, {
|
|
10
|
+
flex: true,
|
|
11
|
+
edges: ['bottom'],
|
|
12
|
+
children: [/*#__PURE__*/_jsx(KNavigation.Header, {
|
|
13
|
+
theme: "light",
|
|
14
|
+
alignment: "left",
|
|
15
|
+
size: "small",
|
|
16
|
+
disableCenterSpace: true,
|
|
17
|
+
shadow: true,
|
|
18
|
+
leftButton: {
|
|
19
|
+
id: 'back',
|
|
20
|
+
icon: {
|
|
21
|
+
size: 24,
|
|
22
|
+
vectorName: 'arrow-left-o',
|
|
23
|
+
vectorProvider: 'DroppiiNew',
|
|
24
|
+
tintColor: KColors.primary.normal
|
|
25
|
+
},
|
|
26
|
+
onPress: navigation.goBack
|
|
27
|
+
}
|
|
28
|
+
}), /*#__PURE__*/_jsx(KContainer.View, {
|
|
29
|
+
flex: true,
|
|
30
|
+
center: true,
|
|
31
|
+
children: /*#__PURE__*/_jsx(ActivityIndicator, {
|
|
32
|
+
size: "small",
|
|
33
|
+
color: KColors.primary.normal
|
|
34
|
+
})
|
|
35
|
+
})]
|
|
36
|
+
});
|
|
37
|
+
};
|
|
38
|
+
//# sourceMappingURL=ChatDetailLoading.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["KColors","KContainer","KNavigation","ActivityIndicator","useNavigation","jsx","_jsx","jsxs","_jsxs","ChatDetailLoading","navigation","Page","flex","edges","children","Header","theme","alignment","size","disableCenterSpace","shadow","leftButton","id","icon","vectorName","vectorProvider","tintColor","primary","normal","onPress","goBack","View","center","color"],"sourceRoot":"../../../../../src","sources":["screens/chat-detail/components/ChatDetailLoading.tsx"],"mappings":";;AAAA,SAASA,OAAO,EAAEC,UAAU,EAAEC,WAAW,QAAQ,eAAe;AAChE,SAASC,iBAAiB,QAAQ,cAAc;AAChD,SAASC,aAAa,QAAQ,0BAA0B;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAEzD,OAAO,MAAMC,iBAAiB,GAAGA,CAAA,KAAM;EACrC,MAAMC,UAAU,GAAGN,aAAa,CAAC,CAAC;EAClC,oBACEI,KAAA,CAACP,UAAU,CAACU,IAAI;IAACC,IAAI;IAACC,KAAK,EAAE,CAAC,QAAQ,CAAE;IAAAC,QAAA,gBACtCR,IAAA,CAACJ,WAAW,CAACa,MAAM;MACjBC,KAAK,EAAC,OAAO;MACbC,SAAS,EAAC,MAAM;MAChBC,IAAI,EAAC,OAAO;MACZC,kBAAkB;MAClBC,MAAM;MACNC,UAAU,EAAE;QACVC,EAAE,EAAE,MAAM;QACVC,IAAI,EAAE;UACJL,IAAI,EAAE,EAAE;UACRM,UAAU,EAAE,cAAc;UAC1BC,cAAc,EAAE,YAAY;UAC5BC,SAAS,EAAE1B,OAAO,CAAC2B,OAAO,CAACC;QAC7B,CAAC;QACDC,OAAO,EAAEnB,UAAU,CAACoB;MACtB;IAAE,CACH,CAAC,eACFxB,IAAA,CAACL,UAAU,CAAC8B,IAAI;MAACnB,IAAI;MAACoB,MAAM;MAAAlB,QAAA,eAC1BR,IAAA,CAACH,iBAAiB;QAACe,IAAI,EAAC,OAAO;QAACe,KAAK,EAAEjC,OAAO,CAAC2B,OAAO,CAACC;MAAO,CAAE;IAAC,CAClD,CAAC;EAAA,CACH,CAAC;AAEtB,CAAC","ignoreList":[]}
|
|
@@ -168,7 +168,7 @@ export const useMessageStore = create()((set, get) => ({
|
|
|
168
168
|
hasMoreNew: !searchNextRes.isEnd,
|
|
169
169
|
initLoading: false
|
|
170
170
|
});
|
|
171
|
-
const targetMessage =
|
|
171
|
+
const targetMessage = newMessages.find(msg => msg.clientMsgID === startClientMsgId);
|
|
172
172
|
if (!targetMessage || isMessageRevoked(targetMessage)) {
|
|
173
173
|
DeviceEventEmitter.emit(ChatEvent.TargetMessageUnavailable);
|
|
174
174
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["create","DeviceEventEmitter","OpenIMSDK","MessageType","ViewType","ChatEvent","mergeMessages","isMessageRevoked","useConversationStore","PAGE_SIZE","useMessageStore","set","get","messages","hasMoreOld","hasMoreNew","initLoading","moreOldLoading","moreNewLoading","setMessages","hasMore","pushNewMessage","message","state","updateOneMessage","tmpList","idx","findIndex","msg","clientMsgID","deleteOneMessage","filter","getMoreOldMessages","loadMore","applicationType","conversationId","params","count","startClientMsgID","conversationID","viewType","History","res","getAdvancedHistoryMessageListApp","getState","currentConversationId","messageList","isEnd","error","console","log","getMoreNewMessages","length","getAdvancedHistoryMessageListReverseApp","Promise","resolve","setTimeout","emit","ScrollToBottom","searchMessages","startClientMsgId","searchPrevParams","Search","searchNextParams","searchCurrentParams","clientMsgIDList","findMessageList","searchPrevRes","searchNextRes","currentMessages","findResultItems","find","item","newMessages","targetMessage","TargetMessageUnavailable","ScrollToMessage","clientMessageId","reset","markMessageRevoked","alreadyRevoked","some","contentType","RevokeMessage","MessageRevoked","revokeQuotedReferences","forEach","quoteElem","quoteMessage","atTextElem"],"sourceRoot":"../../../src","sources":["store/message.ts"],"mappings":"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
|
|
1
|
+
{"version":3,"names":["create","DeviceEventEmitter","OpenIMSDK","MessageType","ViewType","ChatEvent","mergeMessages","isMessageRevoked","useConversationStore","PAGE_SIZE","useMessageStore","set","get","messages","hasMoreOld","hasMoreNew","initLoading","moreOldLoading","moreNewLoading","setMessages","hasMore","pushNewMessage","message","state","updateOneMessage","tmpList","idx","findIndex","msg","clientMsgID","deleteOneMessage","filter","getMoreOldMessages","loadMore","applicationType","conversationId","params","count","startClientMsgID","conversationID","viewType","History","res","getAdvancedHistoryMessageListApp","getState","currentConversationId","messageList","isEnd","error","console","log","getMoreNewMessages","length","getAdvancedHistoryMessageListReverseApp","Promise","resolve","setTimeout","emit","ScrollToBottom","searchMessages","startClientMsgId","searchPrevParams","Search","searchNextParams","searchCurrentParams","clientMsgIDList","findMessageList","searchPrevRes","searchNextRes","currentMessages","findResultItems","find","item","newMessages","targetMessage","TargetMessageUnavailable","ScrollToMessage","clientMessageId","reset","markMessageRevoked","alreadyRevoked","some","contentType","RevokeMessage","MessageRevoked","revokeQuotedReferences","forEach","quoteElem","quoteMessage","atTextElem"],"sourceRoot":"../../../src","sources":["store/message.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -36,4 +36,25 @@ export const getBotId = conversation => {
|
|
|
36
36
|
export const isGroupConversation = conversation => {
|
|
37
37
|
return conversation?.peerType === PeerType.Group;
|
|
38
38
|
};
|
|
39
|
+
const GROUP_CONVERSATION_ID_PREFIX = 'sg_';
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Group conversationIds are formatted as "sg_<groupID>" — derive the groupID
|
|
43
|
+
* straight from the id when a full ConversationItem isn't available yet (e.g.
|
|
44
|
+
* a non-member previewing a public group via deeplink has no synced
|
|
45
|
+
* conversation object to read groupID off of).
|
|
46
|
+
*/
|
|
47
|
+
export const getGroupIdFromConversationId = conversationId => conversationId?.startsWith(GROUP_CONVERSATION_ID_PREFIX) ? conversationId.slice(GROUP_CONVERSATION_ID_PREFIX.length) : '';
|
|
48
|
+
const SINGLE_CONVERSATION_ID_PREFIX = 'si_';
|
|
49
|
+
export const isSingleConversationId = conversationId => conversationId.startsWith(SINGLE_CONVERSATION_ID_PREFIX);
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* A 1v1 conversationId is "si_<userA>_<userB>" (see `getConversationID`), with
|
|
53
|
+
* no fixed order between the two — same as the forward/reverse match
|
|
54
|
+
* `isSameConversation` does above. Used to tell whether the logged-in user is
|
|
55
|
+
* actually a participant when no local conversation record has synced (e.g. a
|
|
56
|
+
* deeplink into a 1v1 the current account has no access to). Only meaningful
|
|
57
|
+
* once `isSingleConversationId` is true.
|
|
58
|
+
*/
|
|
59
|
+
export const isConversationParticipant = (conversationId, userId) => !!userId && conversationId.split('_').includes(userId);
|
|
39
60
|
//# sourceMappingURL=conversation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["PeerType","SessionType","conversationCompare","a","b","isPinned","aCompare","draftTextTime","latestMsgSendTime","bCompare","getConversationID","sessionType","senderID","receiverID","prefix","Single","Notification","filter","Boolean","join","sortConversation","map","list","Object","keys","id","isNotInGroup","sort","getBotId","conversation","peerType","Bot","JSON","parse","ex","sessionInfo","data","botId","_","undefined","isGroupConversation","Group"],"sourceRoot":"../../../src","sources":["utils/conversation.ts"],"mappings":";;AAAA,SACEA,QAAQ,EACRC,WAAW,QAEN,+BAA+B;AAEtC,OAAO,MAAMC,mBAAmB,GAAGA,CACjCC,CAAmB,EACnBC,CAAmB,KAChB;EACH,IAAID,CAAC,CAACE,QAAQ,KAAKD,CAAC,CAACC,QAAQ,EAAE,OAAOF,CAAC,CAACE,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC;EAEzD,MAAMC,QAAQ,GACZH,CAAC,CAACI,aAAa,GAAGJ,CAAC,CAACK,iBAAiB,GACjCL,CAAC,CAACI,aAAa,GACfJ,CAAC,CAACK,iBAAiB;EACzB,MAAMC,QAAQ,GACZL,CAAC,CAACG,aAAa,GAAGH,CAAC,CAACI,iBAAiB,GACjCJ,CAAC,CAACG,aAAa,GACfH,CAAC,CAACI,iBAAiB;EAEzB,OAAOC,QAAQ,GAAGH,QAAQ;AAC5B,CAAC;AAED,OAAO,MAAMI,iBAAiB,GAAGA,CAC/BC,WAAwB,EACxBC,QAAiB,EACjBC,UAAmB,KAChB;EACH,MAAMC,MAAM,GACVH,WAAW,KAAKV,WAAW,CAACc,MAAM,GAC9B,IAAI,GACJJ,WAAW,KAAKV,WAAW,CAACe,YAAY,GACtC,IAAI,GACJ,IAAI;EAEZ,OAAO,CAACF,MAAM,EAAEF,QAAQ,EAAEC,UAAU,CAAC,CAACI,MAAM,CAACC,OAAO,CAAC,CAACC,IAAI,CAAC,GAAG,CAAC;AACjE,CAAC;AAED,OAAO,MAAMC,gBAAgB,GAAIC,GAAqC,IAAK;EACzE;EACA;EACA;EACA,MAAMC,IAAI,GAAGC,MAAM,CAACC,IAAI,CAACH,GAAG,CAAC,CAC1BJ,MAAM,CAAEQ,EAAE,IAAK,CAACJ,GAAG,CAACI,EAAE,CAAC,EAAEC,YAAY,CAAC,CACtCC,IAAI,CAAC,CAACxB,CAAC,EAAEC,CAAC,KAAKF,mBAAmB,CAACmB,GAAG,CAAClB,CAAC,CAAC,EAAGkB,GAAG,CAACjB,CAAC,CAAE,CAAC,CAAC;EACxD,OAAO;IAAEiB,GAAG;IAAEC;EAAK,CAAC;AACtB,CAAC;AAED,OAAO,MAAMM,QAAQ,GAAIC,YAA+B,IAAK;EAC3D,IAAIA,YAAY,IAAIA,YAAY,EAAEC,QAAQ,KAAK9B,QAAQ,CAAC+B,GAAG,EAAE;IAC3D,IAAI;MACF,MAAMN,EAAE,GAAGO,IAAI,CAACC,KAAK,CAACJ,YAAY,EAAEK,EAAE,IAAI,IAAI,CAAC,EAAEC,WAAW,EAAEC,IAAI,EAAEC,KAAK;MACzE,OAAOZ,EAAE;MACT;IACF,CAAC,CAAC,OAAOa,CAAM,EAAE;MACf,OAAOC,SAAS;IAClB;EACF;EACA,OAAOA,SAAS;AAClB,CAAC;AAED,OAAO,MAAMC,mBAAmB,GAC9BX,YAAsE,IACnE;EACH,OAAOA,YAAY,EAAEC,QAAQ,KAAK9B,QAAQ,CAACyC,KAAK;AAClD,CAAC","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["PeerType","SessionType","conversationCompare","a","b","isPinned","aCompare","draftTextTime","latestMsgSendTime","bCompare","getConversationID","sessionType","senderID","receiverID","prefix","Single","Notification","filter","Boolean","join","sortConversation","map","list","Object","keys","id","isNotInGroup","sort","getBotId","conversation","peerType","Bot","JSON","parse","ex","sessionInfo","data","botId","_","undefined","isGroupConversation","Group","GROUP_CONVERSATION_ID_PREFIX","getGroupIdFromConversationId","conversationId","startsWith","slice","length","SINGLE_CONVERSATION_ID_PREFIX","isSingleConversationId","isConversationParticipant","userId","split","includes"],"sourceRoot":"../../../src","sources":["utils/conversation.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import { PeerType, SessionType } from '@droppii/openim-rn-client-sdk';
|
|
4
|
-
import { getConversationID } from "./conversation.js";
|
|
4
|
+
import { getConversationID, getGroupIdFromConversationId } from "./conversation.js";
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* Canonical timestamp for a message. `sendTime` is 0 until the SDK stamps an
|
|
@@ -90,8 +90,7 @@ export const getReceiverId = conversation => {
|
|
|
90
90
|
recvID: ''
|
|
91
91
|
};
|
|
92
92
|
if (conversation.peerType === PeerType.Group) {
|
|
93
|
-
|
|
94
|
-
const groupID = conversation.groupID || conversation.conversationID.slice(3);
|
|
93
|
+
const groupID = conversation.groupID || getGroupIdFromConversationId(conversation.conversationID);
|
|
95
94
|
return {
|
|
96
95
|
groupID: groupID ?? '',
|
|
97
96
|
recvID: ''
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["PeerType","SessionType","getConversationID","getMessageTime","message","sendTime","createTime","getMessageKey","clientMsgID","serverMsgID","getMessageRenderId","index","mergeMessages","current","incoming","map","Map","key","set","Array","from","values","sort","a","b","normalizeCreatedMessage","normalized","JSON","parse","Error","resolveHistoryLastMinSeq","history","fallbackMessage","lastMinSeq","seq","getHistoryPaginationAnchor","messages","length","oldest","reduce","prev","curr","hasNewHistoryMessages","currentKeys","Set","filter","Boolean","some","has","belongsToConversation","conversationId","targetUserId","sessionType","Single","forwardId","sendID","recvID","reverseId","Group","groupID","getReceiverId","conversation","peerType","conversationID","
|
|
1
|
+
{"version":3,"names":["PeerType","SessionType","getConversationID","getGroupIdFromConversationId","getMessageTime","message","sendTime","createTime","getMessageKey","clientMsgID","serverMsgID","getMessageRenderId","index","mergeMessages","current","incoming","map","Map","key","set","Array","from","values","sort","a","b","normalizeCreatedMessage","normalized","JSON","parse","Error","resolveHistoryLastMinSeq","history","fallbackMessage","lastMinSeq","seq","getHistoryPaginationAnchor","messages","length","oldest","reduce","prev","curr","hasNewHistoryMessages","currentKeys","Set","filter","Boolean","some","has","belongsToConversation","conversationId","targetUserId","sessionType","Single","forwardId","sendID","recvID","reverseId","Group","groupID","getReceiverId","conversation","peerType","conversationID","userID"],"sourceRoot":"../../../src","sources":["utils/message.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
type Params = {
|
|
2
|
+
conversationId: string;
|
|
3
|
+
currentUserId?: string;
|
|
4
|
+
/** Navigate away from the chat screen. Called once, after the block modal. */
|
|
5
|
+
onBlocked: () => void;
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* 1v1 conversations have no membership guard of their own — a deeplink into a
|
|
9
|
+
* 1v1 the logged-in account isn't part of never syncs a local conversation
|
|
10
|
+
* record, so this can't rely on a synced `ConversationItem` and instead reads
|
|
11
|
+
* the participant ids straight off the "si_<userA>_<userB>" conversationId.
|
|
12
|
+
* No-ops for anything that isn't a 1v1 conversationId.
|
|
13
|
+
*/
|
|
14
|
+
export declare const useSingleAccessGuard: ({ conversationId, currentUserId, onBlocked, }: Params) => void;
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=useSingleAccessGuard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSingleAccessGuard.d.ts","sourceRoot":"","sources":["../../../../../src/hooks/conversation/useSingleAccessGuard.ts"],"names":[],"mappings":"AAOA,KAAK,MAAM,GAAG;IACZ,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,8EAA8E;IAC9E,SAAS,EAAE,MAAM,IAAI,CAAC;CACvB,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,GAAI,+CAIlC,MAAM,SAkBR,CAAC"}
|
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The "you can't open this conversation" modal — shared by the group
|
|
3
|
+
* non-member guard and the 1v1 non-participant check in ChatDetail, so both
|
|
4
|
+
* present the exact same blocked experience.
|
|
5
|
+
*/
|
|
6
|
+
export declare const showAccessBlockedModal: (onAcknowledge: () => void) => void;
|
|
1
7
|
type Params = {
|
|
2
8
|
groupID?: string;
|
|
3
9
|
/** Navigate away from the chat screen. Called once, after the block modal. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useGroupAccessGuard.d.ts","sourceRoot":"","sources":["../../../../../src/hooks/groups/useGroupAccessGuard.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useGroupAccessGuard.d.ts","sourceRoot":"","sources":["../../../../../src/hooks/groups/useGroupAccessGuard.ts"],"names":[],"mappings":"AAyBA;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,GAAI,eAAe,MAAM,IAAI,SAoB/D,CAAC;AAoBF,KAAK,MAAM,GAAG;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,8EAA8E;IAC9E,SAAS,EAAE,MAAM,IAAI,CAAC;CACvB,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAAI,wBAAwB,MAAM;;CAwHjE,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import type { ChatDetailProps } from './types';
|
|
2
|
-
declare const
|
|
3
|
-
export default
|
|
2
|
+
declare const SdkReadyGate: (props: ChatDetailProps) => import("react").JSX.Element;
|
|
3
|
+
export default SdkReadyGate;
|
|
4
4
|
//# sourceMappingURL=ChatDetail.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatDetail.d.ts","sourceRoot":"","sources":["../../../../../src/screens/chat-detail/ChatDetail.tsx"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"ChatDetail.d.ts","sourceRoot":"","sources":["../../../../../src/screens/chat-detail/ChatDetail.tsx"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAmU/C,QAAA,MAAM,YAAY,GAAI,OAAO,eAAe,gCAS3C,CAAC;AAEF,eAAe,YAAY,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChatDetailLoading.d.ts","sourceRoot":"","sources":["../../../../../../src/screens/chat-detail/components/ChatDetailLoading.tsx"],"names":[],"mappings":"AAIA,eAAO,MAAM,iBAAiB,mCA0B7B,CAAC"}
|
|
@@ -7,4 +7,21 @@ export declare const sortConversation: (map: Record<string, ConversationItem>) =
|
|
|
7
7
|
};
|
|
8
8
|
export declare const getBotId: (conversation?: ConversationItem) => any;
|
|
9
9
|
export declare const isGroupConversation: (conversation?: Pick<ConversationItem, "conversationType" | "peerType">) => boolean;
|
|
10
|
+
/**
|
|
11
|
+
* Group conversationIds are formatted as "sg_<groupID>" — derive the groupID
|
|
12
|
+
* straight from the id when a full ConversationItem isn't available yet (e.g.
|
|
13
|
+
* a non-member previewing a public group via deeplink has no synced
|
|
14
|
+
* conversation object to read groupID off of).
|
|
15
|
+
*/
|
|
16
|
+
export declare const getGroupIdFromConversationId: (conversationId?: string) => string;
|
|
17
|
+
export declare const isSingleConversationId: (conversationId: string) => boolean;
|
|
18
|
+
/**
|
|
19
|
+
* A 1v1 conversationId is "si_<userA>_<userB>" (see `getConversationID`), with
|
|
20
|
+
* no fixed order between the two — same as the forward/reverse match
|
|
21
|
+
* `isSameConversation` does above. Used to tell whether the logged-in user is
|
|
22
|
+
* actually a participant when no local conversation record has synced (e.g. a
|
|
23
|
+
* deeplink into a 1v1 the current account has no access to). Only meaningful
|
|
24
|
+
* once `isSingleConversationId` is true.
|
|
25
|
+
*/
|
|
26
|
+
export declare const isConversationParticipant: (conversationId: string, userId?: string) => boolean;
|
|
10
27
|
//# sourceMappingURL=conversation.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversation.d.ts","sourceRoot":"","sources":["../../../../src/utils/conversation.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,WAAW,EACX,KAAK,gBAAgB,EACtB,MAAM,+BAA+B,CAAC;AAEvC,eAAO,MAAM,mBAAmB,GAC9B,GAAG,gBAAgB,EACnB,GAAG,gBAAgB,WAcpB,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAC5B,aAAa,WAAW,EACxB,WAAW,MAAM,EACjB,aAAa,MAAM,WAUpB,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,KAAK,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC;;;CAQrE,CAAC;AAEF,eAAO,MAAM,QAAQ,GAAI,eAAe,gBAAgB,QAWvD,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAC9B,eAAe,IAAI,CAAC,gBAAgB,EAAE,kBAAkB,GAAG,UAAU,CAAC,YAGvE,CAAC"}
|
|
1
|
+
{"version":3,"file":"conversation.d.ts","sourceRoot":"","sources":["../../../../src/utils/conversation.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,WAAW,EACX,KAAK,gBAAgB,EACtB,MAAM,+BAA+B,CAAC;AAEvC,eAAO,MAAM,mBAAmB,GAC9B,GAAG,gBAAgB,EACnB,GAAG,gBAAgB,WAcpB,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAC5B,aAAa,WAAW,EACxB,WAAW,MAAM,EACjB,aAAa,MAAM,WAUpB,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,KAAK,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC;;;CAQrE,CAAC;AAEF,eAAO,MAAM,QAAQ,GAAI,eAAe,gBAAgB,QAWvD,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAC9B,eAAe,IAAI,CAAC,gBAAgB,EAAE,kBAAkB,GAAG,UAAU,CAAC,YAGvE,CAAC;AAIF;;;;;GAKG;AACH,eAAO,MAAM,4BAA4B,GAAI,iBAAiB,MAAM,WAG5D,CAAC;AAIT,eAAO,MAAM,sBAAsB,GAAI,gBAAgB,MAAM,KAAG,OACN,CAAC;AAE3D;;;;;;;GAOG;AACH,eAAO,MAAM,yBAAyB,GACpC,gBAAgB,MAAM,EACtB,SAAS,MAAM,KACd,OAAiE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message.d.ts","sourceRoot":"","sources":["../../../../src/utils/message.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,gBAAgB,EACrB,KAAK,WAAW,EACjB,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"message.d.ts","sourceRoot":"","sources":["../../../../src/utils/message.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,gBAAgB,EACrB,KAAK,WAAW,EACjB,MAAM,+BAA+B,CAAC;AAMvC;;;;;GAKG;AACH,eAAO,MAAM,cAAc,GAAI,SAAS,WAAW,WACN,CAAC;AAK9C;;;;;;;;GAQG;AACH,eAAO,MAAM,kBAAkB,GAAI,SAAS,WAAW,EAAE,OAAO,MAAM,WACA,CAAC;AAEvE,eAAO,MAAM,aAAa,GACxB,SAAS,WAAW,EAAE,EACtB,UAAU,WAAW,EAAE,KACtB,WAAW,EAab,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAClC,SAAS,WAAW,GAAG,MAAM,KAC5B,WAYF,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,eAAO,MAAM,wBAAwB,GACnC,SAAS;IAAE,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,EAChC,kBAAkB,WAAW,KAC5B,MAMF,CAAC;AAEF,eAAO,MAAM,0BAA0B,GACrC,UAAU,WAAW,EAAE,KACtB,uBAAuB,GAAG,IAkB5B,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAChC,SAAS,WAAW,EAAE,EACtB,UAAU,WAAW,EAAE,KACtB,OASF,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAChC,SAAS,WAAW,EACpB,iBAAiB,MAAM,EACvB,eAAe,MAAM,KACpB,OA2BF,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,eAAe,gBAAgB;;;CAW5D,CAAC"}
|
package/package.json
CHANGED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { useEffect, useRef } from 'react';
|
|
2
|
+
import {
|
|
3
|
+
isConversationParticipant,
|
|
4
|
+
isSingleConversationId,
|
|
5
|
+
} from '../../utils/conversation';
|
|
6
|
+
import { showAccessBlockedModal } from '../groups/useGroupAccessGuard';
|
|
7
|
+
|
|
8
|
+
type Params = {
|
|
9
|
+
conversationId: string;
|
|
10
|
+
currentUserId?: string;
|
|
11
|
+
/** Navigate away from the chat screen. Called once, after the block modal. */
|
|
12
|
+
onBlocked: () => void;
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* 1v1 conversations have no membership guard of their own — a deeplink into a
|
|
17
|
+
* 1v1 the logged-in account isn't part of never syncs a local conversation
|
|
18
|
+
* record, so this can't rely on a synced `ConversationItem` and instead reads
|
|
19
|
+
* the participant ids straight off the "si_<userA>_<userB>" conversationId.
|
|
20
|
+
* No-ops for anything that isn't a 1v1 conversationId.
|
|
21
|
+
*/
|
|
22
|
+
export const useSingleAccessGuard = ({
|
|
23
|
+
conversationId,
|
|
24
|
+
currentUserId,
|
|
25
|
+
onBlocked,
|
|
26
|
+
}: Params) => {
|
|
27
|
+
const hasBlockedRef = useRef(false);
|
|
28
|
+
const onBlockedRef = useRef(onBlocked);
|
|
29
|
+
onBlockedRef.current = onBlocked;
|
|
30
|
+
|
|
31
|
+
useEffect(() => {
|
|
32
|
+
hasBlockedRef.current = false;
|
|
33
|
+
}, [conversationId]);
|
|
34
|
+
|
|
35
|
+
useEffect(() => {
|
|
36
|
+
if (!isSingleConversationId(conversationId)) return;
|
|
37
|
+
if (!currentUserId) return;
|
|
38
|
+
if (isConversationParticipant(conversationId, currentUserId)) return;
|
|
39
|
+
if (hasBlockedRef.current) return;
|
|
40
|
+
hasBlockedRef.current = true;
|
|
41
|
+
|
|
42
|
+
showAccessBlockedModal(() => onBlockedRef.current());
|
|
43
|
+
}, [conversationId, currentUserId]);
|
|
44
|
+
};
|
|
@@ -23,6 +23,33 @@ type GroupAccessState =
|
|
|
23
23
|
|
|
24
24
|
type EvaluationResult = { state: Exclude<GroupAccessState, 'checking'> };
|
|
25
25
|
|
|
26
|
+
/**
|
|
27
|
+
* The "you can't open this conversation" modal — shared by the group
|
|
28
|
+
* non-member guard and the 1v1 non-participant check in ChatDetail, so both
|
|
29
|
+
* present the exact same blocked experience.
|
|
30
|
+
*/
|
|
31
|
+
export const showAccessBlockedModal = (onAcknowledge: () => void) => {
|
|
32
|
+
UIUtils.alert.open({
|
|
33
|
+
title: trans('group:access_blocked_title'),
|
|
34
|
+
message: trans('group:access_blocked_desc'),
|
|
35
|
+
primaryIndex: 0,
|
|
36
|
+
buttonType: 'horizontal-button',
|
|
37
|
+
// Drop any alert raised while this one is up rather than stacking it —
|
|
38
|
+
// OnGroupDismissed fires twice for the group owner.
|
|
39
|
+
ignoreStack: true,
|
|
40
|
+
// Force an acknowledgement: dismissing by tapping outside would leave the
|
|
41
|
+
// user sitting in a conversation they cannot access.
|
|
42
|
+
touchOutsideToDismiss: false,
|
|
43
|
+
buttons: [
|
|
44
|
+
{
|
|
45
|
+
label: trans('group:access_blocked_button'),
|
|
46
|
+
kind: 'primary',
|
|
47
|
+
onPress: onAcknowledge,
|
|
48
|
+
},
|
|
49
|
+
],
|
|
50
|
+
});
|
|
51
|
+
};
|
|
52
|
+
|
|
26
53
|
/**
|
|
27
54
|
* Resolves whether the current user may open `groupID`, per the group-access
|
|
28
55
|
* spec: private non-members and dismissed groups are blocked outright, while
|
|
@@ -74,25 +101,7 @@ export const useGroupAccessGuard = ({ groupID, onBlocked }: Params) => {
|
|
|
74
101
|
hasBlockedRef.current = true;
|
|
75
102
|
|
|
76
103
|
setAccessState('blocked');
|
|
77
|
-
|
|
78
|
-
title: trans('group:access_blocked_title'),
|
|
79
|
-
message: trans('group:access_blocked_desc'),
|
|
80
|
-
primaryIndex: 0,
|
|
81
|
-
buttonType: 'horizontal-button',
|
|
82
|
-
// Drop any alert raised while this one is up rather than stacking it —
|
|
83
|
-
// OnGroupDismissed fires twice for the group owner.
|
|
84
|
-
ignoreStack: true,
|
|
85
|
-
// Force an acknowledgement: dismissing by tapping outside would leave the
|
|
86
|
-
// user sitting in a conversation they cannot access.
|
|
87
|
-
touchOutsideToDismiss: false,
|
|
88
|
-
buttons: [
|
|
89
|
-
{
|
|
90
|
-
label: trans('group:access_blocked_button'),
|
|
91
|
-
kind: 'primary',
|
|
92
|
-
onPress: () => onBlockedRef.current(),
|
|
93
|
-
},
|
|
94
|
-
],
|
|
95
|
-
});
|
|
104
|
+
showAccessBlockedModal(() => onBlockedRef.current());
|
|
96
105
|
}, []);
|
|
97
106
|
|
|
98
107
|
const applyResult = useCallback(
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { memo, useCallback, useEffect, useRef } from 'react';
|
|
2
|
-
import {
|
|
2
|
+
import { DeviceEventEmitter } from 'react-native';
|
|
3
3
|
|
|
4
4
|
import { useKeyboardScrollToEnd } from '@legendapp/list/keyboard';
|
|
5
5
|
import type { LegendListRef } from '@legendapp/list/react-native';
|
|
6
6
|
import { useSafeAreaInsets } from 'react-native-safe-area-context';
|
|
7
|
-
import {
|
|
7
|
+
import { KContainer } from '@droppii/libs';
|
|
8
8
|
import { useNavigation, useRoute } from '@react-navigation/native';
|
|
9
9
|
import { usePinMessage } from '../../hooks/message/usePinMessage';
|
|
10
10
|
import { PinnedMessageBar } from './PinnedMessageBar';
|
|
@@ -32,6 +32,7 @@ import type {
|
|
|
32
32
|
import {
|
|
33
33
|
useGetConversationDetail,
|
|
34
34
|
useGetConversationTarget,
|
|
35
|
+
useSyncConversationById,
|
|
35
36
|
} from '../../hooks/conversation/useGetConversationDetail';
|
|
36
37
|
import {
|
|
37
38
|
GroupJoinSource,
|
|
@@ -42,15 +43,25 @@ import { ChatEvent } from '../../types/events';
|
|
|
42
43
|
import { useSetIsShowFLashMessage } from '../../context/global';
|
|
43
44
|
import { useJoinGroup } from '../../hooks/groups/useJoinGroup';
|
|
44
45
|
import { useGroupAccessGuard } from '../../hooks/groups/useGroupAccessGuard';
|
|
46
|
+
import { useSingleAccessGuard } from '../../hooks/conversation/useSingleAccessGuard';
|
|
47
|
+
import { useIsJoinedGroup } from '../../hooks/useIsJoinedGroup';
|
|
45
48
|
import { UIUtils } from '../../utils/UIUtils';
|
|
46
49
|
import { trans } from '../../translation';
|
|
50
|
+
import { getGroupIdFromConversationId } from '../../utils/conversation';
|
|
51
|
+
import { ChatDetailLoading } from './components/ChatDetailLoading';
|
|
52
|
+
|
|
53
|
+
interface ChatDetailScreenProps extends Omit<
|
|
54
|
+
ChatDetailProps,
|
|
55
|
+
'targetConversationId' | 'targetBotId'
|
|
56
|
+
> {
|
|
57
|
+
conversationId: string;
|
|
58
|
+
}
|
|
47
59
|
|
|
48
60
|
const ChatDetail = memo(
|
|
49
61
|
({
|
|
50
|
-
|
|
62
|
+
conversationId,
|
|
51
63
|
targetUserId = '',
|
|
52
64
|
targetGroupId = '',
|
|
53
|
-
targetBotId = '',
|
|
54
65
|
targetMessageId = '',
|
|
55
66
|
showAddMember,
|
|
56
67
|
onBack,
|
|
@@ -61,20 +72,12 @@ const ChatDetail = memo(
|
|
|
61
72
|
customMessageItemFactory,
|
|
62
73
|
pannelActions,
|
|
63
74
|
groupJoinSource,
|
|
64
|
-
}:
|
|
75
|
+
}: ChatDetailScreenProps) => {
|
|
65
76
|
const navigation = useNavigation();
|
|
66
77
|
const mediaViewerRef = useRef<MediaViewerModalHandle>(null);
|
|
67
78
|
const messageToolboxRef = useRef<MessageToolboxRef>(null);
|
|
68
79
|
const currentUser = useUserStore((s) => s.user);
|
|
69
80
|
|
|
70
|
-
const { conversationId, isLoading: isLoadingConversation } =
|
|
71
|
-
useGetConversationDetail({
|
|
72
|
-
targetConversationId,
|
|
73
|
-
targetUserId,
|
|
74
|
-
targetGroupId,
|
|
75
|
-
targetBotId,
|
|
76
|
-
});
|
|
77
|
-
|
|
78
81
|
const conversation = useConversation(conversationId);
|
|
79
82
|
|
|
80
83
|
const { data: target } = useGetConversationTarget(conversationId);
|
|
@@ -134,7 +137,16 @@ const ChatDetail = memo(
|
|
|
134
137
|
}, [onBack, handleBackDefault]);
|
|
135
138
|
|
|
136
139
|
const { isCheckingAccess } = useGroupAccessGuard({
|
|
137
|
-
groupID:
|
|
140
|
+
groupID:
|
|
141
|
+
conversation?.groupID ||
|
|
142
|
+
targetGroupId ||
|
|
143
|
+
getGroupIdFromConversationId(conversationId),
|
|
144
|
+
onBlocked: handleAccessBlocked,
|
|
145
|
+
});
|
|
146
|
+
|
|
147
|
+
useSingleAccessGuard({
|
|
148
|
+
conversationId,
|
|
149
|
+
currentUserId: currentUser?.userID,
|
|
138
150
|
onBlocked: handleAccessBlocked,
|
|
139
151
|
});
|
|
140
152
|
|
|
@@ -247,7 +259,7 @@ const ChatDetail = memo(
|
|
|
247
259
|
messages={messages}
|
|
248
260
|
conversationId={conversationId}
|
|
249
261
|
customMessageItemFactory={customMessageItemFactory}
|
|
250
|
-
isLoading={initLoading ||
|
|
262
|
+
isLoading={initLoading || isCheckingAccess}
|
|
251
263
|
onLoadMoreOld={getMoreOldMessages}
|
|
252
264
|
hasMoreOld={hasMoreOld}
|
|
253
265
|
moreOldLoading={moreOldLoading}
|
|
@@ -285,38 +297,63 @@ const ChatDetail = memo(
|
|
|
285
297
|
}
|
|
286
298
|
);
|
|
287
299
|
|
|
288
|
-
|
|
289
|
-
|
|
300
|
+
// Resolve conversation/group/join-status data before ChatDetail mounts, so the
|
|
301
|
+
// header and composer never render with an incomplete or stale group-membership
|
|
302
|
+
// state on a cold-start deeplink open (DROPPII-30942).
|
|
303
|
+
const ConversationDataGate = (props: ChatDetailProps) => {
|
|
304
|
+
const { targetConversationId, targetUserId, targetGroupId, targetBotId } =
|
|
305
|
+
props;
|
|
306
|
+
|
|
307
|
+
const hasTarget = !!(
|
|
308
|
+
targetConversationId ||
|
|
309
|
+
targetUserId ||
|
|
310
|
+
targetGroupId ||
|
|
311
|
+
targetBotId
|
|
312
|
+
);
|
|
313
|
+
|
|
314
|
+
const { conversationId, isLoading: isLoadingConversation } =
|
|
315
|
+
useGetConversationDetail({
|
|
316
|
+
targetConversationId,
|
|
317
|
+
targetUserId,
|
|
318
|
+
targetGroupId:
|
|
319
|
+
targetGroupId || getGroupIdFromConversationId(targetConversationId),
|
|
320
|
+
targetBotId,
|
|
321
|
+
});
|
|
322
|
+
|
|
323
|
+
const conversation = useConversation(conversationId);
|
|
324
|
+
const { isFetching: isSyncingConversation, isFetched: isConversationSynced } =
|
|
325
|
+
useSyncConversationById(conversationId, !!conversation);
|
|
326
|
+
|
|
327
|
+
const { isLoading: isCheckingJoinStatus } = useIsJoinedGroup(
|
|
328
|
+
conversation?.groupID
|
|
329
|
+
);
|
|
330
|
+
|
|
331
|
+
const isConversationResolved =
|
|
332
|
+
!!conversationId &&
|
|
333
|
+
(!!conversation || (isConversationSynced && !isSyncingConversation));
|
|
290
334
|
|
|
291
|
-
const
|
|
335
|
+
const isReady =
|
|
336
|
+
!hasTarget ||
|
|
337
|
+
(!isLoadingConversation &&
|
|
338
|
+
isConversationResolved &&
|
|
339
|
+
(!conversation?.groupID || !isCheckingJoinStatus));
|
|
340
|
+
|
|
341
|
+
if (!isReady) {
|
|
342
|
+
return <ChatDetailLoading />;
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
return <ChatDetail {...props} conversationId={conversationId} />;
|
|
346
|
+
};
|
|
347
|
+
|
|
348
|
+
const SdkReadyGate = (props: ChatDetailProps) => {
|
|
349
|
+
const isUserLoaded = useUserStore((s) => s.user != null);
|
|
292
350
|
|
|
293
351
|
// Handle sdk not loaded yet when navigate using deeplink
|
|
294
352
|
if (!isUserLoaded) {
|
|
295
|
-
return
|
|
296
|
-
<KContainer.Page flex edges={['bottom']}>
|
|
297
|
-
<KNavigation.Header
|
|
298
|
-
theme="light"
|
|
299
|
-
alignment="left"
|
|
300
|
-
size="small"
|
|
301
|
-
disableCenterSpace
|
|
302
|
-
shadow
|
|
303
|
-
leftButton={{
|
|
304
|
-
id: 'back',
|
|
305
|
-
icon: {
|
|
306
|
-
size: 24,
|
|
307
|
-
vectorName: 'arrow-left-o',
|
|
308
|
-
vectorProvider: 'DroppiiNew',
|
|
309
|
-
tintColor: KColors.primary.normal,
|
|
310
|
-
},
|
|
311
|
-
onPress: navigation.goBack,
|
|
312
|
-
}}
|
|
313
|
-
/>
|
|
314
|
-
<KContainer.View flex center>
|
|
315
|
-
<ActivityIndicator size="small" color={KColors.primary.normal} />
|
|
316
|
-
</KContainer.View>
|
|
317
|
-
</KContainer.Page>
|
|
318
|
-
);
|
|
353
|
+
return <ChatDetailLoading />;
|
|
319
354
|
}
|
|
320
355
|
|
|
321
|
-
return <
|
|
356
|
+
return <ConversationDataGate {...props} />;
|
|
322
357
|
};
|
|
358
|
+
|
|
359
|
+
export default SdkReadyGate;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { KColors, KContainer, KNavigation } from '@droppii/libs';
|
|
2
|
+
import { ActivityIndicator } from 'react-native';
|
|
3
|
+
import { useNavigation } from '@react-navigation/native';
|
|
4
|
+
|
|
5
|
+
export const ChatDetailLoading = () => {
|
|
6
|
+
const navigation = useNavigation();
|
|
7
|
+
return (
|
|
8
|
+
<KContainer.Page flex edges={['bottom']}>
|
|
9
|
+
<KNavigation.Header
|
|
10
|
+
theme="light"
|
|
11
|
+
alignment="left"
|
|
12
|
+
size="small"
|
|
13
|
+
disableCenterSpace
|
|
14
|
+
shadow
|
|
15
|
+
leftButton={{
|
|
16
|
+
id: 'back',
|
|
17
|
+
icon: {
|
|
18
|
+
size: 24,
|
|
19
|
+
vectorName: 'arrow-left-o',
|
|
20
|
+
vectorProvider: 'DroppiiNew',
|
|
21
|
+
tintColor: KColors.primary.normal,
|
|
22
|
+
},
|
|
23
|
+
onPress: navigation.goBack,
|
|
24
|
+
}}
|
|
25
|
+
/>
|
|
26
|
+
<KContainer.View flex center>
|
|
27
|
+
<ActivityIndicator size="small" color={KColors.primary.normal} />
|
|
28
|
+
</KContainer.View>
|
|
29
|
+
</KContainer.Page>
|
|
30
|
+
);
|
|
31
|
+
};
|
package/src/store/message.ts
CHANGED
|
@@ -193,7 +193,7 @@ export const useMessageStore = create<MessageStore>()((set, get) => ({
|
|
|
193
193
|
initLoading: false,
|
|
194
194
|
});
|
|
195
195
|
|
|
196
|
-
const targetMessage =
|
|
196
|
+
const targetMessage = newMessages.find(
|
|
197
197
|
(msg) => msg.clientMsgID === startClientMsgId
|
|
198
198
|
);
|
|
199
199
|
|
|
@@ -65,3 +65,34 @@ export const isGroupConversation = (
|
|
|
65
65
|
) => {
|
|
66
66
|
return conversation?.peerType === PeerType.Group;
|
|
67
67
|
};
|
|
68
|
+
|
|
69
|
+
const GROUP_CONVERSATION_ID_PREFIX = 'sg_';
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Group conversationIds are formatted as "sg_<groupID>" — derive the groupID
|
|
73
|
+
* straight from the id when a full ConversationItem isn't available yet (e.g.
|
|
74
|
+
* a non-member previewing a public group via deeplink has no synced
|
|
75
|
+
* conversation object to read groupID off of).
|
|
76
|
+
*/
|
|
77
|
+
export const getGroupIdFromConversationId = (conversationId?: string) =>
|
|
78
|
+
conversationId?.startsWith(GROUP_CONVERSATION_ID_PREFIX)
|
|
79
|
+
? conversationId.slice(GROUP_CONVERSATION_ID_PREFIX.length)
|
|
80
|
+
: '';
|
|
81
|
+
|
|
82
|
+
const SINGLE_CONVERSATION_ID_PREFIX = 'si_';
|
|
83
|
+
|
|
84
|
+
export const isSingleConversationId = (conversationId: string): boolean =>
|
|
85
|
+
conversationId.startsWith(SINGLE_CONVERSATION_ID_PREFIX);
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* A 1v1 conversationId is "si_<userA>_<userB>" (see `getConversationID`), with
|
|
89
|
+
* no fixed order between the two — same as the forward/reverse match
|
|
90
|
+
* `isSameConversation` does above. Used to tell whether the logged-in user is
|
|
91
|
+
* actually a participant when no local conversation record has synced (e.g. a
|
|
92
|
+
* deeplink into a 1v1 the current account has no access to). Only meaningful
|
|
93
|
+
* once `isSingleConversationId` is true.
|
|
94
|
+
*/
|
|
95
|
+
export const isConversationParticipant = (
|
|
96
|
+
conversationId: string,
|
|
97
|
+
userId?: string
|
|
98
|
+
): boolean => !!userId && conversationId.split('_').includes(userId);
|
package/src/utils/message.ts
CHANGED
|
@@ -4,7 +4,10 @@ import {
|
|
|
4
4
|
type ConversationItem,
|
|
5
5
|
type MessageItem,
|
|
6
6
|
} from '@droppii/openim-rn-client-sdk';
|
|
7
|
-
import {
|
|
7
|
+
import {
|
|
8
|
+
getConversationID,
|
|
9
|
+
getGroupIdFromConversationId,
|
|
10
|
+
} from './conversation';
|
|
8
11
|
|
|
9
12
|
/**
|
|
10
13
|
* Canonical timestamp for a message. `sendTime` is 0 until the SDK stamps an
|
|
@@ -153,9 +156,9 @@ export const getReceiverId = (conversation?: ConversationItem) => {
|
|
|
153
156
|
if (conversation == null) return { groupID: '', recvID: '' };
|
|
154
157
|
|
|
155
158
|
if (conversation.peerType === PeerType.Group) {
|
|
156
|
-
// Group conversation: groupID is embedded after the "sg_" prefix
|
|
157
159
|
const groupID =
|
|
158
|
-
conversation.groupID ||
|
|
160
|
+
conversation.groupID ||
|
|
161
|
+
getGroupIdFromConversationId(conversation.conversationID);
|
|
159
162
|
return { groupID: groupID ?? '', recvID: '' };
|
|
160
163
|
}
|
|
161
164
|
|