@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
JavaScript
;
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;