UNPKG

@sendbird/uikit-react-native

Version:

Sendbird UIKit for React Native: A feature-rich and customizable chat UI kit with messaging, channel management, and user authentication.

113 lines 4.19 kB
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } import React from 'react'; import { Box, OpenChannelMessage } from '@sendbird/uikit-react-native-foundation'; import { calcMessageGrouping, getMessageType } from '@sendbird/uikit-utils'; import { useLocalization, usePlatformService, useSBUHandlers, useSendbirdChat } from '../../hooks/useContext'; import OpenChannelMessageDateSeparator from './OpenChannelMessageDateSeparator'; const OpenChannelMessageRenderer = ({ channel, message, onPress, onLongPress, onShowUserProfile, enableMessageGrouping, prevMessage, nextMessage }) => { const handlers = useSBUHandlers(); const { sbOptions } = useSendbirdChat(); const { STRINGS } = useLocalization(); const { mediaService } = usePlatformService(); const { groupWithPrev } = calcMessageGrouping(Boolean(enableMessageGrouping), message, prevMessage, nextMessage); const messageProps = { channel, onPress, onLongPress, onPressURL: url => handlers.onOpenURL(url), onPressAvatar: () => 'sender' in message && (onShowUserProfile === null || onShowUserProfile === void 0 ? void 0 : onShowUserProfile(message.sender, { hideMessageButton: true })), grouped: groupWithPrev, strings: { edited: STRINGS.OPEN_CHANNEL.MESSAGE_BUBBLE_EDITED_POSTFIX, senderName: 'sender' in message && message.sender.nickname || STRINGS.LABELS.USER_NO_NAME, sentDate: STRINGS.OPEN_CHANNEL.MESSAGE_BUBBLE_TIME(message), fileName: message.isFileMessage() ? STRINGS.OPEN_CHANNEL.MESSAGE_BUBBLE_FILE_TITLE(message) : '', unknownTitle: STRINGS.OPEN_CHANNEL.MESSAGE_BUBBLE_UNKNOWN_TITLE(message), unknownDescription: STRINGS.OPEN_CHANNEL.MESSAGE_BUBBLE_UNKNOWN_DESC(message) } }; const renderMessage = () => { switch (getMessageType(message)) { case 'admin': { return /*#__PURE__*/React.createElement(OpenChannelMessage.Admin, _extends({ message: message }, messageProps)); } case 'user': { return /*#__PURE__*/React.createElement(OpenChannelMessage.User, _extends({ message: message }, messageProps)); } case 'user.opengraph': { if (sbOptions.uikitWithAppInfo.openChannel.channel.enableOgtag) { return /*#__PURE__*/React.createElement(OpenChannelMessage.OpenGraphUser, _extends({ message: message }, messageProps)); } else { return /*#__PURE__*/React.createElement(OpenChannelMessage.User, _extends({ message: message }, messageProps)); } } case 'file': case 'file.voice': case 'file.audio': { return /*#__PURE__*/React.createElement(OpenChannelMessage.File, _extends({ message: message }, messageProps)); } case 'file.image': { return /*#__PURE__*/React.createElement(OpenChannelMessage.ImageFile, _extends({ message: message }, messageProps)); } case 'file.video': { return /*#__PURE__*/React.createElement(OpenChannelMessage.VideoFile, _extends({ message: message, fetchThumbnailFromVideoSource: uri => mediaService.getVideoThumbnail({ url: uri, timeMills: 1000 }) }, messageProps)); } case 'unknown': default: { return /*#__PURE__*/React.createElement(OpenChannelMessage.Unknown, _extends({ message: message }, messageProps)); } } }; return /*#__PURE__*/React.createElement(Box, null, /*#__PURE__*/React.createElement(OpenChannelMessageDateSeparator, { message: message, prevMessage: prevMessage }), renderMessage()); }; export default /*#__PURE__*/React.memo(OpenChannelMessageRenderer); //# sourceMappingURL=index.js.map