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

50 lines (49 loc) 2.38 kB
import { handleRespError } from '@open-tender/utils'; import React, { useCallback, useEffect, useMemo, useState } from 'react'; import { useAppDispatch, useAppSelector } from '../app/hooks'; import { addPromoCode, selectKioskConfig, selectOrder } from '../slices'; import { default as ErrorMessageContainer } from './ErrorMessage'; import { default as KeypadContainer } from './Keypad'; var PromoCode = function (_a) { var close = _a.close, children = _a.children, KeypadView = _a.KeypadView, ErrorMessageView = _a.ErrorMessageView; var dispatch = useAppDispatch(); var _b = useState(''), promoCode = _b[0], setPromoCode = _b[1]; var _c = useState(false), submitted = _c[0], setSubmitted = _c[1]; var _d = useState(null), errMsg = _d[0], setErrMsg = _d[1]; var _e = useAppSelector(selectKioskConfig), config = _e.promoCode, modalContentConfig = _e.modalContent; var _f = useAppSelector(selectOrder), loading = _f.loading, error = _f.error; var isLoading = loading === 'pending'; var submit = function () { setSubmitted(true); dispatch(addPromoCode(promoCode)); }; var handlers = { submit: submit, close: close }; useEffect(function () { if (submitted && !isLoading) { setSubmitted(false); if (error) { var detail = handleRespError(error).detail; setErrMsg(detail || 'Something went wrong'); } else { close(); } } }, [submitted, isLoading, error, close]); var renderErrorMessage = useCallback(function (errMsg) { return (React.createElement(ErrorMessageContainer, { content: errMsg, children: ErrorMessageView })); }, [ErrorMessageView]); var keypadHandlers = useMemo(function () { return ({ change: setPromoCode }); }, [setPromoCode]); var renderKeypad = useCallback(function () { return (React.createElement(KeypadContainer, { 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 }); }; export default PromoCode;