@open-tender/utils
Version:
A library of utils for use with Open Tender applications that utilize our cloud-based Order API.
58 lines (57 loc) • 2.73 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.useOrderItem = void 0;
const utils_1 = require("../utils");
const useOrderItem = (orderItem, favorite = null, allergenAlerts = [], cartCounts = {}, showCals = false, showTags = false, showAllergens = false, showDesc = 'SHOW', tagsAllert = []) => {
const { description, shortDescription, quantity, price, totalPrice, cals, totalCals, tags, allergens, groups, isSoldOut } = orderItem;
const cartCount = cartCounts[orderItem.id] || 0;
const displayTags = showTags && tags.length ? tags : [];
const displayAllergens = showAllergens && allergens.length ? allergens : [];
const contains = allergens.filter(allergen => allergenAlerts.includes(allergen));
const allergenAlert = contains.length ? `${contains.join(', ')}` : null;
const containsTags = tags.filter(tag => tagsAllert.includes(tag));
const tagAlert = containsTags.length ? `${containsTags.join(', ')}` : null;
const sizeGroup = groups.find(i => i.isSize);
const sizeOnly = sizeGroup && groups.length === 1;
const defaultOption = !sizeGroup
? null
: sizeGroup.options.find(i => i.isDefault) || sizeGroup.options[0];
const currentPrice = totalPrice
? totalPrice
: defaultOption
? defaultOption.price
: price;
const displayPrice = (0, utils_1.formatDollars)(currentPrice.toString());
const itemCals = showCals ? (totalPrice ? totalCals : cals) : null;
const displayCals = itemCals ? `${itemCals.toFixed(0)}` : null;
const groupsBelowMin = (0, utils_1.hasGroupsBelowMin)(null, groups);
const isIncomplete = quantity === 0 || groupsBelowMin;
const nonSizeGroups = groups.filter(i => !i.isSize);
const currentOptions = (0, utils_1.getItemOptions)(Object.assign(Object.assign({}, orderItem), { groups: nonSizeGroups }));
const hasSelections = currentOptions.length > 0;
const desc = showDesc === 'SHORT' ? shortDescription : description;
const optionNames = favorite
? groups
.reduce((arr, group) => {
const names = group.options
.filter(o => o.quantity > 0)
.map(o => o.name);
return [...arr, ...names];
}, [])
.join(', ')
: null;
const displayDesc = showDesc === 'HIDE' ? '' : optionNames || desc;
return Object.assign(Object.assign({}, orderItem), { displayDesc,
displayTags,
displayAllergens,
displayPrice,
displayCals,
isIncomplete,
isSoldOut,
allergenAlert,
tagAlert,
hasSelections,
sizeOnly,
cartCount });
};
exports.useOrderItem = useOrderItem;