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

56 lines (55 loc) 2.31 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var utils_1 = require("@open-tender/utils"); var react_1 = require("react"); var hooks_1 = require("../app/hooks"); var slices_1 = require("../slices"); var CartUpsellItem = function (_a) { var item = _a.item, callback = _a.callback, isLast = _a.isLast, children = _a.children; var dispatch = (0, hooks_1.useAppDispatch)(); var _b = (0, react_1.useState)(false), hasSize = _b[0], setHasSize = _b[1]; var apiUrl = (0, hooks_1.useAppSelector)(slices_1.selectKioskApi); var config = (0, hooks_1.useAppSelector)(slices_1.selectKioskConfig).cartUpsellItem; var display_cals = (0, hooks_1.useAppSelector)(slices_1.selectStoreSettings).display_cals; var _c = (0, utils_1.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 = (0, utils_1.hasGroupsBelowMin)(null, groups); var isIncomplete = "".concat(quantity) === '' || quantity === 0 || groupsBelowMin; var add = function () { if (!isIncomplete) { dispatch((0, slices_1.addItemToCart)(builtItem)); if (callback) callback(); } }; var addSize = function (optionId) { if (sizeGroup) { toggleOption([[sizeGroup.id, optionId]]); setHasSize(true); } }; (0, react_1.useEffect)(function () { if (hasSize && !isIncomplete) { dispatch((0, slices_1.addItemToCart)(builtItem)); dispatch((0, slices_1.showNotification)("".concat(builtItem.name, " added to order!"))); if (callback) callback(); } }, [hasSize, isIncomplete, builtItem, callback, dispatch]); var handlers = { add: add, addSize: addSize }; if (isIncomplete && !sizeGroup) return null; if (!config) return null; return children({ config: config, handlers: handlers, item: item, isLast: isLast, apiUrl: apiUrl, displayCals: display_cals, sizeGroup: sizeGroup }); }; exports.default = CartUpsellItem;