UNPKG

stream-chat-react-native-core

Version:

The official React Native and Expo components for Stream Chat, a service for building chat applications

169 lines 7.54 kB
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.MessageTextContainer = void 0; var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties")); var _react = _interopRequireDefault(require("react")); var _reactNative = require("react-native"); var _renderText = require("./utils/renderText"); var _ComponentsContext = require("../../../contexts/componentsContext/ComponentsContext"); var _MessageContext = require("../../../contexts/messageContext/MessageContext"); var _MessagesContext = require("../../../contexts/messagesContext/MessagesContext"); var _ThemeContext = require("../../../contexts/themeContext/ThemeContext"); var _useTranslatedMessage = require("../../../hooks/useTranslatedMessage"); var _theme = require("../../../theme"); var _jsxRuntime = require("react/jsx-runtime"); var _jsxFileName = "/home/runner/work/stream-chat-react-native/stream-chat-react-native/package/src/components/Message/MessageItemView/MessageTextContainer.tsx"; var _excluded = ["onlyEmojiMarkdown"]; var styles = _reactNative.StyleSheet.create({ textContainer: { maxWidth: 256, paddingHorizontal: _theme.primitives.spacingXxs } }); var MessageTextContainerWithContext = props => { var theme = (0, _ThemeContext.useTheme)(); var hasInteractiveAccessibilityContent = props.hasInteractiveAccessibilityContent, isMyMessage = props.isMyMessage, markdownRules = props.markdownRules, _props$markdownStyles = props.markdownStyles, markdownStylesProp = _props$markdownStyles === void 0 ? {} : _props$markdownStyles, message = props.message, messageOverlay = props.messageOverlay, messageTextNumberOfLines = props.messageTextNumberOfLines, onLongPress = props.onLongPress, onlyEmojis = props.onlyEmojis, onPress = props.onPress, preventPress = props.preventPress, _props$styles = props.styles, stylesProp = _props$styles === void 0 ? {} : _props$styles; var _useComponentsContext = (0, _ComponentsContext.useComponentsContext)(), MessageText = _useComponentsContext.MessageText; var _theme$theme = theme.theme, _theme$theme$messageI = _theme$theme.messageItemView.content, markdown = _theme$theme$messageI.markdown, _theme$theme$messageI2 = _theme$theme$messageI.textContainer, onlyEmojiMarkdown = _theme$theme$messageI2.onlyEmojiMarkdown, textContainer = (0, _objectWithoutProperties2.default)(_theme$theme$messageI2, _excluded), semantics = _theme$theme.semantics; var translatedMessage = (0, _useTranslatedMessage.useTranslatedMessage)(message); if (!message.text) { return null; } var markdownStyles = { ...markdown, ...markdownStylesProp }; return (0, _jsxRuntime.jsx)(_reactNative.View, { accessible: hasInteractiveAccessibilityContent || undefined, accessibilityRole: hasInteractiveAccessibilityContent ? 'text' : undefined, style: [styles.textContainer, textContainer, stylesProp.textContainer], testID: "message-text-container", children: MessageText ? (0, _jsxRuntime.jsx)(MessageText, { ...props, renderText: _renderText.renderText, theme: theme }) : (0, _renderText.renderText)({ isMyMessage, semantics, markdownRules, markdownStyles: { ...markdownStyles, ...(onlyEmojis ? onlyEmojiMarkdown : {}) }, message: translatedMessage, messageOverlay, messageTextNumberOfLines, onLongPress, onlyEmojis, onPress, preventPress }) }); }; var areEqual = (prevProps, nextProps) => { var prevHasInteractiveAccessibilityContent = prevProps.hasInteractiveAccessibilityContent, prevMarkdownStyles = prevProps.markdownStyles, prevMessage = prevProps.message, prevMyMessageTheme = prevProps.myMessageTheme, prevOnlyEmojis = prevProps.onlyEmojis; var nextHasInteractiveAccessibilityContent = nextProps.hasInteractiveAccessibilityContent, nextMarkdownStyles = nextProps.markdownStyles, nextMessage = nextProps.message, nextMyMessageTheme = nextProps.myMessageTheme, nextOnlyEmojis = nextProps.onlyEmojis; if (prevHasInteractiveAccessibilityContent !== nextHasInteractiveAccessibilityContent) { return false; } var messageStatusEqual = prevMessage.status === nextMessage.status; if (!messageStatusEqual) { return false; } var messageTextEqual = prevMessage.text === nextMessage.text && prevMessage.i18n === nextMessage.i18n; if (!messageTextEqual) { return false; } var onlyEmojisEqual = prevOnlyEmojis === nextOnlyEmojis; if (!onlyEmojisEqual) { return false; } var mentionedUsersEqual = prevMessage.mentioned_users?.length === nextMessage.mentioned_users?.length && (nextMessage.mentioned_users?.length === 0 || prevMessage.mentioned_users?.length && nextMessage.mentioned_users?.length && prevMessage.mentioned_users[0].name === nextMessage.mentioned_users[0].name); if (!mentionedUsersEqual) { return false; } var mentionedBroadcastEqual = prevMessage.mentioned_channel === nextMessage.mentioned_channel && prevMessage.mentioned_here === nextMessage.mentioned_here; if (!mentionedBroadcastEqual) { return false; } var joinIds = values => (values ?? []).join('|'); var mentionedRolesEqual = joinIds(prevMessage.mentioned_roles) === joinIds(nextMessage.mentioned_roles); if (!mentionedRolesEqual) { return false; } var groupIds = m => joinIds(m.mentioned_groups?.map(g => g.id) ?? m.mentioned_group_ids); var mentionedGroupsEqual = groupIds(prevMessage) === groupIds(nextMessage); if (!mentionedGroupsEqual) { return false; } var markdownStylesEqual = prevMarkdownStyles === nextMarkdownStyles || Object.keys(prevMarkdownStyles || {}).length === 0 && Object.keys(nextMarkdownStyles || {}).length === 0 || JSON.stringify(prevMarkdownStyles) === JSON.stringify(nextMarkdownStyles); if (!markdownStylesEqual) { return false; } var messageThemeEqual = JSON.stringify(prevMyMessageTheme) === JSON.stringify(nextMyMessageTheme); if (!messageThemeEqual) { return false; } return true; }; var MemoizedMessageTextContainer = _react.default.memo(MessageTextContainerWithContext, areEqual); var MessageTextContainer = props => { var _useMessageContext = (0, _MessageContext.useMessageContext)(), hasInteractiveAccessibilityContent = _useMessageContext.hasInteractiveAccessibilityContent, isMyMessage = _useMessageContext.isMyMessage, message = _useMessageContext.message, onLongPress = _useMessageContext.onLongPress, onlyEmojis = _useMessageContext.onlyEmojis, onPress = _useMessageContext.onPress, preventPress = _useMessageContext.preventPress; var _useMessagesContext = (0, _MessagesContext.useMessagesContext)(), markdownRules = _useMessagesContext.markdownRules, messageTextNumberOfLines = _useMessagesContext.messageTextNumberOfLines, myMessageTheme = _useMessagesContext.myMessageTheme; return (0, _jsxRuntime.jsx)(MemoizedMessageTextContainer, { hasInteractiveAccessibilityContent, isMyMessage, markdownRules, message, messageTextNumberOfLines, myMessageTheme, onLongPress, onlyEmojis, onPress, preventPress, ...props }); }; exports.MessageTextContainer = MessageTextContainer; MessageTextContainer.displayName = 'MessageTextContainer{messageItemView{content}}'; //# sourceMappingURL=MessageTextContainer.js.map