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
JavaScript
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