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