@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.
120 lines (119 loc) • 4.84 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _react = _interopRequireDefault(require("react"));
var _uikitReactNativeFoundation = require("@sendbird/uikit-react-native-foundation");
var _uikitUtils = require("@sendbird/uikit-utils");
var _useContext = require("../../hooks/useContext");
var _OpenChannelMessageDateSeparator = _interopRequireDefault(require("./OpenChannelMessageDateSeparator"));
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
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); }
const OpenChannelMessageRenderer = ({
channel,
message,
onPress,
onLongPress,
onShowUserProfile,
enableMessageGrouping,
prevMessage,
nextMessage
}) => {
const handlers = (0, _useContext.useSBUHandlers)();
const {
sbOptions
} = (0, _useContext.useSendbirdChat)();
const {
STRINGS
} = (0, _useContext.useLocalization)();
const {
mediaService
} = (0, _useContext.usePlatformService)();
const {
groupWithPrev
} = (0, _uikitUtils.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 ((0, _uikitUtils.getMessageType)(message)) {
case 'admin':
{
return /*#__PURE__*/_react.default.createElement(_uikitReactNativeFoundation.OpenChannelMessage.Admin, _extends({
message: message
}, messageProps));
}
case 'user':
{
return /*#__PURE__*/_react.default.createElement(_uikitReactNativeFoundation.OpenChannelMessage.User, _extends({
message: message
}, messageProps));
}
case 'user.opengraph':
{
if (sbOptions.uikitWithAppInfo.openChannel.channel.enableOgtag) {
return /*#__PURE__*/_react.default.createElement(_uikitReactNativeFoundation.OpenChannelMessage.OpenGraphUser, _extends({
message: message
}, messageProps));
} else {
return /*#__PURE__*/_react.default.createElement(_uikitReactNativeFoundation.OpenChannelMessage.User, _extends({
message: message
}, messageProps));
}
}
case 'file':
case 'file.voice':
case 'file.audio':
{
return /*#__PURE__*/_react.default.createElement(_uikitReactNativeFoundation.OpenChannelMessage.File, _extends({
message: message
}, messageProps));
}
case 'file.image':
{
return /*#__PURE__*/_react.default.createElement(_uikitReactNativeFoundation.OpenChannelMessage.ImageFile, _extends({
message: message
}, messageProps));
}
case 'file.video':
{
return /*#__PURE__*/_react.default.createElement(_uikitReactNativeFoundation.OpenChannelMessage.VideoFile, _extends({
message: message,
fetchThumbnailFromVideoSource: uri => mediaService.getVideoThumbnail({
url: uri,
timeMills: 1000
})
}, messageProps));
}
case 'unknown':
default:
{
return /*#__PURE__*/_react.default.createElement(_uikitReactNativeFoundation.OpenChannelMessage.Unknown, _extends({
message: message
}, messageProps));
}
}
};
return /*#__PURE__*/_react.default.createElement(_uikitReactNativeFoundation.Box, null, /*#__PURE__*/_react.default.createElement(_OpenChannelMessageDateSeparator.default, {
message: message,
prevMessage: prevMessage
}), renderMessage());
};
var _default = exports.default = /*#__PURE__*/_react.default.memo(OpenChannelMessageRenderer);
//# sourceMappingURL=index.js.map
;