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

56 lines (55 loc) 2.52 kB
"use strict"; 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;