mirror of
https://github.com/Stremio/stremio-web.git
synced 2026-03-11 21:27:05 +00:00
Image compatible with native data props
This commit is contained in:
parent
044b8d9709
commit
a8f1e934cf
3 changed files with 25 additions and 11 deletions
|
|
@ -1,11 +1,15 @@
|
|||
const React = require('react');
|
||||
const PropTypes = require('prop-types');
|
||||
|
||||
const Image = ({ className, src, alt, fallbackSrc, renderFallback }) => {
|
||||
const Image = ({ className, src, alt, fallbackSrc, renderFallback, ...props }) => {
|
||||
const [broken, setBroken] = React.useState(false);
|
||||
const onError = React.useCallback(() => {
|
||||
const onError = React.useCallback((event) => {
|
||||
if (typeof props.onError === 'function') {
|
||||
props.onError(event);
|
||||
}
|
||||
|
||||
setBroken(true);
|
||||
}, []);
|
||||
}, [props.onError]);
|
||||
React.useLayoutEffect(() => {
|
||||
setBroken(false);
|
||||
}, [src]);
|
||||
|
|
@ -13,9 +17,9 @@ const Image = ({ className, src, alt, fallbackSrc, renderFallback }) => {
|
|||
typeof renderFallback === 'function' ?
|
||||
renderFallback()
|
||||
:
|
||||
<img className={className} src={fallbackSrc} alt={alt} />
|
||||
<img {...props} className={className} src={fallbackSrc} alt={alt} />
|
||||
:
|
||||
<img className={className} src={src} alt={alt} onError={onError} />;
|
||||
<img {...props} className={className} src={src} alt={alt} onError={onError} />;
|
||||
};
|
||||
|
||||
Image.propTypes = {
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
const React = require('react');
|
||||
const { storiesOf } = require('@storybook/react');
|
||||
const { action } = require('@storybook/addon-actions');
|
||||
const Icon = require('stremio-icons/dom');
|
||||
const { Image } = require('stremio/common');
|
||||
const styles = require('./styles');
|
||||
|
|
@ -8,6 +9,7 @@ storiesOf('Image', module).add('ImageWithFallback', () => (
|
|||
<Image
|
||||
className={styles['image']}
|
||||
src={'/images/non_existing.png'}
|
||||
onError={action('onError')}
|
||||
renderFallback={() => (
|
||||
<Icon className={styles['icon']} icon={'ic_broken_link'} />
|
||||
)}
|
||||
|
|
|
|||
|
|
@ -1,11 +1,19 @@
|
|||
const React = require('react');
|
||||
const { storiesOf } = require('@storybook/react');
|
||||
const { action } = require('@storybook/addon-actions');
|
||||
const { Image } = require('stremio/common');
|
||||
const styles = require('./styles');
|
||||
|
||||
storiesOf('Image', module).add('SampleImage', () => (
|
||||
<Image
|
||||
className={styles['image']}
|
||||
src={'/images/default_avatar.png'}
|
||||
/>
|
||||
));
|
||||
storiesOf('Image', module).add('SampleImage', () => {
|
||||
const domEventHandler = React.useCallback((event) => {
|
||||
action('domEventHandler')(event.currentTarget.dataset);
|
||||
}, []);
|
||||
return (
|
||||
<Image
|
||||
className={styles['image']}
|
||||
src={'/images/default_avatar.png'}
|
||||
data-prop={'data-value'}
|
||||
onClick={domEventHandler}
|
||||
/>
|
||||
);
|
||||
});
|
||||
|
|
|
|||
Loading…
Reference in a new issue