1
1
import React , { useState , useEffect , useRef } from "react" ;
2
+ import VeganCheck from "@frontendnetwork/vegancheck" ;
2
3
import Scan from "./Scanner/scanner" ;
3
4
import Image from "next/image" ;
4
5
import ModalWrapper from "@/components/elements/modalwrapper" ;
@@ -20,6 +21,12 @@ interface Sources {
20
21
baseuri ?: string ;
21
22
}
22
23
24
+ interface ErrorResponse {
25
+ response : {
26
+ status : number ;
27
+ } ;
28
+ }
29
+
23
30
const ProductSearch : React . FC = ( ) => {
24
31
const t = useTranslations ( "Check" ) ;
25
32
const formRef = useRef < HTMLFormElement > ( null ) ;
@@ -44,44 +51,52 @@ const ProductSearch: React.FC = () => {
44
51
} , [ ] ) ;
45
52
46
53
/* Submitting */
47
- const handleSubmit = ( barcode : string , event ?: React . FormEvent ) => {
54
+ const handleSubmit = async ( barcode : string , event ?: React . FormEvent ) => {
48
55
event ?. preventDefault ( ) ;
49
56
setShowTimeoutFinal ( false ) ;
50
57
setShowTimeout ( false ) ;
51
58
setShowFound ( false ) ;
52
59
setShowNotFound ( false ) ;
53
60
setShowInvalid ( false ) ;
54
-
61
+
55
62
setLoading ( true ) ;
56
- fetch ( `https://api.vegancheck.me/v0/product/${ barcode } ` , {
57
- method : "POST" ,
58
- } )
59
- . then ( ( res ) => {
63
+ try {
64
+ const data = await VeganCheck . getProductByBarcode ( barcode ) ;
65
+ setLoading ( false ) ;
66
+ if ( data . status === 200 ) {
67
+ setResult ( data . product ) ;
68
+ setSources ( data . sources ) ;
69
+ setShowFound ( true ) ;
60
70
setShowTimeout ( false ) ;
61
-
62
- return res . json ( ) ;
63
- } )
64
- . then ( ( data ) => {
65
- setLoading ( false ) ;
66
- if ( data . status === 200 ) {
67
- setResult ( data . product ) ;
68
- setSources ( data . sources ) ;
69
- setShowFound ( true ) ;
71
+ } else if ( data . status === 404 ) {
72
+ setShowNotFound ( true ) ;
73
+ setShowTimeout ( false ) ;
74
+ } else {
75
+ setShowInvalid ( true ) ;
76
+ setShowTimeout ( false ) ;
77
+ }
78
+ } catch ( error ) {
79
+ if (
80
+ typeof error === 'object' &&
81
+ error !== null &&
82
+ 'response' in error &&
83
+ 'status' in ( error as ErrorResponse ) . response
84
+ ) {
85
+ if ( ( error as ErrorResponse ) . response . status == 400 ) {
86
+ setShowInvalid ( true ) ;
70
87
setShowTimeout ( false ) ;
71
- } else if ( data . status === 404 ) {
88
+ }
89
+ else if ( ( error as ErrorResponse ) . response . status == 404 ) {
72
90
setShowNotFound ( true ) ;
73
91
setShowTimeout ( false ) ;
74
- } else {
75
- setShowInvalid ( true ) ;
76
- setShowTimeout ( false ) ;
77
92
}
78
- } )
79
- . catch ( ( error ) => {
93
+ } else {
80
94
console . error ( error ) ;
81
- setLoading ( false ) ;
82
95
setShowTimeoutFinal ( true ) ;
83
96
setShowTimeout ( false ) ;
84
- } ) ;
97
+ }
98
+ setLoading ( false ) ;
99
+ }
85
100
} ;
86
101
87
102
const handleChange = ( e : React . ChangeEvent < HTMLInputElement > ) => {
@@ -469,7 +484,7 @@ const ProductSearch: React.FC = () => {
469
484
</ div >
470
485
< div className = "Grid" >
471
486
< div className = "Grid-cell description skeleton" >
472
- { t ( "grade" ) }
487
+ Grade
473
488
</ div >
474
489
< div className = "Grid-cell icons skeleton" >
475
490
< span className = "icon-help" > </ span >
0 commit comments