UNPKG

@open-tender/store

Version:

A library of hooks, reducers, utility functions, and types for use with Open Tender applications that utilize our in-store POS API

58 lines (57 loc) 2.13 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = require("tslib"); var react_1 = require("react"); function useBarcodeCameraScanner(listener, close) { var _this = this; var scannedCode = (0, react_1.useRef)(''); var _a = (0, react_1.useState)(null), error = _a[0], setError = _a[1]; var _b = (0, react_1.useState)(false), showScanner = _b[0], setShowScanner = _b[1]; var onCodeScanned = function (event) { scannedCode.current = event.nativeEvent.codeStringValue; setShowScanner(false); close && close(); }; var requestPermissionHandler = function (result) { setShowScanner(result === 'granted'); setError(result !== 'granted' ? 'Authorization Error: Cannot Access Device Camera' : null); }; var read = function () { return tslib_1.__awaiter(_this, void 0, void 0, function () { return tslib_1.__generator(this, function (_a) { listener.read(requestPermissionHandler); return [2 /*return*/]; }); }); }; var cancel = function () { return tslib_1.__awaiter(_this, void 0, void 0, function () { return tslib_1.__generator(this, function (_a) { listener.cancel(function () { return setShowScanner(false); }); return [2 /*return*/]; }); }); }; var camera = (0, react_1.useCallback)(function () { if (!showScanner) { return null; } return listener.scannerComponent(onCodeScanned); }, [listener, showScanner]); var reset = function () { return tslib_1.__awaiter(_this, void 0, void 0, function () { return tslib_1.__generator(this, function (_a) { scannedCode.current = ''; setShowScanner(false); setError(null); return [2 /*return*/]; }); }); }; return { read: read, camera: camera, error: error, cancel: cancel, reset: reset, showScanner: showScanner, code: scannedCode.current }; } exports.default = useBarcodeCameraScanner;