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

53 lines (52 loc) 2.61 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = require("tslib"); var utils_1 = require("@open-tender/utils"); var react_1 = tslib_1.__importStar(require("react")); var hooks_1 = require("../app/hooks"); var slices_1 = require("../slices"); var ErrorMessage_1 = tslib_1.__importDefault(require("./ErrorMessage")); var Keypad_1 = tslib_1.__importDefault(require("./Keypad")); var PromoCode = function (_a) { var close = _a.close, children = _a.children, KeypadView = _a.KeypadView, ErrorMessageView = _a.ErrorMessageView; var dispatch = (0, hooks_1.useAppDispatch)(); var _b = (0, react_1.useState)(''), promoCode = _b[0], setPromoCode = _b[1]; var _c = (0, react_1.useState)(false), submitted = _c[0], setSubmitted = _c[1]; var _d = (0, react_1.useState)(null), errMsg = _d[0], setErrMsg = _d[1]; var _e = (0, hooks_1.useAppSelector)(slices_1.selectKioskConfig), config = _e.promoCode, modalContentConfig = _e.modalContent; var _f = (0, hooks_1.useAppSelector)(slices_1.selectOrder), loading = _f.loading, error = _f.error; var isLoading = loading === 'pending'; var submit = function () { setSubmitted(true); dispatch((0, slices_1.addPromoCode)(promoCode)); }; var handlers = { submit: submit, close: close }; (0, react_1.useEffect)(function () { if (submitted && !isLoading) { setSubmitted(false); if (error) { var detail = (0, utils_1.handleRespError)(error).detail; setErrMsg(detail || 'Something went wrong'); } else { close(); } } }, [submitted, isLoading, error, close]); var renderErrorMessage = (0, react_1.useCallback)(function (errMsg) { return (react_1.default.createElement(ErrorMessage_1.default, { content: errMsg, children: ErrorMessageView })); }, [ErrorMessageView]); var keypadHandlers = (0, react_1.useMemo)(function () { return ({ change: setPromoCode }); }, [setPromoCode]); var renderKeypad = (0, react_1.useCallback)(function () { return (react_1.default.createElement(Keypad_1.default, { type: "default", handlers: keypadHandlers, value: promoCode, children: KeypadView })); }, [keypadHandlers, promoCode, KeypadView]); if (!config) return null; return children({ config: config, handlers: handlers, errMsg: errMsg, renderErrorMessage: renderErrorMessage, modalContentConfig: modalContentConfig, renderKeypad: renderKeypad }); }; exports.default = PromoCode;