@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.72 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, reorder as reorderPastOrder, selectKioskApi, selectOrder, setOrderId } from '../slices';
import { default as CheckTotalsContainer } from './CheckTotals';
import { default as OrderDetailsItemContainer } from './OrderDetailsItem';
var OrderDetails = function (_a) {
var order = _a.order, close = _a.close, goToCheckout = _a.goToCheckout, children = _a.children, CheckTotalsView = _a.CheckTotalsView, OrderDetailsItemView = _a.OrderDetailsItemView;
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 _d = useOrder(order), subtitle = _d.title, title = _d.orderNo, requestedAt = _d.requestedAt;
var _e = useAppSelector(selectOrder), loading = _e.loading, error = _e.error;
var isLoading = loading === 'pending';
var _f = useAppSelector(selectKioskConfig), config = _f.orderDetails, modalContentConfig = _f.modalContent;
var reorder = function () {
setErrMsg(null);
setIsReordering(true);
dispatch(reorderPastOrder(order.cart));
};
var renderCheckTotals = useCallback(function () { return React.createElement(CheckTotalsContainer, { check: order, children: CheckTotalsView }); }, [order, CheckTotalsView]);
var renderOrderDetailsItem = useCallback(function (orderItem) { return (React.createElement(OrderDetailsItemContainer, { key: orderItem.id, orderItem: orderItem, children: OrderDetailsItemView })); }, [OrderDetailsItemView]);
useEffect(function () {
if (isReordering && !isLoading) {
setIsReordering(false);
if (error) {
setErrMsg(error.detail);
}
else {
dispatch(setOrderId(uuidv4()));
goToCheckout();
close();
}
}
}, [dispatch, isLoading, isReordering, error, goToCheckout, close]);
if (!config)
return null;
return children({
config: config,
modalContentConfig: modalContentConfig,
renderCheckTotals: renderCheckTotals,
requestedAt: requestedAt,
order: order,
title: title,
subtitle: subtitle,
isReordering: isReordering,
errMsg: errMsg,
handlers: { reorder: reorder, close: close },
apiUrl: apiUrl,
renderOrderDetailsItem: renderOrderDetailsItem
});
};
export default OrderDetails;