[Video] Tidy up component code
- Newer syntax. - Removed lodash dependency. - Removed hard-coded ref. - Seek using state.
This commit is contained in:
parent
3aa46875a5
commit
b45c9577f0
109
Video.ios.js
109
Video.ios.js
@ -1,109 +0,0 @@
|
||||
var React = require('react-native');
|
||||
var { StyleSheet, requireNativeComponent, PropTypes, NativeModules, } = React;
|
||||
|
||||
var VideoResizeMode = require('./VideoResizeMode');
|
||||
var { extend } = require('lodash');
|
||||
|
||||
var VIDEO_REF = 'video';
|
||||
|
||||
var Video = React.createClass({
|
||||
propTypes: {
|
||||
/* Native only */
|
||||
src: PropTypes.object,
|
||||
seek: PropTypes.number,
|
||||
|
||||
/* Wrapper component */
|
||||
source: PropTypes.object,
|
||||
resizeMode: PropTypes.string,
|
||||
repeat: PropTypes.bool,
|
||||
paused: PropTypes.bool,
|
||||
muted: PropTypes.bool,
|
||||
volume: PropTypes.number,
|
||||
rate: PropTypes.number,
|
||||
onLoadStart: PropTypes.func,
|
||||
onLoad: PropTypes.func,
|
||||
onError: PropTypes.func,
|
||||
onProgress: PropTypes.func,
|
||||
onEnd: PropTypes.func,
|
||||
},
|
||||
|
||||
setNativeProps(props) {
|
||||
this.refs[VIDEO_REF].setNativeProps(props);
|
||||
},
|
||||
|
||||
_onLoadStart(event) {
|
||||
this.props.onLoadStart && this.props.onLoadStart(event.nativeEvent);
|
||||
},
|
||||
|
||||
_onLoad(event) {
|
||||
this.props.onLoad && this.props.onLoad(event.nativeEvent);
|
||||
},
|
||||
|
||||
_onError(event) {
|
||||
this.props.onError && this.props.onError(event.nativeEvent);
|
||||
},
|
||||
|
||||
_onProgress(event) {
|
||||
this.props.onProgress && this.props.onProgress(event.nativeEvent);
|
||||
},
|
||||
|
||||
_onSeek(event) {
|
||||
this.props.onSeek && this.props.onSeek(event.nativeEvent);
|
||||
},
|
||||
|
||||
seek(time) {
|
||||
this.setNativeProps({seek: parseFloat(time)});
|
||||
},
|
||||
|
||||
_onEnd(event) {
|
||||
this.props.onEnd && this.props.onEnd(event.nativeEvent);
|
||||
},
|
||||
|
||||
render() {
|
||||
var style = [styles.base, this.props.style];
|
||||
var source = this.props.source;
|
||||
var uri = source.uri;
|
||||
if (uri && uri.match(/^\//)) {
|
||||
uri = 'file://' + uri;
|
||||
}
|
||||
var isNetwork = !!(uri && uri.match(/^https?:/));
|
||||
var isAsset = !!(uri && uri.match(/^(assets-library|file):/));
|
||||
|
||||
var resizeMode;
|
||||
if (this.props.resizeMode === VideoResizeMode.stretch) {
|
||||
resizeMode = NativeModules.VideoManager.ScaleToFill;
|
||||
} else if (this.props.resizeMode === VideoResizeMode.contain) {
|
||||
resizeMode = NativeModules.VideoManager.ScaleAspectFit;
|
||||
} else if (this.props.resizeMode === VideoResizeMode.cover) {
|
||||
resizeMode = NativeModules.VideoManager.ScaleAspectFill;
|
||||
} else {
|
||||
resizeMode = NativeModules.VideoManager.ScaleNone;
|
||||
}
|
||||
|
||||
var nativeProps = extend({}, this.props, {
|
||||
style,
|
||||
resizeMode: resizeMode,
|
||||
src: {
|
||||
uri: uri,
|
||||
isNetwork,
|
||||
isAsset,
|
||||
type: source.type || 'mp4'
|
||||
},
|
||||
onVideoLoad: this._onLoad,
|
||||
onVideoProgress: this._onProgress,
|
||||
onVideoEnd: this._onEnd,
|
||||
});
|
||||
|
||||
return <RCTVideo ref={VIDEO_REF} {... nativeProps} />;
|
||||
},
|
||||
});
|
||||
|
||||
var RCTVideo = requireNativeComponent('RCTVideo', Video);
|
||||
|
||||
var styles = StyleSheet.create({
|
||||
base: {
|
||||
overflow: 'hidden',
|
||||
},
|
||||
});
|
||||
|
||||
module.exports = Video;
|
145
Video.js
Normal file
145
Video.js
Normal file
@ -0,0 +1,145 @@
|
||||
const React = require('react-native');
|
||||
const {
|
||||
Component,
|
||||
StyleSheet,
|
||||
requireNativeComponent,
|
||||
PropTypes,
|
||||
NativeModules,
|
||||
} = React;
|
||||
|
||||
const VideoResizeMode = require('./VideoResizeMode');
|
||||
|
||||
const styles = StyleSheet.create({
|
||||
base: {
|
||||
overflow: 'hidden',
|
||||
},
|
||||
});
|
||||
|
||||
class Video extends Component {
|
||||
|
||||
constructor(props, context) {
|
||||
super(props, context);
|
||||
|
||||
this.state = { seekTime: 0 };
|
||||
|
||||
this.seek = this.seek.bind(this);
|
||||
this._onLoadStart = this._onLoadStart.bind(this);
|
||||
this._onLoad = this._onLoad.bind(this);
|
||||
this._onError = this._onError.bind(this);
|
||||
this._onProgress = this._onProgress.bind(this);
|
||||
this._onSeek = this._onSeek.bind(this);
|
||||
this._onEnd = this._onEnd.bind(this);
|
||||
}
|
||||
|
||||
seek(time) {
|
||||
this.setState({ seekTime: time });
|
||||
}
|
||||
|
||||
render() {
|
||||
const { seekTime } = this.state;
|
||||
const {
|
||||
style,
|
||||
source,
|
||||
ref,
|
||||
resizeMode,
|
||||
} = this.props;
|
||||
|
||||
let uri = source.uri;
|
||||
if (uri && uri.match(/^\//)) {
|
||||
uri = 'file://' + uri;
|
||||
}
|
||||
|
||||
const isNetwork = !!(uri && uri.match(/^https?:/));
|
||||
const isAsset = !!(uri && uri.match(/^(assets-library|file):/));
|
||||
|
||||
let nativeResizeMode;
|
||||
if (resizeMode === VideoResizeMode.stretch) {
|
||||
nativeResizeMode = NativeModules.VideoManager.ScaleToFill;
|
||||
} else if (resizeMode === VideoResizeMode.contain) {
|
||||
nativeResizeMode = NativeModules.VideoManager.ScaleAspectFit;
|
||||
} else if (resizeMode === VideoResizeMode.cover) {
|
||||
nativeResizeMode = NativeModules.VideoManager.ScaleAspectFill;
|
||||
} else {
|
||||
nativeResizeMode = NativeModules.VideoManager.ScaleNone;
|
||||
}
|
||||
|
||||
let nativeProps = Object.assign({}, this.props);
|
||||
Object.assign(nativeProps, {
|
||||
style: [styles.base, style],
|
||||
resizeMode: nativeResizeMode,
|
||||
src: {
|
||||
uri: uri,
|
||||
isNetwork,
|
||||
isAsset,
|
||||
type: source.type || 'mp4'
|
||||
},
|
||||
seek: seekTime,
|
||||
onVideoLoad: this._onLoad,
|
||||
onVideoProgress: this._onProgress,
|
||||
onVideoEnd: this._onEnd,
|
||||
});
|
||||
|
||||
return <RCTVideo ref={ref} {...nativeProps} />;
|
||||
}
|
||||
|
||||
_onLoadStart(event) {
|
||||
this.props.onLoadStart && this.props.onLoadStart(event.nativeEvent);
|
||||
}
|
||||
|
||||
_onLoad(event) {
|
||||
this.props.onLoad && this.props.onLoad(event.nativeEvent);
|
||||
}
|
||||
|
||||
_onError(event) {
|
||||
this.props.onError && this.props.onError(event.nativeEvent);
|
||||
}
|
||||
|
||||
_onProgress(event) {
|
||||
this.props.onProgress && this.props.onProgress(event.nativeEvent);
|
||||
}
|
||||
|
||||
_onSeek(event) {
|
||||
this.props.onSeek && this.props.onSeek(event.nativeEvent);
|
||||
}
|
||||
|
||||
_onEnd(event) {
|
||||
this.props.onEnd && this.props.onEnd(event.nativeEvent);
|
||||
}
|
||||
}
|
||||
|
||||
Video.propTypes = {
|
||||
/* Native only */
|
||||
src: PropTypes.object,
|
||||
seek: PropTypes.number,
|
||||
|
||||
/* Wrapper component */
|
||||
ref: PropTypes.string,
|
||||
source: PropTypes.object,
|
||||
resizeMode: PropTypes.string,
|
||||
repeat: PropTypes.bool,
|
||||
paused: PropTypes.bool,
|
||||
muted: PropTypes.bool,
|
||||
volume: PropTypes.number,
|
||||
rate: PropTypes.number,
|
||||
onLoadStart: PropTypes.func,
|
||||
onLoad: PropTypes.func,
|
||||
onError: PropTypes.func,
|
||||
onProgress: PropTypes.func,
|
||||
onEnd: PropTypes.func,
|
||||
|
||||
/* Required by react-native */
|
||||
scaleX: React.PropTypes.number,
|
||||
scaleY: React.PropTypes.number,
|
||||
translateX: React.PropTypes.number,
|
||||
translateY: React.PropTypes.number,
|
||||
rotation: React.PropTypes.number,
|
||||
};
|
||||
|
||||
var RCTVideo = requireNativeComponent('RCTVideo', Video, {
|
||||
nativeOnly: {
|
||||
src: true,
|
||||
seek: true,
|
||||
},
|
||||
});
|
||||
|
||||
module.exports = Video;
|
10
package.json
10
package.json
@ -2,7 +2,7 @@
|
||||
"name": "react-native-video",
|
||||
"version": "0.6.1",
|
||||
"description": "A <Video /> element for react-native",
|
||||
"main": "Video.ios.js",
|
||||
"main": "Video.js",
|
||||
"author": "Brent Vatne <brentvatne@gmail.com> (https://github.com/brentvatne)",
|
||||
"files": [
|
||||
"RCTVideo.xcodeproj",
|
||||
@ -11,8 +11,7 @@
|
||||
"RCTVideoManager.h",
|
||||
"RCTVideoManager.m",
|
||||
"README.md",
|
||||
"Video.android.js",
|
||||
"Video.ios.js",
|
||||
"Video.js",
|
||||
"VideoResizeMode.js",
|
||||
"VideoStylePropTypes.js"
|
||||
],
|
||||
@ -20,6 +19,10 @@
|
||||
{
|
||||
"name": "Johannes Lumpe",
|
||||
"email": "johannes@lum.pe"
|
||||
},
|
||||
{
|
||||
"name": "Baris Sencan",
|
||||
"email": "baris.sncn@gmail.com"
|
||||
}
|
||||
],
|
||||
"repository": {
|
||||
@ -31,6 +34,5 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"keymirror": "^0.1.1",
|
||||
"lodash": "^3.10.1"
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user