import React, { useState, useEffect, useRef } from "react"; import { Html5QrcodeScanner } from "html5-qrcode"; import { Box, Button } from "@mui/material"; import LoadingContainer from "./LoadingContainer"; const BarcodeScanner = () => { const [scanResult, setScanResult] = useState(null); const [isLoading, setIsLoading] = useState(false); const [barcodeInfo, setBarcodeInfo] = useState([]); const [marksData, setMarksData] = useState([]); const [partAData, setPartAData] = useState([]); const scannerRef = useRef(null); // Use ref to store the scanner instance useEffect(() => { scannerRef.current = new Html5QrcodeScanner("reader", { qrbox: { width: 250, height: 250, }, fps: 5, }); const fetchBarcodeData = () => { console.log("fetching barcode data ......",scanResult) if (!scanResult) { return; } console.log("fetching barcode data ......") setIsLoading(true); setMarksData([]) setBarcodeInfo([]) setPartAData([]) try { const payload = { qrcodeValue: scanResult, }; fetch( `${ import.meta.env.VITE_REACT_APP_BACKEND_URL }/fetchQrcodeScannedInfo`, { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify(payload), } ) .then((response) => response.json()) .then((responseData) => { setIsLoading(false); console.log("fetchbarcodedata result ===== ",responseData) if (responseData.status === "success") { setBarcodeInfo(responseData.results); setMarksData(responseData?.marks); setPartAData(responseData?.partAResults); } }); } catch (error) { setIsLoading(false); throw new Error(error); } }; window.fetchBarcodeData = fetchBarcodeData; const success = (result) => { // scannerRef.current.clear(); const readerEle = document.getElementById("reader"); if (readerEle) { readerEle.style.visibility = "hidden"; } setScanResult(result); }; window.success = success; const error = (err) => { console.log("Error: ", err); }; window.error = error; // Ensure the element is in the DOM before initializing the scanner if (document.getElementById("reader")) { scannerRef.current.render(success, error); } // Cleanup the scanner on component unmount return () => { scannerRef.current.clear(); }; }, []); const reinitializeScanner = () => { console.log("calling reinitialize scanner ......") // setScanResult(null); setBarcodeInfo([]); setMarksData([]); // if (document.getElementById("reader")) { // console.log("Reinitializing scanner..."); // scannerRef.current.render(success, error); // } }; useEffect(()=>{ console.log("scan result ========== ",scanResult) console.log("barcode Info ======= ",barcodeInfo) console.log("marksData ========= ",marksData) },[scanResult,barcodeInfo,marksData]) useEffect(() => { console.log("Calling the use effect ..... scan result changed ...",scanResult) if (!scanResult) { const readerEle = document.getElementById("reader"); console.log("Reader ELe ===== ", readerEle); if (readerEle) { console.log("Changing it to visible"); readerEle.style.visibility = "visible"; scannerRef.current.render(success, error); } } else { fetchBarcodeData(); } }, [scanResult]); return (

Welcome to exampaper.vidh.ai

{scanResult ? (
QR : {scanResult}
) : (
)}
{/* {scanResult ? (
QR : {scanResult}
) : (
)}
*/}
{barcodeInfo.length > 0 && (
Candidate Name: {barcodeInfo[0]?.candidate_name}
Register Name : {barcodeInfo[0]?.register_number}
Subject Code : {barcodeInfo[0]?.subject_code}
Exam center code : {barcodeInfo[0]?.exam_centre_code}
Exam center : {barcodeInfo[0]?.exam_center}
)} {partAData.length > 0 && (
Barcode : {partAData[0]?.barcode}
QRcode : {partAData[0]?.qrcode}
S.NO : {barcodeInfo[0]?.slno}
Booklet No : {barcodeInfo[0]?.booklet_serial_no}
PartA Image
)}
{scanResult ? ( marksData.length > 0 && barcodeInfo.length > 0 ? ( <>
Marks : {marksData[0]?.marks}
File Scanned Date : {marksData[0]?.file_scanned_date}
Cover QR code : {marksData[0]?.cover_barcode}
PartC Image
) : (
Marks Data Not Found ..
) ) : null}
{isLoading && }
); }; export default BarcodeScanner;