UNPKG

react-barcode-scanner

Version:

A barcode scanner base on Barcode Detector

86 lines (85 loc) 3.4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.useCamera = useCamera; var tslib_1 = require("tslib"); var react_1 = require("react"); var utils_1 = require("../helper/utils"); var use_stream_state_1 = require("./use-stream-state"); var DEFAULT_CONSTRAINTS = { width: { min: 640, ideal: 1280 }, height: { min: 480, ideal: 720 }, facingMode: { ideal: 'environment' }, advanced: [ { width: 1920, height: 1280 }, { aspectRatio: 1.333 } ] }; function useCamera(ref, trackConstraints) { var _this = this; var _a = (0, react_1.useState)(false), isCameraReady = _a[0], setIsCameraReady = _a[1]; var _b = (0, react_1.useState)(), error = _b[0], setError = _b[1]; var _c = (0, use_stream_state_1.useStreamState)(), setStream = _c[1]; (0, react_1.useEffect)(function () { if (!window.isSecureContext) { setError(new Error("[react-barcode-scanner]: \n Browser ask for secure origin (such as https) when use getUserMedia,\n reference: https://sites.google.com/a/chromium.org/dev/Home/chromium-security/deprecating-powerful-features-on-insecure-origins\n ")); } }, []); var constraints = (0, react_1.useMemo)(function () { var videoConstraints = Object.assign({}, DEFAULT_CONSTRAINTS, trackConstraints); return { audio: false, video: videoConstraints }; }, [trackConstraints]); (0, react_1.useEffect)(function () { var cancelled = false; var stream; var _ = function () { return tslib_1.__awaiter(_this, void 0, void 0, function () { var target; return tslib_1.__generator(this, function (_a) { switch (_a.label) { case 0: setError(undefined); target = ref.current; if (target == null) return [2]; return [4, navigator.mediaDevices.getUserMedia(constraints)]; case 1: stream = _a.sent(); if (target.mozSrcObject !== undefined) { target.mozSrcObject = stream; } else { target.srcObject = stream; } return [4, (0, utils_1.eventListener)(target, 'loadeddata')]; case 2: _a.sent(); return [4, (0, utils_1.timeout)(500)]; case 3: _a.sent(); setIsCameraReady(true); setStream(stream); return [2]; } }); }); }; var close = function () { stream === null || stream === void 0 ? void 0 : stream.getTracks().forEach(function (track) { track.stop(); }); }; void _().then(function () { if (cancelled) { close(); } }).catch(function (err) { setError(err); }); return function () { cancelled = true; close(); }; }, [ref, constraints, setStream]); return { isCameraReady: isCameraReady, error: error }; }