react-barcode-scanner
Version:
A barcode scanner base on Barcode Detector
57 lines (56 loc) • 2.32 kB
JavaScript
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 };
}