@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
54 lines (53 loc) • 2.35 kB
JavaScript
import { handleRespError } from '@open-tender/utils';
import { useEffect, useState } from 'react';
import { useAppDispatch, useAppSelector } from '../app/hooks';
import { fetchCustomerIdentify, selectApi, selectCustomerIdentify } from '../slices';
import { useBarcodeScanner } from './useBarcodeScanner';
var useSignInQr = function (listener, cameraScanner, type, close, callback) {
var dispatch = useAppDispatch();
var _a = useState(false), submitted = _a[0], setSubmitted = _a[1];
var _b = useState(false), hasRead = _b[0], setHasRead = _b[1];
var _c = useState(null), errMsg = _c[0], setErrMsg = _c[1];
var api = useAppSelector(selectApi);
var scan = useBarcodeScanner(listener, cameraScanner, type, api, close);
var _d = useAppSelector(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);
};
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(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 };
useEffect(function () {
if (submitted && !isLoading) {
if (error) {
var detail = 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 };
};
export default useSignInQr;