UNPKG

@otterscan/react-qr-reader

Version:

A React Component for reading QR codes from the webcam

42 lines (37 loc) 1.43 kB
import { useEffect, useRef } from 'react'; import { BrowserQRCodeReader } from '@zxing/browser'; import { isMediaDevicesSupported, isValidType } from "./utils.js"; // TODO: add support for debug logs export const useQrReader = ({ scanDelay: delayBetweenScanAttempts, constraints: video, onResult, videoId }) => { const controlsRef = useRef(null); useEffect(() => { const codeReader = new BrowserQRCodeReader(null, { delayBetweenScanAttempts }); if (!isMediaDevicesSupported() && isValidType(onResult, 'onResult', 'function')) { const message = 'MediaDevices API has no support for your browser. You can fix this by running "npm i webrtc-adapter"'; onResult(null, new Error(message), codeReader); } if (isValidType(video, 'constraints', 'object')) { codeReader.decodeFromConstraints({ video }, videoId, (result, error) => { if (isValidType(onResult, 'onResult', 'function')) { onResult(result, error, codeReader); } }).then(controls => controlsRef.current = controls).catch(error => { if (isValidType(onResult, 'onResult', 'function')) { onResult(null, error, codeReader); } }); } return () => { var _controlsRef$current; (_controlsRef$current = controlsRef.current) === null || _controlsRef$current === void 0 ? void 0 : _controlsRef$current.stop(); }; }, []); };