import { QrCode2 } from "@mui/icons-material"; import { Button, TextField } from "@mui/material"; import { BrowserMultiFormatReader } from "@zxing/browser"; import React, { useEffect, useRef, useState } from "react"; import useCameraStore from "../hooks/useCameraStore"; const BarcodeScanner: React.FC = () => { const { barcode, setBarcode } = useCameraStore(); const [isCameraActive, setIsCameraActive] = useState(false); const videoRef = useRef(null); const inputRef = useRef(null); const stopCamera = () => { const video = videoRef.current; if (!video || !video.srcObject) return; const stream = video.srcObject as MediaStream; stream.getTracks().forEach((track) => track.stop()); video.srcObject = null; }; useEffect(() => { if (!isCameraActive || !videoRef.current) return; const reader = new BrowserMultiFormatReader(); let cancelled = false; reader .decodeOnceFromVideoDevice(undefined, videoRef.current) .then((result) => { if (cancelled) return; setBarcode(result.getText()); setIsCameraActive(false); stopCamera(); // 🔥 fokus ke input biar bisa diedit setTimeout(() => { inputRef.current?.focus(); }, 100); }) .catch(() => { // ignore cancel / permission stop }); return () => { cancelled = true; stopCamera(); }; }, [isCameraActive, setBarcode]); return (
{isCameraActive && ( <>

Arahkan barcode ke tengah layar

); }; export default BarcodeScanner;