@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
56 lines (55 loc) • 1.99 kB
JavaScript
import { __awaiter, __generator } from "tslib";
import { useCallback, useRef, useState } from 'react';
function useBarcodeCameraScanner(listener, close) {
var _this = this;
var scannedCode = useRef('');
var _a = useState(null), error = _a[0], setError = _a[1];
var _b = 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 __awaiter(_this, void 0, void 0, function () {
return __generator(this, function (_a) {
listener.read(requestPermissionHandler);
return [2 /*return*/];
});
}); };
var cancel = function () { return __awaiter(_this, void 0, void 0, function () {
return __generator(this, function (_a) {
listener.cancel(function () { return setShowScanner(false); });
return [2 /*return*/];
});
}); };
var camera = useCallback(function () {
if (!showScanner) {
return null;
}
return listener.scannerComponent(onCodeScanned);
}, [listener, showScanner]);
var reset = function () { return __awaiter(_this, void 0, void 0, function () {
return __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
};
}
export default useBarcodeCameraScanner;