UNPKG

@sendbird/uikit-react-native-foundation

Version:

A foundational UI kit for building chat-enabled React Native apps.

80 lines (79 loc) 3.38 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _react = _interopRequireWildcard(require("react")); var _reactNative = require("react-native"); var _uikitUtils = require("@sendbird/uikit-utils"); var _createStyleSheet = _interopRequireDefault(require("../../styles/createStyleSheet")); var _useUIKitTheme = _interopRequireDefault(require("../../theme/useUIKitTheme")); var _Box = _interopRequireDefault(require("../Box")); var _Icon = _interopRequireDefault(require("../Icon")); var _Image = _interopRequireDefault(require("../Image")); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } 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 (const 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); } const useRetry = (hasError, retryCount = 5) => { // NOTE: Glide(fast-image) will retry automatically on Android if (_reactNative.Platform.OS === 'android') return ''; const forceUpdate = (0, _uikitUtils.useForceUpdate)(); const retryCountRef = (0, _react.useRef)(1); const retryTimeoutRef = (0, _react.useRef)(); (0, _react.useEffect)(() => { if (hasError) { const reloadReservation = () => { if (retryCountRef.current < retryCount) { retryTimeoutRef.current = setTimeout(() => { retryCountRef.current++; reloadReservation(); forceUpdate(); }, retryCountRef.current * 5000); } }; return reloadReservation(); } else { return clearTimeout(retryTimeoutRef.current); } }, [hasError]); return retryCountRef.current; }; const ImageWithPlaceholder = props => { const { palette, select, colors } = (0, _useUIKitTheme.default)(); const [imageNotFound, setImageNotFound] = (0, _react.useState)(false); const key = useRetry(imageNotFound); return /*#__PURE__*/_react.default.createElement(_Box.default, { style: [{ overflow: 'hidden', width: props.width, height: props.height }, props.style], backgroundColor: select({ dark: palette.background400, light: palette.background100 }) }, /*#__PURE__*/_react.default.createElement(_Image.default, { key: key, source: props.source, style: [_reactNative.StyleSheet.absoluteFill, imageNotFound && styles.hide], resizeMode: 'cover', resizeMethod: 'resize', onError: () => setImageNotFound(true), onLoad: () => setImageNotFound(false) }), imageNotFound && /*#__PURE__*/_react.default.createElement(_Icon.default, { containerStyle: _reactNative.StyleSheet.absoluteFill, icon: 'thumbnail-none', size: 48, color: colors.onBackground02 })); }; const styles = (0, _createStyleSheet.default)({ hide: { display: 'none' } }); var _default = exports.default = ImageWithPlaceholder; //# sourceMappingURL=index.js.map