11import { useState } from 'react' ;
22import { IDetectedBarcode , Scanner } from '@yudiel/react-qr-scanner' ;
33import QRCode from 'react-qr-code' ;
4+ import { Camera , ChevronDown , ChevronUp , RefreshCw } from 'lucide-react' ;
45import {
56 Card ,
67 CardContent ,
@@ -10,24 +11,35 @@ import {
1011} from '@/components/ui/card' ;
1112import { Button } from '@/components/ui/button' ;
1213import { Alert , AlertDescription , AlertTitle } from '@/components/ui/alert' ;
13- import { Camera , RefreshCw } from 'lucide-react' ;
14+ import {
15+ Collapsible ,
16+ CollapsibleContent ,
17+ CollapsibleTrigger ,
18+ } from '@/components/ui/collapsible' ;
1419
15- import { generateEpcQr , parseUpnQr } from './lib/qr' ;
20+ import {
21+ generateEpcQr ,
22+ generateEpcQrString ,
23+ parseUpnQr ,
24+ type EpcQrData ,
25+ } from './lib/qr' ;
26+ import { EpcQrDataDisplay } from './components/EpcQrDataDisplay' ;
1627
1728function App ( ) {
18- const [ code , setCode ] = useState < string | null > ( null ) ;
29+ const [ epcData , setEpcData ] = useState < EpcQrData | null > ( null ) ;
1930 const [ error , setError ] = useState < string | null > ( null ) ;
2031 const [ isScanning , setIsScanning ] = useState ( true ) ;
32+ const [ isOpen , setIsOpen ] = useState ( false ) ;
2133
2234 const handleOnScan = ( data : IDetectedBarcode [ ] ) => {
2335 const [ scanResult ] = data ;
2436 if ( ! scanResult || scanResult . format === 'unknown' ) return ;
2537
2638 try {
27- const upnQrCode = parseUpnQr ( scanResult . rawValue ) ;
28- const epcQrCode = generateEpcQr ( upnQrCode ) ;
39+ const upnQrData = parseUpnQr ( scanResult . rawValue ) ;
40+ const epcQrData = generateEpcQr ( upnQrData ) ;
2941
30- setCode ( epcQrCode ) ;
42+ setEpcData ( epcQrData ) ;
3143 setIsScanning ( false ) ;
3244 setError ( null ) ;
3345 } catch ( error ) {
@@ -38,9 +50,10 @@ function App() {
3850 } ;
3951
4052 const handleReset = ( ) => {
41- setCode ( null ) ;
53+ setEpcData ( null ) ;
4254 setError ( null ) ;
4355 setIsScanning ( true ) ;
56+ setIsOpen ( false ) ;
4457 } ;
4558
4659 return (
@@ -57,10 +70,32 @@ function App() {
5770 </ div >
5871 ) : (
5972 < div className = "flex flex-col items-center" >
60- { code && < QRCode value = { code } /> }
73+ { epcData && < QRCode value = { generateEpcQrString ( epcData ) } /> }
6174 < Button onClick = { handleReset } className = "mt-4" >
6275 < RefreshCw className = "mr-2 h-4 w-4" /> Scan Another Code
6376 </ Button >
77+
78+ { epcData && (
79+ < Collapsible
80+ open = { isOpen }
81+ onOpenChange = { setIsOpen }
82+ className = "w-full mt-4"
83+ >
84+ < CollapsibleTrigger asChild >
85+ < Button variant = "outline" className = "w-full" >
86+ { isOpen ? 'Hide' : 'Show' } EPC Data
87+ { isOpen ? (
88+ < ChevronUp className = "ml-2 h-4 w-4" />
89+ ) : (
90+ < ChevronDown className = "ml-2 h-4 w-4" />
91+ ) }
92+ </ Button >
93+ </ CollapsibleTrigger >
94+ < CollapsibleContent className = "mt-2" >
95+ < EpcQrDataDisplay data = { epcData } />
96+ </ CollapsibleContent >
97+ </ Collapsible >
98+ ) }
6499 </ div >
65100 ) }
66101
0 commit comments