@sendbird/uikit-react-native 3.3.0 → 3.4.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/ChannelMessageList/index.js.map +1 -1
- package/lib/commonjs/components/FileViewer/FileViewerContent.js +140 -0
- package/lib/commonjs/components/FileViewer/FileViewerContent.js.map +1 -0
- package/lib/commonjs/components/FileViewer/FileViewerFooter.js +82 -0
- package/lib/commonjs/components/FileViewer/FileViewerFooter.js.map +1 -0
- package/lib/commonjs/components/FileViewer/FileViewerHeader.js +93 -0
- package/lib/commonjs/components/FileViewer/FileViewerHeader.js.map +1 -0
- package/lib/commonjs/components/FileViewer/index.js +133 -0
- package/lib/commonjs/components/FileViewer/index.js.map +1 -0
- package/lib/commonjs/components/ReactionAddons/BottomSheetReactionAddon.js.map +1 -1
- package/lib/commonjs/domain/groupChannel/component/GroupChannelMessageList.js +10 -9
- package/lib/commonjs/domain/groupChannel/component/GroupChannelMessageList.js.map +1 -1
- package/lib/commonjs/domain/groupChannel/types.js.map +1 -1
- package/lib/commonjs/domain/messageSearch/component/MessageSearchHeader.js +4 -1
- package/lib/commonjs/domain/messageSearch/component/MessageSearchHeader.js.map +1 -1
- package/lib/commonjs/domain/openChannelCreate/component/OpenChannelCreateProfileInput.js +4 -2
- package/lib/commonjs/domain/openChannelCreate/component/OpenChannelCreateProfileInput.js.map +1 -1
- package/lib/commonjs/fragments/createGroupChannelFragment.js +14 -13
- package/lib/commonjs/fragments/createGroupChannelFragment.js.map +1 -1
- package/lib/commonjs/version.js +1 -1
- package/lib/commonjs/version.js.map +1 -1
- package/lib/module/components/ChannelMessageList/index.js.map +1 -1
- package/lib/module/components/FileViewer/FileViewerContent.js +130 -0
- package/lib/module/components/FileViewer/FileViewerContent.js.map +1 -0
- package/lib/module/components/FileViewer/FileViewerFooter.js +74 -0
- package/lib/module/components/FileViewer/FileViewerFooter.js.map +1 -0
- package/lib/module/components/FileViewer/FileViewerHeader.js +85 -0
- package/lib/module/components/FileViewer/FileViewerHeader.js.map +1 -0
- package/lib/module/components/FileViewer/index.js +123 -0
- package/lib/module/components/FileViewer/index.js.map +1 -0
- package/lib/module/components/ReactionAddons/BottomSheetReactionAddon.js.map +1 -1
- package/lib/module/domain/groupChannel/component/GroupChannelMessageList.js +10 -9
- package/lib/module/domain/groupChannel/component/GroupChannelMessageList.js.map +1 -1
- package/lib/module/domain/groupChannel/types.js.map +1 -1
- package/lib/module/domain/messageSearch/component/MessageSearchHeader.js +4 -1
- package/lib/module/domain/messageSearch/component/MessageSearchHeader.js.map +1 -1
- package/lib/module/domain/openChannelCreate/component/OpenChannelCreateProfileInput.js +4 -2
- package/lib/module/domain/openChannelCreate/component/OpenChannelCreateProfileInput.js.map +1 -1
- package/lib/module/fragments/createGroupChannelFragment.js +15 -14
- package/lib/module/fragments/createGroupChannelFragment.js.map +1 -1
- package/lib/module/version.js +1 -1
- package/lib/module/version.js.map +1 -1
- package/lib/typescript/src/components/ChannelMessageList/index.d.ts +1 -1
- package/lib/typescript/src/components/FileViewer/FileViewerContent.d.ts +13 -0
- package/lib/typescript/src/components/FileViewer/FileViewerFooter.d.ts +9 -0
- package/lib/typescript/src/components/FileViewer/FileViewerHeader.d.ts +10 -0
- package/lib/typescript/src/components/{FileViewer.d.ts → FileViewer/index.d.ts} +5 -1
- package/lib/typescript/src/containers/SendbirdUIKitContainer.d.ts +1 -1
- package/lib/typescript/src/domain/groupChannel/component/GroupChannelMessageList.d.ts +2 -2
- package/lib/typescript/src/domain/groupChannel/types.d.ts +2 -2
- package/lib/typescript/src/version.d.ts +1 -1
- package/package.json +8 -7
- package/src/components/ChannelMessageList/index.tsx +1 -1
- package/src/components/FileViewer/FileViewerContent.tsx +141 -0
- package/src/components/FileViewer/FileViewerFooter.tsx +73 -0
- package/src/components/FileViewer/FileViewerHeader.tsx +86 -0
- package/src/components/FileViewer/index.tsx +139 -0
- package/src/components/ReactionAddons/BottomSheetReactionAddon.tsx +3 -2
- package/src/domain/groupChannel/component/GroupChannelMessageList.tsx +7 -6
- package/src/domain/groupChannel/types.ts +2 -2
- package/src/domain/messageSearch/component/MessageSearchHeader.tsx +4 -1
- package/src/domain/openChannelCreate/component/OpenChannelCreateProfileInput.tsx +4 -2
- package/src/fragments/createGroupChannelFragment.tsx +14 -12
- package/src/version.ts +1 -1
- package/lib/commonjs/components/FileViewer.js +0 -300
- package/lib/commonjs/components/FileViewer.js.map +0 -1
- package/lib/module/components/FileViewer.js +0 -291
- package/lib/module/components/FileViewer.js.map +0 -1
- package/src/components/FileViewer.tsx +0 -288
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
8
|
+
var _reactNative = require("react-native");
|
|
9
|
+
var _reactNativeSafeAreaContext = require("react-native-safe-area-context");
|
|
10
|
+
var _uikitReactNativeFoundation = require("@sendbird/uikit-react-native-foundation");
|
|
11
|
+
var _uikitUtils = require("@sendbird/uikit-utils");
|
|
12
|
+
var _useContext = require("../../hooks/useContext");
|
|
13
|
+
var _FileViewerContent = _interopRequireDefault(require("./FileViewerContent"));
|
|
14
|
+
var _FileViewerFooter = _interopRequireDefault(require("./FileViewerFooter"));
|
|
15
|
+
var _FileViewerHeader = _interopRequireDefault(require("./FileViewerHeader"));
|
|
16
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
17
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
18
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
19
|
+
const FileViewer = _ref => {
|
|
20
|
+
let {
|
|
21
|
+
headerShown = true,
|
|
22
|
+
maxZoom = 3,
|
|
23
|
+
minZoom = 1,
|
|
24
|
+
headerTopInset,
|
|
25
|
+
fileMessage,
|
|
26
|
+
onClose,
|
|
27
|
+
onPressDownload,
|
|
28
|
+
onPressDelete,
|
|
29
|
+
deleteMessage
|
|
30
|
+
} = _ref;
|
|
31
|
+
const {
|
|
32
|
+
topInset,
|
|
33
|
+
statusBarTranslucent
|
|
34
|
+
} = (0, _uikitReactNativeFoundation.useHeaderStyle)();
|
|
35
|
+
const {
|
|
36
|
+
bottom
|
|
37
|
+
} = (0, _reactNativeSafeAreaContext.useSafeAreaInsets)();
|
|
38
|
+
const {
|
|
39
|
+
palette
|
|
40
|
+
} = (0, _uikitReactNativeFoundation.useUIKitTheme)();
|
|
41
|
+
const {
|
|
42
|
+
alert
|
|
43
|
+
} = (0, _uikitReactNativeFoundation.useAlert)();
|
|
44
|
+
const {
|
|
45
|
+
show
|
|
46
|
+
} = (0, _uikitReactNativeFoundation.useToast)();
|
|
47
|
+
const {
|
|
48
|
+
fileService
|
|
49
|
+
} = (0, _useContext.usePlatformService)();
|
|
50
|
+
const {
|
|
51
|
+
currentUser
|
|
52
|
+
} = (0, _useContext.useSendbirdChat)();
|
|
53
|
+
const {
|
|
54
|
+
STRINGS
|
|
55
|
+
} = (0, _useContext.useLocalization)();
|
|
56
|
+
const fileType = (0, _uikitUtils.getFileType)(fileMessage.type || (0, _uikitUtils.getFileExtension)(fileMessage.url));
|
|
57
|
+
const canDelete = (0, _uikitUtils.isMyMessage)(fileMessage, currentUser === null || currentUser === void 0 ? void 0 : currentUser.userId);
|
|
58
|
+
const basicTopInset = statusBarTranslucent ? topInset : 0;
|
|
59
|
+
const onPressDeleteButton = () => {
|
|
60
|
+
if (!canDelete) return;
|
|
61
|
+
if (onPressDelete) {
|
|
62
|
+
onPressDelete(fileMessage);
|
|
63
|
+
} else {
|
|
64
|
+
alert({
|
|
65
|
+
title: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE_CONFIRM_TITLE,
|
|
66
|
+
buttons: [{
|
|
67
|
+
text: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE_CONFIRM_CANCEL
|
|
68
|
+
}, {
|
|
69
|
+
text: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE_CONFIRM_OK,
|
|
70
|
+
style: 'destructive',
|
|
71
|
+
onPress: () => {
|
|
72
|
+
deleteMessage().then(() => {
|
|
73
|
+
onClose();
|
|
74
|
+
}).catch(() => {
|
|
75
|
+
show(STRINGS.TOAST.DELETE_MSG_ERROR, 'error');
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
}]
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
const onPressDownloadButton = () => {
|
|
83
|
+
if (onPressDownload) {
|
|
84
|
+
onPressDownload(fileMessage);
|
|
85
|
+
} else {
|
|
86
|
+
if ((0, _uikitUtils.toMegabyte)(fileMessage.size) > 4) {
|
|
87
|
+
show(STRINGS.TOAST.DOWNLOAD_START, 'success');
|
|
88
|
+
}
|
|
89
|
+
fileService.save({
|
|
90
|
+
fileUrl: fileMessage.url,
|
|
91
|
+
fileName: fileMessage.name,
|
|
92
|
+
fileType: fileMessage.type
|
|
93
|
+
}).then(response => {
|
|
94
|
+
show(STRINGS.TOAST.DOWNLOAD_OK, 'success');
|
|
95
|
+
_uikitUtils.Logger.log('File saved to', response);
|
|
96
|
+
}).catch(err => {
|
|
97
|
+
show(STRINGS.TOAST.DOWNLOAD_ERROR, 'error');
|
|
98
|
+
_uikitUtils.Logger.log('File save failure', err);
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
};
|
|
102
|
+
(0, _react.useEffect)(() => {
|
|
103
|
+
if (fileType === 'file') onClose();
|
|
104
|
+
}, []);
|
|
105
|
+
return /*#__PURE__*/_react.default.createElement(_uikitReactNativeFoundation.Box, {
|
|
106
|
+
flex: 1,
|
|
107
|
+
backgroundColor: palette.background700
|
|
108
|
+
}, /*#__PURE__*/_react.default.createElement(_reactNative.StatusBar, {
|
|
109
|
+
barStyle: 'light-content',
|
|
110
|
+
animated: true
|
|
111
|
+
}), /*#__PURE__*/_react.default.createElement(_FileViewerHeader.default, {
|
|
112
|
+
topInset: headerTopInset ?? basicTopInset,
|
|
113
|
+
headerShown: headerShown,
|
|
114
|
+
title: STRINGS.FILE_VIEWER.TITLE(fileMessage),
|
|
115
|
+
subtitle: STRINGS.FILE_VIEWER.SUBTITLE(fileMessage),
|
|
116
|
+
onClose: onClose
|
|
117
|
+
}), /*#__PURE__*/_react.default.createElement(_FileViewerContent.default, {
|
|
118
|
+
topInset: headerTopInset ?? basicTopInset,
|
|
119
|
+
bottomInset: bottom,
|
|
120
|
+
type: fileType,
|
|
121
|
+
src: fileMessage.url,
|
|
122
|
+
maxZoom: maxZoom,
|
|
123
|
+
minZoom: minZoom
|
|
124
|
+
}), /*#__PURE__*/_react.default.createElement(_FileViewerFooter.default, {
|
|
125
|
+
bottomInset: bottom,
|
|
126
|
+
deleteShown: canDelete,
|
|
127
|
+
onPressDelete: onPressDeleteButton,
|
|
128
|
+
onPressDownload: onPressDownloadButton
|
|
129
|
+
}));
|
|
130
|
+
};
|
|
131
|
+
var _default = FileViewer;
|
|
132
|
+
exports.default = _default;
|
|
133
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_reactNativeSafeAreaContext","_uikitReactNativeFoundation","_uikitUtils","_useContext","_FileViewerContent","_interopRequireDefault","_FileViewerFooter","_FileViewerHeader","obj","__esModule","default","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","FileViewer","_ref","headerShown","maxZoom","minZoom","headerTopInset","fileMessage","onClose","onPressDownload","onPressDelete","deleteMessage","topInset","statusBarTranslucent","useHeaderStyle","bottom","useSafeAreaInsets","palette","useUIKitTheme","alert","useAlert","show","useToast","fileService","usePlatformService","currentUser","useSendbirdChat","STRINGS","useLocalization","fileType","getFileType","type","getFileExtension","url","canDelete","isMyMessage","userId","basicTopInset","onPressDeleteButton","title","LABELS","CHANNEL_MESSAGE_DELETE_CONFIRM_TITLE","buttons","text","CHANNEL_MESSAGE_DELETE_CONFIRM_CANCEL","CHANNEL_MESSAGE_DELETE_CONFIRM_OK","style","onPress","then","catch","TOAST","DELETE_MSG_ERROR","onPressDownloadButton","toMegabyte","size","DOWNLOAD_START","save","fileUrl","fileName","name","response","DOWNLOAD_OK","Logger","log","err","DOWNLOAD_ERROR","useEffect","createElement","Box","flex","backgroundColor","background700","StatusBar","barStyle","animated","FILE_VIEWER","TITLE","subtitle","SUBTITLE","bottomInset","src","deleteShown","_default","exports"],"sources":["index.tsx"],"sourcesContent":["import React, { useEffect } from 'react';\nimport { StatusBar } from 'react-native';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\n\nimport { Box, useAlert, useHeaderStyle, useToast, useUIKitTheme } from '@sendbird/uikit-react-native-foundation';\nimport type { SendbirdFileMessage } from '@sendbird/uikit-utils';\nimport { Logger, getFileExtension, getFileType, isMyMessage, toMegabyte } from '@sendbird/uikit-utils';\n\nimport { useLocalization, usePlatformService, useSendbirdChat } from '../../hooks/useContext';\nimport FileViewerContent from './FileViewerContent';\nimport FileViewerFooter from './FileViewerFooter';\nimport FileViewerHeader from './FileViewerHeader';\n\ntype Props = {\n fileMessage: SendbirdFileMessage;\n deleteMessage: () => Promise<void>;\n\n onClose: () => void;\n onPressDownload?: (message: SendbirdFileMessage) => void;\n onPressDelete?: (message: SendbirdFileMessage) => void;\n\n headerShown?: boolean;\n headerTopInset?: number;\n\n /** This prop is only available on the Image viewer */\n minZoom?: number;\n /** This prop is only available on the Image viewer */\n maxZoom?: number;\n};\n\nconst FileViewer = ({\n headerShown = true,\n maxZoom = 3,\n minZoom = 1,\n headerTopInset,\n fileMessage,\n onClose,\n onPressDownload,\n onPressDelete,\n deleteMessage,\n}: Props) => {\n const { topInset, statusBarTranslucent } = useHeaderStyle();\n const { bottom } = useSafeAreaInsets();\n const { palette } = useUIKitTheme();\n const { alert } = useAlert();\n const { show } = useToast();\n\n const { fileService } = usePlatformService();\n const { currentUser } = useSendbirdChat();\n const { STRINGS } = useLocalization();\n\n const fileType = getFileType(fileMessage.type || getFileExtension(fileMessage.url));\n const canDelete = isMyMessage(fileMessage, currentUser?.userId);\n const basicTopInset = statusBarTranslucent ? topInset : 0;\n\n const onPressDeleteButton = () => {\n if (!canDelete) return;\n\n if (onPressDelete) {\n onPressDelete(fileMessage);\n } else {\n alert({\n title: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE_CONFIRM_TITLE,\n buttons: [\n {\n text: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE_CONFIRM_CANCEL,\n },\n {\n text: STRINGS.LABELS.CHANNEL_MESSAGE_DELETE_CONFIRM_OK,\n style: 'destructive',\n onPress: () => {\n deleteMessage()\n .then(() => {\n onClose();\n })\n .catch(() => {\n show(STRINGS.TOAST.DELETE_MSG_ERROR, 'error');\n });\n },\n },\n ],\n });\n }\n };\n\n const onPressDownloadButton = () => {\n if (onPressDownload) {\n onPressDownload(fileMessage);\n } else {\n if (toMegabyte(fileMessage.size) > 4) {\n show(STRINGS.TOAST.DOWNLOAD_START, 'success');\n }\n\n fileService\n .save({ fileUrl: fileMessage.url, fileName: fileMessage.name, fileType: fileMessage.type })\n .then((response) => {\n show(STRINGS.TOAST.DOWNLOAD_OK, 'success');\n Logger.log('File saved to', response);\n })\n .catch((err) => {\n show(STRINGS.TOAST.DOWNLOAD_ERROR, 'error');\n Logger.log('File save failure', err);\n });\n }\n };\n\n useEffect(() => {\n if (fileType === 'file') onClose();\n }, []);\n\n return (\n <Box flex={1} backgroundColor={palette.background700}>\n <StatusBar barStyle={'light-content'} animated />\n <FileViewerHeader\n topInset={headerTopInset ?? basicTopInset}\n headerShown={headerShown}\n title={STRINGS.FILE_VIEWER.TITLE(fileMessage)}\n subtitle={STRINGS.FILE_VIEWER.SUBTITLE(fileMessage)}\n onClose={onClose}\n />\n <FileViewerContent\n topInset={headerTopInset ?? basicTopInset}\n bottomInset={bottom}\n type={fileType}\n src={fileMessage.url}\n maxZoom={maxZoom}\n minZoom={minZoom}\n />\n <FileViewerFooter\n bottomInset={bottom}\n deleteShown={canDelete}\n onPressDelete={onPressDeleteButton}\n onPressDownload={onPressDownloadButton}\n />\n </Box>\n );\n};\n\nexport default FileViewer;\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireDefault","require","_reactNative","_reactNativeSafeAreaContext","_uikitChatHooks","_uikitReactNativeFoundation","_uikitUtils","_constants","_useContext","obj","__esModule","default","BottomSheetReactionAddon","_ref","onClose","message","channel","emojiManager","currentUser","sdk","useSendbirdChat","updateReactionFocusedItem","openReactionList","useReaction","colors","useUIKitTheme","handlerId","useUniqHandlerId","left","right","useSafeAreaInsets","useChannelHandler","onReactionUpdated","eventChannel","event","url","messageId","msg","getMessage","includeReactions","channelUrl","channelType","emojiAll","allEmoji","slice","color","ui","reaction","createElement","View","style","styles","container","marginRight","marginLeft","map","_ref2","_message$reactions","_message$reactions$fi","key","reactionUserIds","reactions","find","it","userIds","currentUserIdx","indexOf","userId","UNKNOWN_USER_ID","reacted","onPress","deleteReaction","addReaction","Pressable","_ref3","pressed","button","backgroundColor","selected","background","enabled","Image","source","uri","emoji","_ref4","Icon","icon","onBackground03","createStyleSheet","paddingTop","paddingBottom","paddingHorizontal","flexDirection","justifyContent","width","height","padding","borderRadius","_default","exports"],"sources":["BottomSheetReactionAddon.tsx"],"sourcesContent":["import React from 'react';\nimport { Pressable, View } from 'react-native';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\n\nimport { useChannelHandler } from '@sendbird/uikit-chat-hooks';\nimport { Icon, Image, createStyleSheet, useUIKitTheme } from '@sendbird/uikit-react-native-foundation';\nimport { SendbirdBaseChannel, SendbirdBaseMessage, useUniqHandlerId } from '@sendbird/uikit-utils';\n\nimport { UNKNOWN_USER_ID } from '../../constants';\nimport { useReaction, useSendbirdChat } from '../../hooks/useContext';\n\ntype Props = {\n onClose: () => Promise<void>;\n channel: SendbirdBaseChannel;\n message: SendbirdBaseMessage;\n};\nconst BottomSheetReactionAddon = ({ onClose, message, channel }: Props) => {\n const { emojiManager, currentUser, sdk } = useSendbirdChat();\n const { updateReactionFocusedItem, openReactionList } = useReaction();\n const { colors } = useUIKitTheme();\n const handlerId = useUniqHandlerId('BottomSheetReactionAddon');\n const { left, right } = useSafeAreaInsets();\n\n useChannelHandler(sdk, handlerId, {\n async onReactionUpdated(eventChannel, event) {\n if (channel?.url === eventChannel.url && event.messageId === message?.messageId) {\n const msg = await sdk.message.getMessage({\n includeReactions: true,\n messageId: message.messageId,\n channelUrl: message.channelUrl,\n channelType: message.channelType,\n });\n if (msg) updateReactionFocusedItem({ message: msg });\n }\n },\n });\n\n const emojiAll = emojiManager.allEmoji.slice(0, 5);\n const color = colors.ui.reaction.default;\n\n return (\n <View style={[styles.container, { marginRight: right, marginLeft: left }]}>\n {emojiAll.map(({ key, url }) => {\n const reactionUserIds = message?.reactions?.find((it) => it.key === key)?.userIds ?? [];\n const currentUserIdx = reactionUserIds.indexOf(currentUser?.userId ?? UNKNOWN_USER_ID);\n const reacted = currentUserIdx > -1;\n\n const onPress = () => {\n if (reacted) channel.deleteReaction(message, key);\n else channel.addReaction(message, key);\n onClose();\n };\n\n return (\n <Pressable\n key={key}\n onPress={onPress}\n style={({ pressed }) => [\n styles.button,\n { backgroundColor: reacted || pressed ? color.selected.background : color.enabled.background },\n ]}\n >\n <Image source={{ uri: url }} style={styles.emoji} />\n </Pressable>\n );\n })}\n\n <Pressable\n onPress={async () => {\n await onClose();\n openReactionList({ channel, message });\n }}\n style={({ pressed }) => [\n styles.button,\n { backgroundColor: pressed ? color.selected.background : color.enabled.background },\n ]}\n >\n <Icon icon={'emoji-more'} style={styles.emoji} color={colors.onBackground03} />\n </Pressable>\n </View>\n );\n};\n\nconst styles = createStyleSheet({\n container: {\n paddingTop: 12,\n paddingBottom: 16,\n paddingHorizontal: 18,\n flexDirection: 'row',\n justifyContent: 'space-between',\n },\n button: {\n width: 44,\n height: 44,\n padding: 4,\n borderRadius: 8,\n },\n emoji: {\n width: '100%',\n height: '100%',\n },\n});\n\nexport default BottomSheetReactionAddon;\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AACA,IAAAE,2BAAA,GAAAF,OAAA;
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireDefault","require","_reactNative","_reactNativeSafeAreaContext","_uikitChatHooks","_uikitReactNativeFoundation","_uikitUtils","_constants","_useContext","obj","__esModule","default","BottomSheetReactionAddon","_ref","onClose","message","channel","emojiManager","currentUser","sdk","useSendbirdChat","updateReactionFocusedItem","openReactionList","useReaction","colors","useUIKitTheme","handlerId","useUniqHandlerId","left","right","useSafeAreaInsets","useChannelHandler","onReactionUpdated","eventChannel","event","url","messageId","msg","getMessage","includeReactions","channelUrl","channelType","emojiAll","allEmoji","slice","color","ui","reaction","createElement","View","style","styles","container","marginRight","marginLeft","map","_ref2","_message$reactions","_message$reactions$fi","key","reactionUserIds","reactions","find","it","userIds","currentUserIdx","indexOf","userId","UNKNOWN_USER_ID","reacted","onPress","deleteReaction","addReaction","Pressable","_ref3","pressed","button","backgroundColor","selected","background","enabled","Image","source","uri","emoji","_ref4","Icon","icon","onBackground03","createStyleSheet","paddingTop","paddingBottom","paddingHorizontal","flexDirection","justifyContent","width","height","padding","borderRadius","_default","exports"],"sources":["BottomSheetReactionAddon.tsx"],"sourcesContent":["import React from 'react';\nimport { Pressable, View } from 'react-native';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\n\nimport type { BaseMessage } from '@sendbird/chat/message';\nimport { useChannelHandler } from '@sendbird/uikit-chat-hooks';\nimport { Icon, Image, createStyleSheet, useUIKitTheme } from '@sendbird/uikit-react-native-foundation';\nimport { SendbirdBaseChannel, SendbirdBaseMessage, useUniqHandlerId } from '@sendbird/uikit-utils';\n\nimport { UNKNOWN_USER_ID } from '../../constants';\nimport { useReaction, useSendbirdChat } from '../../hooks/useContext';\n\ntype Props = {\n onClose: () => Promise<void>;\n channel: SendbirdBaseChannel;\n message: SendbirdBaseMessage;\n};\nconst BottomSheetReactionAddon = ({ onClose, message, channel }: Props) => {\n const { emojiManager, currentUser, sdk } = useSendbirdChat();\n const { updateReactionFocusedItem, openReactionList } = useReaction();\n const { colors } = useUIKitTheme();\n const handlerId = useUniqHandlerId('BottomSheetReactionAddon');\n const { left, right } = useSafeAreaInsets();\n\n useChannelHandler(sdk, handlerId, {\n async onReactionUpdated(eventChannel, event) {\n if (channel?.url === eventChannel.url && event.messageId === message?.messageId) {\n const msg = (await sdk.message.getMessage({\n includeReactions: true,\n messageId: message.messageId,\n channelUrl: message.channelUrl,\n channelType: message.channelType,\n })) as null | BaseMessage;\n if (msg) updateReactionFocusedItem({ message: msg });\n }\n },\n });\n\n const emojiAll = emojiManager.allEmoji.slice(0, 5);\n const color = colors.ui.reaction.default;\n\n return (\n <View style={[styles.container, { marginRight: right, marginLeft: left }]}>\n {emojiAll.map(({ key, url }) => {\n const reactionUserIds = message?.reactions?.find((it) => it.key === key)?.userIds ?? [];\n const currentUserIdx = reactionUserIds.indexOf(currentUser?.userId ?? UNKNOWN_USER_ID);\n const reacted = currentUserIdx > -1;\n\n const onPress = () => {\n if (reacted) channel.deleteReaction(message, key);\n else channel.addReaction(message, key);\n onClose();\n };\n\n return (\n <Pressable\n key={key}\n onPress={onPress}\n style={({ pressed }) => [\n styles.button,\n { backgroundColor: reacted || pressed ? color.selected.background : color.enabled.background },\n ]}\n >\n <Image source={{ uri: url }} style={styles.emoji} />\n </Pressable>\n );\n })}\n\n <Pressable\n onPress={async () => {\n await onClose();\n openReactionList({ channel, message });\n }}\n style={({ pressed }) => [\n styles.button,\n { backgroundColor: pressed ? color.selected.background : color.enabled.background },\n ]}\n >\n <Icon icon={'emoji-more'} style={styles.emoji} color={colors.onBackground03} />\n </Pressable>\n </View>\n );\n};\n\nconst styles = createStyleSheet({\n container: {\n paddingTop: 12,\n paddingBottom: 16,\n paddingHorizontal: 18,\n flexDirection: 'row',\n justifyContent: 'space-between',\n },\n button: {\n width: 44,\n height: 44,\n padding: 4,\n borderRadius: 8,\n },\n emoji: {\n width: '100%',\n height: '100%',\n },\n});\n\nexport default BottomSheetReactionAddon;\n"],"mappings":"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"}
|
|
@@ -54,9 +54,11 @@ const GroupChannelMessageList = props => {
|
|
|
54
54
|
});
|
|
55
55
|
} else {
|
|
56
56
|
if (props.channel.messageOffsetTimestamp <= createdAt) {
|
|
57
|
-
if (focusAnimated)
|
|
58
|
-
|
|
59
|
-
|
|
57
|
+
if (focusAnimated) {
|
|
58
|
+
props.onUpdateSearchItem({
|
|
59
|
+
startingPoint: createdAt
|
|
60
|
+
});
|
|
61
|
+
}
|
|
60
62
|
props.onResetMessageListWithStartingPoint(createdAt);
|
|
61
63
|
} else {
|
|
62
64
|
return false;
|
|
@@ -64,16 +66,15 @@ const GroupChannelMessageList = props => {
|
|
|
64
66
|
}
|
|
65
67
|
return true;
|
|
66
68
|
});
|
|
67
|
-
const scrollToBottom = (0, _uikitUtils.useFreshCallback)(function () {
|
|
69
|
+
const scrollToBottom = (0, _uikitUtils.useFreshCallback)(async function () {
|
|
68
70
|
let animated = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
|
|
69
71
|
if (props.hasNext()) {
|
|
70
72
|
props.onUpdateSearchItem(undefined);
|
|
71
73
|
props.onScrolledAwayFromBottom(false);
|
|
72
|
-
props.onResetMessageList(
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
});
|
|
74
|
+
await props.onResetMessageList();
|
|
75
|
+
props.onScrolledAwayFromBottom(false);
|
|
76
|
+
lazyScrollToBottom({
|
|
77
|
+
animated
|
|
77
78
|
});
|
|
78
79
|
} else {
|
|
79
80
|
lazyScrollToBottom({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireWildcard","require","_uikitChatHooks","_uikitReactNativeFoundation","_uikitUtils","_ChannelMessageList","_interopRequireDefault","_constants","_useContext","_moduleContext","obj","__esModule","default","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","_extends","assign","bind","target","i","arguments","length","source","apply","GroupChannelMessageList","props","toast","useToast","STRINGS","useLocalization","sdk","useSendbirdChat","setMessageToEdit","setMessageToReply","useContext","GroupChannelContexts","Fragment","subscribe","PubSub","flatListRef","lazyScrollToBottom","lazyScrollToIndex","MessageList","id","useUniqHandlerId","isFirstMount","useIsFirstMount","scrollToMessageWithCreatedAt","useFreshCallback","createdAt","focusAnimated","timeout","foundMessageIndex","messages","findIndex","it","isIncludedInList","setTimeout","onUpdateSearchItem","startingPoint","MESSAGE_FOCUS_ANIMATION_DELAY","index","animated","channel","messageOffsetTimestamp","onResetMessageListWithStartingPoint","scrollToBottom","undefined","hasNext","onScrolledAwayFromBottom","onResetMessageList","useChannelHandler","onReactionUpdated","event","isDifferentChannel","recentMessage","isRecentMessage","messageId","scrollReachedBottomAndCanScroll","scrolledAwayFromBottom","useEffect","_ref","type","searchItem","MESSAGE_SEARCH_SAFE_SCROLL_DELAY","onPressParentMessage","message","canScrollToParent","show","TOAST","FIND_PARENT_MSG_ERROR","createElement","ref","onReplyMessage","onEditMessage","onPressNewMessagesButton","onPressScrollToBottomButton","_default","React","memo","exports"],"sources":["GroupChannelMessageList.tsx"],"sourcesContent":["import React, { useContext, useEffect } from 'react';\n\nimport { useChannelHandler } from '@sendbird/uikit-chat-hooks';\nimport { useToast } from '@sendbird/uikit-react-native-foundation';\nimport type { SendbirdMessage } from '@sendbird/uikit-utils';\nimport { isDifferentChannel, useFreshCallback, useIsFirstMount, useUniqHandlerId } from '@sendbird/uikit-utils';\n\nimport ChannelMessageList from '../../../components/ChannelMessageList';\nimport { MESSAGE_FOCUS_ANIMATION_DELAY, MESSAGE_SEARCH_SAFE_SCROLL_DELAY } from '../../../constants';\nimport { useLocalization, useSendbirdChat } from '../../../hooks/useContext';\nimport { GroupChannelContexts } from '../module/moduleContext';\nimport type { GroupChannelProps } from '../types';\n\nconst GroupChannelMessageList = (props: GroupChannelProps['MessageList']) => {\n const toast = useToast();\n const { STRINGS } = useLocalization();\n const { sdk } = useSendbirdChat();\n const { setMessageToEdit, setMessageToReply } = useContext(GroupChannelContexts.Fragment);\n const { subscribe } = useContext(GroupChannelContexts.PubSub);\n const { flatListRef, lazyScrollToBottom, lazyScrollToIndex } = useContext(GroupChannelContexts.MessageList);\n\n const id = useUniqHandlerId('GroupChannelMessageList');\n const isFirstMount = useIsFirstMount();\n\n const scrollToMessageWithCreatedAt = useFreshCallback(\n (createdAt: number, focusAnimated: boolean, timeout: number): boolean => {\n const foundMessageIndex = props.messages.findIndex((it) => it.createdAt === createdAt);\n const isIncludedInList = foundMessageIndex > -1;\n\n if (isIncludedInList) {\n if (focusAnimated) {\n setTimeout(() => props.onUpdateSearchItem({ startingPoint: createdAt }), MESSAGE_FOCUS_ANIMATION_DELAY);\n }\n lazyScrollToIndex({ index: foundMessageIndex, animated: true, timeout });\n } else {\n if (props.channel.messageOffsetTimestamp <= createdAt) {\n if (focusAnimated) props.onUpdateSearchItem({ startingPoint: createdAt });\n props.onResetMessageListWithStartingPoint(createdAt);\n } else {\n return false;\n }\n }\n return true;\n },\n );\n\n const scrollToBottom = useFreshCallback((animated = false) => {\n if (props.hasNext()) {\n props.onUpdateSearchItem(undefined);\n props.onScrolledAwayFromBottom(false);\n\n props.onResetMessageList(() => {\n props.onScrolledAwayFromBottom(false);\n lazyScrollToBottom({ animated });\n });\n } else {\n lazyScrollToBottom({ animated });\n }\n });\n\n useChannelHandler(sdk, id, {\n onReactionUpdated(channel, event) {\n if (isDifferentChannel(channel, props.channel)) return;\n const recentMessage = props.messages[0];\n const isRecentMessage = recentMessage && recentMessage.messageId === event.messageId;\n const scrollReachedBottomAndCanScroll = !props.scrolledAwayFromBottom && !props.hasNext();\n if (isRecentMessage && scrollReachedBottomAndCanScroll) {\n lazyScrollToBottom({ animated: true, timeout: 250 });\n }\n },\n });\n\n useEffect(() => {\n return subscribe(({ type }) => {\n switch (type) {\n case 'TYPING_BUBBLE_RENDERED':\n case 'MESSAGES_RECEIVED': {\n if (!props.scrolledAwayFromBottom) {\n scrollToBottom(true);\n }\n break;\n }\n case 'MESSAGE_SENT_SUCCESS':\n case 'MESSAGE_SENT_PENDING': {\n scrollToBottom(false);\n break;\n }\n }\n });\n }, [props.scrolledAwayFromBottom]);\n\n useEffect(() => {\n // Only trigger once when message list mount with initial props.searchItem\n // - Search screen + searchItem > mount message list\n // - Reset message list + searchItem > re-mount message list\n if (isFirstMount && props.searchItem) {\n scrollToMessageWithCreatedAt(props.searchItem.startingPoint, false, MESSAGE_SEARCH_SAFE_SCROLL_DELAY);\n }\n }, [isFirstMount]);\n\n const onPressParentMessage = useFreshCallback((message: SendbirdMessage) => {\n const canScrollToParent = scrollToMessageWithCreatedAt(message.createdAt, true, 0);\n if (!canScrollToParent) toast.show(STRINGS.TOAST.FIND_PARENT_MSG_ERROR, 'error');\n });\n\n return (\n <ChannelMessageList\n {...props}\n ref={flatListRef}\n onReplyMessage={setMessageToReply}\n onEditMessage={setMessageToEdit}\n onPressParentMessage={onPressParentMessage}\n onPressNewMessagesButton={scrollToBottom}\n onPressScrollToBottomButton={scrollToBottom}\n />\n );\n};\n\nexport default React.memo(GroupChannelMessageList);\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireWildcard","require","_uikitChatHooks","_uikitReactNativeFoundation","_uikitUtils","_ChannelMessageList","_interopRequireDefault","_constants","_useContext","_moduleContext","obj","__esModule","default","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","_extends","assign","bind","target","i","arguments","length","source","apply","GroupChannelMessageList","props","toast","useToast","STRINGS","useLocalization","sdk","useSendbirdChat","setMessageToEdit","setMessageToReply","useContext","GroupChannelContexts","Fragment","subscribe","PubSub","flatListRef","lazyScrollToBottom","lazyScrollToIndex","MessageList","id","useUniqHandlerId","isFirstMount","useIsFirstMount","scrollToMessageWithCreatedAt","useFreshCallback","createdAt","focusAnimated","timeout","foundMessageIndex","messages","findIndex","it","isIncludedInList","setTimeout","onUpdateSearchItem","startingPoint","MESSAGE_FOCUS_ANIMATION_DELAY","index","animated","channel","messageOffsetTimestamp","onResetMessageListWithStartingPoint","scrollToBottom","undefined","hasNext","onScrolledAwayFromBottom","onResetMessageList","useChannelHandler","onReactionUpdated","event","isDifferentChannel","recentMessage","isRecentMessage","messageId","scrollReachedBottomAndCanScroll","scrolledAwayFromBottom","useEffect","_ref","type","searchItem","MESSAGE_SEARCH_SAFE_SCROLL_DELAY","onPressParentMessage","message","canScrollToParent","show","TOAST","FIND_PARENT_MSG_ERROR","createElement","ref","onReplyMessage","onEditMessage","onPressNewMessagesButton","onPressScrollToBottomButton","_default","React","memo","exports"],"sources":["GroupChannelMessageList.tsx"],"sourcesContent":["import React, { useContext, useEffect } from 'react';\n\nimport { useChannelHandler } from '@sendbird/uikit-chat-hooks';\nimport { useToast } from '@sendbird/uikit-react-native-foundation';\nimport type { SendbirdMessage } from '@sendbird/uikit-utils';\nimport { isDifferentChannel, useFreshCallback, useIsFirstMount, useUniqHandlerId } from '@sendbird/uikit-utils';\n\nimport ChannelMessageList from '../../../components/ChannelMessageList';\nimport { MESSAGE_FOCUS_ANIMATION_DELAY, MESSAGE_SEARCH_SAFE_SCROLL_DELAY } from '../../../constants';\nimport { useLocalization, useSendbirdChat } from '../../../hooks/useContext';\nimport { GroupChannelContexts } from '../module/moduleContext';\nimport type { GroupChannelProps } from '../types';\n\nconst GroupChannelMessageList = (props: GroupChannelProps['MessageList']) => {\n const toast = useToast();\n const { STRINGS } = useLocalization();\n const { sdk } = useSendbirdChat();\n const { setMessageToEdit, setMessageToReply } = useContext(GroupChannelContexts.Fragment);\n const { subscribe } = useContext(GroupChannelContexts.PubSub);\n const { flatListRef, lazyScrollToBottom, lazyScrollToIndex } = useContext(GroupChannelContexts.MessageList);\n\n const id = useUniqHandlerId('GroupChannelMessageList');\n const isFirstMount = useIsFirstMount();\n\n const scrollToMessageWithCreatedAt = useFreshCallback(\n (createdAt: number, focusAnimated: boolean, timeout: number): boolean => {\n const foundMessageIndex = props.messages.findIndex((it) => it.createdAt === createdAt);\n const isIncludedInList = foundMessageIndex > -1;\n\n if (isIncludedInList) {\n if (focusAnimated) {\n setTimeout(() => props.onUpdateSearchItem({ startingPoint: createdAt }), MESSAGE_FOCUS_ANIMATION_DELAY);\n }\n lazyScrollToIndex({ index: foundMessageIndex, animated: true, timeout });\n } else {\n if (props.channel.messageOffsetTimestamp <= createdAt) {\n if (focusAnimated) {\n props.onUpdateSearchItem({ startingPoint: createdAt });\n }\n props.onResetMessageListWithStartingPoint(createdAt);\n } else {\n return false;\n }\n }\n return true;\n },\n );\n\n const scrollToBottom = useFreshCallback(async (animated = false) => {\n if (props.hasNext()) {\n props.onUpdateSearchItem(undefined);\n props.onScrolledAwayFromBottom(false);\n\n await props.onResetMessageList();\n props.onScrolledAwayFromBottom(false);\n lazyScrollToBottom({ animated });\n } else {\n lazyScrollToBottom({ animated });\n }\n });\n\n useChannelHandler(sdk, id, {\n onReactionUpdated(channel, event) {\n if (isDifferentChannel(channel, props.channel)) return;\n const recentMessage = props.messages[0];\n const isRecentMessage = recentMessage && recentMessage.messageId === event.messageId;\n const scrollReachedBottomAndCanScroll = !props.scrolledAwayFromBottom && !props.hasNext();\n if (isRecentMessage && scrollReachedBottomAndCanScroll) {\n lazyScrollToBottom({ animated: true, timeout: 250 });\n }\n },\n });\n\n useEffect(() => {\n return subscribe(({ type }) => {\n switch (type) {\n case 'TYPING_BUBBLE_RENDERED':\n case 'MESSAGES_RECEIVED': {\n if (!props.scrolledAwayFromBottom) {\n scrollToBottom(true);\n }\n break;\n }\n case 'MESSAGE_SENT_SUCCESS':\n case 'MESSAGE_SENT_PENDING': {\n scrollToBottom(false);\n break;\n }\n }\n });\n }, [props.scrolledAwayFromBottom]);\n\n useEffect(() => {\n // Only trigger once when message list mount with initial props.searchItem\n // - Search screen + searchItem > mount message list\n // - Reset message list + searchItem > re-mount message list\n if (isFirstMount && props.searchItem) {\n scrollToMessageWithCreatedAt(props.searchItem.startingPoint, false, MESSAGE_SEARCH_SAFE_SCROLL_DELAY);\n }\n }, [isFirstMount]);\n\n const onPressParentMessage = useFreshCallback((message: SendbirdMessage) => {\n const canScrollToParent = scrollToMessageWithCreatedAt(message.createdAt, true, 0);\n if (!canScrollToParent) toast.show(STRINGS.TOAST.FIND_PARENT_MSG_ERROR, 'error');\n });\n\n return (\n <ChannelMessageList\n {...props}\n ref={flatListRef}\n onReplyMessage={setMessageToReply}\n onEditMessage={setMessageToEdit}\n onPressParentMessage={onPressParentMessage}\n onPressNewMessagesButton={scrollToBottom}\n onPressScrollToBottomButton={scrollToBottom}\n />\n );\n};\n\nexport default React.memo(GroupChannelMessageList);\n"],"mappings":"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"}
|
|
@@ -1 +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 SendbirdFileMessage,\n SendbirdFileMessageCreateParams,\n SendbirdFileMessageUpdateParams,\n SendbirdGroupChannel,\n SendbirdMessage,\n SendbirdUser,\n SendbirdUserMessage,\n SendbirdUserMessageCreateParams,\n SendbirdUserMessageUpdateParams,\n} from '@sendbird/uikit-utils';\n\nimport type { ChannelInputProps, SuggestedMentionListProps } from '../../components/ChannelInput';\nimport type { ChannelMessageListProps } from '../../components/ChannelMessageList';\nimport type { CommonComponent } from '../../types';\nimport type { PubSub } from '../../utils/pubsub';\n\nexport interface GroupChannelProps {\n Fragment: {\n channel: SendbirdGroupChannel;\n onChannelDeleted: () => void;\n onPressHeaderLeft: GroupChannelProps['Header']['onPressHeaderLeft'];\n onPressHeaderRight: GroupChannelProps['Header']['onPressHeaderRight'];\n onPressMediaMessage?: GroupChannelProps['MessageList']['onPressMediaMessage'];\n\n onBeforeSendUserMessage?: OnBeforeHandler<SendbirdUserMessageCreateParams>;\n onBeforeSendFileMessage?: OnBeforeHandler<SendbirdFileMessageCreateParams>;\n onBeforeUpdateUserMessage?: OnBeforeHandler<SendbirdUserMessageUpdateParams>;\n onBeforeUpdateFileMessage?: OnBeforeHandler<SendbirdFileMessageUpdateParams>;\n\n renderMessage?: GroupChannelProps['MessageList']['renderMessage'];\n renderNewMessagesButton?: GroupChannelProps['MessageList']['renderNewMessagesButton'];\n renderScrollToBottomButton?: GroupChannelProps['MessageList']['renderScrollToBottomButton'];\n\n enableTypingIndicator?: GroupChannelProps['Provider']['enableTypingIndicator'];\n enableMessageGrouping?: GroupChannelProps['MessageList']['enableMessageGrouping'];\n\n keyboardAvoidOffset?: GroupChannelProps['Provider']['keyboardAvoidOffset'];\n flatListProps?: GroupChannelProps['MessageList']['flatListProps'];\n sortComparator?: UseGroupChannelMessagesOptions['sortComparator'];\n collectionCreator?: UseGroupChannelMessagesOptions['collectionCreator'];\n\n searchItem?: GroupChannelProps['MessageList']['searchItem'];\n };\n Header: {\n shouldHideRight: () => boolean;\n onPressHeaderLeft: () => void;\n onPressHeaderRight: () => void;\n };\n MessageList: Pick<\n ChannelMessageListProps<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 | 'renderNewMessagesButton'\n | 'renderScrollToBottomButton'\n | 'flatListProps'\n | 'hasNext'\n | 'searchItem'\n > & {\n onResetMessageList: (
|
|
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 SendbirdFileMessage,\n SendbirdFileMessageCreateParams,\n SendbirdFileMessageUpdateParams,\n SendbirdGroupChannel,\n SendbirdMessage,\n SendbirdUser,\n SendbirdUserMessage,\n SendbirdUserMessageCreateParams,\n SendbirdUserMessageUpdateParams,\n} from '@sendbird/uikit-utils';\n\nimport type { ChannelInputProps, SuggestedMentionListProps } from '../../components/ChannelInput';\nimport type { ChannelMessageListProps } from '../../components/ChannelMessageList';\nimport type { CommonComponent } from '../../types';\nimport type { PubSub } from '../../utils/pubsub';\n\nexport interface GroupChannelProps {\n Fragment: {\n channel: SendbirdGroupChannel;\n onChannelDeleted: () => void;\n onPressHeaderLeft: GroupChannelProps['Header']['onPressHeaderLeft'];\n onPressHeaderRight: GroupChannelProps['Header']['onPressHeaderRight'];\n onPressMediaMessage?: GroupChannelProps['MessageList']['onPressMediaMessage'];\n\n onBeforeSendUserMessage?: OnBeforeHandler<SendbirdUserMessageCreateParams>;\n onBeforeSendFileMessage?: OnBeforeHandler<SendbirdFileMessageCreateParams>;\n onBeforeUpdateUserMessage?: OnBeforeHandler<SendbirdUserMessageUpdateParams>;\n onBeforeUpdateFileMessage?: OnBeforeHandler<SendbirdFileMessageUpdateParams>;\n\n renderMessage?: GroupChannelProps['MessageList']['renderMessage'];\n renderNewMessagesButton?: GroupChannelProps['MessageList']['renderNewMessagesButton'];\n renderScrollToBottomButton?: GroupChannelProps['MessageList']['renderScrollToBottomButton'];\n\n enableTypingIndicator?: GroupChannelProps['Provider']['enableTypingIndicator'];\n enableMessageGrouping?: GroupChannelProps['MessageList']['enableMessageGrouping'];\n\n keyboardAvoidOffset?: GroupChannelProps['Provider']['keyboardAvoidOffset'];\n flatListProps?: GroupChannelProps['MessageList']['flatListProps'];\n sortComparator?: UseGroupChannelMessagesOptions['sortComparator'];\n collectionCreator?: UseGroupChannelMessagesOptions['collectionCreator'];\n\n searchItem?: GroupChannelProps['MessageList']['searchItem'];\n };\n Header: {\n shouldHideRight: () => boolean;\n onPressHeaderLeft: () => void;\n onPressHeaderRight: () => void;\n };\n MessageList: Pick<\n ChannelMessageListProps<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 | 'renderNewMessagesButton'\n | 'renderScrollToBottomButton'\n | 'flatListProps'\n | 'hasNext'\n | 'searchItem'\n > & {\n onResetMessageList: () => Promise<void>;\n onResetMessageListWithStartingPoint: (startingPoint: number) => Promise<void>;\n\n // Changing the search item will trigger the focus animation on messages.\n onUpdateSearchItem: (searchItem?: GroupChannelProps['MessageList']['searchItem']) => void;\n };\n Input: Pick<\n ChannelInputProps,\n | 'shouldRenderInput'\n | 'onPressSendUserMessage'\n | 'onPressSendFileMessage'\n | 'onPressUpdateUserMessage'\n | 'onPressUpdateFileMessage'\n | 'SuggestedMentionList'\n | 'AttachmentsButton'\n >;\n\n SuggestedMentionList: SuggestedMentionListProps;\n Provider: {\n channel: SendbirdGroupChannel;\n enableTypingIndicator: boolean;\n keyboardAvoidOffset?: number;\n groupChannelPubSub: PubSub<GroupChannelPubSubContextPayload>;\n\n messages: SendbirdMessage[];\n // Changing the search item will trigger the focus animation on messages.\n onUpdateSearchItem: (searchItem?: GroupChannelProps['MessageList']['searchItem']) => void;\n };\n}\n\n/**\n * Internal context for GroupChannel\n * For example, the developer can create a custom header\n * with getting data from the domain context\n * */\nexport interface GroupChannelContextsType {\n Fragment: React.Context<{\n headerTitle: string;\n keyboardAvoidOffset?: number;\n channel: SendbirdGroupChannel;\n messageToEdit?: SendbirdUserMessage | SendbirdFileMessage;\n setMessageToEdit: (msg?: SendbirdUserMessage | SendbirdFileMessage) => void;\n messageToReply?: SendbirdUserMessage | SendbirdFileMessage;\n setMessageToReply: (msg?: SendbirdUserMessage | SendbirdFileMessage) => void;\n }>;\n TypingIndicator: React.Context<{\n typingUsers: SendbirdUser[];\n }>;\n PubSub: React.Context<PubSub<GroupChannelPubSubContextPayload>>;\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(GroupChannelContexts.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}\nexport interface GroupChannelModule {\n Provider: CommonComponent<GroupChannelProps['Provider']>;\n Header: CommonComponent<GroupChannelProps['Header']>;\n MessageList: CommonComponent<GroupChannelProps['MessageList']>;\n Input: CommonComponent<GroupChannelProps['Input']>;\n SuggestedMentionList: CommonComponent<GroupChannelProps['SuggestedMentionList']>;\n StatusEmpty: CommonComponent;\n StatusLoading: CommonComponent;\n}\n\nexport type GroupChannelFragment = CommonComponent<GroupChannelProps['Fragment']>;\n\nexport type GroupChannelPubSubContextPayload =\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":""}
|
|
@@ -97,7 +97,10 @@ const styles = (0, _uikitReactNativeFoundation.createStyleSheet)({
|
|
|
97
97
|
flex: 1,
|
|
98
98
|
height: '100%',
|
|
99
99
|
fontSize: 14,
|
|
100
|
-
|
|
100
|
+
paddingLeft: 0,
|
|
101
|
+
paddingTop: 0,
|
|
102
|
+
paddingBottom: 0,
|
|
103
|
+
paddingRight: 0
|
|
101
104
|
}
|
|
102
105
|
});
|
|
103
106
|
var _default = MessageSearchHeader;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_uikitReactNativeFoundation","_useContext","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","default","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","MessageSearchHeader","_ref","keyword","onChangeKeyword","onPressHeaderLeft","onPressHeaderRight","HeaderComponent","useHeaderStyle","colors","useUIKitTheme","STRINGS","useLocalization","inputRef","useRef","inputColor","ui","input","active","searchEnabled","length","useEffect","setTimeout","_inputRef$current","current","focus","Platform","select","ios","createElement","clearTitleMargin","title","Box","flex","height","alignItems","backgroundColor","background","borderRadius","paddingHorizontal","flexDirection","Icon","size","icon","color","onBackground03","containerStyle","styles","searchIcon","TextInput","disableFullscreenUI","enablesReturnKeyAutomatically","ref","returnKeyType","onSubmitEditing","selectionColor","primary","placeholder","MESSAGE_SEARCH","HEADER_INPUT_PLACEHOLDER","placeholderTextColor","style","text","value","onChangeText","PressBox","onPress","clearIcon","left","onPressLeft","right","Text","button","onBackground04","HEADER_RIGHT","onPressRight","undefined","createStyleSheet","marginRight","marginLeft","fontSize","
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_uikitReactNativeFoundation","_useContext","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","default","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","MessageSearchHeader","_ref","keyword","onChangeKeyword","onPressHeaderLeft","onPressHeaderRight","HeaderComponent","useHeaderStyle","colors","useUIKitTheme","STRINGS","useLocalization","inputRef","useRef","inputColor","ui","input","active","searchEnabled","length","useEffect","setTimeout","_inputRef$current","current","focus","Platform","select","ios","createElement","clearTitleMargin","title","Box","flex","height","alignItems","backgroundColor","background","borderRadius","paddingHorizontal","flexDirection","Icon","size","icon","color","onBackground03","containerStyle","styles","searchIcon","TextInput","disableFullscreenUI","enablesReturnKeyAutomatically","ref","returnKeyType","onSubmitEditing","selectionColor","primary","placeholder","MESSAGE_SEARCH","HEADER_INPUT_PLACEHOLDER","placeholderTextColor","style","text","value","onChangeText","PressBox","onPress","clearIcon","left","onPressLeft","right","Text","button","onBackground04","HEADER_RIGHT","onPressRight","undefined","createStyleSheet","marginRight","marginLeft","fontSize","paddingLeft","paddingTop","paddingBottom","paddingRight","_default","exports"],"sources":["MessageSearchHeader.tsx"],"sourcesContent":["import React, { useEffect, useRef } from 'react';\nimport { Platform, TextInput } from 'react-native';\n\nimport {\n Box,\n Icon,\n PressBox,\n Text,\n createStyleSheet,\n useHeaderStyle,\n useUIKitTheme,\n} from '@sendbird/uikit-react-native-foundation';\n\nimport { useLocalization } from '../../../hooks/useContext';\nimport type { MessageSearchProps } from '../types';\n\nconst MessageSearchHeader = ({\n keyword,\n onChangeKeyword,\n onPressHeaderLeft,\n onPressHeaderRight,\n}: MessageSearchProps['Header']) => {\n const { HeaderComponent } = useHeaderStyle();\n const { colors } = useUIKitTheme();\n const { STRINGS } = useLocalization();\n\n const inputRef = useRef<TextInput>(null);\n const inputColor = colors.ui.input.default.active;\n const searchEnabled = keyword.length > 0;\n\n useEffect(() => {\n setTimeout(() => {\n inputRef.current?.focus();\n }, Platform.select({ ios: 500, default: 0 }));\n }, []);\n\n return (\n <HeaderComponent\n clearTitleMargin\n title={\n <Box\n flex={1}\n height={36}\n alignItems={'center'}\n backgroundColor={inputColor.background}\n borderRadius={24}\n paddingHorizontal={10}\n flexDirection={'row'}\n >\n <Icon size={24} icon={'search'} color={colors.onBackground03} containerStyle={styles.searchIcon} />\n <TextInput\n disableFullscreenUI\n enablesReturnKeyAutomatically\n ref={inputRef}\n returnKeyType={'search'}\n onSubmitEditing={() => onPressHeaderRight()}\n selectionColor={colors.primary}\n placeholder={STRINGS.MESSAGE_SEARCH.HEADER_INPUT_PLACEHOLDER}\n placeholderTextColor={inputColor.placeholder}\n style={[styles.input, { color: inputColor.text }]}\n value={keyword}\n onChangeText={onChangeKeyword}\n />\n {searchEnabled && (\n <PressBox onPress={() => onChangeKeyword('')}>\n <Icon size={18} icon={'remove'} color={colors.onBackground03} containerStyle={styles.clearIcon} />\n </PressBox>\n )}\n </Box>\n }\n left={<Icon icon={'arrow-left'} />}\n onPressLeft={onPressHeaderLeft}\n right={\n <Text button color={searchEnabled ? colors.primary : colors.onBackground04}>\n {STRINGS.MESSAGE_SEARCH.HEADER_RIGHT}\n </Text>\n }\n onPressRight={searchEnabled ? onPressHeaderRight : undefined}\n />\n );\n};\n\nconst styles = createStyleSheet({\n searchIcon: {\n marginRight: 8,\n },\n clearIcon: {\n marginLeft: 8,\n },\n input: {\n flex: 1,\n height: '100%',\n fontSize: 14,\n paddingLeft: 0,\n paddingTop: 0,\n paddingBottom: 0,\n paddingRight: 0,\n },\n});\n\nexport default MessageSearchHeader;\n"],"mappings":"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"}
|
|
@@ -141,8 +141,10 @@ const styles = (0, _uikitReactNativeFoundation.createStyleSheet)({
|
|
|
141
141
|
},
|
|
142
142
|
input: {
|
|
143
143
|
flex: 1,
|
|
144
|
-
|
|
145
|
-
|
|
144
|
+
paddingLeft: 0,
|
|
145
|
+
paddingRight: 0,
|
|
146
|
+
paddingTop: 0,
|
|
147
|
+
paddingBottom: 0
|
|
146
148
|
},
|
|
147
149
|
removeButtonContainer: {
|
|
148
150
|
alignItems: 'flex-end',
|
package/lib/commonjs/domain/openChannelCreate/component/OpenChannelCreateProfileInput.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireDefault","require","_uikitReactNativeFoundation","_Icon","_uikitUtils","_useContext","_SBUError","_SBUUtils","obj","__esModule","default","OpenChannelCreateProfileInput","_ref","channelName","channelCoverFile","onChangeChannelName","onChangeChannelCoverFile","toast","useToast","openSheet","useBottomSheet","palette","colors","typography","useUIKitTheme","safeArea","useSafeAreaPadding","STRINGS","useLocalization","fileService","usePlatformService","onPressPhotoButton","sheetItems","title","OPEN_CHANNEL_CREATE","DIALOG_IMAGE_MENU_CAMERA","onPress","mediaFile","openCamera","mediaType","onOpenFailure","error","code","SBUError","CODE","ERR_PERMISSIONS_DENIED","alert","DIALOG","ALERT_PERMISSIONS_TITLE","message","ALERT_PERMISSIONS_MESSAGE","LABELS","PERMISSION_CAMERA","PERMISSION_APP_NAME","buttons","text","ALERT_PERMISSIONS_OK","SBUUtils","openSettings","show","TOAST","OPEN_CAMERA_ERROR","DIALOG_IMAGE_MENU_PHOTO_LIBRARY","mediaFiles","openMediaLibrary","selectionLimit","PERMISSION_DEVICE_STORAGE","OPEN_PHOTO_LIBRARY_ERROR","unshift","DIALOG_IMAGE_MENU_REMOVE","titleColor","undefined","createElement","Box","flexDirection","paddingVertical","paddingLeft","paddingRight","PressBox","style","styles","coverButton","activeOpacity","ifThenOr","Boolean","Avatar","size","uri","Icon","icon","borderBottomColor","onBackground04","inputContainer","TextInput","placeholder","PLACEHOLDER","subtitle1","input","backgroundColor","transparent","value","onChangeText","length","removeButtonContainer","color","onBackground03","createStyleSheet","marginRight","flex","alignItems","borderBottomWidth","paddingHorizontal","justifyContent","marginLeft","_default","exports"],"sources":["OpenChannelCreateProfileInput.tsx"],"sourcesContent":["import React from 'react';\n\nimport {\n Avatar,\n BottomSheetItem,\n Box,\n PressBox,\n TextInput,\n createStyleSheet,\n useBottomSheet,\n useToast,\n useUIKitTheme,\n} from '@sendbird/uikit-react-native-foundation';\nimport Icon from '@sendbird/uikit-react-native-foundation/src/components/Icon';\nimport { ifThenOr, useSafeAreaPadding } from '@sendbird/uikit-utils';\n\nimport { useLocalization, usePlatformService } from '../../../hooks/useContext';\nimport SBUError from '../../../libs/SBUError';\nimport SBUUtils from '../../../libs/SBUUtils';\nimport type { OpenChannelCreateProps } from '../types';\n\nconst OpenChannelCreateProfileInput = ({\n channelName,\n channelCoverFile,\n onChangeChannelName,\n onChangeChannelCoverFile,\n}: OpenChannelCreateProps['ProfileInput']) => {\n const toast = useToast();\n const { openSheet } = useBottomSheet();\n const { palette, colors, typography } = useUIKitTheme();\n const safeArea = useSafeAreaPadding(['left', 'right']);\n\n const { STRINGS } = useLocalization();\n const { fileService } = usePlatformService();\n\n const onPressPhotoButton = () => {\n const sheetItems: BottomSheetItem['sheetItems'] = [\n {\n title: STRINGS.OPEN_CHANNEL_CREATE.DIALOG_IMAGE_MENU_CAMERA,\n onPress: async () => {\n const mediaFile = await fileService.openCamera({\n mediaType: 'photo',\n onOpenFailure: (error) => {\n if (error.code === SBUError.CODE.ERR_PERMISSIONS_DENIED) {\n alert({\n title: STRINGS.DIALOG.ALERT_PERMISSIONS_TITLE,\n message: STRINGS.DIALOG.ALERT_PERMISSIONS_MESSAGE(\n STRINGS.LABELS.PERMISSION_CAMERA,\n STRINGS.LABELS.PERMISSION_APP_NAME,\n ),\n buttons: [{ text: STRINGS.DIALOG.ALERT_PERMISSIONS_OK, onPress: () => SBUUtils.openSettings() }],\n });\n } else {\n toast.show(STRINGS.TOAST.OPEN_CAMERA_ERROR, 'error');\n }\n },\n });\n\n if (mediaFile) onChangeChannelCoverFile(mediaFile);\n },\n },\n {\n title: STRINGS.OPEN_CHANNEL_CREATE.DIALOG_IMAGE_MENU_PHOTO_LIBRARY,\n onPress: async () => {\n const mediaFiles = await fileService.openMediaLibrary({\n selectionLimit: 1,\n mediaType: 'photo',\n onOpenFailure: (error) => {\n if (error.code === SBUError.CODE.ERR_PERMISSIONS_DENIED) {\n alert({\n title: STRINGS.DIALOG.ALERT_PERMISSIONS_TITLE,\n message: STRINGS.DIALOG.ALERT_PERMISSIONS_MESSAGE(\n STRINGS.LABELS.PERMISSION_DEVICE_STORAGE,\n STRINGS.LABELS.PERMISSION_APP_NAME,\n ),\n buttons: [{ text: STRINGS.DIALOG.ALERT_PERMISSIONS_OK, onPress: () => SBUUtils.openSettings() }],\n });\n } else {\n toast.show(STRINGS.TOAST.OPEN_PHOTO_LIBRARY_ERROR, 'error');\n }\n },\n });\n if (mediaFiles?.[0]) onChangeChannelCoverFile(mediaFiles[0]);\n },\n },\n ];\n\n if (channelCoverFile) {\n sheetItems.unshift({\n title: STRINGS.OPEN_CHANNEL_CREATE.DIALOG_IMAGE_MENU_REMOVE,\n titleColor: colors.error,\n onPress: () => {\n onChangeChannelCoverFile(undefined);\n },\n });\n }\n\n openSheet({ sheetItems });\n };\n\n return (\n <Box\n flexDirection={'row'}\n paddingVertical={16}\n paddingLeft={16 + safeArea.paddingLeft}\n paddingRight={16 + safeArea.paddingRight}\n >\n <PressBox onPress={onPressPhotoButton} style={styles.coverButton} activeOpacity={0.8}>\n {ifThenOr(\n Boolean(channelCoverFile),\n <Avatar size={72} uri={channelCoverFile?.uri} />,\n <Avatar.Icon size={72} icon={'camera'} />,\n )}\n </PressBox>\n <Box borderBottomColor={colors.onBackground04} style={styles.inputContainer}>\n <TextInput\n placeholder={STRINGS.OPEN_CHANNEL_CREATE.PLACEHOLDER}\n style={[typography.subtitle1, styles.input, { backgroundColor: palette.transparent }]}\n value={channelName}\n onChangeText={onChangeChannelName}\n />\n\n {channelName.length > 0 && (\n <PressBox onPress={() => onChangeChannelName('')} style={styles.removeButtonContainer}>\n <Icon color={colors.onBackground03} size={22} icon={'remove'} />\n </PressBox>\n )}\n </Box>\n </Box>\n );\n};\n\nconst styles = createStyleSheet({\n coverButton: {\n marginRight: 20,\n },\n inputContainer: {\n flex: 1,\n flexDirection: 'row',\n alignItems: 'center',\n borderBottomWidth: 1,\n },\n input: {\n flex: 1,\n paddingVertical: 0,\n paddingHorizontal: 0,\n },\n removeButtonContainer: {\n alignItems: 'flex-end',\n justifyContent: 'center',\n marginLeft: 8,\n },\n});\n\nexport default OpenChannelCreateProfileInput;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireDefault","require","_uikitReactNativeFoundation","_Icon","_uikitUtils","_useContext","_SBUError","_SBUUtils","obj","__esModule","default","OpenChannelCreateProfileInput","_ref","channelName","channelCoverFile","onChangeChannelName","onChangeChannelCoverFile","toast","useToast","openSheet","useBottomSheet","palette","colors","typography","useUIKitTheme","safeArea","useSafeAreaPadding","STRINGS","useLocalization","fileService","usePlatformService","onPressPhotoButton","sheetItems","title","OPEN_CHANNEL_CREATE","DIALOG_IMAGE_MENU_CAMERA","onPress","mediaFile","openCamera","mediaType","onOpenFailure","error","code","SBUError","CODE","ERR_PERMISSIONS_DENIED","alert","DIALOG","ALERT_PERMISSIONS_TITLE","message","ALERT_PERMISSIONS_MESSAGE","LABELS","PERMISSION_CAMERA","PERMISSION_APP_NAME","buttons","text","ALERT_PERMISSIONS_OK","SBUUtils","openSettings","show","TOAST","OPEN_CAMERA_ERROR","DIALOG_IMAGE_MENU_PHOTO_LIBRARY","mediaFiles","openMediaLibrary","selectionLimit","PERMISSION_DEVICE_STORAGE","OPEN_PHOTO_LIBRARY_ERROR","unshift","DIALOG_IMAGE_MENU_REMOVE","titleColor","undefined","createElement","Box","flexDirection","paddingVertical","paddingLeft","paddingRight","PressBox","style","styles","coverButton","activeOpacity","ifThenOr","Boolean","Avatar","size","uri","Icon","icon","borderBottomColor","onBackground04","inputContainer","TextInput","placeholder","PLACEHOLDER","subtitle1","input","backgroundColor","transparent","value","onChangeText","length","removeButtonContainer","color","onBackground03","createStyleSheet","marginRight","flex","alignItems","borderBottomWidth","paddingTop","paddingBottom","justifyContent","marginLeft","_default","exports"],"sources":["OpenChannelCreateProfileInput.tsx"],"sourcesContent":["import React from 'react';\n\nimport {\n Avatar,\n BottomSheetItem,\n Box,\n PressBox,\n TextInput,\n createStyleSheet,\n useBottomSheet,\n useToast,\n useUIKitTheme,\n} from '@sendbird/uikit-react-native-foundation';\nimport Icon from '@sendbird/uikit-react-native-foundation/src/components/Icon';\nimport { ifThenOr, useSafeAreaPadding } from '@sendbird/uikit-utils';\n\nimport { useLocalization, usePlatformService } from '../../../hooks/useContext';\nimport SBUError from '../../../libs/SBUError';\nimport SBUUtils from '../../../libs/SBUUtils';\nimport type { OpenChannelCreateProps } from '../types';\n\nconst OpenChannelCreateProfileInput = ({\n channelName,\n channelCoverFile,\n onChangeChannelName,\n onChangeChannelCoverFile,\n}: OpenChannelCreateProps['ProfileInput']) => {\n const toast = useToast();\n const { openSheet } = useBottomSheet();\n const { palette, colors, typography } = useUIKitTheme();\n const safeArea = useSafeAreaPadding(['left', 'right']);\n\n const { STRINGS } = useLocalization();\n const { fileService } = usePlatformService();\n\n const onPressPhotoButton = () => {\n const sheetItems: BottomSheetItem['sheetItems'] = [\n {\n title: STRINGS.OPEN_CHANNEL_CREATE.DIALOG_IMAGE_MENU_CAMERA,\n onPress: async () => {\n const mediaFile = await fileService.openCamera({\n mediaType: 'photo',\n onOpenFailure: (error) => {\n if (error.code === SBUError.CODE.ERR_PERMISSIONS_DENIED) {\n alert({\n title: STRINGS.DIALOG.ALERT_PERMISSIONS_TITLE,\n message: STRINGS.DIALOG.ALERT_PERMISSIONS_MESSAGE(\n STRINGS.LABELS.PERMISSION_CAMERA,\n STRINGS.LABELS.PERMISSION_APP_NAME,\n ),\n buttons: [{ text: STRINGS.DIALOG.ALERT_PERMISSIONS_OK, onPress: () => SBUUtils.openSettings() }],\n });\n } else {\n toast.show(STRINGS.TOAST.OPEN_CAMERA_ERROR, 'error');\n }\n },\n });\n\n if (mediaFile) onChangeChannelCoverFile(mediaFile);\n },\n },\n {\n title: STRINGS.OPEN_CHANNEL_CREATE.DIALOG_IMAGE_MENU_PHOTO_LIBRARY,\n onPress: async () => {\n const mediaFiles = await fileService.openMediaLibrary({\n selectionLimit: 1,\n mediaType: 'photo',\n onOpenFailure: (error) => {\n if (error.code === SBUError.CODE.ERR_PERMISSIONS_DENIED) {\n alert({\n title: STRINGS.DIALOG.ALERT_PERMISSIONS_TITLE,\n message: STRINGS.DIALOG.ALERT_PERMISSIONS_MESSAGE(\n STRINGS.LABELS.PERMISSION_DEVICE_STORAGE,\n STRINGS.LABELS.PERMISSION_APP_NAME,\n ),\n buttons: [{ text: STRINGS.DIALOG.ALERT_PERMISSIONS_OK, onPress: () => SBUUtils.openSettings() }],\n });\n } else {\n toast.show(STRINGS.TOAST.OPEN_PHOTO_LIBRARY_ERROR, 'error');\n }\n },\n });\n if (mediaFiles?.[0]) onChangeChannelCoverFile(mediaFiles[0]);\n },\n },\n ];\n\n if (channelCoverFile) {\n sheetItems.unshift({\n title: STRINGS.OPEN_CHANNEL_CREATE.DIALOG_IMAGE_MENU_REMOVE,\n titleColor: colors.error,\n onPress: () => {\n onChangeChannelCoverFile(undefined);\n },\n });\n }\n\n openSheet({ sheetItems });\n };\n\n return (\n <Box\n flexDirection={'row'}\n paddingVertical={16}\n paddingLeft={16 + safeArea.paddingLeft}\n paddingRight={16 + safeArea.paddingRight}\n >\n <PressBox onPress={onPressPhotoButton} style={styles.coverButton} activeOpacity={0.8}>\n {ifThenOr(\n Boolean(channelCoverFile),\n <Avatar size={72} uri={channelCoverFile?.uri} />,\n <Avatar.Icon size={72} icon={'camera'} />,\n )}\n </PressBox>\n <Box borderBottomColor={colors.onBackground04} style={styles.inputContainer}>\n <TextInput\n placeholder={STRINGS.OPEN_CHANNEL_CREATE.PLACEHOLDER}\n style={[typography.subtitle1, styles.input, { backgroundColor: palette.transparent }]}\n value={channelName}\n onChangeText={onChangeChannelName}\n />\n\n {channelName.length > 0 && (\n <PressBox onPress={() => onChangeChannelName('')} style={styles.removeButtonContainer}>\n <Icon color={colors.onBackground03} size={22} icon={'remove'} />\n </PressBox>\n )}\n </Box>\n </Box>\n );\n};\n\nconst styles = createStyleSheet({\n coverButton: {\n marginRight: 20,\n },\n inputContainer: {\n flex: 1,\n flexDirection: 'row',\n alignItems: 'center',\n borderBottomWidth: 1,\n },\n input: {\n flex: 1,\n paddingLeft: 0,\n paddingRight: 0,\n paddingTop: 0,\n paddingBottom: 0,\n },\n removeButtonContainer: {\n alignItems: 'flex-end',\n justifyContent: 'center',\n marginLeft: 8,\n },\n});\n\nexport default OpenChannelCreateProfileInput;\n"],"mappings":"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"}
|
|
@@ -6,8 +6,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.default = void 0;
|
|
7
7
|
var _react = _interopRequireWildcard(require("react"));
|
|
8
8
|
var _message = require("@sendbird/chat/message");
|
|
9
|
-
var _uikitChatHooks = require("@sendbird/uikit-chat-hooks");
|
|
10
9
|
var _uikitReactNativeFoundation = require("@sendbird/uikit-react-native-foundation");
|
|
10
|
+
var _uikitTools = require("@sendbird/uikit-tools");
|
|
11
11
|
var _uikitUtils = require("@sendbird/uikit-utils");
|
|
12
12
|
var _GroupChannelMessageRenderer = _interopRequireWildcard(require("../components/GroupChannelMessageRenderer"));
|
|
13
13
|
var _NewMessagesButton = _interopRequireDefault(require("../components/NewMessagesButton"));
|
|
@@ -65,8 +65,8 @@ const createGroupChannelFragment = initModule => {
|
|
|
65
65
|
messages,
|
|
66
66
|
newMessages,
|
|
67
67
|
resetNewMessages,
|
|
68
|
-
|
|
69
|
-
|
|
68
|
+
loadNext,
|
|
69
|
+
loadPrevious,
|
|
70
70
|
hasNext,
|
|
71
71
|
sendFileMessage,
|
|
72
72
|
sendUserMessage,
|
|
@@ -75,7 +75,7 @@ const createGroupChannelFragment = initModule => {
|
|
|
75
75
|
resendMessage,
|
|
76
76
|
deleteMessage,
|
|
77
77
|
resetWithStartingPoint
|
|
78
|
-
} = (0,
|
|
78
|
+
} = (0, _uikitTools.useGroupChannelMessages)(sdk, channel, {
|
|
79
79
|
shouldCountNewMessages: () => scrolledAwayFromBottomRef.current,
|
|
80
80
|
onMessagesReceived(messages) {
|
|
81
81
|
groupChannelPubSub.publish({
|
|
@@ -93,12 +93,13 @@ const createGroupChannelFragment = initModule => {
|
|
|
93
93
|
}
|
|
94
94
|
});
|
|
95
95
|
},
|
|
96
|
+
onChannelDeleted,
|
|
97
|
+
onCurrentUserBanned: onChannelDeleted,
|
|
96
98
|
collectionCreator,
|
|
97
99
|
sortComparator,
|
|
98
|
-
|
|
100
|
+
markAsRead: _uikitUtils.confirmAndMarkAsRead,
|
|
99
101
|
replyType,
|
|
100
|
-
startingPoint: internalSearchItem === null || internalSearchItem === void 0 ? void 0 : internalSearchItem.startingPoint
|
|
101
|
-
enableCollectionWithoutLocalCache: true
|
|
102
|
+
startingPoint: internalSearchItem === null || internalSearchItem === void 0 ? void 0 : internalSearchItem.startingPoint
|
|
102
103
|
});
|
|
103
104
|
const onBlurFragment = () => {
|
|
104
105
|
return Promise.allSettled([playerService.reset(), recorderService.reset()]);
|
|
@@ -131,11 +132,11 @@ const createGroupChannelFragment = initModule => {
|
|
|
131
132
|
},
|
|
132
133
|
...flatListProps
|
|
133
134
|
}), [flatListProps]);
|
|
134
|
-
const onResetMessageList = (0, _react.useCallback)(
|
|
135
|
-
resetWithStartingPoint(Number.MAX_SAFE_INTEGER
|
|
135
|
+
const onResetMessageList = (0, _react.useCallback)(async () => {
|
|
136
|
+
return await resetWithStartingPoint(Number.MAX_SAFE_INTEGER);
|
|
136
137
|
}, []);
|
|
137
|
-
const onResetMessageListWithStartingPoint = (0, _react.useCallback)(
|
|
138
|
-
resetWithStartingPoint(startingPoint
|
|
138
|
+
const onResetMessageListWithStartingPoint = (0, _react.useCallback)(async startingPoint => {
|
|
139
|
+
return await resetWithStartingPoint(startingPoint);
|
|
139
140
|
}, []);
|
|
140
141
|
|
|
141
142
|
// Changing the search item will trigger the focus animation on messages.
|
|
@@ -207,8 +208,8 @@ const createGroupChannelFragment = initModule => {
|
|
|
207
208
|
renderMessage: renderItem,
|
|
208
209
|
messages: messages,
|
|
209
210
|
newMessages: newMessages,
|
|
210
|
-
onTopReached:
|
|
211
|
-
onBottomReached:
|
|
211
|
+
onTopReached: loadPrevious,
|
|
212
|
+
onBottomReached: loadNext,
|
|
212
213
|
hasNext: hasNext,
|
|
213
214
|
scrolledAwayFromBottom: scrolledAwayFromBottom,
|
|
214
215
|
onScrolledAwayFromBottom: onScrolledAwayFromBottom,
|