diff --git a/Camera.js b/Camera.js
new file mode 100644
index 0000000..17a4e48
--- /dev/null
+++ b/Camera.js
@@ -0,0 +1,173 @@
+import React, {
+ Component,
+ NativeAppEventEmitter,
+ NativeModules,
+ PropTypes,
+ StyleSheet,
+ requireNativeComponent
+} from 'react-native';
+
+const CameraManager = NativeModules.CameraManager;
+const CAMERA_REF = 'camera';
+
+function convertStringProps(props) {
+ const newProps = { ...props };
+ if (typeof props.aspect === 'string') {
+ newProps.aspect = Camera.constants.Aspect[props.aspect];
+ }
+
+ if (typeof props.flashMode === 'string') {
+ newProps.flashMode = Camera.constants.FlashMode[props.flashMode];
+ }
+
+ if (typeof props.orientation === 'string') {
+ newProps.orientation = Camera.constants.Orientation[props.orientation];
+ }
+
+ if (typeof props.torchMode === 'string') {
+ newProps.torchMode = Camera.constants.TorchMode[props.torchMode];
+ }
+
+ if (typeof props.type === 'string') {
+ newProps.type = Camera.constants.Type[props.type];
+ }
+
+ return newProps;
+}
+
+export default class Camera extends Component {
+
+ static constants = {
+ Aspect: CameraManager.Aspect,
+ BarCodeType: CameraManager.BarCodeType,
+ Type: CameraManager.Type,
+ CaptureMode: CameraManager.CaptureMode,
+ CaptureTarget: CameraManager.CaptureTarget,
+ Orientation: CameraManager.Orientation,
+ FlashMode: CameraManager.FlashMode,
+ TorchMode: CameraManager.TorchMode
+ };
+
+ static propTypes = {
+ aspect: PropTypes.oneOfType([
+ PropTypes.string,
+ PropTypes.number
+ ]),
+ captureAudio: PropTypes.bool,
+ captureMode: PropTypes.oneOfType([
+ PropTypes.string,
+ PropTypes.number
+ ]),
+ captureTarget: PropTypes.oneOfType([
+ PropTypes.string,
+ PropTypes.number
+ ]),
+ defaultOnFocusComponent: PropTypes.bool,
+ flashMode: PropTypes.oneOfType([
+ PropTypes.string,
+ PropTypes.number
+ ]),
+ onBarCodeRead: PropTypes.func,
+ onFocusChanged: PropTypes.func,
+ onZoomChanged: PropTypes.func,
+ orientation: PropTypes.oneOfType([
+ PropTypes.string,
+ PropTypes.number
+ ]),
+ torchMode: PropTypes.oneOfType([
+ PropTypes.string,
+ PropTypes.number
+ ]),
+ type: PropTypes.oneOfType([
+ PropTypes.string,
+ PropTypes.number
+ ])
+ };
+
+ static defaultProps = {
+ aspect: Camera.constants.Aspect.fill,
+ type: Camera.constants.Type.back,
+ orientation: Camera.constants.Orientation.auto,
+ captureAudio: true,
+ captureMode: Camera.constants.CaptureMode.still,
+ captureTarget: Camera.constants.CaptureTarget.cameraRoll,
+ defaultOnFocusComponent: true,
+ flashMode: Camera.constants.FlashMode.off,
+ torchMode: Camera.constants.TorchMode.off
+ };
+
+ static checkDeviceAuthorizationStatus = CameraManager.checkDeviceAuthorizationStatus;
+
+ setNativeProps(props) {
+ this.refs[CAMERA_REF].setNativeProps(props);
+ }
+
+ constructor() {
+ super();
+ this.state = {
+ isAuthorized: false,
+ isRecording: false
+ };
+ }
+
+ async componentWillMount() {
+ const isAuthorized = await CameraManager.checkDeviceAuthorizationStatus();
+ this.setState({ isAuthorized });
+
+ this.cameraBarCodeReadListener = NativeAppEventEmitter.addListener('CameraBarCodeRead', this.props.onBarCodeRead);
+ }
+
+ componentWillUnmount() {
+ this.cameraBarCodeReadListener.remove();
+
+ if (this.state.isRecording) {
+ this.stopCapture();
+ }
+ }
+
+ render() {
+ const style = [styles.base, this.props.style];
+ const nativeProps = convertStringProps(this.props);
+
+ return ;
+ }
+
+ capture(options) {
+ const props = convertStringProps(this.props);
+ options = {
+ audio: props.captureAudio,
+ mode: props.captureMode,
+ target: props.captureTarget,
+ ...options
+ };
+
+ if (options.mode === constants.CaptureMode.video) {
+ options.totalSeconds = (options.totalSeconds > -1 ? options.totalSeconds : -1);
+ options.preferredTimeScale = options.preferredTimeScale || 30;
+ this.setState({ isRecording: true });
+ }
+
+ return CameraManager.capture(options);
+ }
+
+ stopCapture() {
+ if (this.state.isRecording) {
+ CameraManager.stopCapture();
+ this.setState({ isRecording: false });
+ }
+ }
+
+ getFOV() {
+ return CameraManager.getFOV();
+ }
+
+ hasFlash() {
+ return CameraManager.hasFlash();
+ }
+}
+
+var RCTCamera = requireNativeComponent('RCTCamera', Camera);
+
+var styles = StyleSheet.create({
+ base: {},
+});
diff --git a/index.android.js b/index.android.js
index fa61ad8..d65a1b8 100644
--- a/index.android.js
+++ b/index.android.js
@@ -1,201 +1,2 @@
-var React = require('react-native');
-var { View, StyleSheet, requireNativeComponent, PropTypes, NativeModules, DeviceEventEmitter } = React;
-
-var CAMERA_REF = 'camera';
-
-var constants = {
- Aspect: NativeModules.CameraModule.Aspect,
- BarCodeType: NativeModules.CameraModule.BarCodeType,
- Type: NativeModules.CameraModule.Type,
- CaptureMode: NativeModules.CameraModule.CaptureMode,
- CaptureTarget: NativeModules.CameraModule.CaptureTarget,
- Orientation: NativeModules.CameraModule.Orientation,
- FlashMode: NativeModules.CameraModule.FlashMode,
- TorchMode: NativeModules.CameraModule.TorchMode
-};
-
-var Camera = React.createClass({
- propTypes: {
- aspect: PropTypes.oneOfType([
- PropTypes.string,
- PropTypes.number
- ]),
- captureAudio: PropTypes.bool,
- captureMode: PropTypes.oneOfType([
- PropTypes.string,
- PropTypes.number
- ]),
- captureTarget: PropTypes.oneOfType([
- PropTypes.string,
- PropTypes.number
- ]),
- type: PropTypes.oneOfType([
- PropTypes.string,
- PropTypes.number
- ]),
- orientation: PropTypes.oneOfType([
- PropTypes.string,
- PropTypes.number
- ]),
- flashMode: PropTypes.oneOfType([
- PropTypes.string,
- PropTypes.number
- ]),
- torchMode: PropTypes.oneOfType([
- PropTypes.string,
- PropTypes.number
- ]),
- defaultOnFocusComponent: PropTypes.bool,
- onFocusChanged: PropTypes.func,
- onZoomChanged: PropTypes.func,
- ...View.propTypes
- },
-
- setNativeProps(props) {
- this.refs[CAMERA_REF].setNativeProps(props);
- },
-
- getDefaultProps() {
- return {
- aspect: constants.Aspect.fill,
- type: constants.Type.back,
- orientation: constants.Orientation.auto,
- captureAudio: true,
- captureMode: constants.CaptureMode.still,
- captureTarget: constants.CaptureTarget.cameraRoll,
- flashMode: constants.FlashMode.off,
- torchMode: constants.TorchMode.off
- };
- },
-
- getInitialState() {
- return {
- isAuthorized: false,
- isRecording: false
- };
- },
-
- componentWillMount() {
- //// TODO: handle properly Android 6 new permissions style
- this.state.isAuthorized = true;
- this.setState(this.state);
- this.cameraBarCodeReadListener = DeviceEventEmitter.addListener('CameraBarCodeRead', this._onBarCodeRead);
- },
-
- componentWillUnmount() {
- this.cameraBarCodeReadListener.remove();
-
- if (this.state.isRecording) {
- this.stopCapture();
- }
- },
-
- render() {
- var style = [styles.base, this.props.style];
-
- var aspect = this.props.aspect,
- type = this.props.type,
- orientation = this.props.orientation,
- flashMode = this.props.flashMode,
- torchMode = this.props.torchMode;
-
- var legacyProps = {
- aspect: {
- Fill: 'fill',
- Fit: 'fit',
- Stretch: 'stretch'
- },
- orientation: {
- LandscapeLeft: 'landscapeLeft',
- LandscapeRight: 'landscapeRight',
- Portrait: 'portrait',
- PortraitUpsideDown: 'portraitUpsideDown'
- },
- type: {
- Front: 'front',
- Back: 'back'
- }
- };
-
- if (typeof aspect === 'string') {
- aspect = constants.Aspect[aspect];
- }
-
- if (typeof flashMode === 'string') {
- flashMode = constants.FlashMode[flashMode];
- }
-
- if (typeof orientation === 'string') {
- orientation = constants.Orientation[orientation];
- }
-
- if (typeof torchMode === 'string') {
- torchMode = constants.TorchMode[torchMode];
- }
-
- if (typeof type === 'string') {
- type = constants.Type[type];
- }
-
- var nativeProps = Object.assign({}, this.props, {
- style,
- aspect: aspect,
- type: type,
- orientation: orientation,
- flashMode: flashMode,
- torchMode: torchMode
- });
-
- return ;
- },
-
- _onBarCodeRead(e) {
- this.props.onBarCodeRead && this.props.onBarCodeRead(e);
- },
-
- capture(options) {
- options = Object.assign({}, {
- audio: this.props.captureAudio,
- mode: this.props.captureMode,
- target: this.props.captureTarget,
- type: this.props.type
- }, options);
-
- if (typeof options.mode === 'string') {
- options.mode = constants.CaptureMode[options.mode];
- }
-
- if (options.mode === constants.CaptureMode.video) {
- options.totalSeconds = (options.totalSeconds > -1 ? options.totalSeconds : -1);
- options.preferredTimeScale = options.preferredTimeScale || 30;
- this.setState({isRecording: true});
- }
-
- if (typeof options.target === 'string') {
- options.target = constants.CaptureTarget[options.target];
- }
-
- if (typeof options.type === 'string') {
- options.type = constants.Type[options.type];
- }
-
- return NativeModules.CameraModule.capture(options);
- },
-
- stopCapture() {
- if (this.state.isRecording) {
- NativeModules.CameraManager.stopCapture();
- this.setState({ isRecording: false });
- }
- }
-
-});
-
-var RCTCameraView = requireNativeComponent('RCTCameraView', Camera);
-
-var styles = StyleSheet.create({
- base: {},
-});
-
-Camera.constants = constants;
-module.exports = Camera;
+import Camera from './Camera';
+export default Camera;
\ No newline at end of file
diff --git a/index.ios.js b/index.ios.js
index 79578b8..d65a1b8 100644
--- a/index.ios.js
+++ b/index.ios.js
@@ -1,176 +1,2 @@
-import React, {
- Component,
- NativeAppEventEmitter,
- NativeModules,
- PropTypes,
- StyleSheet,
- requireNativeComponent
-}
-
-const CameraManager = NativeModules.CameraManager;
-const CAMERA_REF = 'camera';
-
-function convertStringProps(props) {
- const newProps = { ...props };
- if (typeof props.aspect === 'string') {
- newProps.aspect = constants.Aspect[aspect];
- }
-
- if (typeof props.flashMode === 'string') {
- newProps.flashMode = constants.FlashMode[flashMode];
- }
-
- if (typeof props.orientation === 'string') {
- newProps.orientation = constants.Orientation[orientation];
- }
-
- if (typeof props.torchMode === 'string') {
- newProps.torchMode = constants.TorchMode[torchMode];
- }
-
- if (typeof props.type === 'string') {
- newProps.type = constants.Type[type];
- }
-
- return newProps;
-}
-
-export default class Camera extends Component {
-
- static constants = {
- Aspect: CameraManager.Aspect,
- BarCodeType: CameraManager.BarCodeType,
- Type: CameraManager.Type,
- CaptureMode: CameraManager.CaptureMode,
- CaptureTarget: CameraManager.CaptureTarget,
- Orientation: CameraManager.Orientation,
- FlashMode: CameraManager.FlashMode,
- TorchMode: CameraManager.TorchMode
- };
-
- static propTypes = {
- aspect: PropTypes.oneOfType([
- PropTypes.string,
- PropTypes.number
- ]),
- captureAudio: PropTypes.bool,
- captureMode: PropTypes.oneOfType([
- PropTypes.string,
- PropTypes.number
- ]),
- captureTarget: PropTypes.oneOfType([
- PropTypes.string,
- PropTypes.number
- ]),
- defaultOnFocusComponent: PropTypes.bool,
- flashMode: PropTypes.oneOfType([
- PropTypes.string,
- PropTypes.number
- ]),
- onBarCodeRead: PropTypes.func,
- onFocusChanged: PropTypes.func,
- onZoomChanged: PropTypes.func
- orientation: PropTypes.oneOfType([
- PropTypes.string,
- PropTypes.number
- ]),
- torchMode: PropTypes.oneOfType([
- PropTypes.string,
- PropTypes.number
- ]),
- type: PropTypes.oneOfType([
- PropTypes.string,
- PropTypes.number
- ])
- };
-
- static defaultProps = {
- aspect: Camera.constants.Aspect.fill,
- type: Camera.constants.Type.back,
- orientation: Camera.constants.Orientation.auto,
- captureAudio: true,
- captureMode: Camera.constants.CaptureMode.still,
- captureTarget: Camera.constants.CaptureTarget.cameraRoll,
- defaultOnFocusComponent: true,
- flashMode: Camera.constants.FlashMode.off,
- torchMode: Camera.constants.TorchMode.off,
- onBarCodeRead: () => {},
- onFocusChanged: () => {},
- onZoomChanged: () => {}
- };
-
- static checkDeviceAuthorizationStatus = CameraManager.checkDeviceAuthorizationStatus;
-
- setNativeProps(props) {
- this.refs[CAMERA_REF].setNativeProps(props);
- }
-
- constructor() {
- super();
- this.state = {
- isAuthorized: false,
- isRecording: false
- };
- }
-
- async componentWillMount() {
- const isAuthorized = await CameraManager.checkDeviceAuthorizationStatus();
- this.setState({ isAuthorized });
-
- this.cameraBarCodeReadListener = NativeAppEventEmitter.addListener('CameraBarCodeRead', this.props.onBarCodeRead);
- }
-
- componentWillUnmount() {
- this.cameraBarCodeReadListener.remove();
-
- if (this.state.isRecording) {
- this.stopCapture();
- }
- }
-
- render() {
- const style = [styles.base, this.props.style];
- const nativeProps = convertStringProps(this.props);
-
- return ;
- }
-
- capture(options) {
- const props = convertStringProps(this.props);
- options = {
- audio: props.captureAudio,
- mode: props.captureMode,
- target: props.captureTarget,
- ...options
- };
-
- if (options.mode === constants.CaptureMode.video) {
- options.totalSeconds = (options.totalSeconds > -1 ? options.totalSeconds : -1);
- options.preferredTimeScale = options.preferredTimeScale || 30;
- this.setState({ isRecording: true });
- }
-
- return CameraManager.capture(options);
- }
-
- stopCapture() {
- if (this.state.isRecording) {
- CameraManager.stopCapture();
- this.setState({ isRecording: false });
- }
- }
-
- getFOV() {
- return CameraManager.getFOV();
- }
-
- hasFlash() {
- return CameraManager.hasFlash();
- }
-});
-
-var RCTCamera = requireNativeComponent('RCTCamera', Camera);
-
-var styles = StyleSheet.create({
- base: {},
-});
+import Camera from './Camera';
+export default Camera;
\ No newline at end of file