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.43 kB
import React, { useCallback, useEffect, useState } from 'react'; import { v4 as uuidv4 } from 'uuid'; import { useAppDispatch, useAppSelector } from '../app/hooks'; import { useOrder } from '../hooks'; import { selectKioskConfig, selectOrder, reorder as reorderPastOrder, openModal, selectKioskApi, setOrderId } from '../slices'; import { default as ErrorMessageContainer } from './ErrorMessage'; var OrderCard = function (_a) { var order = _a.order, goToCheckout = _a.goToCheckout, children = _a.children, ErrorMessageView = _a.ErrorMessageView; var dispatch = useAppDispatch(); var apiUrl = useAppSelector(selectKioskApi); var _b = useState(null), errMsg = _b[0], setErrMsg = _b[1]; var _c = useState(false), isReordering = _c[0], setIsReordering = _c[1]; var config = useAppSelector(selectKioskConfig).orderCard; var _d = useAppSelector(selectOrder), loading = _d.loading, error = _d.error; var isLoading = loading === 'pending'; var _e = useOrder(order), itemImages = _e.itemImages, itemNames = _e.itemNames, orderNo = _e.orderNo, title = _e.title, subtitle = _e.subtitle; var view = function () { dispatch(openModal({ type: 'ORDER_DETAILS', args: { order: order, goToCheckout: goToCheckout } })); }; var reorder = function () { setErrMsg(null); setIsReordering(true); dispatch(reorderPastOrder(order.cart)); }; var handlers = { view: view, reorder: reorder }; useEffect(function () { if (isReordering && !isLoading) { setIsReordering(false); if (error) { setErrMsg(error.detail); } else { dispatch(setOrderId(uuidv4())); goToCheckout(); } } }, [dispatch, isLoading, isReordering, error, goToCheckout]); var renderErrorMessage = useCallback(function (errMsg) { return (React.createElement(ErrorMessageContainer, { content: errMsg, children: ErrorMessageView })); }, [ErrorMessageView]); if (!config) return null; return children({ config: config, handlers: handlers, isReordering: isReordering, errMsg: errMsg, subtitle: subtitle, title: title, orderNo: orderNo, itemNames: itemNames, itemImages: itemImages, renderErrorMessage: renderErrorMessage, apiUrl: apiUrl }); }; export default OrderCard;