UNPKG

stream-chat-react-native-core

Version:

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

79 lines 2.63 kB
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.useLoadingImage = void 0; var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray")); var _react = require("react"); var _ChatContext = require("../contexts/chatContext/ChatContext"); function reducer(prevState, action) { switch (action.type) { case 'reloadImage': if (prevState.isLoadingImage && !prevState.isLoadingImageError) { return prevState; } return { ...prevState, isLoadingImage: true, isLoadingImageError: false }; case 'setLoadingImage': if (prevState.isLoadingImage === action.isLoadingImage) { return prevState; } return { ...prevState, isLoadingImage: action.isLoadingImage }; case 'setLoadingImageError': if (prevState.isLoadingImageError === action.isLoadingImageError) { return prevState; } return { ...prevState, isLoadingImageError: action.isLoadingImageError }; default: return prevState; } } var useLoadingImage = () => { var _useReducer = (0, _react.useReducer)(reducer, { isLoadingImage: false, isLoadingImageError: false }), _useReducer2 = (0, _slicedToArray2.default)(_useReducer, 2), imageState = _useReducer2[0], dispatch = _useReducer2[1]; var isLoadingImage = imageState.isLoadingImage, isLoadingImageError = imageState.isLoadingImageError; var onReloadImageRef = (0, _react.useRef)(() => dispatch({ type: 'reloadImage' })); var setLoadingImageRef = (0, _react.useRef)(isLoadingImage => dispatch({ isLoadingImage, type: 'setLoadingImage' })); var setLoadingImageErrorRef = (0, _react.useRef)(isLoadingImageError => dispatch({ isLoadingImageError, type: 'setLoadingImageError' })); var _useChatContext = (0, _ChatContext.useChatContext)(), isOnline = _useChatContext.isOnline; var hasImageLoadedErroredRef = (0, _react.useRef)(isLoadingImageError); hasImageLoadedErroredRef.current = isLoadingImageError; (0, _react.useEffect)(() => { if (isOnline && hasImageLoadedErroredRef.current) { onReloadImageRef.current(); } }, [isOnline]); return { isLoadingImage, isLoadingImageError, onReloadImage: onReloadImageRef.current, setLoadingImage: setLoadingImageRef.current, setLoadingImageError: setLoadingImageErrorRef.current }; }; exports.useLoadingImage = useLoadingImage; //# sourceMappingURL=useLoadingImage.js.map