@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,19 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { StyleSheet, View } from 'react-native';
|
|
3
|
+
import TypedPlaceholder from '../../../components/TypedPlaceholder';
|
|
4
|
+
const GroupChannelThreadStatusLoading = () => {
|
|
5
|
+
return /*#__PURE__*/React.createElement(View, {
|
|
6
|
+
style: styles.container
|
|
7
|
+
}, /*#__PURE__*/React.createElement(TypedPlaceholder, {
|
|
8
|
+
type: 'loading'
|
|
9
|
+
}));
|
|
10
|
+
};
|
|
11
|
+
const styles = StyleSheet.create({
|
|
12
|
+
container: {
|
|
13
|
+
flex: 1,
|
|
14
|
+
justifyContent: 'center',
|
|
15
|
+
alignItems: 'center'
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
export default GroupChannelThreadStatusLoading;
|
|
19
|
+
//# sourceMappingURL=GroupChannelThreadStatusLoading.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","StyleSheet","View","TypedPlaceholder","GroupChannelThreadStatusLoading","createElement","style","styles","container","type","create","flex","justifyContent","alignItems"],"sources":["GroupChannelThreadStatusLoading.tsx"],"sourcesContent":["import React from 'react';\nimport { StyleSheet, View } from 'react-native';\n\nimport TypedPlaceholder from '../../../components/TypedPlaceholder';\n\nconst GroupChannelThreadStatusLoading = () => {\n return (\n <View style={styles.container}>\n <TypedPlaceholder type={'loading'} />\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: { flex: 1, justifyContent: 'center', alignItems: 'center' },\n});\n\nexport default GroupChannelThreadStatusLoading;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,UAAU,EAAEC,IAAI,QAAQ,cAAc;AAE/C,OAAOC,gBAAgB,MAAM,sCAAsC;AAEnE,MAAMC,+BAA+B,GAAGA,CAAA,KAAM;EAC5C,oBACEJ,KAAA,CAAAK,aAAA,CAACH,IAAI;IAACI,KAAK,EAAEC,MAAM,CAACC;EAAU,gBAC5BR,KAAA,CAAAK,aAAA,CAACF,gBAAgB;IAACM,IAAI,EAAE;EAAU,EAAG,CAChC;AAEX,CAAC;AAED,MAAMF,MAAM,GAAGN,UAAU,CAACS,MAAM,CAAC;EAC/BF,SAAS,EAAE;IAAEG,IAAI,EAAE,CAAC;IAAEC,cAAc,EAAE,QAAQ;IAAEC,UAAU,EAAE;EAAS;AACvE,CAAC,CAAC;AAEF,eAAeT,+BAA+B"}
|
package/lib/module/domain/groupChannelThread/component/GroupChannelThreadSuggestedMentionList.js
ADDED
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
import React, { useContext } from 'react';
|
|
2
|
+
import { Pressable, ScrollView, View, useWindowDimensions } from 'react-native';
|
|
3
|
+
import { useSafeAreaInsets } from 'react-native-safe-area-context';
|
|
4
|
+
import { Avatar, Divider, Icon, Text, createStyleSheet, useHeaderStyle, useUIKitTheme } from '@sendbird/uikit-react-native-foundation';
|
|
5
|
+
import { conditionChaining } from '@sendbird/uikit-utils';
|
|
6
|
+
import { useLocalization, useSendbirdChat } from '../../../hooks/useContext';
|
|
7
|
+
import useKeyboardStatus from '../../../hooks/useKeyboardStatus';
|
|
8
|
+
import useMentionSuggestion from '../../../hooks/useMentionSuggestion';
|
|
9
|
+
import { GroupChannelThreadContexts } from '../module/moduleContext';
|
|
10
|
+
const GroupChannelThreadSuggestedMentionList = _ref => {
|
|
11
|
+
let {
|
|
12
|
+
text,
|
|
13
|
+
selection,
|
|
14
|
+
inputHeight,
|
|
15
|
+
bottomInset,
|
|
16
|
+
onPressToMention,
|
|
17
|
+
mentionedUsers
|
|
18
|
+
} = _ref;
|
|
19
|
+
const {
|
|
20
|
+
width: screenWidth,
|
|
21
|
+
height: screenHeight
|
|
22
|
+
} = useWindowDimensions();
|
|
23
|
+
const {
|
|
24
|
+
channel
|
|
25
|
+
} = useContext(GroupChannelThreadContexts.Fragment);
|
|
26
|
+
const {
|
|
27
|
+
sdk,
|
|
28
|
+
mentionManager
|
|
29
|
+
} = useSendbirdChat();
|
|
30
|
+
const {
|
|
31
|
+
STRINGS
|
|
32
|
+
} = useLocalization();
|
|
33
|
+
const {
|
|
34
|
+
colors
|
|
35
|
+
} = useUIKitTheme();
|
|
36
|
+
const {
|
|
37
|
+
topInset
|
|
38
|
+
} = useHeaderStyle();
|
|
39
|
+
const {
|
|
40
|
+
left,
|
|
41
|
+
right
|
|
42
|
+
} = useSafeAreaInsets();
|
|
43
|
+
const keyboard = useKeyboardStatus();
|
|
44
|
+
const {
|
|
45
|
+
members,
|
|
46
|
+
reset,
|
|
47
|
+
searchStringRange,
|
|
48
|
+
searchLimited
|
|
49
|
+
} = useMentionSuggestion({
|
|
50
|
+
sdk,
|
|
51
|
+
text,
|
|
52
|
+
selection,
|
|
53
|
+
channel,
|
|
54
|
+
mentionedUsers
|
|
55
|
+
});
|
|
56
|
+
const isLandscape = screenWidth > screenHeight;
|
|
57
|
+
const isShortened = isLandscape && keyboard.visible;
|
|
58
|
+
const canRenderMembers = members.length > 0;
|
|
59
|
+
const maxHeight = isShortened ? screenHeight - (topInset + inputHeight + keyboard.height) : styles.suggestion.height;
|
|
60
|
+
const renderLimitGuide = () => {
|
|
61
|
+
return /*#__PURE__*/React.createElement(View, {
|
|
62
|
+
style: [styles.searchLimited, {
|
|
63
|
+
borderTopColor: colors.onBackground04
|
|
64
|
+
}]
|
|
65
|
+
}, /*#__PURE__*/React.createElement(Icon, {
|
|
66
|
+
icon: 'info',
|
|
67
|
+
size: 20,
|
|
68
|
+
containerStyle: {
|
|
69
|
+
marginRight: 4
|
|
70
|
+
},
|
|
71
|
+
color: colors.onBackground02
|
|
72
|
+
}), /*#__PURE__*/React.createElement(Text, {
|
|
73
|
+
body3: true,
|
|
74
|
+
color: colors.onBackground02
|
|
75
|
+
}, STRINGS.GROUP_CHANNEL_THREAD.MENTION_LIMITED(mentionManager.config.mentionLimit)));
|
|
76
|
+
};
|
|
77
|
+
const renderMembers = () => {
|
|
78
|
+
return /*#__PURE__*/React.createElement(View, null, members.map(member => {
|
|
79
|
+
return /*#__PURE__*/React.createElement(Pressable, {
|
|
80
|
+
onPress: () => {
|
|
81
|
+
onPressToMention(member, searchStringRange);
|
|
82
|
+
reset();
|
|
83
|
+
},
|
|
84
|
+
key: member.userId,
|
|
85
|
+
style: styles.userContainer
|
|
86
|
+
}, /*#__PURE__*/React.createElement(Avatar, {
|
|
87
|
+
size: 28,
|
|
88
|
+
uri: member.profileUrl,
|
|
89
|
+
containerStyle: styles.userAvatar
|
|
90
|
+
}), /*#__PURE__*/React.createElement(View, {
|
|
91
|
+
style: styles.userInfo
|
|
92
|
+
}, /*#__PURE__*/React.createElement(Text, {
|
|
93
|
+
body2: true,
|
|
94
|
+
color: colors.onBackground01,
|
|
95
|
+
numberOfLines: 1,
|
|
96
|
+
style: styles.userNickname
|
|
97
|
+
}, member.nickname || STRINGS.LABELS.USER_NO_NAME), /*#__PURE__*/React.createElement(Text, {
|
|
98
|
+
body3: true,
|
|
99
|
+
color: colors.onBackground03,
|
|
100
|
+
numberOfLines: 1,
|
|
101
|
+
style: styles.userId
|
|
102
|
+
}, member.userId), /*#__PURE__*/React.createElement(Divider, {
|
|
103
|
+
style: {
|
|
104
|
+
position: 'absolute',
|
|
105
|
+
bottom: 0
|
|
106
|
+
}
|
|
107
|
+
})));
|
|
108
|
+
}));
|
|
109
|
+
};
|
|
110
|
+
return /*#__PURE__*/React.createElement(Pressable, {
|
|
111
|
+
onPress: reset,
|
|
112
|
+
pointerEvents: canRenderMembers ? 'auto' : 'none',
|
|
113
|
+
style: [styles.container, {
|
|
114
|
+
bottom: inputHeight + bottomInset
|
|
115
|
+
}]
|
|
116
|
+
}, /*#__PURE__*/React.createElement(ScrollView, {
|
|
117
|
+
bounces: false,
|
|
118
|
+
keyboardDismissMode: 'none',
|
|
119
|
+
keyboardShouldPersistTaps: 'always',
|
|
120
|
+
style: [styles.scrollView, {
|
|
121
|
+
maxHeight,
|
|
122
|
+
backgroundColor: colors.background,
|
|
123
|
+
bottom: keyboard.bottomSpace
|
|
124
|
+
}, canRenderMembers && {
|
|
125
|
+
borderTopWidth: 1,
|
|
126
|
+
borderTopColor: colors.onBackground04
|
|
127
|
+
}],
|
|
128
|
+
contentContainerStyle: {
|
|
129
|
+
paddingLeft: left,
|
|
130
|
+
paddingRight: right
|
|
131
|
+
}
|
|
132
|
+
}, conditionChaining([searchLimited, canRenderMembers], [renderLimitGuide(), renderMembers(), null])));
|
|
133
|
+
};
|
|
134
|
+
const styles = createStyleSheet({
|
|
135
|
+
suggestion: {
|
|
136
|
+
height: 196
|
|
137
|
+
},
|
|
138
|
+
container: {
|
|
139
|
+
position: 'absolute',
|
|
140
|
+
top: 0,
|
|
141
|
+
right: 0,
|
|
142
|
+
left: 0
|
|
143
|
+
},
|
|
144
|
+
scrollView: {
|
|
145
|
+
position: 'absolute',
|
|
146
|
+
left: 0,
|
|
147
|
+
right: 0
|
|
148
|
+
},
|
|
149
|
+
userContainer: {
|
|
150
|
+
paddingLeft: 16,
|
|
151
|
+
flexDirection: 'row',
|
|
152
|
+
height: 44,
|
|
153
|
+
alignItems: 'center',
|
|
154
|
+
justifyContent: 'center'
|
|
155
|
+
},
|
|
156
|
+
userAvatar: {
|
|
157
|
+
marginRight: 16
|
|
158
|
+
},
|
|
159
|
+
userInfo: {
|
|
160
|
+
flexDirection: 'row',
|
|
161
|
+
flex: 1
|
|
162
|
+
},
|
|
163
|
+
userNickname: {
|
|
164
|
+
flexShrink: 1,
|
|
165
|
+
lineHeight: 44,
|
|
166
|
+
textAlignVertical: 'center',
|
|
167
|
+
marginRight: 6
|
|
168
|
+
},
|
|
169
|
+
userId: {
|
|
170
|
+
lineHeight: 44,
|
|
171
|
+
textAlignVertical: 'center',
|
|
172
|
+
minWidth: 32,
|
|
173
|
+
flexShrink: 1,
|
|
174
|
+
marginRight: 16
|
|
175
|
+
},
|
|
176
|
+
searchLimited: {
|
|
177
|
+
borderTopWidth: 1,
|
|
178
|
+
paddingHorizontal: 16,
|
|
179
|
+
height: 44,
|
|
180
|
+
flexDirection: 'row',
|
|
181
|
+
alignItems: 'center'
|
|
182
|
+
}
|
|
183
|
+
});
|
|
184
|
+
export default GroupChannelThreadSuggestedMentionList;
|
|
185
|
+
//# sourceMappingURL=GroupChannelThreadSuggestedMentionList.js.map
|
package/lib/module/domain/groupChannelThread/component/GroupChannelThreadSuggestedMentionList.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","useContext","Pressable","ScrollView","View","useWindowDimensions","useSafeAreaInsets","Avatar","Divider","Icon","Text","createStyleSheet","useHeaderStyle","useUIKitTheme","conditionChaining","useLocalization","useSendbirdChat","useKeyboardStatus","useMentionSuggestion","GroupChannelThreadContexts","GroupChannelThreadSuggestedMentionList","_ref","text","selection","inputHeight","bottomInset","onPressToMention","mentionedUsers","width","screenWidth","height","screenHeight","channel","Fragment","sdk","mentionManager","STRINGS","colors","topInset","left","right","keyboard","members","reset","searchStringRange","searchLimited","isLandscape","isShortened","visible","canRenderMembers","length","maxHeight","styles","suggestion","renderLimitGuide","createElement","style","borderTopColor","onBackground04","icon","size","containerStyle","marginRight","color","onBackground02","body3","GROUP_CHANNEL_THREAD","MENTION_LIMITED","config","mentionLimit","renderMembers","map","member","onPress","key","userId","userContainer","uri","profileUrl","userAvatar","userInfo","body2","onBackground01","numberOfLines","userNickname","nickname","LABELS","USER_NO_NAME","onBackground03","position","bottom","pointerEvents","container","bounces","keyboardDismissMode","keyboardShouldPersistTaps","scrollView","backgroundColor","background","bottomSpace","borderTopWidth","contentContainerStyle","paddingLeft","paddingRight","top","flexDirection","alignItems","justifyContent","flex","flexShrink","lineHeight","textAlignVertical","minWidth","paddingHorizontal"],"sources":["GroupChannelThreadSuggestedMentionList.tsx"],"sourcesContent":["import React, { useContext } from 'react';\nimport { Pressable, ScrollView, View, useWindowDimensions } from 'react-native';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\n\nimport {\n Avatar,\n Divider,\n Icon,\n Text,\n createStyleSheet,\n useHeaderStyle,\n useUIKitTheme,\n} from '@sendbird/uikit-react-native-foundation';\nimport { conditionChaining } from '@sendbird/uikit-utils';\n\nimport { useLocalization, useSendbirdChat } from '../../../hooks/useContext';\nimport useKeyboardStatus from '../../../hooks/useKeyboardStatus';\nimport useMentionSuggestion from '../../../hooks/useMentionSuggestion';\nimport { GroupChannelThreadContexts } from '../module/moduleContext';\nimport type { GroupChannelThreadProps } from '../types';\n\nconst GroupChannelThreadSuggestedMentionList = ({\n text,\n selection,\n inputHeight,\n bottomInset,\n onPressToMention,\n mentionedUsers,\n}: GroupChannelThreadProps['SuggestedMentionList']) => {\n const { width: screenWidth, height: screenHeight } = useWindowDimensions();\n const { channel } = useContext(GroupChannelThreadContexts.Fragment);\n const { sdk, mentionManager } = useSendbirdChat();\n const { STRINGS } = useLocalization();\n const { colors } = useUIKitTheme();\n const { topInset } = useHeaderStyle();\n const { left, right } = useSafeAreaInsets();\n\n const keyboard = useKeyboardStatus();\n\n const { members, reset, searchStringRange, searchLimited } = useMentionSuggestion({\n sdk,\n text,\n selection,\n channel,\n mentionedUsers,\n });\n\n const isLandscape = screenWidth > screenHeight;\n const isShortened = isLandscape && keyboard.visible;\n const canRenderMembers = members.length > 0;\n const maxHeight = isShortened ? screenHeight - (topInset + inputHeight + keyboard.height) : styles.suggestion.height;\n\n const renderLimitGuide = () => {\n return (\n <View style={[styles.searchLimited, { borderTopColor: colors.onBackground04 }]}>\n <Icon icon={'info'} size={20} containerStyle={{ marginRight: 4 }} color={colors.onBackground02} />\n <Text body3 color={colors.onBackground02}>\n {STRINGS.GROUP_CHANNEL_THREAD.MENTION_LIMITED(mentionManager.config.mentionLimit)}\n </Text>\n </View>\n );\n };\n\n const renderMembers = () => {\n return (\n <View>\n {members.map((member) => {\n return (\n <Pressable\n onPress={() => {\n onPressToMention(member, searchStringRange);\n reset();\n }}\n key={member.userId}\n style={styles.userContainer}\n >\n <Avatar size={28} uri={member.profileUrl} containerStyle={styles.userAvatar} />\n <View style={styles.userInfo}>\n <Text body2 color={colors.onBackground01} numberOfLines={1} style={styles.userNickname}>\n {member.nickname || STRINGS.LABELS.USER_NO_NAME}\n </Text>\n <Text body3 color={colors.onBackground03} numberOfLines={1} style={styles.userId}>\n {member.userId}\n </Text>\n <Divider style={{ position: 'absolute', bottom: 0 }} />\n </View>\n </Pressable>\n );\n })}\n </View>\n );\n };\n\n return (\n <Pressable\n onPress={reset}\n pointerEvents={canRenderMembers ? 'auto' : 'none'}\n style={[styles.container, { bottom: inputHeight + bottomInset }]}\n >\n <ScrollView\n bounces={false}\n keyboardDismissMode={'none'}\n keyboardShouldPersistTaps={'always'}\n style={[\n styles.scrollView,\n {\n maxHeight,\n backgroundColor: colors.background,\n bottom: keyboard.bottomSpace,\n },\n canRenderMembers && {\n borderTopWidth: 1,\n borderTopColor: colors.onBackground04,\n },\n ]}\n contentContainerStyle={{ paddingLeft: left, paddingRight: right }}\n >\n {conditionChaining([searchLimited, canRenderMembers], [renderLimitGuide(), renderMembers(), null])}\n </ScrollView>\n </Pressable>\n );\n};\n\nconst styles = createStyleSheet({\n suggestion: {\n height: 196,\n },\n container: {\n position: 'absolute',\n top: 0,\n right: 0,\n left: 0,\n },\n scrollView: {\n position: 'absolute',\n left: 0,\n right: 0,\n },\n userContainer: {\n paddingLeft: 16,\n flexDirection: 'row',\n height: 44,\n alignItems: 'center',\n justifyContent: 'center',\n },\n userAvatar: {\n marginRight: 16,\n },\n userInfo: {\n flexDirection: 'row',\n flex: 1,\n },\n userNickname: {\n flexShrink: 1,\n lineHeight: 44,\n textAlignVertical: 'center',\n marginRight: 6,\n },\n userId: {\n lineHeight: 44,\n textAlignVertical: 'center',\n minWidth: 32,\n flexShrink: 1,\n marginRight: 16,\n },\n searchLimited: {\n borderTopWidth: 1,\n paddingHorizontal: 16,\n height: 44,\n flexDirection: 'row',\n alignItems: 'center',\n },\n});\nexport default GroupChannelThreadSuggestedMentionList;\n"],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { default as GroupChannelThreadHeader } from './component/GroupChannelThreadHeader';
|
|
2
|
+
export { default as GroupChannelThreadMessageList } from './component/GroupChannelThreadMessageList';
|
|
3
|
+
export { default as GroupChannelThreadInput } from './component/GroupChannelThreadInput';
|
|
4
|
+
export { default as GroupChannelThreadSuggestedMentionList } from './component/GroupChannelThreadSuggestedMentionList';
|
|
5
|
+
export { default as GroupChannelThreadStatusEmpty } from './component/GroupChannelThreadStatusEmpty';
|
|
6
|
+
export { default as GroupChannelThreadStatusLoading } from './component/GroupChannelThreadStatusLoading';
|
|
7
|
+
export { default as createGroupChannelThreadModule } from './module/createGroupChannelThreadModule';
|
|
8
|
+
export { GroupChannelThreadContextsProvider, GroupChannelThreadContexts } from './module/moduleContext';
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["default","GroupChannelThreadHeader","GroupChannelThreadMessageList","GroupChannelThreadInput","GroupChannelThreadSuggestedMentionList","GroupChannelThreadStatusEmpty","GroupChannelThreadStatusLoading","createGroupChannelThreadModule","GroupChannelThreadContextsProvider","GroupChannelThreadContexts"],"sources":["index.ts"],"sourcesContent":["export { default as GroupChannelThreadHeader } from './component/GroupChannelThreadHeader';\nexport { default as GroupChannelThreadMessageList } from './component/GroupChannelThreadMessageList';\nexport { default as GroupChannelThreadInput } from './component/GroupChannelThreadInput';\nexport { default as GroupChannelThreadSuggestedMentionList } from './component/GroupChannelThreadSuggestedMentionList';\nexport { default as GroupChannelThreadStatusEmpty } from './component/GroupChannelThreadStatusEmpty';\nexport { default as GroupChannelThreadStatusLoading } from './component/GroupChannelThreadStatusLoading';\nexport { default as createGroupChannelThreadModule } from './module/createGroupChannelThreadModule';\nexport { GroupChannelThreadContextsProvider, GroupChannelThreadContexts } from './module/moduleContext';\n"],"mappings":"AAAA,SAASA,OAAO,IAAIC,wBAAwB,QAAQ,sCAAsC;AAC1F,SAASD,OAAO,IAAIE,6BAA6B,QAAQ,2CAA2C;AACpG,SAASF,OAAO,IAAIG,uBAAuB,QAAQ,qCAAqC;AACxF,SAASH,OAAO,IAAII,sCAAsC,QAAQ,oDAAoD;AACtH,SAASJ,OAAO,IAAIK,6BAA6B,QAAQ,2CAA2C;AACpG,SAASL,OAAO,IAAIM,+BAA+B,QAAQ,6CAA6C;AACxG,SAASN,OAAO,IAAIO,8BAA8B,QAAQ,yCAAyC;AACnG,SAASC,kCAAkC,EAAEC,0BAA0B,QAAQ,wBAAwB"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import GroupChannelThreadHeader from '../component/GroupChannelThreadHeader';
|
|
2
|
+
import GroupChannelThreadInput from '../component/GroupChannelThreadInput';
|
|
3
|
+
import GroupChannelThreadMessageList from '../component/GroupChannelThreadMessageList';
|
|
4
|
+
import GroupChannelThreadParentMessageInfo from '../component/GroupChannelThreadParentMessageInfo';
|
|
5
|
+
import GroupChannelThreadStatusEmpty from '../component/GroupChannelThreadStatusEmpty';
|
|
6
|
+
import GroupChannelThreadStatusLoading from '../component/GroupChannelThreadStatusLoading';
|
|
7
|
+
import GroupChannelThreadSuggestedMentionList from '../component/GroupChannelThreadSuggestedMentionList';
|
|
8
|
+
import { GroupChannelThreadContextsProvider } from './moduleContext';
|
|
9
|
+
const createGroupChannelThreadModule = function () {
|
|
10
|
+
let {
|
|
11
|
+
Header = GroupChannelThreadHeader,
|
|
12
|
+
ParentMessageInfo = GroupChannelThreadParentMessageInfo,
|
|
13
|
+
MessageList = GroupChannelThreadMessageList,
|
|
14
|
+
Input = GroupChannelThreadInput,
|
|
15
|
+
SuggestedMentionList = GroupChannelThreadSuggestedMentionList,
|
|
16
|
+
StatusLoading = GroupChannelThreadStatusLoading,
|
|
17
|
+
StatusEmpty = GroupChannelThreadStatusEmpty,
|
|
18
|
+
Provider = GroupChannelThreadContextsProvider,
|
|
19
|
+
...module
|
|
20
|
+
} = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
21
|
+
return {
|
|
22
|
+
Header,
|
|
23
|
+
ParentMessageInfo,
|
|
24
|
+
MessageList,
|
|
25
|
+
Input,
|
|
26
|
+
SuggestedMentionList,
|
|
27
|
+
StatusEmpty,
|
|
28
|
+
StatusLoading,
|
|
29
|
+
Provider,
|
|
30
|
+
...module
|
|
31
|
+
};
|
|
32
|
+
};
|
|
33
|
+
export default createGroupChannelThreadModule;
|
|
34
|
+
//# sourceMappingURL=createGroupChannelThreadModule.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["GroupChannelThreadHeader","GroupChannelThreadInput","GroupChannelThreadMessageList","GroupChannelThreadParentMessageInfo","GroupChannelThreadStatusEmpty","GroupChannelThreadStatusLoading","GroupChannelThreadSuggestedMentionList","GroupChannelThreadContextsProvider","createGroupChannelThreadModule","Header","ParentMessageInfo","MessageList","Input","SuggestedMentionList","StatusLoading","StatusEmpty","Provider","module","arguments","length","undefined"],"sources":["createGroupChannelThreadModule.tsx"],"sourcesContent":["import GroupChannelThreadHeader from '../component/GroupChannelThreadHeader';\nimport GroupChannelThreadInput from '../component/GroupChannelThreadInput';\nimport GroupChannelThreadMessageList from '../component/GroupChannelThreadMessageList';\nimport GroupChannelThreadParentMessageInfo from '../component/GroupChannelThreadParentMessageInfo';\nimport GroupChannelThreadStatusEmpty from '../component/GroupChannelThreadStatusEmpty';\nimport GroupChannelThreadStatusLoading from '../component/GroupChannelThreadStatusLoading';\nimport GroupChannelThreadSuggestedMentionList from '../component/GroupChannelThreadSuggestedMentionList';\nimport type { GroupChannelThreadModule } from '../types';\nimport { GroupChannelThreadContextsProvider } from './moduleContext';\n\nconst createGroupChannelThreadModule = ({\n Header = GroupChannelThreadHeader,\n ParentMessageInfo = GroupChannelThreadParentMessageInfo,\n MessageList = GroupChannelThreadMessageList,\n Input = GroupChannelThreadInput,\n SuggestedMentionList = GroupChannelThreadSuggestedMentionList,\n StatusLoading = GroupChannelThreadStatusLoading,\n StatusEmpty = GroupChannelThreadStatusEmpty,\n Provider = GroupChannelThreadContextsProvider,\n ...module\n}: Partial<GroupChannelThreadModule> = {}): GroupChannelThreadModule => {\n return {\n Header,\n ParentMessageInfo,\n MessageList,\n Input,\n SuggestedMentionList,\n StatusEmpty,\n StatusLoading,\n Provider,\n ...module,\n };\n};\n\nexport default createGroupChannelThreadModule;\n"],"mappings":"AAAA,OAAOA,wBAAwB,MAAM,uCAAuC;AAC5E,OAAOC,uBAAuB,MAAM,sCAAsC;AAC1E,OAAOC,6BAA6B,MAAM,4CAA4C;AACtF,OAAOC,mCAAmC,MAAM,kDAAkD;AAClG,OAAOC,6BAA6B,MAAM,4CAA4C;AACtF,OAAOC,+BAA+B,MAAM,8CAA8C;AAC1F,OAAOC,sCAAsC,MAAM,qDAAqD;AAExG,SAASC,kCAAkC,QAAQ,iBAAiB;AAEpE,MAAMC,8BAA8B,GAAG,SAAAA,CAAA,EAUiC;EAAA,IAVhC;IACtCC,MAAM,GAAGT,wBAAwB;IACjCU,iBAAiB,GAAGP,mCAAmC;IACvDQ,WAAW,GAAGT,6BAA6B;IAC3CU,KAAK,GAAGX,uBAAuB;IAC/BY,oBAAoB,GAAGP,sCAAsC;IAC7DQ,aAAa,GAAGT,+BAA+B;IAC/CU,WAAW,GAAGX,6BAA6B;IAC3CY,QAAQ,GAAGT,kCAAkC;IAC7C,GAAGU;EAC8B,CAAC,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC,CAAC;EACvC,OAAO;IACLT,MAAM;IACNC,iBAAiB;IACjBC,WAAW;IACXC,KAAK;IACLC,oBAAoB;IACpBE,WAAW;IACXD,aAAa;IACbE,QAAQ;IACR,GAAGC;EACL,CAAC;AACH,CAAC;AAED,eAAeT,8BAA8B"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import React, { createContext, useRef, useState } from 'react';
|
|
2
|
+
import { Logger, NOOP, useFreshCallback } from '@sendbird/uikit-utils';
|
|
3
|
+
import ProviderLayout from '../../../components/ProviderLayout';
|
|
4
|
+
import { useLocalization } from '../../../hooks/useContext';
|
|
5
|
+
export const GroupChannelThreadContexts = {
|
|
6
|
+
Fragment: /*#__PURE__*/createContext({
|
|
7
|
+
headerTitle: '',
|
|
8
|
+
channel: {},
|
|
9
|
+
parentMessage: {},
|
|
10
|
+
setMessageToEdit: NOOP
|
|
11
|
+
}),
|
|
12
|
+
PubSub: /*#__PURE__*/createContext({
|
|
13
|
+
publish: NOOP,
|
|
14
|
+
subscribe: () => NOOP
|
|
15
|
+
}),
|
|
16
|
+
MessageList: /*#__PURE__*/createContext({
|
|
17
|
+
flatListRef: {
|
|
18
|
+
current: null
|
|
19
|
+
},
|
|
20
|
+
scrollToMessage: () => false,
|
|
21
|
+
lazyScrollToBottom: () => {
|
|
22
|
+
// noop
|
|
23
|
+
},
|
|
24
|
+
lazyScrollToIndex: () => {
|
|
25
|
+
// noop
|
|
26
|
+
}
|
|
27
|
+
})
|
|
28
|
+
};
|
|
29
|
+
export const GroupChannelThreadContextsProvider = _ref => {
|
|
30
|
+
let {
|
|
31
|
+
children,
|
|
32
|
+
channel,
|
|
33
|
+
parentMessage,
|
|
34
|
+
keyboardAvoidOffset = 0,
|
|
35
|
+
groupChannelThreadPubSub,
|
|
36
|
+
threadedMessages
|
|
37
|
+
} = _ref;
|
|
38
|
+
if (!channel) throw new Error('GroupChannel is not provided to GroupChannelThreadModule');
|
|
39
|
+
const {
|
|
40
|
+
STRINGS
|
|
41
|
+
} = useLocalization();
|
|
42
|
+
const [messageToEdit, setMessageToEdit] = useState();
|
|
43
|
+
const {
|
|
44
|
+
flatListRef,
|
|
45
|
+
lazyScrollToIndex,
|
|
46
|
+
lazyScrollToBottom,
|
|
47
|
+
scrollToMessage
|
|
48
|
+
} = useScrollActions({
|
|
49
|
+
threadedMessages: threadedMessages
|
|
50
|
+
});
|
|
51
|
+
return /*#__PURE__*/React.createElement(ProviderLayout, null, /*#__PURE__*/React.createElement(GroupChannelThreadContexts.Fragment.Provider, {
|
|
52
|
+
value: {
|
|
53
|
+
headerTitle: STRINGS.GROUP_CHANNEL_THREAD.HEADER_TITLE,
|
|
54
|
+
channel,
|
|
55
|
+
parentMessage,
|
|
56
|
+
keyboardAvoidOffset,
|
|
57
|
+
messageToEdit: messageToEdit,
|
|
58
|
+
setMessageToEdit
|
|
59
|
+
}
|
|
60
|
+
}, /*#__PURE__*/React.createElement(GroupChannelThreadContexts.PubSub.Provider, {
|
|
61
|
+
value: groupChannelThreadPubSub
|
|
62
|
+
}, /*#__PURE__*/React.createElement(GroupChannelThreadContexts.MessageList.Provider, {
|
|
63
|
+
value: {
|
|
64
|
+
flatListRef,
|
|
65
|
+
scrollToMessage,
|
|
66
|
+
lazyScrollToIndex,
|
|
67
|
+
lazyScrollToBottom
|
|
68
|
+
}
|
|
69
|
+
}, children))));
|
|
70
|
+
};
|
|
71
|
+
const useScrollActions = params => {
|
|
72
|
+
const {
|
|
73
|
+
threadedMessages
|
|
74
|
+
} = params;
|
|
75
|
+
const flatListRef = useRef(null);
|
|
76
|
+
|
|
77
|
+
// FIXME: Workaround, should run after data has been applied to UI.
|
|
78
|
+
const lazyScrollToBottom = useFreshCallback(params => {
|
|
79
|
+
if (!flatListRef.current) {
|
|
80
|
+
logFlatListRefWarning();
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
setTimeout(() => {
|
|
84
|
+
if (flatListRef.current) {
|
|
85
|
+
flatListRef.current.scrollToEnd({
|
|
86
|
+
animated: (params === null || params === void 0 ? void 0 : params.animated) ?? false
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
}, (params === null || params === void 0 ? void 0 : params.timeout) ?? 0);
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
// FIXME: Workaround, should run after data has been applied to UI.
|
|
93
|
+
const lazyScrollToIndex = useFreshCallback(params => {
|
|
94
|
+
if (!flatListRef.current) {
|
|
95
|
+
logFlatListRefWarning();
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
setTimeout(() => {
|
|
99
|
+
if (flatListRef.current) {
|
|
100
|
+
flatListRef.current.scrollToIndex({
|
|
101
|
+
index: (params === null || params === void 0 ? void 0 : params.index) ?? 0,
|
|
102
|
+
animated: (params === null || params === void 0 ? void 0 : params.animated) ?? false,
|
|
103
|
+
viewPosition: (params === null || params === void 0 ? void 0 : params.viewPosition) ?? 0.5
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
}, (params === null || params === void 0 ? void 0 : params.timeout) ?? 0);
|
|
107
|
+
});
|
|
108
|
+
const scrollToMessage = useFreshCallback((messageId, options) => {
|
|
109
|
+
if (!flatListRef.current) {
|
|
110
|
+
logFlatListRefWarning();
|
|
111
|
+
return false;
|
|
112
|
+
}
|
|
113
|
+
const foundMessageIndex = threadedMessages.findIndex(it => it.messageId === messageId);
|
|
114
|
+
const isIncludedInList = foundMessageIndex > -1;
|
|
115
|
+
if (isIncludedInList) {
|
|
116
|
+
lazyScrollToIndex({
|
|
117
|
+
index: foundMessageIndex,
|
|
118
|
+
animated: true,
|
|
119
|
+
timeout: 0,
|
|
120
|
+
viewPosition: options === null || options === void 0 ? void 0 : options.viewPosition
|
|
121
|
+
});
|
|
122
|
+
return true;
|
|
123
|
+
} else {
|
|
124
|
+
return false;
|
|
125
|
+
}
|
|
126
|
+
});
|
|
127
|
+
return {
|
|
128
|
+
flatListRef,
|
|
129
|
+
lazyScrollToIndex,
|
|
130
|
+
lazyScrollToBottom,
|
|
131
|
+
scrollToMessage
|
|
132
|
+
};
|
|
133
|
+
};
|
|
134
|
+
const logFlatListRefWarning = () => {
|
|
135
|
+
Logger.warn('Cannot find flatListRef.current, please render FlatList and pass the flatListRef' + 'or please try again after FlatList has been rendered.');
|
|
136
|
+
};
|
|
137
|
+
//# sourceMappingURL=moduleContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","createContext","useRef","useState","Logger","NOOP","useFreshCallback","ProviderLayout","useLocalization","GroupChannelThreadContexts","Fragment","headerTitle","channel","parentMessage","setMessageToEdit","PubSub","publish","subscribe","MessageList","flatListRef","current","scrollToMessage","lazyScrollToBottom","lazyScrollToIndex","GroupChannelThreadContextsProvider","_ref","children","keyboardAvoidOffset","groupChannelThreadPubSub","threadedMessages","Error","STRINGS","messageToEdit","useScrollActions","createElement","Provider","value","GROUP_CHANNEL_THREAD","HEADER_TITLE","params","logFlatListRefWarning","setTimeout","scrollToEnd","animated","timeout","scrollToIndex","index","viewPosition","messageId","options","foundMessageIndex","findIndex","it","isIncludedInList","warn"],"sources":["moduleContext.tsx"],"sourcesContent":["import React, { createContext, useRef, useState } from 'react';\nimport type { FlatList } from 'react-native';\n\nimport {\n ContextValue,\n Logger,\n NOOP,\n SendbirdFileMessage,\n SendbirdGroupChannel,\n SendbirdMessage,\n SendbirdUserMessage,\n useFreshCallback,\n} from '@sendbird/uikit-utils';\n\nimport ProviderLayout from '../../../components/ProviderLayout';\nimport { useLocalization } from '../../../hooks/useContext';\nimport type { PubSub } from '../../../utils/pubsub';\nimport type {\n GroupChannelThreadContextsType,\n GroupChannelThreadModule,\n GroupChannelThreadPubSubContextPayload,\n} from '../types';\nimport { GroupChannelThreadProps } from '../types';\n\nexport const GroupChannelThreadContexts: GroupChannelThreadContextsType = {\n Fragment: createContext({\n headerTitle: '',\n channel: {} as SendbirdGroupChannel,\n parentMessage: {} as SendbirdUserMessage | SendbirdFileMessage,\n setMessageToEdit: NOOP,\n }),\n PubSub: createContext({\n publish: NOOP,\n subscribe: () => NOOP,\n } as PubSub<GroupChannelThreadPubSubContextPayload>),\n MessageList: createContext({\n flatListRef: { current: null },\n scrollToMessage: () => false,\n lazyScrollToBottom: () => {\n // noop\n },\n lazyScrollToIndex: () => {\n // noop\n },\n } as MessageListContextValue),\n};\n\nexport const GroupChannelThreadContextsProvider: GroupChannelThreadModule['Provider'] = ({\n children,\n channel,\n parentMessage,\n keyboardAvoidOffset = 0,\n groupChannelThreadPubSub,\n threadedMessages,\n}) => {\n if (!channel) throw new Error('GroupChannel is not provided to GroupChannelThreadModule');\n\n const { STRINGS } = useLocalization();\n const [messageToEdit, setMessageToEdit] = useState<SendbirdUserMessage | SendbirdFileMessage>();\n const { flatListRef, lazyScrollToIndex, lazyScrollToBottom, scrollToMessage } = useScrollActions({\n threadedMessages: threadedMessages,\n });\n\n return (\n <ProviderLayout>\n <GroupChannelThreadContexts.Fragment.Provider\n value={{\n headerTitle: STRINGS.GROUP_CHANNEL_THREAD.HEADER_TITLE,\n channel,\n parentMessage,\n keyboardAvoidOffset,\n messageToEdit: messageToEdit,\n setMessageToEdit,\n }}\n >\n <GroupChannelThreadContexts.PubSub.Provider value={groupChannelThreadPubSub}>\n <GroupChannelThreadContexts.MessageList.Provider\n value={{\n flatListRef,\n scrollToMessage,\n lazyScrollToIndex,\n lazyScrollToBottom,\n }}\n >\n {children}\n </GroupChannelThreadContexts.MessageList.Provider>\n </GroupChannelThreadContexts.PubSub.Provider>\n </GroupChannelThreadContexts.Fragment.Provider>\n </ProviderLayout>\n );\n};\n\ntype MessageListContextValue = ContextValue<GroupChannelThreadContextsType['MessageList']>;\nconst useScrollActions = (params: Pick<GroupChannelThreadProps['Provider'], 'threadedMessages'>) => {\n const { threadedMessages } = params;\n const flatListRef = useRef<FlatList<SendbirdMessage>>(null);\n\n // FIXME: Workaround, should run after data has been applied to UI.\n const lazyScrollToBottom = useFreshCallback<MessageListContextValue['lazyScrollToIndex']>((params) => {\n if (!flatListRef.current) {\n logFlatListRefWarning();\n return;\n }\n\n setTimeout(() => {\n if (flatListRef.current) {\n flatListRef.current.scrollToEnd({ animated: params?.animated ?? false });\n }\n }, params?.timeout ?? 0);\n });\n\n // FIXME: Workaround, should run after data has been applied to UI.\n const lazyScrollToIndex = useFreshCallback<MessageListContextValue['lazyScrollToIndex']>((params) => {\n if (!flatListRef.current) {\n logFlatListRefWarning();\n return;\n }\n\n setTimeout(() => {\n if (flatListRef.current) {\n flatListRef.current.scrollToIndex({\n index: params?.index ?? 0,\n animated: params?.animated ?? false,\n viewPosition: params?.viewPosition ?? 0.5,\n });\n }\n }, params?.timeout ?? 0);\n });\n\n const scrollToMessage = useFreshCallback<MessageListContextValue['scrollToMessage']>((messageId, options) => {\n if (!flatListRef.current) {\n logFlatListRefWarning();\n return false;\n }\n\n const foundMessageIndex = threadedMessages.findIndex((it) => it.messageId === messageId);\n const isIncludedInList = foundMessageIndex > -1;\n\n if (isIncludedInList) {\n lazyScrollToIndex({\n index: foundMessageIndex,\n animated: true,\n timeout: 0,\n viewPosition: options?.viewPosition,\n });\n return true;\n } else {\n return false;\n }\n });\n\n return {\n flatListRef,\n lazyScrollToIndex,\n lazyScrollToBottom,\n scrollToMessage,\n };\n};\n\nconst logFlatListRefWarning = () => {\n Logger.warn(\n 'Cannot find flatListRef.current, please render FlatList and pass the flatListRef' +\n 'or please try again after FlatList has been rendered.',\n );\n};\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import type React from 'react';\nimport type { FlatList } from 'react-native';\n\nimport type { UseGroupChannelMessagesOptions } from '@sendbird/uikit-chat-hooks';\nimport type {\n OnBeforeHandler,\n PickPartial,\n SendbirdFileMessage,\n SendbirdFileMessageCreateParams,\n SendbirdFileMessageUpdateParams,\n SendbirdGroupChannel,\n SendbirdMessage,\n SendbirdUserMessage,\n SendbirdUserMessageCreateParams,\n SendbirdUserMessageUpdateParams,\n} from '@sendbird/uikit-utils';\n\nimport type { ChannelInputProps, SuggestedMentionListProps } from '../../components/ChannelInput';\nimport type { ChannelThreadMessageListProps } from '../../components/ChannelThreadMessageList';\nimport type { CommonComponent } from '../../types';\nimport type { PubSub } from '../../utils/pubsub';\n\nexport interface GroupChannelThreadProps {\n Fragment: {\n channel: SendbirdGroupChannel;\n parentMessage: SendbirdUserMessage | SendbirdFileMessage;\n startingPoint?: number;\n onParentMessageDeleted: () => void;\n onChannelDeleted: () => void;\n onPressHeaderLeft: GroupChannelThreadProps['Header']['onPressLeft'];\n onPressHeaderSubtitle?: GroupChannelThreadProps['Header']['onPressSubtitle'];\n onPressMediaMessage?: GroupChannelThreadProps['MessageList']['onPressMediaMessage'];\n\n onBeforeSendUserMessage?: OnBeforeHandler<SendbirdUserMessageCreateParams>;\n onBeforeSendFileMessage?: OnBeforeHandler<SendbirdFileMessageCreateParams>;\n onBeforeUpdateUserMessage?: OnBeforeHandler<SendbirdUserMessageUpdateParams>;\n onBeforeUpdateFileMessage?: OnBeforeHandler<SendbirdFileMessageUpdateParams>;\n\n renderMessage?: GroupChannelThreadProps['MessageList']['renderMessage'];\n\n enableMessageGrouping?: GroupChannelThreadProps['MessageList']['enableMessageGrouping'];\n\n keyboardAvoidOffset?: GroupChannelThreadProps['Provider']['keyboardAvoidOffset'];\n flatListProps?: GroupChannelThreadProps['MessageList']['flatListProps'];\n sortComparator?: UseGroupChannelMessagesOptions['sortComparator'];\n };\n Header: {\n onPressLeft: () => void;\n onPressSubtitle: () => void;\n };\n ParentMessageInfo: {\n channel: SendbirdGroupChannel;\n currentUserId?: string;\n onDeleteMessage: (message: SendbirdUserMessage | SendbirdFileMessage) => Promise<void>;\n onPressMediaMessage?: (message: SendbirdFileMessage, deleteMessage: () => Promise<void>, uri: string) => void;\n };\n MessageList: Pick<\n ChannelThreadMessageListProps<SendbirdGroupChannel>,\n | 'enableMessageGrouping'\n | 'currentUserId'\n | 'channel'\n | 'messages'\n | 'newMessages'\n | 'scrolledAwayFromBottom'\n | 'onScrolledAwayFromBottom'\n | 'onTopReached'\n | 'onBottomReached'\n | 'onResendFailedMessage'\n | 'onDeleteMessage'\n | 'onPressMediaMessage'\n | 'renderMessage'\n | 'flatListProps'\n | 'hasNext'\n | 'searchItem'\n > & {\n onResetMessageList: () => Promise<void>;\n onResetMessageListWithStartingPoint: (startingPoint: number) => Promise<void>;\n startingPoint?: number;\n };\n Input: PickPartial<\n ChannelInputProps,\n | 'shouldRenderInput'\n | 'onPressSendUserMessage'\n | 'onPressSendFileMessage'\n | 'onPressUpdateUserMessage'\n | 'onPressUpdateFileMessage'\n | 'SuggestedMentionList'\n | 'AttachmentsButton',\n 'inputDisabled'\n >;\n\n SuggestedMentionList: SuggestedMentionListProps;\n Provider: {\n channel: SendbirdGroupChannel;\n keyboardAvoidOffset?: number;\n groupChannelThreadPubSub: PubSub<GroupChannelThreadPubSubContextPayload>;\n parentMessage: SendbirdUserMessage | SendbirdFileMessage;\n threadedMessages: SendbirdMessage[];\n };\n}\n\n/**\n * Internal context for GroupChannelThread\n * For example, the developer can create a custom header\n * with getting data from the domain context\n * */\nexport interface GroupChannelThreadContextsType {\n Fragment: React.Context<{\n headerTitle: string;\n keyboardAvoidOffset?: number;\n channel: SendbirdGroupChannel;\n parentMessage: SendbirdUserMessage | SendbirdFileMessage;\n messageToEdit?: SendbirdUserMessage | SendbirdFileMessage;\n setMessageToEdit: (msg?: SendbirdUserMessage | SendbirdFileMessage) => void;\n }>;\n PubSub: React.Context<PubSub<GroupChannelThreadPubSubContextPayload>>;\n MessageList: React.Context<{\n /**\n * ref object for FlatList of MessageList\n * */\n flatListRef: React.MutableRefObject<FlatList | null>;\n /**\n * Function that scrolls to a message within a group channel.\n * @param messageId {number} - The id of the message to scroll.\n * @param options {object} - Scroll options (optional).\n * @param options.focusAnimated {boolean} - Enable a shake animation on the message component upon completion of scrolling.\n * @param options.viewPosition {number} - Position information to adjust the visible area during scrolling. bottom(0) ~ top(1.0)\n *\n * @example\n * ```\n * const { scrollToMessage } = useContext(GroupChannelThreadContexts.MessageList);\n * const messageIncludedInMessageList = scrollToMessage(lastMessage.messageId, { focusAnimated: true, viewPosition: 1 });\n * if (!messageIncludedInMessageList) console.warn('Message not found in the message list.');\n * ```\n * */\n scrollToMessage: (messageId: number, options?: { focusAnimated?: boolean; viewPosition?: number }) => boolean;\n /**\n * Call the FlatList function asynchronously to scroll to bottom lazily\n * to avoid scrolling before data rendering has been committed.\n * */\n lazyScrollToBottom: (params?: { animated?: boolean; timeout?: number }) => void;\n /**\n * Call the FlatList function asynchronously to scroll to index lazily.\n * to avoid scrolling before data rendering has been committed.\n * */\n lazyScrollToIndex: (params?: {\n index?: number;\n animated?: boolean;\n timeout?: number;\n viewPosition?: number;\n }) => void;\n }>;\n}\n\nexport interface GroupChannelThreadModule {\n Provider: CommonComponent<GroupChannelThreadProps['Provider']>;\n Header: CommonComponent<GroupChannelThreadProps['Header']>;\n ParentMessageInfo: CommonComponent<GroupChannelThreadProps['ParentMessageInfo']>;\n MessageList: CommonComponent<GroupChannelThreadProps['MessageList']>;\n Input: CommonComponent<GroupChannelThreadProps['Input']>;\n SuggestedMentionList: CommonComponent<GroupChannelThreadProps['SuggestedMentionList']>;\n StatusEmpty: CommonComponent;\n StatusLoading: CommonComponent;\n}\n\nexport type GroupChannelThreadFragment = React.FC<GroupChannelThreadProps['Fragment']>;\n\nexport type GroupChannelThreadPubSubContextPayload =\n | {\n type: 'MESSAGE_SENT_PENDING' | 'MESSAGE_SENT_SUCCESS';\n data: {\n message: SendbirdUserMessage | SendbirdFileMessage;\n };\n }\n | {\n type: 'MESSAGES_RECEIVED' | 'MESSAGES_UPDATED';\n data: {\n messages: SendbirdMessage[];\n };\n }\n | {\n type: 'TYPING_BUBBLE_RENDERED';\n data?: undefined;\n };\n"],"mappings":""}
|
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
import React, { useCallback, useEffect, useMemo, useState } from 'react';
|
|
2
2
|
import { MessageFilter } from '@sendbird/chat/groupChannel';
|
|
3
3
|
import { ReplyType } from '@sendbird/chat/message';
|
|
4
|
-
import { Box } from '@sendbird/uikit-react-native-foundation';
|
|
4
|
+
import { Box, useToast } from '@sendbird/uikit-react-native-foundation';
|
|
5
5
|
import { useGroupChannelMessages } from '@sendbird/uikit-tools';
|
|
6
|
+
import { getReadableFileSize } from '@sendbird/uikit-utils';
|
|
6
7
|
import { NOOP, PASS, confirmAndMarkAsRead, messageComparator, useFreshCallback, useIIFE, useRefTracker } from '@sendbird/uikit-utils';
|
|
7
8
|
import GroupChannelMessageRenderer, { GroupChannelTypingIndicatorBubble } from '../components/GroupChannelMessageRenderer';
|
|
8
9
|
import NewMessagesButton from '../components/NewMessagesButton';
|
|
9
10
|
import ScrollToBottomButton from '../components/ScrollToBottomButton';
|
|
10
11
|
import StatusComposition from '../components/StatusComposition';
|
|
11
12
|
import createGroupChannelModule from '../domain/groupChannel/module/createGroupChannelModule';
|
|
12
|
-
import { usePlatformService, useSendbirdChat } from '../hooks/useContext';
|
|
13
|
+
import { useLocalization, usePlatformService, useSendbirdChat } from '../hooks/useContext';
|
|
13
14
|
import pubsub from '../utils/pubsub';
|
|
14
15
|
const createGroupChannelFragment = initModule => {
|
|
15
16
|
const GroupChannelModule = createGroupChannelModule(initModule);
|
|
@@ -25,6 +26,7 @@ const createGroupChannelFragment = initModule => {
|
|
|
25
26
|
onPressHeaderRight = NOOP,
|
|
26
27
|
onPressMediaMessage = NOOP,
|
|
27
28
|
onChannelDeleted = NOOP,
|
|
29
|
+
onPressReplyMessageInThread = NOOP,
|
|
28
30
|
onBeforeSendUserMessage = PASS,
|
|
29
31
|
onBeforeSendFileMessage = PASS,
|
|
30
32
|
onBeforeUpdateUserMessage = PASS,
|
|
@@ -43,15 +45,24 @@ const createGroupChannelFragment = initModule => {
|
|
|
43
45
|
const {
|
|
44
46
|
sdk,
|
|
45
47
|
currentUser,
|
|
46
|
-
sbOptions
|
|
48
|
+
sbOptions,
|
|
49
|
+
voiceMessageStatusManager
|
|
47
50
|
} = useSendbirdChat();
|
|
51
|
+
const toast = useToast();
|
|
52
|
+
const {
|
|
53
|
+
STRINGS
|
|
54
|
+
} = useLocalization();
|
|
48
55
|
const [internalSearchItem, setInternalSearchItem] = useState(searchItem);
|
|
49
56
|
const navigateFromMessageSearch = useCallback(() => Boolean(searchItem), []);
|
|
50
57
|
const [groupChannelPubSub] = useState(() => pubsub());
|
|
51
58
|
const [scrolledAwayFromBottom, setScrolledAwayFromBottom] = useState(false);
|
|
52
59
|
const scrolledAwayFromBottomRef = useRefTracker(scrolledAwayFromBottom);
|
|
53
60
|
const replyType = useIIFE(() => {
|
|
54
|
-
if (sbOptions.uikit.groupChannel.channel.replyType === 'none')
|
|
61
|
+
if (sbOptions.uikit.groupChannel.channel.replyType === 'none') {
|
|
62
|
+
return ReplyType.NONE;
|
|
63
|
+
} else {
|
|
64
|
+
return ReplyType.ONLY_REPLY_TO_CHANNEL;
|
|
65
|
+
}
|
|
55
66
|
});
|
|
56
67
|
const {
|
|
57
68
|
loading,
|
|
@@ -98,6 +109,7 @@ const createGroupChannelFragment = initModule => {
|
|
|
98
109
|
return Promise.allSettled([playerService.reset(), recorderService.reset()]);
|
|
99
110
|
};
|
|
100
111
|
const _onPressHeaderLeft = useFreshCallback(async () => {
|
|
112
|
+
voiceMessageStatusManager.clear();
|
|
101
113
|
await onBlurFragment();
|
|
102
114
|
onPressHeaderLeft();
|
|
103
115
|
});
|
|
@@ -109,6 +121,10 @@ const createGroupChannelFragment = initModule => {
|
|
|
109
121
|
await onBlurFragment();
|
|
110
122
|
onPressMediaMessage(message, deleteMessage, uri);
|
|
111
123
|
});
|
|
124
|
+
const _onPressReplyMessageInThread = useFreshCallback(async (message, startingPoint) => {
|
|
125
|
+
await onBlurFragment();
|
|
126
|
+
onPressReplyMessageInThread(message, startingPoint);
|
|
127
|
+
});
|
|
112
128
|
useEffect(() => {
|
|
113
129
|
return () => {
|
|
114
130
|
onBlurFragment();
|
|
@@ -160,9 +176,18 @@ const createGroupChannelFragment = initModule => {
|
|
|
160
176
|
onSent(message);
|
|
161
177
|
});
|
|
162
178
|
const onPressSendFileMessage = useFreshCallback(async params => {
|
|
179
|
+
var _processedParams$file;
|
|
163
180
|
const processedParams = await onBeforeSendFileMessage(params);
|
|
164
|
-
const
|
|
165
|
-
|
|
181
|
+
const fileSize = ((_processedParams$file = processedParams.file) === null || _processedParams$file === void 0 ? void 0 : _processedParams$file.size) ?? processedParams.fileSize;
|
|
182
|
+
const uploadSizeLimit = sbOptions.appInfo.uploadSizeLimit;
|
|
183
|
+
if (fileSize && uploadSizeLimit && fileSize > uploadSizeLimit) {
|
|
184
|
+
const sizeLimitString = `${getReadableFileSize(uploadSizeLimit)} MB`;
|
|
185
|
+
toast.show(STRINGS.TOAST.FILE_UPLOAD_SIZE_LIMIT_EXCEEDED_ERROR(sizeLimitString), 'error');
|
|
186
|
+
return;
|
|
187
|
+
} else {
|
|
188
|
+
const message = await sendFileMessage(processedParams, onPending);
|
|
189
|
+
onSent(message);
|
|
190
|
+
}
|
|
166
191
|
});
|
|
167
192
|
const onPressUpdateUserMessage = useFreshCallback(async (message, params) => {
|
|
168
193
|
const processedParams = await onBeforeUpdateUserMessage(params);
|
|
@@ -182,7 +207,8 @@ const createGroupChannelFragment = initModule => {
|
|
|
182
207
|
enableTypingIndicator: enableTypingIndicator ?? sbOptions.uikit.groupChannel.channel.enableTypingIndicator,
|
|
183
208
|
keyboardAvoidOffset: keyboardAvoidOffset,
|
|
184
209
|
messages: messages,
|
|
185
|
-
onUpdateSearchItem: onUpdateSearchItem
|
|
210
|
+
onUpdateSearchItem: onUpdateSearchItem,
|
|
211
|
+
onPressReplyMessageInThread: _onPressReplyMessageInThread
|
|
186
212
|
}, /*#__PURE__*/React.createElement(GroupChannelModule.Header, {
|
|
187
213
|
shouldHideRight: navigateFromMessageSearch,
|
|
188
214
|
onPressHeaderLeft: _onPressHeaderLeft,
|