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

54 lines (53 loc) 2.35 kB
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;