@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
JavaScript
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;