UNPKG

@sendbird/uikit-react-native-foundation

Version:

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

81 lines (80 loc) 3.55 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 _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } 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