@@ -11,8 +11,16 @@ interface props {
11
11
const BarcodeScanner : React . FC < props > = ( props : props ) => {
12
12
const [ hasPermission , setHasPermission ] = React . useState ( false ) ;
13
13
const [ isActive , setIsActive ] = React . useState ( false ) ;
14
- const [ results , setResults ] = React . useState < Record < string , TextResult > > ( ) ;
15
- const setResultsJS = Worklets . createRunInJsFn ( setResults ) ;
14
+ const [ results , setResults ] = React . useState ( [ ] as TextResult [ ] ) ;
15
+ const convertAndSetResults = ( records :Record < string , TextResult > ) => {
16
+ let results :TextResult [ ] = [ ] ;
17
+ for ( let index = 0 ; index < Object . keys ( records ) . length ; index ++ ) {
18
+ const result = records [ Object . keys ( records ) [ index ] ] ;
19
+ results . push ( result ) ;
20
+ }
21
+ setResults ( results ) ;
22
+ }
23
+ const convertAndSetResultsJS = Worklets . createRunInJsFn ( convertAndSetResults ) ;
16
24
const device = useCameraDevice ( "back" ) ;
17
25
const cameraFormat = useCameraFormat ( device , [
18
26
{ videoResolution : { width : 1280 , height : 720 } } ,
@@ -30,21 +38,11 @@ const BarcodeScanner: React.FC<props> = (props: props) => {
30
38
console . log ( "decode" ) ;
31
39
console . log ( results ) ;
32
40
if ( results ) {
33
- setResultsJS ( results ) ;
41
+ convertAndSetResultsJS ( results ) ;
34
42
}
35
43
} )
36
44
} , [ ] )
37
45
38
- const convertRecordsToArray = ( records :Record < string , TextResult > ) => {
39
- let results :TextResult [ ] = [ ] ;
40
- for ( let index = 0 ; index < Object . keys ( records ) . length ; index ++ ) {
41
- const result = records [ Object . keys ( records ) [ index ] ] ;
42
- results . push ( result ) ;
43
- }
44
- console . log ( results ) ;
45
- return results ;
46
- }
47
-
48
46
React . useEffect ( ( ) => {
49
47
( async ( ) => {
50
48
const status = await Camera . requestCameraPermission ( ) ;
@@ -55,13 +53,13 @@ const BarcodeScanner: React.FC<props> = (props: props) => {
55
53
56
54
React . useEffect ( ( ) => {
57
55
if ( props . onScanned && results ) {
58
- props . onScanned ( convertRecordsToArray ( results ) ) ;
56
+ props . onScanned ( results ) ;
59
57
}
60
58
} , [ results ] ) ;
61
59
62
60
const renderBarcodeResults = ( ) => {
63
61
if ( results ) {
64
- const listItems = convertRecordsToArray ( results ) . map ( ( barcode , idx ) =>
62
+ const listItems = results . map ( ( barcode , idx ) =>
65
63
< Text key = { "barcode" + idx } style = { styles . barcodeText } >
66
64
{ barcode . barcodeFormat + ": " + barcode . barcodeText }
67
65
</ Text >
0 commit comments