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 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 = () => { if(!scanResult){ return } setIsLoading(true); 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); if (responseData.status === "success") { setBarcodeInfo(responseData.results); setMarksData(responseData?.marks); } }); } 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 = () => { setScanResult(null); setBarcodeInfo([]); setMarksData([]); // if (document.getElementById("reader")) { // console.log("Reinitializing scanner..."); // scannerRef.current.render(success, error); // } }; useEffect(() => { 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}
)}
{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}
) : (
Marks Data Not Found ..
) ) : null}
{isLoading && }
); }; export default BarcodeScanner;