@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
38 lines (37 loc) • 2.13 kB
JavaScript
import React, { useCallback, useEffect } from 'react';
import { useAppDispatch, useAppSelector } from '../app/hooks';
import { closeCartSummary, selectCartSummary, selectCartTotals, selectKioskConfig, selectOrder, toggleCartSummary } from '../slices';
import { default as CartItemContainer } from './CartItem';
import { default as CartUpsellsContainer } from './CartUpsells';
var Cart = function (_a) {
var navigate = _a.navigate, children = _a.children, CartUpsellsView = _a.CartUpsellsView, CartItemView = _a.CartItemView, QuantityView = _a.QuantityView, CartUpsellItemView = _a.CartUpsellItemView;
var dispatch = useAppDispatch();
var config = useAppSelector(selectKioskConfig).cart;
var cart = useAppSelector(selectOrder).cart;
var _b = useAppSelector(selectCartTotals), count = _b.count, total = _b.total;
var isOpen = useAppSelector(selectCartSummary).isOpen;
var isEmpty = !cart.length;
var toggleCart = function () { return dispatch(toggleCartSummary()); };
var checkout = function () { return navigate('/checkout'); };
var handlers = { checkout: checkout, toggleCart: toggleCart };
useEffect(function () {
if (!isOpen || !isEmpty)
return;
dispatch(closeCartSummary());
}, [dispatch, isOpen, isEmpty]);
var renderCartItem = useCallback(function (item, index, isLast) { return (React.createElement(CartItemContainer, { key: "".concat(item.id, "-").concat(index), navigate: navigate, item: item, isLast: isLast, children: CartItemView, QuantityView: QuantityView })); }, [navigate, CartItemView, QuantityView]);
var renderCartUpsells = useCallback(function () { return (React.createElement(CartUpsellsContainer, { CartUpsellItemView: CartUpsellItemView, children: CartUpsellsView })); }, [CartUpsellsView, CartUpsellItemView]);
if (!config)
return null;
return children({
config: config,
handlers: handlers,
cart: cart,
count: count,
total: total,
isOpen: isOpen,
renderCartItem: renderCartItem,
renderCartUpsells: renderCartUpsells
});
};
export default Cart;