UNPKG

@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
"use strict"; 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;