UNPKG

stream-chat-react-native-core

Version:

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

152 lines 6.8 kB
Object.defineProperty(exports, "__esModule", { value: true }); exports.GiphyImage = void 0; var _react = _interopRequireWildcard(require("react")); var _reactNative = require("react-native"); var _ComponentsContext = require("../../../contexts/componentsContext/ComponentsContext"); var _MessagesContext = require("../../../contexts/messagesContext/MessagesContext"); var _ThemeContext = require("../../../contexts/themeContext/ThemeContext"); var _useLoadingImage2 = require("../../../hooks/useLoadingImage"); var _utils = require("../../../utils/utils"); var _GiphyBadge = require("../../ui/Badge/GiphyBadge"); var _jsxRuntime = require("react/jsx-runtime"); var _jsxFileName = "/home/runner/work/stream-chat-react-native/stream-chat-react-native/package/src/components/Attachment/Giphy/GiphyImage.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 GiphyImageWithContext = props => { var attachment = props.attachment, giphyVersion = props.giphyVersion, _props$ImageComponent = props.ImageComponent, ImageComponent = _props$ImageComponent === void 0 ? _reactNative.Image : _props$ImageComponent, _props$preview = props.preview, preview = _props$preview === void 0 ? false : _props$preview; var _useComponentsContext = (0, _ComponentsContext.useComponentsContext)(), ImageLoadingFailedIndicator = _useComponentsContext.ImageLoadingFailedIndicator, ImageLoadingIndicator = _useComponentsContext.ImageLoadingIndicator; var giphyData = attachment.giphy, image_url = attachment.image_url, thumb_url = attachment.thumb_url, type = attachment.type; var _useLoadingImage = (0, _useLoadingImage2.useLoadingImage)(), isLoadingImage = _useLoadingImage.isLoadingImage, isLoadingImageError = _useLoadingImage.isLoadingImageError, setLoadingImage = _useLoadingImage.setLoadingImage, setLoadingImageError = _useLoadingImage.setLoadingImageError, onReloadImage = _useLoadingImage.onReloadImage; var _useTheme = (0, _ThemeContext.useTheme)(), _useTheme$theme$messa = _useTheme.theme.messageItemView.giphy, giphyMask = _useTheme$theme$messa.giphyMask, giphy = _useTheme$theme$messa.giphy, imageIndicatorContainer = _useTheme$theme$messa.imageIndicatorContainer; var styles = useStyles(); var onLoadStart = () => { setLoadingImage(true); setLoadingImageError(false); }; var onLoadEnd = () => { setLoadingImage(false); }; var onError = () => { setLoadingImage(false); setLoadingImageError(true); }; var uri = image_url || thumb_url; var giphyDimensions = {}; if (type === 'giphy' && giphyData) { var giphyVersionInfo = giphyData[giphyVersion]; uri = giphyVersionInfo.url; giphyDimensions.height = parseFloat(giphyVersionInfo.height); giphyDimensions.width = parseFloat(giphyVersionInfo.width); } if (!uri) { return null; } return (0, _jsxRuntime.jsxs)(_reactNative.View, { style: styles.imageContainer, children: [(0, _jsxRuntime.jsx)(ImageComponent, { accessibilityLabel: preview ? 'Giphy Attachment Preview Image' : 'Giphy Attachment Image', onError: onError, onLoadEnd: onLoadEnd, onLoadStart: onLoadStart, resizeMode: "contain", source: { uri: (0, _utils.makeImageCompatibleUrl)(uri) }, style: [styles.giphy, giphyDimensions, giphy] }), isLoadingImageError && (0, _jsxRuntime.jsx)(_reactNative.View, { style: [_reactNative.StyleSheet.absoluteFill, styles.imageIndicatorContainer, imageIndicatorContainer], children: (0, _jsxRuntime.jsx)(ImageLoadingFailedIndicator, { onReloadImage: onReloadImage }) }), isLoadingImage && (0, _jsxRuntime.jsx)(_reactNative.View, { style: [_reactNative.StyleSheet.absoluteFill, styles.imageIndicatorContainer, imageIndicatorContainer], children: (0, _jsxRuntime.jsx)(ImageLoadingIndicator, {}) }), (0, _jsxRuntime.jsx)(_reactNative.View, { style: [styles.giphyMask, giphyMask], children: (0, _jsxRuntime.jsx)(_GiphyBadge.GiphyBadge, {}) })] }); }; 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; var _nextProps$attachment = nextProps.attachment, nextActions = _nextProps$attachment.actions, nextImageUrl = _nextProps$attachment.image_url, nextThumbUrl = _nextProps$attachment.thumb_url, nextGiphyVersion = nextProps.giphyVersion; 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; } return true; }; var MemoizedGiphyImage = _react.default.memo(GiphyImageWithContext, areEqual); var GiphyImage = props => { var _useComponentsContext2 = (0, _ComponentsContext.useComponentsContext)(), ImageComponent = _useComponentsContext2.ImageComponent; var _useMessagesContext = (0, _MessagesContext.useMessagesContext)(), giphyVersion = _useMessagesContext.giphyVersion; return (0, _jsxRuntime.jsx)(MemoizedGiphyImage, { giphyVersion: giphyVersion, ImageComponent: ImageComponent, ...props }); }; exports.GiphyImage = GiphyImage; GiphyImage.displayName = 'GiphyImage'; var useStyles = () => { return (0, _react.useMemo)(() => { return _reactNative.StyleSheet.create({ giphyMask: { bottom: 8, left: 8, position: 'absolute' }, giphy: { alignSelf: 'center' }, imageContainer: {}, imageIndicatorContainer: { alignItems: 'center', justifyContent: 'center' } }); }, []); }; //# sourceMappingURL=GiphyImage.js.map