-
Notifications
You must be signed in to change notification settings - Fork 0
/
Barcode.js
80 lines (68 loc) · 2.02 KB
/
Barcode.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
/*
* A smart barcode scanner for react-native apps
* https://github.com/react-native-component/react-native-smart-barcode/
* Released under the MIT license
* Copyright (c) 2016 react-native-component <[email protected]>
*/
import React, {
Component,
} from 'react'
import {
View,
requireNativeComponent,
NativeModules,
AppState,
Platform,
} from 'react-native'
import PropTypes from 'prop-types'
const BarcodeManager = Platform.OS == 'ios' ? NativeModules.Barcode : NativeModules.CaptureModule
export default class Barcode extends Component {
static defaultProps = {
barCodeTypes: Object.values(BarcodeManager.barCodeTypes),
scannerRectWidth: 255,
scannerRectHeight: 255,
scannerRectTop: 0,
scannerRectLeft: 0,
scannerLineInterval: 3000,
scannerRectCornerColor: `#09BB0D`,
}
static propTypes = {
...View.propTypes,
onBarCodeRead: PropTypes.func.isRequired,
barCodeTypes: PropTypes.array,
scannerRectWidth: PropTypes.number,
scannerRectHeight: PropTypes.number,
scannerRectTop: PropTypes.number,
scannerRectLeft: PropTypes.number,
scannerLineInterval: PropTypes.number,
scannerRectCornerColor: PropTypes.string,
}
render() {
return (
<NativeBarCode
{...this.props}
/>
)
}
componentDidMount() {
AppState.addEventListener('change', this._handleAppStateChange);
}
componentWillUnmount() {
AppState.removeEventListener('change', this._handleAppStateChange);
}
startScan() {
BarcodeManager.startSession()
}
stopScan() {
BarcodeManager.stopSession()
}
_handleAppStateChange = (currentAppState) => {
if(currentAppState !== 'active' ) {
this.stopScan()
}
else {
this.startScan()
}
}
}
const NativeBarCode = requireNativeComponent(Platform.OS == 'ios' ? 'RCTBarcode' : 'CaptureView', Barcode)