UNPKG

stream-chat-react-native-core

Version:

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

230 lines 8.93 kB
Object.defineProperty(exports, "__esModule", { value: true }); exports.Giphy = void 0; var _react = _interopRequireWildcard(require("react")); var _reactNative = require("react-native"); var _GiphyImage = require("./GiphyImage"); 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 _TranslationContext = require("../../../contexts/translationContext/TranslationContext"); var _theme = require("../../../theme"); var _ui = require("../../ui/"); var _jsxRuntime = require("react/jsx-runtime"); var _jsxFileName = "/home/runner/work/stream-chat-react-native/stream-chat-react-native/package/src/components/Attachment/Giphy/Giphy.tsx"; function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); } var GiphyWithContext = props => { var additionalPressableProps = props.additionalPressableProps, attachment = props.attachment, giphyVersion = props.giphyVersion, handleAction = props.handleAction, isMyMessage = props.isMyMessage, onLongPress = props.onLongPress, onPress = props.onPress, onPressIn = props.onPressIn, preventPress = props.preventPress; var actions = attachment.actions, image_url = attachment.image_url, thumb_url = attachment.thumb_url; var _useComponentsContext = (0, _ComponentsContext.useComponentsContext)(), icons = _useComponentsContext.icons; var _useTranslationContex = (0, _TranslationContext.useTranslationContext)(), t = _useTranslationContex.t; var _useTheme = (0, _ThemeContext.useTheme)(), _useTheme$theme = _useTheme.theme, _useTheme$theme$messa = _useTheme$theme.messageItemView.giphy, actionButtonContainer = _useTheme$theme$messa.actionButtonContainer, actionButton = _useTheme$theme$messa.actionButton, container = _useTheme$theme$messa.container, giphyHeaderText = _useTheme$theme$messa.giphyHeaderText, header = _useTheme$theme$messa.header, semantics = _useTheme$theme.semantics; var styles = useStyles({ hasActions: !!actions, isMyMessage }); var uri = image_url || thumb_url; if (!uri) { return null; } return actions ? (0, _jsxRuntime.jsxs)(_reactNative.View, { style: [styles.container, styles.actionContainer, container], testID: "giphy-action-attachment", children: [(0, _jsxRuntime.jsxs)(_reactNative.View, { style: [styles.header, header], children: [(0, _jsxRuntime.jsx)(icons.EyeOpen, { height: 16, width: 16, fill: semantics.chatTextOutgoing }), (0, _jsxRuntime.jsx)(_reactNative.Text, { style: [styles.headerText, giphyHeaderText], children: t('Only visible to you') })] }), (0, _jsxRuntime.jsx)(_GiphyImage.GiphyImage, { attachment: attachment, giphyVersion: giphyVersion, preview: true }), (0, _jsxRuntime.jsx)(_reactNative.View, { style: [styles.actionButtonContainer, actionButtonContainer], children: actions.map(action => { var isPrimaryAction = action.text === 'Send'; return (0, _jsxRuntime.jsx)(_ui.Button, { variant: isPrimaryAction ? 'primary' : 'secondary', type: "ghost", size: "sm", testID: `${action.value}-action-button`, onPress: () => { if (action?.name && action?.value && handleAction) { handleAction(action.name, action.value); } }, iconOnly: false, label: action.text, style: [styles.actionButton, actionButton] }, action.value); }) })] }) : (0, _jsxRuntime.jsx)(_reactNative.Pressable, { disabled: preventPress, onLongPress: event => { if (onLongPress) { onLongPress({ emitter: 'giphy', event }); } }, onPress: event => { if (onPress) { onPress({ emitter: 'giphy', event }); } }, onPressIn: event => { if (onPressIn) { onPressIn({ emitter: 'giphy', event }); } }, testID: "giphy-attachment", style: [styles.container, container], ...additionalPressableProps, children: (0, _jsxRuntime.jsx)(_GiphyImage.GiphyImage, { attachment: attachment, giphyVersion: giphyVersion }) }); }; var areEqual = (prevProps, nextProps) => { var _prevProps$attachment = prevProps.attachment, prevActions = _prevProps$attachment.actions, prevImageUrl = _prevProps$attachment.image_url, prevThumbUrl = _prevProps$attachment.thumb_url, prevGiphyVersion = prevProps.giphyVersion, prevIsMyMessage = prevProps.isMyMessage; var _nextProps$attachment = nextProps.attachment, nextActions = _nextProps$attachment.actions, nextImageUrl = _nextProps$attachment.image_url, nextThumbUrl = _nextProps$attachment.thumb_url, nextGiphyVersion = nextProps.giphyVersion, nextIsMyMessage = nextProps.isMyMessage; var imageUrlEqual = prevImageUrl === nextImageUrl; if (!imageUrlEqual) { return false; } var thumbUrlEqual = prevThumbUrl === nextThumbUrl; if (!thumbUrlEqual) { return false; } var actionsEqual = Array.isArray(prevActions) === Array.isArray(nextActions) && (Array.isArray(prevActions) && Array.isArray(nextActions) && prevActions.length === nextActions.length || prevActions === nextActions); if (!actionsEqual) { return false; } var giphyVersionEqual = prevGiphyVersion === nextGiphyVersion; if (!giphyVersionEqual) { return false; } var isMyMessageEqual = prevIsMyMessage === nextIsMyMessage; if (!isMyMessageEqual) { return false; } return true; }; var MemoizedGiphy = _react.default.memo(GiphyWithContext, areEqual); var Giphy = props => { var _useMessageContext = (0, _MessageContext.useMessageContext)(), handleAction = _useMessageContext.handleAction, isMyMessage = _useMessageContext.isMyMessage, onLongPress = _useMessageContext.onLongPress, onPress = _useMessageContext.onPress, onPressIn = _useMessageContext.onPressIn, preventPress = _useMessageContext.preventPress; var _useMessagesContext = (0, _MessagesContext.useMessagesContext)(), additionalPressableProps = _useMessagesContext.additionalPressableProps, giphyVersion = _useMessagesContext.giphyVersion; return (0, _jsxRuntime.jsx)(MemoizedGiphy, { additionalPressableProps, giphyVersion, handleAction, isMyMessage, onLongPress, onPress, onPressIn, preventPress, ...props }); }; exports.Giphy = Giphy; Giphy.displayName = 'Giphy{messageItemView{giphy}}'; var useStyles = ({ hasActions, isMyMessage }) => { var _useTheme2 = (0, _ThemeContext.useTheme)(), semantics = _useTheme2.theme.semantics; return (0, _react.useMemo)(() => { return _reactNative.StyleSheet.create({ container: { backgroundColor: hasActions ? semantics.chatBgOutgoing : isMyMessage ? semantics.chatBgAttachmentOutgoing : semantics.chatBgAttachmentIncoming, borderRadius: _theme.primitives.radiusLg, maxWidth: 256, overflow: 'hidden' }, actionButtonContainer: { alignSelf: 'center', flexDirection: 'row', gap: _theme.primitives.spacingXs, paddingHorizontal: _theme.primitives.spacingXxs, justifyContent: 'center' }, actionContainer: {}, actionButton: { alignSelf: 'flex-start', flexGrow: 0, flexShrink: 0, width: undefined, minHeight: _theme.components.buttonHitTargetMinHeight }, header: { alignItems: 'center', flexDirection: 'row', paddingHorizontal: _theme.primitives.spacingSm, paddingVertical: _theme.primitives.spacingXs, gap: _theme.primitives.spacingXs }, headerText: { color: semantics.chatTextOutgoing, fontSize: _theme.primitives.typographyFontSizeSm, fontWeight: _theme.primitives.typographyFontWeightSemiBold, lineHeight: _theme.primitives.typographyLineHeightTight } }); }, [hasActions, isMyMessage, semantics]); }; //# sourceMappingURL=Giphy.js.map