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

55 lines (54 loc) 2.27 kB
import { hasGroupsBelowMin, useBuilder } from '@open-tender/utils'; import { useEffect, useState } from 'react'; import { useAppDispatch, useAppSelector } from '../app/hooks'; import { addItemToCart, selectKioskApi, selectKioskConfig, selectStoreSettings, showNotification } from '../slices'; var UpsellItem = function (_a) { var item = _a.item, callback = _a.callback, isLast = _a.isLast, children = _a.children; var dispatch = useAppDispatch(); var _b = useState(false), hasSize = _b[0], setHasSize = _b[1]; var apiUrl = useAppSelector(selectKioskApi); var config = useAppSelector(selectKioskConfig).upsellItem; var display_cals = useAppSelector(selectStoreSettings).display_cals; var _c = useBuilder(item), builtItem = _c.item, toggleOption = _c.toggleOption; var quantity = builtItem.quantity, groups = builtItem.groups; var sizeGroup = groups === null || groups === void 0 ? void 0 : groups.find(function (i) { return i.isSize; }); var groupsBelowMin = hasGroupsBelowMin(null, groups); var isIncomplete = "".concat(quantity) === '' || quantity === 0 || groupsBelowMin; var add = function () { if (!isIncomplete) { dispatch(addItemToCart(builtItem)); dispatch(showNotification("".concat(builtItem.name, " added to order!"))); if (callback) callback(); } }; var addSize = function (optionId) { if (sizeGroup) { toggleOption([[sizeGroup.id, optionId]]); setHasSize(true); } }; useEffect(function () { if (hasSize && !isIncomplete) { dispatch(addItemToCart(builtItem)); dispatch(showNotification("".concat(builtItem.name, " added to order!"))); if (callback) callback(); } }, [hasSize, isIncomplete, builtItem, callback, dispatch]); if (isIncomplete && !sizeGroup) return null; var handlers = { add: add, addSize: addSize }; if (!config) return null; return children({ config: config, handlers: handlers, item: item, isLast: isLast, apiUrl: apiUrl, displayCals: display_cals, sizeGroup: sizeGroup }); }; export default UpsellItem;