@sendbird/uikit-react-native 3.5.4 → 3.6.0
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/commonjs/components/ChannelInput/SendInput.js +23 -6
- package/lib/commonjs/components/ChannelInput/SendInput.js.map +1 -1
- package/lib/commonjs/components/ChannelInput/index.js.map +1 -1
- package/lib/commonjs/components/ChannelMessageList/index.js +22 -4
- package/lib/commonjs/components/ChannelMessageList/index.js.map +1 -1
- package/lib/commonjs/components/ChannelThreadMessageList/index.js +349 -0
- package/lib/commonjs/components/ChannelThreadMessageList/index.js.map +1 -0
- package/lib/commonjs/components/GroupChannelMessageRenderer/GroupChannelMessageParentMessage.js +2 -2
- package/lib/commonjs/components/GroupChannelMessageRenderer/GroupChannelMessageParentMessage.js.map +1 -1
- package/lib/commonjs/components/GroupChannelMessageRenderer/GroupChannelMessageReplyInfo.js +100 -0
- package/lib/commonjs/components/GroupChannelMessageRenderer/GroupChannelMessageReplyInfo.js.map +1 -0
- package/lib/commonjs/components/GroupChannelMessageRenderer/index.js +24 -6
- package/lib/commonjs/components/GroupChannelMessageRenderer/index.js.map +1 -1
- package/lib/commonjs/components/ReactionAddons/MessageReactionAddon.js +23 -6
- package/lib/commonjs/components/ReactionAddons/MessageReactionAddon.js.map +1 -1
- package/lib/commonjs/components/ThreadChatFlatList/index.js +76 -0
- package/lib/commonjs/components/ThreadChatFlatList/index.js.map +1 -0
- package/lib/commonjs/components/ThreadParentMessageRenderer/ThreadParentMessage.file.image.js +41 -0
- package/lib/commonjs/components/ThreadParentMessageRenderer/ThreadParentMessage.file.image.js.map +1 -0
- package/lib/commonjs/components/ThreadParentMessageRenderer/ThreadParentMessage.file.js +74 -0
- package/lib/commonjs/components/ThreadParentMessageRenderer/ThreadParentMessage.file.js.map +1 -0
- package/lib/commonjs/components/ThreadParentMessageRenderer/ThreadParentMessage.file.video.js +42 -0
- package/lib/commonjs/components/ThreadParentMessageRenderer/ThreadParentMessage.file.video.js.map +1 -0
- package/lib/commonjs/components/ThreadParentMessageRenderer/ThreadParentMessage.file.voice.js +94 -0
- package/lib/commonjs/components/ThreadParentMessageRenderer/ThreadParentMessage.file.voice.js.map +1 -0
- package/lib/commonjs/components/ThreadParentMessageRenderer/ThreadParentMessage.user.js +61 -0
- package/lib/commonjs/components/ThreadParentMessageRenderer/ThreadParentMessage.user.js.map +1 -0
- package/lib/commonjs/components/ThreadParentMessageRenderer/ThreadParentMessage.user.og.js +127 -0
- package/lib/commonjs/components/ThreadParentMessageRenderer/ThreadParentMessage.user.og.js.map +1 -0
- package/lib/commonjs/components/ThreadParentMessageRenderer/index.js +206 -0
- package/lib/commonjs/components/ThreadParentMessageRenderer/index.js.map +1 -0
- package/lib/commonjs/containers/SendbirdUIKitContainer.js +3 -0
- package/lib/commonjs/containers/SendbirdUIKitContainer.js.map +1 -1
- package/lib/commonjs/contexts/SendbirdChatCtx.js +7 -0
- package/lib/commonjs/contexts/SendbirdChatCtx.js.map +1 -1
- package/lib/commonjs/domain/groupChannel/component/GroupChannelMessageList.js +28 -5
- package/lib/commonjs/domain/groupChannel/component/GroupChannelMessageList.js.map +1 -1
- package/lib/commonjs/domain/groupChannel/module/moduleContext.js +14 -4
- package/lib/commonjs/domain/groupChannel/module/moduleContext.js.map +1 -1
- package/lib/commonjs/domain/groupChannel/types.js.map +1 -1
- package/lib/commonjs/domain/groupChannelThread/component/GroupChannelThreadHeader.js +82 -0
- package/lib/commonjs/domain/groupChannelThread/component/GroupChannelThreadHeader.js.map +1 -0
- package/lib/commonjs/domain/groupChannelThread/component/GroupChannelThreadInput.js +44 -0
- package/lib/commonjs/domain/groupChannelThread/component/GroupChannelThreadInput.js.map +1 -0
- package/lib/commonjs/domain/groupChannelThread/component/GroupChannelThreadMessageList.js +127 -0
- package/lib/commonjs/domain/groupChannelThread/component/GroupChannelThreadMessageList.js.map +1 -0
- package/lib/commonjs/domain/groupChannelThread/component/GroupChannelThreadParentMessageInfo.js +315 -0
- package/lib/commonjs/domain/groupChannelThread/component/GroupChannelThreadParentMessageInfo.js.map +1 -0
- package/lib/commonjs/domain/groupChannelThread/component/GroupChannelThreadStatusEmpty.js +27 -0
- package/lib/commonjs/domain/groupChannelThread/component/GroupChannelThreadStatusEmpty.js.map +1 -0
- package/lib/commonjs/domain/groupChannelThread/component/GroupChannelThreadStatusLoading.js +27 -0
- package/lib/commonjs/domain/groupChannelThread/component/GroupChannelThreadStatusLoading.js.map +1 -0
- package/lib/commonjs/domain/groupChannelThread/component/GroupChannelThreadSuggestedMentionList.js +195 -0
- package/lib/commonjs/domain/groupChannelThread/component/GroupChannelThreadSuggestedMentionList.js.map +1 -0
- package/lib/commonjs/domain/groupChannelThread/index.js +69 -0
- package/lib/commonjs/domain/groupChannelThread/index.js.map +1 -0
- package/lib/commonjs/domain/groupChannelThread/module/createGroupChannelThreadModule.js +42 -0
- package/lib/commonjs/domain/groupChannelThread/module/createGroupChannelThreadModule.js.map +1 -0
- package/lib/commonjs/domain/groupChannelThread/module/moduleContext.js +148 -0
- package/lib/commonjs/domain/groupChannelThread/module/moduleContext.js.map +1 -0
- package/lib/commonjs/domain/groupChannelThread/types.js +6 -0
- package/lib/commonjs/domain/groupChannelThread/types.js.map +1 -0
- package/lib/commonjs/fragments/createGroupChannelFragment.js +30 -5
- package/lib/commonjs/fragments/createGroupChannelFragment.js.map +1 -1
- package/lib/commonjs/fragments/createGroupChannelThreadFragment.js +267 -0
- package/lib/commonjs/fragments/createGroupChannelThreadFragment.js.map +1 -0
- package/lib/commonjs/hooks/useMentionSuggestion.js +5 -2
- package/lib/commonjs/hooks/useMentionSuggestion.js.map +1 -1
- package/lib/commonjs/index.js +72 -40
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/libs/VoiceMessageStatusManager.js +66 -0
- package/lib/commonjs/libs/VoiceMessageStatusManager.js.map +1 -0
- package/lib/commonjs/localization/StringSet.type.js.map +1 -1
- package/lib/commonjs/localization/createBaseStringSet.js +25 -3
- package/lib/commonjs/localization/createBaseStringSet.js.map +1 -1
- package/lib/commonjs/version.js +1 -1
- package/lib/commonjs/version.js.map +1 -1
- package/lib/module/components/ChannelInput/SendInput.js +23 -6
- package/lib/module/components/ChannelInput/SendInput.js.map +1 -1
- package/lib/module/components/ChannelInput/index.js.map +1 -1
- package/lib/module/components/ChannelMessageList/index.js +22 -4
- package/lib/module/components/ChannelMessageList/index.js.map +1 -1
- package/lib/module/components/ChannelThreadMessageList/index.js +341 -0
- package/lib/module/components/ChannelThreadMessageList/index.js.map +1 -0
- package/lib/module/components/GroupChannelMessageRenderer/GroupChannelMessageParentMessage.js +2 -2
- package/lib/module/components/GroupChannelMessageRenderer/GroupChannelMessageParentMessage.js.map +1 -1
- package/lib/module/components/GroupChannelMessageRenderer/GroupChannelMessageReplyInfo.js +92 -0
- package/lib/module/components/GroupChannelMessageRenderer/GroupChannelMessageReplyInfo.js.map +1 -0
- package/lib/module/components/GroupChannelMessageRenderer/index.js +24 -6
- package/lib/module/components/GroupChannelMessageRenderer/index.js.map +1 -1
- package/lib/module/components/ReactionAddons/MessageReactionAddon.js +23 -6
- package/lib/module/components/ReactionAddons/MessageReactionAddon.js.map +1 -1
- package/lib/module/components/ThreadChatFlatList/index.js +66 -0
- package/lib/module/components/ThreadChatFlatList/index.js.map +1 -0
- package/lib/module/components/ThreadParentMessageRenderer/ThreadParentMessage.file.image.js +34 -0
- package/lib/module/components/ThreadParentMessageRenderer/ThreadParentMessage.file.image.js.map +1 -0
- package/lib/module/components/ThreadParentMessageRenderer/ThreadParentMessage.file.js +67 -0
- package/lib/module/components/ThreadParentMessageRenderer/ThreadParentMessage.file.js.map +1 -0
- package/lib/module/components/ThreadParentMessageRenderer/ThreadParentMessage.file.video.js +34 -0
- package/lib/module/components/ThreadParentMessageRenderer/ThreadParentMessage.file.video.js.map +1 -0
- package/lib/module/components/ThreadParentMessageRenderer/ThreadParentMessage.file.voice.js +87 -0
- package/lib/module/components/ThreadParentMessageRenderer/ThreadParentMessage.file.voice.js.map +1 -0
- package/lib/module/components/ThreadParentMessageRenderer/ThreadParentMessage.user.js +54 -0
- package/lib/module/components/ThreadParentMessageRenderer/ThreadParentMessage.user.js.map +1 -0
- package/lib/module/components/ThreadParentMessageRenderer/ThreadParentMessage.user.og.js +119 -0
- package/lib/module/components/ThreadParentMessageRenderer/ThreadParentMessage.user.og.js.map +1 -0
- package/lib/module/components/ThreadParentMessageRenderer/index.js +196 -0
- package/lib/module/components/ThreadParentMessageRenderer/index.js.map +1 -0
- package/lib/module/containers/SendbirdUIKitContainer.js +3 -0
- package/lib/module/containers/SendbirdUIKitContainer.js.map +1 -1
- package/lib/module/contexts/SendbirdChatCtx.js +6 -0
- package/lib/module/contexts/SendbirdChatCtx.js.map +1 -1
- package/lib/module/domain/groupChannel/component/GroupChannelMessageList.js +30 -6
- package/lib/module/domain/groupChannel/component/GroupChannelMessageList.js.map +1 -1
- package/lib/module/domain/groupChannel/module/moduleContext.js +14 -4
- package/lib/module/domain/groupChannel/module/moduleContext.js.map +1 -1
- package/lib/module/domain/groupChannel/types.js.map +1 -1
- package/lib/module/domain/groupChannelThread/component/GroupChannelThreadHeader.js +73 -0
- package/lib/module/domain/groupChannelThread/component/GroupChannelThreadHeader.js.map +1 -0
- package/lib/module/domain/groupChannelThread/component/GroupChannelThreadInput.js +34 -0
- package/lib/module/domain/groupChannelThread/component/GroupChannelThreadInput.js.map +1 -0
- package/lib/module/domain/groupChannelThread/component/GroupChannelThreadMessageList.js +117 -0
- package/lib/module/domain/groupChannelThread/component/GroupChannelThreadMessageList.js.map +1 -0
- package/lib/module/domain/groupChannelThread/component/GroupChannelThreadParentMessageInfo.js +305 -0
- package/lib/module/domain/groupChannelThread/component/GroupChannelThreadParentMessageInfo.js.map +1 -0
- package/lib/module/domain/groupChannelThread/component/GroupChannelThreadStatusEmpty.js +19 -0
- package/lib/module/domain/groupChannelThread/component/GroupChannelThreadStatusEmpty.js.map +1 -0
- package/lib/module/domain/groupChannelThread/component/GroupChannelThreadStatusLoading.js +19 -0
- package/lib/module/domain/groupChannelThread/component/GroupChannelThreadStatusLoading.js.map +1 -0
- package/lib/module/domain/groupChannelThread/component/GroupChannelThreadSuggestedMentionList.js +185 -0
- package/lib/module/domain/groupChannelThread/component/GroupChannelThreadSuggestedMentionList.js.map +1 -0
- package/lib/module/domain/groupChannelThread/index.js +9 -0
- package/lib/module/domain/groupChannelThread/index.js.map +1 -0
- package/lib/module/domain/groupChannelThread/module/createGroupChannelThreadModule.js +34 -0
- package/lib/module/domain/groupChannelThread/module/createGroupChannelThreadModule.js.map +1 -0
- package/lib/module/domain/groupChannelThread/module/moduleContext.js +137 -0
- package/lib/module/domain/groupChannelThread/module/moduleContext.js.map +1 -0
- package/lib/module/domain/groupChannelThread/types.js +2 -0
- package/lib/module/domain/groupChannelThread/types.js.map +1 -0
- package/lib/module/fragments/createGroupChannelFragment.js +33 -7
- package/lib/module/fragments/createGroupChannelFragment.js.map +1 -1
- package/lib/module/fragments/createGroupChannelThreadFragment.js +257 -0
- package/lib/module/fragments/createGroupChannelThreadFragment.js.map +1 -0
- package/lib/module/hooks/useMentionSuggestion.js +5 -2
- package/lib/module/hooks/useMentionSuggestion.js.map +1 -1
- package/lib/module/index.js +3 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/libs/VoiceMessageStatusManager.js +59 -0
- package/lib/module/libs/VoiceMessageStatusManager.js.map +1 -0
- package/lib/module/localization/StringSet.type.js.map +1 -1
- package/lib/module/localization/createBaseStringSet.js +27 -4
- package/lib/module/localization/createBaseStringSet.js.map +1 -1
- package/lib/module/version.js +1 -1
- package/lib/module/version.js.map +1 -1
- package/lib/typescript/src/components/ChannelInput/index.d.ts +1 -0
- package/lib/typescript/src/components/ChannelMessageList/index.d.ts +5 -2
- package/lib/typescript/src/components/ChannelThreadMessageList/index.d.ts +55 -0
- package/lib/typescript/src/components/GroupChannelMessageRenderer/GroupChannelMessageParentMessage.d.ts +1 -1
- package/lib/typescript/src/components/GroupChannelMessageRenderer/GroupChannelMessageReplyInfo.d.ts +9 -0
- package/lib/typescript/src/components/GroupChannelMessageRenderer/index.d.ts +3 -1
- package/lib/typescript/src/components/OpenChannelMessageRenderer/index.d.ts +3 -1
- package/lib/typescript/src/components/ReactionAddons/MessageReactionAddon.d.ts +3 -1
- package/lib/typescript/src/components/ReactionAddons/index.d.ts +2 -1
- package/lib/typescript/src/components/ThreadChatFlatList/index.d.ts +9 -0
- package/lib/typescript/src/components/ThreadParentMessageRenderer/ThreadParentMessage.file.d.ts +4 -0
- package/lib/typescript/src/components/ThreadParentMessageRenderer/ThreadParentMessage.file.image.d.ts +4 -0
- package/lib/typescript/src/components/ThreadParentMessageRenderer/ThreadParentMessage.file.video.d.ts +9 -0
- package/lib/typescript/src/components/ThreadParentMessageRenderer/ThreadParentMessage.file.voice.d.ts +13 -0
- package/lib/typescript/src/components/ThreadParentMessageRenderer/ThreadParentMessage.user.d.ts +10 -0
- package/lib/typescript/src/components/ThreadParentMessageRenderer/ThreadParentMessage.user.og.d.ts +10 -0
- package/lib/typescript/src/components/ThreadParentMessageRenderer/index.d.ts +20 -0
- package/lib/typescript/src/containers/SendbirdUIKitContainer.d.ts +2 -4
- package/lib/typescript/src/contexts/SendbirdChatCtx.d.ts +15 -1
- package/lib/typescript/src/domain/groupChannel/types.d.ts +4 -1
- package/lib/typescript/src/domain/groupChannelThread/component/GroupChannelThreadHeader.d.ts +4 -0
- package/lib/typescript/src/domain/groupChannelThread/component/GroupChannelThreadInput.d.ts +3 -0
- package/lib/typescript/src/domain/groupChannelThread/component/GroupChannelThreadMessageList.d.ts +7 -0
- package/lib/typescript/src/domain/groupChannelThread/component/GroupChannelThreadParentMessageInfo.d.ts +8 -0
- package/lib/typescript/src/domain/groupChannelThread/component/GroupChannelThreadStatusEmpty.d.ts +3 -0
- package/lib/typescript/src/domain/groupChannelThread/component/GroupChannelThreadStatusLoading.d.ts +3 -0
- package/lib/typescript/src/domain/groupChannelThread/component/GroupChannelThreadSuggestedMentionList.d.ts +4 -0
- package/lib/typescript/src/domain/groupChannelThread/index.d.ts +8 -0
- package/lib/typescript/src/domain/groupChannelThread/module/createGroupChannelThreadModule.d.ts +3 -0
- package/lib/typescript/src/domain/groupChannelThread/module/moduleContext.d.ts +3 -0
- package/lib/typescript/src/domain/groupChannelThread/types.d.ts +136 -0
- package/lib/typescript/src/domain/openChannel/component/OpenChannelHeader.d.ts +1 -1
- package/lib/typescript/src/fragments/createGroupChannelThreadFragment.d.ts +5 -0
- package/lib/typescript/src/hooks/useChannelInputItems.d.ts +1 -1
- package/lib/typescript/src/index.d.ts +3 -0
- package/lib/typescript/src/libs/VoiceMessageStatusManager.d.ts +11 -0
- package/lib/typescript/src/localization/StringSet.type.d.ts +23 -0
- package/lib/typescript/src/localization/createBaseStringSet.d.ts +1 -1
- package/lib/typescript/src/version.d.ts +1 -1
- package/package.json +6 -6
- package/src/components/ChannelInput/SendInput.tsx +24 -5
- package/src/components/ChannelInput/index.tsx +1 -0
- package/src/components/ChannelMessageList/index.tsx +27 -5
- package/src/components/ChannelThreadMessageList/index.tsx +406 -0
- package/src/components/GroupChannelMessageRenderer/GroupChannelMessageParentMessage.tsx +3 -3
- package/src/components/GroupChannelMessageRenderer/GroupChannelMessageReplyInfo.tsx +96 -0
- package/src/components/GroupChannelMessageRenderer/index.tsx +21 -5
- package/src/components/ReactionAddons/MessageReactionAddon.tsx +38 -5
- package/src/components/ThreadChatFlatList/index.tsx +63 -0
- package/src/components/ThreadParentMessageRenderer/ThreadParentMessage.file.image.tsx +36 -0
- package/src/components/ThreadParentMessageRenderer/ThreadParentMessage.file.tsx +61 -0
- package/src/components/ThreadParentMessageRenderer/ThreadParentMessage.file.video.tsx +45 -0
- package/src/components/ThreadParentMessageRenderer/ThreadParentMessage.file.voice.tsx +107 -0
- package/src/components/ThreadParentMessageRenderer/ThreadParentMessage.user.og.tsx +133 -0
- package/src/components/ThreadParentMessageRenderer/ThreadParentMessage.user.tsx +65 -0
- package/src/components/ThreadParentMessageRenderer/index.tsx +194 -0
- package/src/containers/SendbirdUIKitContainer.tsx +4 -3
- package/src/contexts/SendbirdChatCtx.tsx +20 -0
- package/src/domain/groupChannel/component/GroupChannelMessageList.tsx +37 -8
- package/src/domain/groupChannel/module/moduleContext.tsx +12 -2
- package/src/domain/groupChannel/types.ts +5 -0
- package/src/domain/groupChannelThread/component/GroupChannelThreadHeader.tsx +63 -0
- package/src/domain/groupChannelThread/component/GroupChannelThreadInput.tsx +38 -0
- package/src/domain/groupChannelThread/component/GroupChannelThreadMessageList.tsx +105 -0
- package/src/domain/groupChannelThread/component/GroupChannelThreadParentMessageInfo.tsx +326 -0
- package/src/domain/groupChannelThread/component/GroupChannelThreadStatusEmpty.tsx +18 -0
- package/src/domain/groupChannelThread/component/GroupChannelThreadStatusLoading.tsx +18 -0
- package/src/domain/groupChannelThread/component/GroupChannelThreadSuggestedMentionList.tsx +174 -0
- package/src/domain/groupChannelThread/index.ts +8 -0
- package/src/domain/groupChannelThread/module/createGroupChannelThreadModule.tsx +35 -0
- package/src/domain/groupChannelThread/module/moduleContext.tsx +165 -0
- package/src/domain/groupChannelThread/types.ts +184 -0
- package/src/fragments/createGroupChannelFragment.tsx +38 -8
- package/src/fragments/createGroupChannelThreadFragment.tsx +280 -0
- package/src/hooks/useMentionSuggestion.ts +13 -9
- package/src/index.ts +4 -0
- package/src/libs/VoiceMessageStatusManager.ts +56 -0
- package/src/localization/StringSet.type.ts +27 -0
- package/src/localization/createBaseStringSet.ts +33 -4
- package/src/version.ts +1 -1
|
@@ -0,0 +1,341 @@
|
|
|
1
|
+
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { View } from 'react-native';
|
|
4
|
+
import { useSafeAreaInsets } from 'react-native-safe-area-context';
|
|
5
|
+
import { ChannelFrozenBanner, createStyleSheet, useAlert, useBottomSheet, useToast, useUIKitTheme } from '@sendbird/uikit-react-native-foundation';
|
|
6
|
+
import { Logger, getAvailableUriFromFileMessage, getFileExtension, getFileType, isMyMessage, isVoiceMessage, messageKeyExtractor, shouldRenderReaction, toMegabyte, useFreshCallback } from '@sendbird/uikit-utils';
|
|
7
|
+
import { useLocalization, usePlatformService, useSendbirdChat, useUserProfile } from '../../hooks/useContext';
|
|
8
|
+
import SBUUtils from '../../libs/SBUUtils';
|
|
9
|
+
import { ReactionAddons } from '../ReactionAddons';
|
|
10
|
+
import ThreadChatFlatList from '../ThreadChatFlatList';
|
|
11
|
+
const ChannelThreadMessageList = (_ref, ref) => {
|
|
12
|
+
let {
|
|
13
|
+
searchItem,
|
|
14
|
+
hasNext,
|
|
15
|
+
channel,
|
|
16
|
+
onEditMessage,
|
|
17
|
+
onDeleteMessage,
|
|
18
|
+
onResendFailedMessage,
|
|
19
|
+
onPressMediaMessage,
|
|
20
|
+
currentUserId,
|
|
21
|
+
renderNewMessagesButton,
|
|
22
|
+
renderScrollToBottomButton,
|
|
23
|
+
renderMessage,
|
|
24
|
+
messages,
|
|
25
|
+
newMessages,
|
|
26
|
+
enableMessageGrouping,
|
|
27
|
+
onScrolledAwayFromBottom,
|
|
28
|
+
scrolledAwayFromBottom,
|
|
29
|
+
onBottomReached,
|
|
30
|
+
onTopReached,
|
|
31
|
+
flatListProps,
|
|
32
|
+
onPressNewMessagesButton,
|
|
33
|
+
onPressScrollToBottomButton
|
|
34
|
+
} = _ref;
|
|
35
|
+
const {
|
|
36
|
+
STRINGS
|
|
37
|
+
} = useLocalization();
|
|
38
|
+
const {
|
|
39
|
+
colors
|
|
40
|
+
} = useUIKitTheme();
|
|
41
|
+
const {
|
|
42
|
+
show
|
|
43
|
+
} = useUserProfile();
|
|
44
|
+
const {
|
|
45
|
+
left,
|
|
46
|
+
right
|
|
47
|
+
} = useSafeAreaInsets();
|
|
48
|
+
const createMessagePressActions = useCreateMessagePressActions({
|
|
49
|
+
channel,
|
|
50
|
+
currentUserId,
|
|
51
|
+
onEditMessage,
|
|
52
|
+
onDeleteMessage,
|
|
53
|
+
onResendFailedMessage,
|
|
54
|
+
onPressMediaMessage
|
|
55
|
+
});
|
|
56
|
+
const safeAreaLayout = {
|
|
57
|
+
paddingLeft: left,
|
|
58
|
+
paddingRight: right
|
|
59
|
+
};
|
|
60
|
+
const renderItem = useFreshCallback(_ref2 => {
|
|
61
|
+
let {
|
|
62
|
+
item,
|
|
63
|
+
index
|
|
64
|
+
} = _ref2;
|
|
65
|
+
const {
|
|
66
|
+
onPress,
|
|
67
|
+
onLongPress,
|
|
68
|
+
bottomSheetItem
|
|
69
|
+
} = createMessagePressActions({
|
|
70
|
+
message: item
|
|
71
|
+
});
|
|
72
|
+
return renderMessage({
|
|
73
|
+
message: item,
|
|
74
|
+
prevMessage: messages[index - 1],
|
|
75
|
+
nextMessage: messages[index + 1],
|
|
76
|
+
onPress,
|
|
77
|
+
onLongPress,
|
|
78
|
+
onShowUserProfile: show,
|
|
79
|
+
enableMessageGrouping,
|
|
80
|
+
channel,
|
|
81
|
+
currentUserId,
|
|
82
|
+
focused: ((searchItem === null || searchItem === void 0 ? void 0 : searchItem.startingPoint) ?? -1) === item.createdAt,
|
|
83
|
+
bottomSheetItem,
|
|
84
|
+
isFirstItem: index === 0
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
return /*#__PURE__*/React.createElement(View, {
|
|
88
|
+
style: [{
|
|
89
|
+
flex: 1,
|
|
90
|
+
backgroundColor: colors.background
|
|
91
|
+
}, safeAreaLayout]
|
|
92
|
+
}, channel.isFrozen && /*#__PURE__*/React.createElement(ChannelFrozenBanner, {
|
|
93
|
+
style: styles.frozenBanner,
|
|
94
|
+
text: STRINGS.LABELS.CHANNEL_MESSAGE_LIST_FROZEN
|
|
95
|
+
}), /*#__PURE__*/React.createElement(ThreadChatFlatList, _extends({}, flatListProps, {
|
|
96
|
+
onTopReached: onTopReached,
|
|
97
|
+
onBottomReached: onBottomReached,
|
|
98
|
+
onScrolledAwayFromBottom: onScrolledAwayFromBottom,
|
|
99
|
+
ref: ref,
|
|
100
|
+
data: messages,
|
|
101
|
+
renderItem: renderItem,
|
|
102
|
+
keyExtractor: messageKeyExtractor,
|
|
103
|
+
contentContainerStyle: [
|
|
104
|
+
// { minHeight: '100%', justifyContent: 'flex-end' },
|
|
105
|
+
channel.isFrozen && styles.frozenListPadding, flatListProps === null || flatListProps === void 0 ? void 0 : flatListProps.contentContainerStyle]
|
|
106
|
+
})), renderNewMessagesButton && /*#__PURE__*/React.createElement(View, {
|
|
107
|
+
style: [styles.newMsgButton, safeAreaLayout]
|
|
108
|
+
}, renderNewMessagesButton({
|
|
109
|
+
visible: newMessages.length > 0 && (hasNext() || scrolledAwayFromBottom),
|
|
110
|
+
onPress: () => onPressNewMessagesButton(),
|
|
111
|
+
newMessages
|
|
112
|
+
})), renderScrollToBottomButton && /*#__PURE__*/React.createElement(View, {
|
|
113
|
+
style: [styles.scrollButton, safeAreaLayout]
|
|
114
|
+
}, renderScrollToBottomButton({
|
|
115
|
+
visible: hasNext() || scrolledAwayFromBottom,
|
|
116
|
+
onPress: () => onPressScrollToBottomButton()
|
|
117
|
+
})));
|
|
118
|
+
};
|
|
119
|
+
const useCreateMessagePressActions = _ref3 => {
|
|
120
|
+
let {
|
|
121
|
+
channel,
|
|
122
|
+
currentUserId,
|
|
123
|
+
onResendFailedMessage,
|
|
124
|
+
onEditMessage,
|
|
125
|
+
onDeleteMessage,
|
|
126
|
+
onPressMediaMessage
|
|
127
|
+
} = _ref3;
|
|
128
|
+
const {
|
|
129
|
+
colors
|
|
130
|
+
} = useUIKitTheme();
|
|
131
|
+
const {
|
|
132
|
+
STRINGS
|
|
133
|
+
} = useLocalization();
|
|
134
|
+
const toast = useToast();
|
|
135
|
+
const {
|
|
136
|
+
openSheet
|
|
137
|
+
} = useBottomSheet();
|
|
138
|
+
const {
|
|
139
|
+
alert
|
|
140
|
+
} = useAlert();
|
|
141
|
+
const {
|
|
142
|
+
clipboardService,
|
|
143
|
+
fileService
|
|
144
|
+
} = usePlatformService();
|
|
145
|
+
const {
|
|
146
|
+
sbOptions
|
|
147
|
+
} = useSendbirdChat();
|
|
148
|
+
const onResendFailure = error => {
|
|
149
|
+
toast.show(STRINGS.TOAST.RESEND_MSG_ERROR, 'error');
|
|
150
|
+
Logger.error(STRINGS.TOAST.RESEND_MSG_ERROR, error);
|
|
151
|
+
};
|
|
152
|
+
const onDeleteFailure = error => {
|
|
153
|
+
toast.show(STRINGS.TOAST.DELETE_MSG_ERROR, 'error');
|
|
154
|
+
Logger.error(STRINGS.TOAST.DELETE_MSG_ERROR, error);
|
|
155
|
+
};
|
|
156
|
+
const onCopyText = message => {
|
|
157
|
+
if (message.isUserMessage()) {
|
|
158
|
+
clipboardService.setString(message.message || '');
|
|
159
|
+
toast.show(STRINGS.TOAST.COPY_OK, 'success');
|
|
160
|
+
}
|
|
161
|
+
};
|
|
162
|
+
const onDownloadFile = message => {
|
|
163
|
+
if (message.isFileMessage()) {
|
|
164
|
+
if (toMegabyte(message.size) > 4) {
|
|
165
|
+
toast.show(STRINGS.TOAST.DOWNLOAD_START, 'success');
|
|
166
|
+
}
|
|
167
|
+
fileService.save({
|
|
168
|
+
fileUrl: message.url,
|
|
169
|
+
fileName: message.name,
|
|
170
|
+
fileType: message.type
|
|
171
|
+
}).then(response => {
|
|
172
|
+
toast.show(STRINGS.TOAST.DOWNLOAD_OK, 'success');
|
|
173
|
+
Logger.log('File saved to', response);
|
|
174
|
+
}).catch(err => {
|
|
175
|
+
toast.show(STRINGS.TOAST.DOWNLOAD_ERROR, 'error');
|
|
176
|
+
Logger.log('File save failure', err);
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
};
|
|
180
|
+
const onOpenFile = message => {
|
|
181
|
+
if (message.isFileMessage()) {
|
|
182
|
+
const fileType = getFileType(message.type || getFileExtension(message.name));
|
|
183
|
+
if (['image', 'video', 'audio'].includes(fileType)) {
|
|
184
|
+
onPressMediaMessage === null || onPressMediaMessage === void 0 ? void 0 : onPressMediaMessage(message, () => onDeleteMessage(message), getAvailableUriFromFileMessage(message));
|
|
185
|
+
} else {
|
|
186
|
+
SBUUtils.openURL(message.url);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
};
|
|
190
|
+
const openSheetForFailedMessage = message => {
|
|
191
|
+
openSheet({
|
|
192
|
+
sheetItems: [{
|
|
193
|
+
title: STRINGS.LABELS.CHANNEL_MESSAGE_FAILED_RETRY,
|
|
194
|
+
onPress: () => onResendFailedMessage(message).catch(onResendFailure)
|
|
195
|
+
}, {
|
|
196
|
+
title: STRINGS.LABELS.CHANNEL_MESSAGE_FAILED_REMOVE,
|
|
197
|
+
titleColor: colors.ui.dialog.default.none.destructive,
|
|
198
|
+
onPress: () => alertForMessageDelete(message)
|
|
199
|
+
}]
|
|
200
|
+
});
|
|
201
|
+
};
|
|
202
|
+
const alertForMessageDelete = message => {
|
|
203
|
+
alert({
|
|
204
|
+
title: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE_CONFIRM_TITLE,
|
|
205
|
+
buttons: [{
|
|
206
|
+
text: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE_CONFIRM_CANCEL
|
|
207
|
+
}, {
|
|
208
|
+
text: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE_CONFIRM_OK,
|
|
209
|
+
style: 'destructive',
|
|
210
|
+
onPress: () => {
|
|
211
|
+
onDeleteMessage(message).catch(onDeleteFailure);
|
|
212
|
+
}
|
|
213
|
+
}]
|
|
214
|
+
});
|
|
215
|
+
};
|
|
216
|
+
return _ref4 => {
|
|
217
|
+
let {
|
|
218
|
+
message
|
|
219
|
+
} = _ref4;
|
|
220
|
+
if (!message.isUserMessage() && !message.isFileMessage()) return {};
|
|
221
|
+
const sheetItems = [];
|
|
222
|
+
const menu = {
|
|
223
|
+
copy: message => ({
|
|
224
|
+
icon: 'copy',
|
|
225
|
+
title: STRINGS.LABELS.CHANNEL_MESSAGE_COPY,
|
|
226
|
+
onPress: () => onCopyText(message)
|
|
227
|
+
}),
|
|
228
|
+
edit: message => ({
|
|
229
|
+
icon: 'edit',
|
|
230
|
+
title: STRINGS.LABELS.CHANNEL_MESSAGE_EDIT,
|
|
231
|
+
onPress: () => onEditMessage(message)
|
|
232
|
+
}),
|
|
233
|
+
delete: message => ({
|
|
234
|
+
disabled: message.threadInfo ? message.threadInfo.replyCount > 0 : undefined,
|
|
235
|
+
icon: 'delete',
|
|
236
|
+
title: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE,
|
|
237
|
+
onPress: () => alertForMessageDelete(message)
|
|
238
|
+
}),
|
|
239
|
+
download: message => ({
|
|
240
|
+
icon: 'download',
|
|
241
|
+
title: STRINGS.LABELS.CHANNEL_MESSAGE_SAVE,
|
|
242
|
+
onPress: () => onDownloadFile(message)
|
|
243
|
+
})
|
|
244
|
+
};
|
|
245
|
+
if (message.isUserMessage()) {
|
|
246
|
+
sheetItems.push(menu.copy(message));
|
|
247
|
+
if (!channel.isEphemeral) {
|
|
248
|
+
if (isMyMessage(message, currentUserId) && message.sendingStatus === 'succeeded') {
|
|
249
|
+
sheetItems.push(menu.edit(message));
|
|
250
|
+
sheetItems.push(menu.delete(message));
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
if (message.isFileMessage()) {
|
|
255
|
+
if (!isVoiceMessage(message)) {
|
|
256
|
+
sheetItems.push(menu.download(message));
|
|
257
|
+
}
|
|
258
|
+
if (!channel.isEphemeral) {
|
|
259
|
+
if (isMyMessage(message, currentUserId) && message.sendingStatus === 'succeeded') {
|
|
260
|
+
sheetItems.push(menu.delete(message));
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
const configs = sbOptions.uikitWithAppInfo.groupChannel.channel;
|
|
265
|
+
const bottomSheetItem = {
|
|
266
|
+
sheetItems,
|
|
267
|
+
HeaderComponent: shouldRenderReaction(channel, channel.isGroupChannel() && (channel.isSuper ? configs.enableReactionsSupergroup : configs.enableReactions)) ? _ref5 => {
|
|
268
|
+
let {
|
|
269
|
+
onClose
|
|
270
|
+
} = _ref5;
|
|
271
|
+
return /*#__PURE__*/React.createElement(ReactionAddons.BottomSheet, {
|
|
272
|
+
message: message,
|
|
273
|
+
channel: channel,
|
|
274
|
+
onClose: onClose
|
|
275
|
+
});
|
|
276
|
+
} : undefined
|
|
277
|
+
};
|
|
278
|
+
switch (true) {
|
|
279
|
+
case message.sendingStatus === 'pending':
|
|
280
|
+
{
|
|
281
|
+
return {
|
|
282
|
+
onPress: undefined,
|
|
283
|
+
onLongPress: undefined,
|
|
284
|
+
bottomSheetItem: undefined
|
|
285
|
+
};
|
|
286
|
+
}
|
|
287
|
+
case message.sendingStatus === 'failed':
|
|
288
|
+
{
|
|
289
|
+
return {
|
|
290
|
+
onPress: () => onResendFailedMessage(message).catch(onResendFailure),
|
|
291
|
+
onLongPress: () => openSheetForFailedMessage(message),
|
|
292
|
+
bottomSheetItem
|
|
293
|
+
};
|
|
294
|
+
}
|
|
295
|
+
case message.isFileMessage():
|
|
296
|
+
{
|
|
297
|
+
return {
|
|
298
|
+
onPress: () => onOpenFile(message),
|
|
299
|
+
onLongPress: () => openSheet(bottomSheetItem),
|
|
300
|
+
bottomSheetItem
|
|
301
|
+
};
|
|
302
|
+
}
|
|
303
|
+
default:
|
|
304
|
+
{
|
|
305
|
+
return {
|
|
306
|
+
onPress: undefined,
|
|
307
|
+
onLongPress: () => openSheet(bottomSheetItem),
|
|
308
|
+
bottomSheetItem
|
|
309
|
+
};
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
};
|
|
313
|
+
};
|
|
314
|
+
const styles = createStyleSheet({
|
|
315
|
+
frozenBanner: {
|
|
316
|
+
position: 'absolute',
|
|
317
|
+
zIndex: 999,
|
|
318
|
+
top: 8,
|
|
319
|
+
left: 8,
|
|
320
|
+
right: 8
|
|
321
|
+
},
|
|
322
|
+
frozenListPadding: {
|
|
323
|
+
paddingBottom: 32
|
|
324
|
+
},
|
|
325
|
+
newMsgButton: {
|
|
326
|
+
position: 'absolute',
|
|
327
|
+
zIndex: 999,
|
|
328
|
+
bottom: 10,
|
|
329
|
+
alignSelf: 'center'
|
|
330
|
+
},
|
|
331
|
+
scrollButton: {
|
|
332
|
+
position: 'absolute',
|
|
333
|
+
zIndex: 998,
|
|
334
|
+
bottom: 10,
|
|
335
|
+
right: 16
|
|
336
|
+
}
|
|
337
|
+
});
|
|
338
|
+
|
|
339
|
+
// NOTE: Due to Generic inference is not working on forwardRef, we need to cast it as typeof ChannelMessageList and implicit `ref` prop
|
|
340
|
+
export default /*#__PURE__*/React.forwardRef(ChannelThreadMessageList);
|
|
341
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","View","useSafeAreaInsets","ChannelFrozenBanner","createStyleSheet","useAlert","useBottomSheet","useToast","useUIKitTheme","Logger","getAvailableUriFromFileMessage","getFileExtension","getFileType","isMyMessage","isVoiceMessage","messageKeyExtractor","shouldRenderReaction","toMegabyte","useFreshCallback","useLocalization","usePlatformService","useSendbirdChat","useUserProfile","SBUUtils","ReactionAddons","ThreadChatFlatList","ChannelThreadMessageList","_ref","ref","searchItem","hasNext","channel","onEditMessage","onDeleteMessage","onResendFailedMessage","onPressMediaMessage","currentUserId","renderNewMessagesButton","renderScrollToBottomButton","renderMessage","messages","newMessages","enableMessageGrouping","onScrolledAwayFromBottom","scrolledAwayFromBottom","onBottomReached","onTopReached","flatListProps","onPressNewMessagesButton","onPressScrollToBottomButton","STRINGS","colors","show","left","right","createMessagePressActions","useCreateMessagePressActions","safeAreaLayout","paddingLeft","paddingRight","renderItem","_ref2","item","index","onPress","onLongPress","bottomSheetItem","message","prevMessage","nextMessage","onShowUserProfile","focused","startingPoint","createdAt","isFirstItem","createElement","style","flex","backgroundColor","background","isFrozen","styles","frozenBanner","text","LABELS","CHANNEL_MESSAGE_LIST_FROZEN","_extends","data","keyExtractor","contentContainerStyle","frozenListPadding","newMsgButton","visible","length","scrollButton","_ref3","toast","openSheet","alert","clipboardService","fileService","sbOptions","onResendFailure","error","TOAST","RESEND_MSG_ERROR","onDeleteFailure","DELETE_MSG_ERROR","onCopyText","isUserMessage","setString","COPY_OK","onDownloadFile","isFileMessage","size","DOWNLOAD_START","save","fileUrl","url","fileName","name","fileType","type","then","response","DOWNLOAD_OK","log","catch","err","DOWNLOAD_ERROR","onOpenFile","includes","openURL","openSheetForFailedMessage","sheetItems","title","CHANNEL_MESSAGE_FAILED_RETRY","CHANNEL_MESSAGE_FAILED_REMOVE","titleColor","ui","dialog","default","none","destructive","alertForMessageDelete","CHANNEL_MESSAGE_DELETE_CONFIRM_TITLE","buttons","CHANNEL_MESSAGE_DELETE_CONFIRM_CANCEL","CHANNEL_MESSAGE_DELETE_CONFIRM_OK","_ref4","menu","copy","icon","CHANNEL_MESSAGE_COPY","edit","CHANNEL_MESSAGE_EDIT","delete","disabled","threadInfo","replyCount","undefined","CHANNEL_MESSAGE_DELETE","download","CHANNEL_MESSAGE_SAVE","push","isEphemeral","sendingStatus","configs","uikitWithAppInfo","groupChannel","HeaderComponent","isGroupChannel","isSuper","enableReactionsSupergroup","enableReactions","_ref5","onClose","BottomSheet","position","zIndex","top","paddingBottom","bottom","alignSelf","forwardRef"],"sources":["index.tsx"],"sourcesContent":["import React, { Ref } from 'react';\nimport { FlatList, FlatListProps, ListRenderItem, View } from 'react-native';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\n\nimport {\n BottomSheetItem,\n ChannelFrozenBanner,\n createStyleSheet,\n useAlert,\n useBottomSheet,\n useToast,\n useUIKitTheme,\n} from '@sendbird/uikit-react-native-foundation';\nimport {\n Logger,\n SendbirdFileMessage,\n SendbirdGroupChannel,\n SendbirdMessage,\n SendbirdOpenChannel,\n SendbirdUserMessage,\n getAvailableUriFromFileMessage,\n getFileExtension,\n getFileType,\n isMyMessage,\n isVoiceMessage,\n messageKeyExtractor,\n shouldRenderReaction,\n toMegabyte,\n useFreshCallback,\n} from '@sendbird/uikit-utils';\n\nimport type { UserProfileContextType } from '../../contexts/UserProfileCtx';\nimport { useLocalization, usePlatformService, useSendbirdChat, useUserProfile } from '../../hooks/useContext';\nimport SBUUtils from '../../libs/SBUUtils';\nimport { ReactionAddons } from '../ReactionAddons';\nimport ThreadChatFlatList from '../ThreadChatFlatList';\n\ntype PressActions = { onPress?: () => void; onLongPress?: () => void; bottomSheetItem?: BottomSheetItem };\ntype HandleableMessage = SendbirdUserMessage | SendbirdFileMessage;\ntype CreateMessagePressActions = (params: { message: SendbirdMessage }) => PressActions;\nexport type ChannelThreadMessageListProps<T extends SendbirdGroupChannel | SendbirdOpenChannel> = {\n enableMessageGrouping: boolean;\n currentUserId?: string;\n channel: T;\n messages: SendbirdMessage[];\n newMessages: SendbirdMessage[];\n searchItem?: { startingPoint: number };\n\n scrolledAwayFromBottom: boolean;\n onScrolledAwayFromBottom: (value: boolean) => void;\n onTopReached: () => void;\n onBottomReached: () => void;\n hasNext: () => boolean;\n\n onPressNewMessagesButton: (animated?: boolean) => void;\n onPressScrollToBottomButton: (animated?: boolean) => void;\n\n onEditMessage: (message: HandleableMessage) => void;\n onDeleteMessage: (message: HandleableMessage) => Promise<void>;\n onResendFailedMessage: (failedMessage: HandleableMessage) => Promise<HandleableMessage | void>;\n onPressMediaMessage?: (message: SendbirdFileMessage, deleteMessage: () => Promise<void>, uri: string) => void;\n\n renderMessage: (props: {\n focused: boolean;\n message: SendbirdMessage;\n prevMessage?: SendbirdMessage;\n nextMessage?: SendbirdMessage;\n onPress?: () => void;\n onLongPress?: () => void;\n onShowUserProfile?: UserProfileContextType['show'];\n channel: T;\n currentUserId?: ChannelThreadMessageListProps<T>['currentUserId'];\n enableMessageGrouping: ChannelThreadMessageListProps<T>['enableMessageGrouping'];\n bottomSheetItem?: BottomSheetItem;\n isFirstItem: boolean;\n }) => React.ReactElement | null;\n renderNewMessagesButton:\n | null\n | ((props: { visible: boolean; onPress: () => void; newMessages: SendbirdMessage[] }) => React.ReactElement | null);\n renderScrollToBottomButton: null | ((props: { visible: boolean; onPress: () => void }) => React.ReactElement | null);\n flatListProps?: Omit<FlatListProps<SendbirdMessage>, 'data' | 'renderItem'>;\n} & {\n ref?: Ref<FlatList<SendbirdMessage>> | undefined;\n};\n\nconst ChannelThreadMessageList = <T extends SendbirdGroupChannel | SendbirdOpenChannel>(\n {\n searchItem,\n hasNext,\n channel,\n onEditMessage,\n onDeleteMessage,\n onResendFailedMessage,\n onPressMediaMessage,\n currentUserId,\n renderNewMessagesButton,\n renderScrollToBottomButton,\n renderMessage,\n messages,\n newMessages,\n enableMessageGrouping,\n onScrolledAwayFromBottom,\n scrolledAwayFromBottom,\n onBottomReached,\n onTopReached,\n flatListProps,\n onPressNewMessagesButton,\n onPressScrollToBottomButton,\n }: ChannelThreadMessageListProps<T>,\n ref: React.ForwardedRef<FlatList<SendbirdMessage>>,\n) => {\n const { STRINGS } = useLocalization();\n const { colors } = useUIKitTheme();\n const { show } = useUserProfile();\n const { left, right } = useSafeAreaInsets();\n const createMessagePressActions = useCreateMessagePressActions({\n channel,\n currentUserId,\n onEditMessage,\n onDeleteMessage,\n onResendFailedMessage,\n onPressMediaMessage,\n });\n\n const safeAreaLayout = { paddingLeft: left, paddingRight: right };\n\n const renderItem: ListRenderItem<SendbirdMessage> = useFreshCallback(({ item, index }) => {\n const { onPress, onLongPress, bottomSheetItem } = createMessagePressActions({ message: item });\n return renderMessage({\n message: item,\n prevMessage: messages[index - 1],\n nextMessage: messages[index + 1],\n onPress,\n onLongPress,\n onShowUserProfile: show,\n enableMessageGrouping,\n channel,\n currentUserId,\n focused: (searchItem?.startingPoint ?? -1) === item.createdAt,\n bottomSheetItem,\n isFirstItem: index === 0,\n });\n });\n\n return (\n <View style={[{ flex: 1, backgroundColor: colors.background }, safeAreaLayout]}>\n {channel.isFrozen && (\n <ChannelFrozenBanner style={styles.frozenBanner} text={STRINGS.LABELS.CHANNEL_MESSAGE_LIST_FROZEN} />\n )}\n <ThreadChatFlatList\n {...flatListProps}\n onTopReached={onTopReached}\n onBottomReached={onBottomReached}\n onScrolledAwayFromBottom={onScrolledAwayFromBottom}\n ref={ref}\n data={messages}\n renderItem={renderItem}\n keyExtractor={messageKeyExtractor}\n contentContainerStyle={[\n // { minHeight: '100%', justifyContent: 'flex-end' },\n channel.isFrozen && styles.frozenListPadding,\n flatListProps?.contentContainerStyle,\n ]}\n />\n {renderNewMessagesButton && (\n <View style={[styles.newMsgButton, safeAreaLayout]}>\n {renderNewMessagesButton({\n visible: newMessages.length > 0 && (hasNext() || scrolledAwayFromBottom),\n onPress: () => onPressNewMessagesButton(),\n newMessages,\n })}\n </View>\n )}\n {renderScrollToBottomButton && (\n <View style={[styles.scrollButton, safeAreaLayout]}>\n {renderScrollToBottomButton({\n visible: hasNext() || scrolledAwayFromBottom,\n onPress: () => onPressScrollToBottomButton(),\n })}\n </View>\n )}\n </View>\n );\n};\n\nconst useCreateMessagePressActions = <T extends SendbirdGroupChannel | SendbirdOpenChannel>({\n channel,\n currentUserId,\n onResendFailedMessage,\n onEditMessage,\n onDeleteMessage,\n onPressMediaMessage,\n}: Pick<\n ChannelThreadMessageListProps<T>,\n 'channel' | 'currentUserId' | 'onEditMessage' | 'onDeleteMessage' | 'onResendFailedMessage' | 'onPressMediaMessage'\n>): CreateMessagePressActions => {\n const { colors } = useUIKitTheme();\n const { STRINGS } = useLocalization();\n const toast = useToast();\n const { openSheet } = useBottomSheet();\n const { alert } = useAlert();\n const { clipboardService, fileService } = usePlatformService();\n const { sbOptions } = useSendbirdChat();\n\n const onResendFailure = (error: Error) => {\n toast.show(STRINGS.TOAST.RESEND_MSG_ERROR, 'error');\n Logger.error(STRINGS.TOAST.RESEND_MSG_ERROR, error);\n };\n\n const onDeleteFailure = (error: Error) => {\n toast.show(STRINGS.TOAST.DELETE_MSG_ERROR, 'error');\n Logger.error(STRINGS.TOAST.DELETE_MSG_ERROR, error);\n };\n\n const onCopyText = (message: HandleableMessage) => {\n if (message.isUserMessage()) {\n clipboardService.setString(message.message || '');\n toast.show(STRINGS.TOAST.COPY_OK, 'success');\n }\n };\n\n const onDownloadFile = (message: HandleableMessage) => {\n if (message.isFileMessage()) {\n if (toMegabyte(message.size) > 4) {\n toast.show(STRINGS.TOAST.DOWNLOAD_START, 'success');\n }\n\n fileService\n .save({ fileUrl: message.url, fileName: message.name, fileType: message.type })\n .then((response) => {\n toast.show(STRINGS.TOAST.DOWNLOAD_OK, 'success');\n Logger.log('File saved to', response);\n })\n .catch((err) => {\n toast.show(STRINGS.TOAST.DOWNLOAD_ERROR, 'error');\n Logger.log('File save failure', err);\n });\n }\n };\n\n const onOpenFile = (message: HandleableMessage) => {\n if (message.isFileMessage()) {\n const fileType = getFileType(message.type || getFileExtension(message.name));\n if (['image', 'video', 'audio'].includes(fileType)) {\n onPressMediaMessage?.(message, () => onDeleteMessage(message), getAvailableUriFromFileMessage(message));\n } else {\n SBUUtils.openURL(message.url);\n }\n }\n };\n\n const openSheetForFailedMessage = (message: HandleableMessage) => {\n openSheet({\n sheetItems: [\n {\n title: STRINGS.LABELS.CHANNEL_MESSAGE_FAILED_RETRY,\n onPress: () => onResendFailedMessage(message).catch(onResendFailure),\n },\n {\n title: STRINGS.LABELS.CHANNEL_MESSAGE_FAILED_REMOVE,\n titleColor: colors.ui.dialog.default.none.destructive,\n onPress: () => alertForMessageDelete(message),\n },\n ],\n });\n };\n\n const alertForMessageDelete = (message: HandleableMessage) => {\n alert({\n title: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE_CONFIRM_TITLE,\n buttons: [\n { text: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE_CONFIRM_CANCEL },\n {\n text: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE_CONFIRM_OK,\n style: 'destructive',\n onPress: () => {\n onDeleteMessage(message).catch(onDeleteFailure);\n },\n },\n ],\n });\n };\n\n return ({ message }) => {\n if (!message.isUserMessage() && !message.isFileMessage()) return {};\n\n const sheetItems: BottomSheetItem['sheetItems'] = [];\n const menu = {\n copy: (message: HandleableMessage) => ({\n icon: 'copy' as const,\n title: STRINGS.LABELS.CHANNEL_MESSAGE_COPY,\n onPress: () => onCopyText(message),\n }),\n edit: (message: HandleableMessage) => ({\n icon: 'edit' as const,\n title: STRINGS.LABELS.CHANNEL_MESSAGE_EDIT,\n onPress: () => onEditMessage(message),\n }),\n delete: (message: HandleableMessage) => ({\n disabled: message.threadInfo ? message.threadInfo.replyCount > 0 : undefined,\n icon: 'delete' as const,\n title: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE,\n onPress: () => alertForMessageDelete(message),\n }),\n download: (message: HandleableMessage) => ({\n icon: 'download' as const,\n title: STRINGS.LABELS.CHANNEL_MESSAGE_SAVE,\n onPress: () => onDownloadFile(message),\n }),\n };\n\n if (message.isUserMessage()) {\n sheetItems.push(menu.copy(message));\n if (!channel.isEphemeral) {\n if (isMyMessage(message, currentUserId) && message.sendingStatus === 'succeeded') {\n sheetItems.push(menu.edit(message));\n sheetItems.push(menu.delete(message));\n }\n }\n }\n\n if (message.isFileMessage()) {\n if (!isVoiceMessage(message)) {\n sheetItems.push(menu.download(message));\n }\n if (!channel.isEphemeral) {\n if (isMyMessage(message, currentUserId) && message.sendingStatus === 'succeeded') {\n sheetItems.push(menu.delete(message));\n }\n }\n }\n\n const configs = sbOptions.uikitWithAppInfo.groupChannel.channel;\n const bottomSheetItem: BottomSheetItem = {\n sheetItems,\n HeaderComponent: shouldRenderReaction(\n channel,\n channel.isGroupChannel() && (channel.isSuper ? configs.enableReactionsSupergroup : configs.enableReactions),\n )\n ? ({ onClose }) => <ReactionAddons.BottomSheet message={message} channel={channel} onClose={onClose} />\n : undefined,\n };\n\n switch (true) {\n case message.sendingStatus === 'pending': {\n return {\n onPress: undefined,\n onLongPress: undefined,\n bottomSheetItem: undefined,\n };\n }\n\n case message.sendingStatus === 'failed': {\n return {\n onPress: () => onResendFailedMessage(message).catch(onResendFailure),\n onLongPress: () => openSheetForFailedMessage(message),\n bottomSheetItem,\n };\n }\n\n case message.isFileMessage(): {\n return {\n onPress: () => onOpenFile(message),\n onLongPress: () => openSheet(bottomSheetItem),\n bottomSheetItem,\n };\n }\n\n default: {\n return {\n onPress: undefined,\n onLongPress: () => openSheet(bottomSheetItem),\n bottomSheetItem,\n };\n }\n }\n };\n};\n\nconst styles = createStyleSheet({\n frozenBanner: {\n position: 'absolute',\n zIndex: 999,\n top: 8,\n left: 8,\n right: 8,\n },\n frozenListPadding: {\n paddingBottom: 32,\n },\n newMsgButton: {\n position: 'absolute',\n zIndex: 999,\n bottom: 10,\n alignSelf: 'center',\n },\n scrollButton: {\n position: 'absolute',\n zIndex: 998,\n bottom: 10,\n right: 16,\n },\n});\n\n// NOTE: Due to Generic inference is not working on forwardRef, we need to cast it as typeof ChannelMessageList and implicit `ref` prop\nexport default React.forwardRef(ChannelThreadMessageList) as typeof ChannelThreadMessageList;\n"],"mappings":"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"}
|
package/lib/module/components/GroupChannelMessageRenderer/GroupChannelMessageParentMessage.js
CHANGED
|
@@ -136,7 +136,7 @@ const GroupChannelMessageParentMessage = _ref => {
|
|
|
136
136
|
paddingLeft: variant === 'outgoing' ? 0 : 12,
|
|
137
137
|
paddingRight: variant === 'outgoing' ? 12 : 0
|
|
138
138
|
}, /*#__PURE__*/React.createElement(PressBox, {
|
|
139
|
-
onPress: () => onPress === null || onPress === void 0 ? void 0 : onPress(parentMessage),
|
|
139
|
+
onPress: () => onPress === null || onPress === void 0 ? void 0 : onPress(parentMessage, childMessage),
|
|
140
140
|
style: styles.senderLabel
|
|
141
141
|
}, /*#__PURE__*/React.createElement(Icon, {
|
|
142
142
|
icon: 'reply-filled',
|
|
@@ -153,7 +153,7 @@ const GroupChannelMessageParentMessage = _ref => {
|
|
|
153
153
|
justifyContent: variant === 'outgoing' ? 'flex-end' : 'flex-start',
|
|
154
154
|
style: styles.messageContainer
|
|
155
155
|
}, /*#__PURE__*/React.createElement(PressBox, {
|
|
156
|
-
onPress: () => onPress === null || onPress === void 0 ? void 0 : onPress(parentMessage)
|
|
156
|
+
onPress: () => onPress === null || onPress === void 0 ? void 0 : onPress(parentMessage, childMessage)
|
|
157
157
|
}, parentMessageComponent)));
|
|
158
158
|
};
|
|
159
159
|
const styles = createStyleSheet({
|
package/lib/module/components/GroupChannelMessageRenderer/GroupChannelMessageParentMessage.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useContext","useEffect","useState","Box","Icon","ImageWithPlaceholder","PressBox","Text","VideoThumbnail","createStyleSheet","useUIKitTheme","getFileIconFromMessageType","getMessageType","getThumbnailUriFromFileMessage","truncate","useIIFE","GroupChannelContexts","useLocalization","usePlatformService","useSendbirdChat","GroupChannelMessageParentMessage","_ref","variant","channel","message","childMessage","onPress","currentUser","groupChannelPubSub","PubSub","select","colors","palette","STRINGS","mediaService","parentMessage","setParentMessage","type","subscribe","_ref2","data","updatedParent","messages","find","it","messageId","renderMessageWithText","createElement","style","styles","bubbleContainer","backgroundColor","light","background100","dark","background400","body3","color","onBackground03","suppressHighlighting","numberOfLines","ellipsizeMode","renderFileMessageAsVideoThumbnail","url","image","iconSize","source","fetchThumbnailFromVideoSource","uri","getVideoThumbnail","timeMills","renderFileMessageAsPreview","renderFileMessageAsDownloadable","name","icon","size","containerStyle","fileIcon","mode","maxLen","parentMessageComponent","messageOffsetTimestamp","createdAt","LABELS","MESSAGE_UNAVAILABLE","VOICE_MESSAGE","alignItems","paddingLeft","paddingRight","senderLabel","marginRight","caption1","REPLY_FROM_SENDER_TO_RECEIVER","userId","flexDirection","justifyContent","messageContainer","opacity","marginTop","marginBottom","maxWidth","overflow","borderRadius","paddingHorizontal","paddingBottom","paddingTop","width","height"],"sources":["GroupChannelMessageParentMessage.tsx"],"sourcesContent":["import React, { useContext, useEffect, useState } from 'react';\n\nimport {\n Box,\n Icon,\n ImageWithPlaceholder,\n PressBox,\n Text,\n VideoThumbnail,\n createStyleSheet,\n useUIKitTheme,\n} from '@sendbird/uikit-react-native-foundation';\nimport {\n SendbirdFileMessage,\n SendbirdGroupChannel,\n SendbirdMessage,\n SendbirdUserMessage,\n getFileIconFromMessageType,\n getMessageType,\n getThumbnailUriFromFileMessage,\n truncate,\n useIIFE,\n} from '@sendbird/uikit-utils';\n\nimport { GroupChannelContexts } from '../../domain/groupChannel/module/moduleContext';\nimport { useLocalization, usePlatformService, useSendbirdChat } from '../../hooks/useContext';\n\ntype Props = {\n variant: 'outgoing' | 'incoming';\n channel: SendbirdGroupChannel;\n message: SendbirdUserMessage | SendbirdFileMessage;\n childMessage: SendbirdUserMessage | SendbirdFileMessage;\n onPress?: (message: SendbirdMessage) => void;\n};\n\nconst GroupChannelMessageParentMessage = ({ variant, channel, message, childMessage, onPress }: Props) => {\n const { currentUser } = useSendbirdChat();\n const groupChannelPubSub = useContext(GroupChannelContexts.PubSub);\n const { select, colors, palette } = useUIKitTheme();\n const { STRINGS } = useLocalization();\n const { mediaService } = usePlatformService();\n\n const [parentMessage, setParentMessage] = useState(() => message);\n const type = getMessageType(parentMessage);\n\n useEffect(() => {\n return groupChannelPubSub.subscribe(({ type, data }) => {\n if (type === 'MESSAGES_UPDATED') {\n const updatedParent = data.messages.find((it): it is SendbirdUserMessage | SendbirdFileMessage => {\n return it.messageId === parentMessage.messageId;\n });\n if (updatedParent) setParentMessage(updatedParent);\n }\n });\n }, []);\n\n const renderMessageWithText = (message: string) => {\n return (\n <Box\n style={styles.bubbleContainer}\n backgroundColor={select({ light: palette.background100, dark: palette.background400 })}\n >\n <Text body3 color={colors.onBackground03} suppressHighlighting numberOfLines={2} ellipsizeMode={'tail'}>\n {message}\n </Text>\n </Box>\n );\n };\n\n const renderFileMessageAsVideoThumbnail = (url: string) => {\n return (\n <VideoThumbnail\n style={styles.image}\n iconSize={18}\n source={url}\n fetchThumbnailFromVideoSource={(uri) => mediaService.getVideoThumbnail({ url: uri, timeMills: 1000 })}\n />\n );\n };\n const renderFileMessageAsPreview = (url: string) => {\n return <ImageWithPlaceholder style={styles.image} source={{ uri: url }} />;\n };\n const renderFileMessageAsDownloadable = (name: string) => {\n return (\n <Box\n style={styles.bubbleContainer}\n backgroundColor={select({ light: palette.background100, dark: palette.background400 })}\n >\n <Icon\n icon={getFileIconFromMessageType(type)}\n size={16}\n color={colors.onBackground03}\n containerStyle={styles.fileIcon}\n />\n <Text body3 color={colors.onBackground03} numberOfLines={1} ellipsizeMode={'middle'}>\n {truncate(name, { mode: 'mid', maxLen: 20 })}\n </Text>\n </Box>\n );\n };\n\n const parentMessageComponent = useIIFE(() => {\n if (channel.messageOffsetTimestamp > parentMessage.createdAt) {\n return renderMessageWithText(STRINGS.LABELS.MESSAGE_UNAVAILABLE);\n }\n\n switch (type) {\n case 'user':\n case 'user.opengraph': {\n return renderMessageWithText((parentMessage as SendbirdUserMessage).message);\n }\n case 'file':\n case 'file.audio': {\n return renderFileMessageAsDownloadable((parentMessage as SendbirdFileMessage).name);\n }\n case 'file.video': {\n return renderFileMessageAsVideoThumbnail(getThumbnailUriFromFileMessage(parentMessage as SendbirdFileMessage));\n }\n case 'file.image': {\n return renderFileMessageAsPreview(getThumbnailUriFromFileMessage(parentMessage as SendbirdFileMessage));\n }\n case 'file.voice': {\n return renderMessageWithText(STRINGS.LABELS.VOICE_MESSAGE);\n }\n default: {\n return null;\n }\n }\n });\n\n return (\n <Box>\n <Box\n alignItems={variant === 'outgoing' ? 'flex-end' : 'flex-start'}\n paddingLeft={variant === 'outgoing' ? 0 : 12}\n paddingRight={variant === 'outgoing' ? 12 : 0}\n >\n <PressBox onPress={() => onPress?.(parentMessage)} style={styles.senderLabel}>\n <Icon icon={'reply-filled'} size={13} color={colors.onBackground03} containerStyle={{ marginRight: 4 }} />\n <Text caption1 color={colors.onBackground03}>\n {STRINGS.LABELS.REPLY_FROM_SENDER_TO_RECEIVER(childMessage, parentMessage, currentUser?.userId)}\n </Text>\n </PressBox>\n </Box>\n <Box\n flexDirection={'row'}\n justifyContent={variant === 'outgoing' ? 'flex-end' : 'flex-start'}\n style={styles.messageContainer}\n >\n <PressBox onPress={() => onPress?.(parentMessage)}>{parentMessageComponent}</PressBox>\n </Box>\n </Box>\n );\n};\n\nconst styles = createStyleSheet({\n messageContainer: {\n opacity: 0.5,\n marginTop: 4,\n marginBottom: -6,\n },\n bubbleContainer: {\n maxWidth: 220,\n overflow: 'hidden',\n flexDirection: 'row',\n alignItems: 'center',\n borderRadius: 16,\n paddingHorizontal: 12,\n paddingBottom: 12,\n paddingTop: 6,\n },\n image: {\n width: 156,\n height: 104,\n borderRadius: 16,\n overflow: 'hidden',\n },\n fileIcon: {\n width: 16,\n height: 16,\n borderRadius: 10,\n marginRight: 4,\n marginTop: 2,\n },\n senderLabel: {\n flexDirection: 'row',\n },\n});\n\nexport default GroupChannelMessageParentMessage;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["React","useContext","useEffect","useState","Box","Icon","ImageWithPlaceholder","PressBox","Text","VideoThumbnail","createStyleSheet","useUIKitTheme","getFileIconFromMessageType","getMessageType","getThumbnailUriFromFileMessage","truncate","useIIFE","GroupChannelContexts","useLocalization","usePlatformService","useSendbirdChat","GroupChannelMessageParentMessage","_ref","variant","channel","message","childMessage","onPress","currentUser","groupChannelPubSub","PubSub","select","colors","palette","STRINGS","mediaService","parentMessage","setParentMessage","type","subscribe","_ref2","data","updatedParent","messages","find","it","messageId","renderMessageWithText","createElement","style","styles","bubbleContainer","backgroundColor","light","background100","dark","background400","body3","color","onBackground03","suppressHighlighting","numberOfLines","ellipsizeMode","renderFileMessageAsVideoThumbnail","url","image","iconSize","source","fetchThumbnailFromVideoSource","uri","getVideoThumbnail","timeMills","renderFileMessageAsPreview","renderFileMessageAsDownloadable","name","icon","size","containerStyle","fileIcon","mode","maxLen","parentMessageComponent","messageOffsetTimestamp","createdAt","LABELS","MESSAGE_UNAVAILABLE","VOICE_MESSAGE","alignItems","paddingLeft","paddingRight","senderLabel","marginRight","caption1","REPLY_FROM_SENDER_TO_RECEIVER","userId","flexDirection","justifyContent","messageContainer","opacity","marginTop","marginBottom","maxWidth","overflow","borderRadius","paddingHorizontal","paddingBottom","paddingTop","width","height"],"sources":["GroupChannelMessageParentMessage.tsx"],"sourcesContent":["import React, { useContext, useEffect, useState } from 'react';\n\nimport {\n Box,\n Icon,\n ImageWithPlaceholder,\n PressBox,\n Text,\n VideoThumbnail,\n createStyleSheet,\n useUIKitTheme,\n} from '@sendbird/uikit-react-native-foundation';\nimport {\n SendbirdFileMessage,\n SendbirdGroupChannel,\n SendbirdMessage,\n SendbirdUserMessage,\n getFileIconFromMessageType,\n getMessageType,\n getThumbnailUriFromFileMessage,\n truncate,\n useIIFE,\n} from '@sendbird/uikit-utils';\n\nimport { GroupChannelContexts } from '../../domain/groupChannel/module/moduleContext';\nimport { useLocalization, usePlatformService, useSendbirdChat } from '../../hooks/useContext';\n\ntype Props = {\n variant: 'outgoing' | 'incoming';\n channel: SendbirdGroupChannel;\n message: SendbirdUserMessage | SendbirdFileMessage;\n childMessage: SendbirdUserMessage | SendbirdFileMessage;\n onPress?: (parentMessage: SendbirdMessage, childMessage: SendbirdUserMessage | SendbirdFileMessage) => void;\n};\n\nconst GroupChannelMessageParentMessage = ({ variant, channel, message, childMessage, onPress }: Props) => {\n const { currentUser } = useSendbirdChat();\n const groupChannelPubSub = useContext(GroupChannelContexts.PubSub);\n const { select, colors, palette } = useUIKitTheme();\n const { STRINGS } = useLocalization();\n const { mediaService } = usePlatformService();\n\n const [parentMessage, setParentMessage] = useState(() => message);\n const type = getMessageType(parentMessage);\n\n useEffect(() => {\n return groupChannelPubSub.subscribe(({ type, data }) => {\n if (type === 'MESSAGES_UPDATED') {\n const updatedParent = data.messages.find((it): it is SendbirdUserMessage | SendbirdFileMessage => {\n return it.messageId === parentMessage.messageId;\n });\n if (updatedParent) setParentMessage(updatedParent);\n }\n });\n }, []);\n\n const renderMessageWithText = (message: string) => {\n return (\n <Box\n style={styles.bubbleContainer}\n backgroundColor={select({ light: palette.background100, dark: palette.background400 })}\n >\n <Text body3 color={colors.onBackground03} suppressHighlighting numberOfLines={2} ellipsizeMode={'tail'}>\n {message}\n </Text>\n </Box>\n );\n };\n\n const renderFileMessageAsVideoThumbnail = (url: string) => {\n return (\n <VideoThumbnail\n style={styles.image}\n iconSize={18}\n source={url}\n fetchThumbnailFromVideoSource={(uri) => mediaService.getVideoThumbnail({ url: uri, timeMills: 1000 })}\n />\n );\n };\n const renderFileMessageAsPreview = (url: string) => {\n return <ImageWithPlaceholder style={styles.image} source={{ uri: url }} />;\n };\n const renderFileMessageAsDownloadable = (name: string) => {\n return (\n <Box\n style={styles.bubbleContainer}\n backgroundColor={select({ light: palette.background100, dark: palette.background400 })}\n >\n <Icon\n icon={getFileIconFromMessageType(type)}\n size={16}\n color={colors.onBackground03}\n containerStyle={styles.fileIcon}\n />\n <Text body3 color={colors.onBackground03} numberOfLines={1} ellipsizeMode={'middle'}>\n {truncate(name, { mode: 'mid', maxLen: 20 })}\n </Text>\n </Box>\n );\n };\n\n const parentMessageComponent = useIIFE(() => {\n if (channel.messageOffsetTimestamp > parentMessage.createdAt) {\n return renderMessageWithText(STRINGS.LABELS.MESSAGE_UNAVAILABLE);\n }\n\n switch (type) {\n case 'user':\n case 'user.opengraph': {\n return renderMessageWithText((parentMessage as SendbirdUserMessage).message);\n }\n case 'file':\n case 'file.audio': {\n return renderFileMessageAsDownloadable((parentMessage as SendbirdFileMessage).name);\n }\n case 'file.video': {\n return renderFileMessageAsVideoThumbnail(getThumbnailUriFromFileMessage(parentMessage as SendbirdFileMessage));\n }\n case 'file.image': {\n return renderFileMessageAsPreview(getThumbnailUriFromFileMessage(parentMessage as SendbirdFileMessage));\n }\n case 'file.voice': {\n return renderMessageWithText(STRINGS.LABELS.VOICE_MESSAGE);\n }\n default: {\n return null;\n }\n }\n });\n\n return (\n <Box>\n <Box\n alignItems={variant === 'outgoing' ? 'flex-end' : 'flex-start'}\n paddingLeft={variant === 'outgoing' ? 0 : 12}\n paddingRight={variant === 'outgoing' ? 12 : 0}\n >\n <PressBox onPress={() => onPress?.(parentMessage, childMessage)} style={styles.senderLabel}>\n <Icon icon={'reply-filled'} size={13} color={colors.onBackground03} containerStyle={{ marginRight: 4 }} />\n <Text caption1 color={colors.onBackground03}>\n {STRINGS.LABELS.REPLY_FROM_SENDER_TO_RECEIVER(childMessage, parentMessage, currentUser?.userId)}\n </Text>\n </PressBox>\n </Box>\n <Box\n flexDirection={'row'}\n justifyContent={variant === 'outgoing' ? 'flex-end' : 'flex-start'}\n style={styles.messageContainer}\n >\n <PressBox onPress={() => onPress?.(parentMessage, childMessage)}>{parentMessageComponent}</PressBox>\n </Box>\n </Box>\n );\n};\n\nconst styles = createStyleSheet({\n messageContainer: {\n opacity: 0.5,\n marginTop: 4,\n marginBottom: -6,\n },\n bubbleContainer: {\n maxWidth: 220,\n overflow: 'hidden',\n flexDirection: 'row',\n alignItems: 'center',\n borderRadius: 16,\n paddingHorizontal: 12,\n paddingBottom: 12,\n paddingTop: 6,\n },\n image: {\n width: 156,\n height: 104,\n borderRadius: 16,\n overflow: 'hidden',\n },\n fileIcon: {\n width: 16,\n height: 16,\n borderRadius: 10,\n marginRight: 4,\n marginTop: 2,\n },\n senderLabel: {\n flexDirection: 'row',\n },\n});\n\nexport default GroupChannelMessageParentMessage;\n"],"mappings":"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"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Avatar, Box, Icon, PressBox, Text, createStyleSheet, useUIKitTheme } from '@sendbird/uikit-react-native-foundation';
|
|
3
|
+
import { useLocalization } from '../../hooks/useContext';
|
|
4
|
+
const AVATAR_LIMIT = 5;
|
|
5
|
+
const createRepliedUserAvatars = mostRepliedUsers => {
|
|
6
|
+
if (!mostRepliedUsers || mostRepliedUsers.length === 0) return null;
|
|
7
|
+
const {
|
|
8
|
+
palette
|
|
9
|
+
} = useUIKitTheme();
|
|
10
|
+
return mostRepliedUsers.slice(0, AVATAR_LIMIT).map((user, index) => {
|
|
11
|
+
if (index < AVATAR_LIMIT - 1) {
|
|
12
|
+
return /*#__PURE__*/React.createElement(Box, {
|
|
13
|
+
style: styles.avatarContainer,
|
|
14
|
+
key: index
|
|
15
|
+
}, /*#__PURE__*/React.createElement(Avatar, {
|
|
16
|
+
size: 20,
|
|
17
|
+
uri: user === null || user === void 0 ? void 0 : user.profileUrl
|
|
18
|
+
}));
|
|
19
|
+
} else {
|
|
20
|
+
return /*#__PURE__*/React.createElement(Box, {
|
|
21
|
+
style: styles.avatarContainer,
|
|
22
|
+
key: index
|
|
23
|
+
}, /*#__PURE__*/React.createElement(Avatar, {
|
|
24
|
+
size: 20,
|
|
25
|
+
uri: user === null || user === void 0 ? void 0 : user.profileUrl
|
|
26
|
+
}), /*#__PURE__*/React.createElement(Box, {
|
|
27
|
+
style: styles.avatarOverlay,
|
|
28
|
+
backgroundColor: palette.overlay01
|
|
29
|
+
}, /*#__PURE__*/React.createElement(Icon, {
|
|
30
|
+
icon: 'plus',
|
|
31
|
+
size: 14,
|
|
32
|
+
style: styles.plusIcon,
|
|
33
|
+
color: 'white'
|
|
34
|
+
})));
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
};
|
|
38
|
+
const GroupChannelMessageReplyInfo = _ref => {
|
|
39
|
+
let {
|
|
40
|
+
channel,
|
|
41
|
+
message,
|
|
42
|
+
onPress
|
|
43
|
+
} = _ref;
|
|
44
|
+
const {
|
|
45
|
+
STRINGS
|
|
46
|
+
} = useLocalization();
|
|
47
|
+
const {
|
|
48
|
+
select,
|
|
49
|
+
palette
|
|
50
|
+
} = useUIKitTheme();
|
|
51
|
+
if (!channel || !message.threadInfo || !message.threadInfo.replyCount) return null;
|
|
52
|
+
const replyCountText = STRINGS.GROUP_CHANNEL_THREAD.REPLY_COUNT(message.threadInfo.replyCount || 0, 99);
|
|
53
|
+
const onPressReply = () => {
|
|
54
|
+
onPress === null || onPress === void 0 ? void 0 : onPress(message);
|
|
55
|
+
};
|
|
56
|
+
return /*#__PURE__*/React.createElement(PressBox, {
|
|
57
|
+
onPress: onPressReply,
|
|
58
|
+
style: styles.replyContainer
|
|
59
|
+
}, createRepliedUserAvatars(message.threadInfo.mostRepliedUsers), /*#__PURE__*/React.createElement(Text, {
|
|
60
|
+
caption3: true,
|
|
61
|
+
color: select({
|
|
62
|
+
light: palette.primary300,
|
|
63
|
+
dark: palette.primary200
|
|
64
|
+
})
|
|
65
|
+
}, replyCountText));
|
|
66
|
+
};
|
|
67
|
+
const styles = createStyleSheet({
|
|
68
|
+
replyContainer: {
|
|
69
|
+
flexDirection: 'row',
|
|
70
|
+
alignItems: 'center'
|
|
71
|
+
},
|
|
72
|
+
avatarContainer: {
|
|
73
|
+
marginRight: 4
|
|
74
|
+
},
|
|
75
|
+
avatarOverlay: {
|
|
76
|
+
position: 'absolute',
|
|
77
|
+
top: 0,
|
|
78
|
+
left: 0,
|
|
79
|
+
right: 0,
|
|
80
|
+
bottom: 0,
|
|
81
|
+
borderRadius: 10
|
|
82
|
+
},
|
|
83
|
+
plusIcon: {
|
|
84
|
+
position: 'absolute',
|
|
85
|
+
top: 3,
|
|
86
|
+
left: 3,
|
|
87
|
+
right: 0,
|
|
88
|
+
bottom: 0
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
export default /*#__PURE__*/React.memo(GroupChannelMessageReplyInfo);
|
|
92
|
+
//# sourceMappingURL=GroupChannelMessageReplyInfo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","Avatar","Box","Icon","PressBox","Text","createStyleSheet","useUIKitTheme","useLocalization","AVATAR_LIMIT","createRepliedUserAvatars","mostRepliedUsers","length","palette","slice","map","user","index","createElement","style","styles","avatarContainer","key","size","uri","profileUrl","avatarOverlay","backgroundColor","overlay01","icon","plusIcon","color","GroupChannelMessageReplyInfo","_ref","channel","message","onPress","STRINGS","select","threadInfo","replyCount","replyCountText","GROUP_CHANNEL_THREAD","REPLY_COUNT","onPressReply","replyContainer","caption3","light","primary300","dark","primary200","flexDirection","alignItems","marginRight","position","top","left","right","bottom","borderRadius","memo"],"sources":["GroupChannelMessageReplyInfo.tsx"],"sourcesContent":["import React from 'react';\n\nimport { User } from '@sendbird/chat';\nimport {\n Avatar,\n Box,\n Icon,\n PressBox,\n Text,\n createStyleSheet,\n useUIKitTheme,\n} from '@sendbird/uikit-react-native-foundation';\nimport { SendbirdFileMessage, SendbirdGroupChannel, SendbirdMessage, SendbirdUserMessage } from '@sendbird/uikit-utils';\n\nimport { useLocalization } from '../../hooks/useContext';\n\nconst AVATAR_LIMIT = 5;\n\ntype Props = {\n channel: SendbirdGroupChannel;\n message: SendbirdMessage;\n onPress?: (message: SendbirdUserMessage | SendbirdFileMessage) => void;\n};\n\nconst createRepliedUserAvatars = (mostRepliedUsers: User[]) => {\n if (!mostRepliedUsers || mostRepliedUsers.length === 0) return null;\n\n const { palette } = useUIKitTheme();\n\n return mostRepliedUsers.slice(0, AVATAR_LIMIT).map((user, index) => {\n if (index < AVATAR_LIMIT - 1) {\n return (\n <Box style={styles.avatarContainer} key={index}>\n <Avatar size={20} uri={user?.profileUrl}></Avatar>\n </Box>\n );\n } else {\n return (\n <Box style={styles.avatarContainer} key={index}>\n <Avatar size={20} uri={user?.profileUrl}></Avatar>\n <Box style={styles.avatarOverlay} backgroundColor={palette.overlay01}>\n <Icon icon={'plus'} size={14} style={styles.plusIcon} color={'white'} />\n </Box>\n </Box>\n );\n }\n });\n};\n\nconst GroupChannelMessageReplyInfo = ({ channel, message, onPress }: Props) => {\n const { STRINGS } = useLocalization();\n const { select, palette } = useUIKitTheme();\n\n if (!channel || !message.threadInfo || !message.threadInfo.replyCount) return null;\n\n const replyCountText = STRINGS.GROUP_CHANNEL_THREAD.REPLY_COUNT(message.threadInfo.replyCount || 0, 99);\n const onPressReply = () => {\n onPress?.(message as SendbirdUserMessage | SendbirdFileMessage);\n };\n\n return (\n <PressBox onPress={onPressReply} style={styles.replyContainer}>\n {createRepliedUserAvatars(message.threadInfo.mostRepliedUsers)}\n <Text caption3 color={select({ light: palette.primary300, dark: palette.primary200 })}>\n {replyCountText}\n </Text>\n </PressBox>\n );\n};\n\nconst styles = createStyleSheet({\n replyContainer: {\n flexDirection: 'row',\n alignItems: 'center',\n },\n avatarContainer: {\n marginRight: 4,\n },\n avatarOverlay: {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n borderRadius: 10,\n },\n plusIcon: {\n position: 'absolute',\n top: 3,\n left: 3,\n right: 0,\n bottom: 0,\n },\n});\n\nexport default React.memo(GroupChannelMessageReplyInfo);\n"],"mappings":"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"}
|