import React, { useState, memo, forwardRef } from 'react';
import { Image as RNImage } from 'react-native';
import Text from '../Text';
import { usePropsResolution } from '../../../hooks/useThemeProps';
import type { IImageProps } from './types';
import { makeStyledComponent } from '../../../utils/styled';
const StyledImage = makeStyledComponent(RNImage);
const Image = ({ source, ...props }: IImageProps, ref: any) => {
const {
alt,
fallbackSource,
ignoreFallback,
_alt,
...newProps
} = usePropsResolution('Image', props);
const [renderedSource, setSource] = useState(source);
const [alternate, setAlternate] = useState(false);
React.useEffect(() => {
setAlternate(false);
setSource(source);
}, [source]);
const onImageLoadError = (event: any) => {
console.warn(event.nativeEvent.error);
if (
!ignoreFallback &&
fallbackSource &&
fallbackSource !== renderedSource
) {
setSource(fallbackSource);
} else {
setAlternate(true);
}
};
if (!alt) {
console.warn('Please pass alt prop to Image component');
}
if (alternate) {
return {alt};
}
return (
);
};
export default memo(forwardRef(Image));
export type { IImageProps };