UNPKG

react-barcode-scanner

Version:

A barcode scanner base on Barcode Detector

60 lines (59 loc) 2.51 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.useTorch = useTorch; var tslib_1 = require("tslib"); var react_1 = require("react"); var use_stream_state_1 = require("./use-stream-state"); var use_atom_1 = require("./use-atom"); var torchAtom = (0, use_atom_1.createAtom)(); function useTorch(defaultTorchOn) { var _this = this; if (defaultTorchOn === void 0) { defaultTorchOn = false; } var _a = (0, use_atom_1.useAtom)(torchAtom, defaultTorchOn), isTorchOn = _a[0], setIsTorchOn = _a[1]; var _b = (0, react_1.useState)(false), isTorchSupported = _b[0], setIsTorchSupported = _b[1]; var _c = (0, react_1.useState)(), error = _c[0], setError = _c[1]; var stream = (0, use_stream_state_1.useStreamState)()[0]; var track = (0, react_1.useMemo)(function () { return stream === null || stream === void 0 ? void 0 : stream.getVideoTracks()[0]; }, [stream]); (0, react_1.useEffect)(function () { if (track == null) return; var capabilities = track.getCapabilities(); if (capabilities.torch !== undefined) { setIsTorchSupported(true); } }, [track]); var setTorch = (0, react_1.useCallback)(function (torch) { return tslib_1.__awaiter(_this, void 0, void 0, function () { var err_1; return tslib_1.__generator(this, function (_a) { switch (_a.label) { case 0: setError(undefined); _a.label = 1; case 1: _a.trys.push([1, 3, , 4]); if (!isTorchSupported) return [2]; return [4, (track === null || track === void 0 ? void 0 : track.applyConstraints({ advanced: [{ torch: torch }] }))]; case 2: _a.sent(); return [3, 4]; case 3: err_1 = _a.sent(); console.warn(err_1); setError(err_1); return [3, 4]; case 4: return [2]; } }); }); }, [track, isTorchSupported]); (0, react_1.useEffect)(function () { setTorch(isTorchOn); }, [isTorchOn, setTorch]); return { isTorchSupported: isTorchSupported, error: error, isTorchOn: isTorchOn, setIsTorchOn: setIsTorchOn }; }