scratch-gui
Version:
GraphicaL User Interface for creating and running Scratch 3.0 projects
104 lines (94 loc) • 2.63 kB
JSX
import bindAll from 'lodash.bindall';
import PropTypes from 'prop-types';
import React from 'react';
import {connect} from 'react-redux';
import CameraModalComponent from '../components/camera-modal/camera-modal.jsx';
import ModalVideoManager from '../lib/video/modal-video-manager.js';
import {
closeCameraCapture
} from '../reducers/modals';
class CameraModal extends React.Component {
constructor (props) {
super(props);
bindAll(this, [
'handleAccess',
'handleBack',
'handleCancel',
'handleCapture',
'handleLoaded',
'handleSubmit',
'setCanvas'
]);
this.video = null;
this.videoDevice = null;
this.state = {
capture: null,
access: false,
loaded: false
};
}
componentWillUnmount () {
if (this.videoDevice) {
this.videoDevice.disableVideo();
}
}
handleAccess () {
this.setState({access: true});
}
handleLoaded () {
this.setState({loaded: true});
}
handleBack () {
this.setState({capture: null});
this.videoDevice.clearSnapshot();
}
handleCapture () {
if (this.state.loaded) {
const capture = this.videoDevice.takeSnapshot();
this.setState({capture: capture});
}
}
setCanvas (canvas) {
this.canvas = canvas;
if (this.canvas) {
this.videoDevice = new ModalVideoManager(this.canvas);
this.videoDevice.enableVideo(this.handleAccess, this.handleLoaded);
}
}
handleSubmit () {
if (!this.state.capture) return;
this.props.onNewCostume(this.state.capture);
this.props.onClose();
}
handleCancel () {
this.props.onClose();
}
render () {
return (
<CameraModalComponent
access={this.state.access}
canvasRef={this.setCanvas}
capture={this.state.capture}
loaded={this.state.loaded}
onBack={this.handleBack}
onCancel={this.handleCancel}
onCapture={this.handleCapture}
onSubmit={this.handleSubmit}
/>
);
}
}
CameraModal.propTypes = {
onClose: PropTypes.func,
onNewCostume: PropTypes.func
};
const mapStateToProps = () => ({});
const mapDispatchToProps = dispatch => ({
onClose: () => {
dispatch(closeCameraCapture());
}
});
export default connect(
mapStateToProps,
mapDispatchToProps
)(CameraModal);