UNPKG

react-barcode-scanner

Version:

A barcode scanner base on Barcode Detector

57 lines (56 loc) 2.32 kB
import { __awaiter, __generator } from "tslib"; import { useState, useMemo, useEffect, useCallback } from 'react'; import { useStreamState } from './use-stream-state'; import { createAtom, useAtom } from './use-atom'; var torchAtom = createAtom(); export function useTorch(defaultTorchOn) { var _this = this; if (defaultTorchOn === void 0) { defaultTorchOn = false; } var _a = useAtom(torchAtom, defaultTorchOn), isTorchOn = _a[0], setIsTorchOn = _a[1]; var _b = useState(false), isTorchSupported = _b[0], setIsTorchSupported = _b[1]; var _c = useState(), error = _c[0], setError = _c[1]; var stream = useStreamState()[0]; var track = useMemo(function () { return stream === null || stream === void 0 ? void 0 : stream.getVideoTracks()[0]; }, [stream]); useEffect(function () { if (track == null) return; var capabilities = track.getCapabilities(); if (capabilities.torch !== undefined) { setIsTorchSupported(true); } }, [track]); var setTorch = useCallback(function (torch) { return __awaiter(_this, void 0, void 0, function () { var err_1; return __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]); useEffect(function () { setTorch(isTorchOn); }, [isTorchOn, setTorch]); return { isTorchSupported: isTorchSupported, error: error, isTorchOn: isTorchOn, setIsTorchOn: setIsTorchOn }; }