react-native-fast-image/FastImage.js

82 lines
1.7 KiB
JavaScript
Raw Normal View History

import React, { Component } from 'react'
2017-06-20 01:50:55 +00:00
import {
requireNativeComponent,
Image,
NativeModules,
View,
} from 'react-native'
2017-04-13 04:13:44 +00:00
const resolveAssetSource = require('react-native/Libraries/Image/resolveAssetSource')
const FastImageViewNativeModule = NativeModules.FastImageView
class FastImage extends Component {
setNativeProps(nativeProps) {
this._root.setNativeProps(nativeProps)
}
render() {
const { source, onError, onLoad, onProgress, ...props } = this.props
// If there's no source or source uri just fallback to Image.
if (!source || !source.uri) {
return (
<Image
ref={e => (this._root = e)}
{...props}
source={source}
2017-07-04 01:58:24 +00:00
onProgress={onProgress}
onError={onError}
onLoad={onLoad}
/>
)
}
const resolvedSource = resolveAssetSource(source)
2017-04-13 04:13:44 +00:00
return (
<FastImageView
ref={e => (this._root = e)}
{...props}
source={resolvedSource}
2017-07-04 01:58:24 +00:00
onFastImageProgress={onProgress}
onFastImageError={onError}
onFastImageLoad={onLoad}
/>
2017-04-13 04:13:44 +00:00
)
}
}
FastImage.resizeMode = {
contain: 'contain',
cover: 'cover',
stretch: 'stretch',
center: 'center',
}
FastImage.priority = {
low: 'low',
normal: 'normal',
high: 'high',
}
FastImage.preload = sources => {
FastImageViewNativeModule.preload(sources)
2017-06-08 21:13:19 +00:00
}
2017-04-13 04:13:44 +00:00
FastImage.defaultProps = {
resizeMode: FastImage.resizeMode.cover,
2017-07-04 01:58:24 +00:00
onProgress: Function.prototype,
2017-04-13 04:13:44 +00:00
onLoad: Function.prototype,
onError: Function.prototype,
}
const FastImageView = requireNativeComponent('FastImageView', FastImage, {
2017-07-04 01:58:24 +00:00
nativeOnly: {
onFastImageProgress: true,
onFastImageError: true,
onFastImageLoad: true,
2017-07-04 01:58:24 +00:00
},
2017-04-13 04:13:44 +00:00
})
export default FastImage