@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) • 2.52 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var utils_1 = require("@open-tender/utils");
var react_1 = require("react");
var hooks_1 = require("../app/hooks");
var slices_1 = require("../slices");
var useBarcodeScanner_1 = require("./useBarcodeScanner");
var useSignInQr = function (listener, cameraScanner, type, close, callback) {
var dispatch = (0, hooks_1.useAppDispatch)();
var _a = (0, react_1.useState)(false), submitted = _a[0], setSubmitted = _a[1];
var _b = (0, react_1.useState)(false), hasRead = _b[0], setHasRead = _b[1];
var _c = (0, react_1.useState)(null), errMsg = _c[0], setErrMsg = _c[1];
var api = (0, hooks_1.useAppSelector)(slices_1.selectApi);
var scan = (0, useBarcodeScanner_1.useBarcodeScanner)(listener, cameraScanner, type, api, close);
var _d = (0, hooks_1.useAppSelector)(slices_1.selectCustomerIdentify), customer = _d.data, loading = _d.loading, error = _d.error;
var isLoading = loading === 'pending';
var cancel = function () {
if (!(scan === null || scan === void 0 ? void 0 : scan.code))
scan === null || scan === void 0 ? void 0 : scan.cancel();
if (close)
close();
};
var retry = function () {
(scan === null || scan === void 0 ? void 0 : scan.reset) && scan.reset();
setHasRead(false);
setErrMsg(null);
};
(0, react_1.useEffect)(function () {
if (scan === null || scan === void 0 ? void 0 : scan.error) {
setErrMsg(scan.error);
}
else if ((scan === null || scan === void 0 ? void 0 : scan.code) && !customer) {
dispatch((0, slices_1.fetchCustomerIdentify)({ qr_code: scan.code }));
setSubmitted(true);
}
else if (!hasRead) {
setHasRead(true);
scan === null || scan === void 0 ? void 0 : scan.read();
}
}, [dispatch, scan, close, customer, hasRead]);
var handlers = { close: cancel, retry: retry };
(0, react_1.useEffect)(function () {
if (submitted && !isLoading) {
if (error) {
var detail = (0, utils_1.handleRespError)(error).detail;
setErrMsg(detail || 'Something went wrong');
}
else {
callback ? callback() : close ? close() : null;
}
}
}, [submitted, isLoading, error, close, callback]);
return { handlers: handlers, errMsg: errMsg, scan: scan };
};
exports.default = useSignInQr;