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

38 lines (37 loc) 2.13 kB
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;