import { Button } from '@/components/ui/button' import { X } from 'lucide-react' import QrScanner from 'qr-scanner' import { useCallback, useEffect, useRef, useState } from 'react' import { useTranslation } from 'react-i18next' export default function QrScannerModal({ onScan, onClose }: { onScan: (result: string) => void onClose: () => void }) { const { t } = useTranslation() const videoRef = useRef(null) const scannerRef = useRef(null) const [error, setError] = useState(null) const handleScan = useCallback( (result: QrScanner.ScanResult) => { onScan(result.data) onClose() }, [onScan, onClose] ) useEffect(() => { if (!videoRef.current) return const scanner = new QrScanner(videoRef.current, handleScan, { preferredCamera: 'environment', highlightScanRegion: true, highlightCodeOutline: true }) scannerRef.current = scanner scanner.start().catch(() => { setError(t('Failed to access camera')) }) return () => { scanner.destroy() } }, [handleScan, t]) return (
{error ? (
{error}
) : (

{t('Point camera at QR code')}

) }