UNPKG

@open-tender/utils

Version:

A library of utils for use with Open Tender applications that utilize our cloud-based Order API.

95 lines (94 loc) 3.66 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.makeSuspendUnitlMsg = exports.makeMenuItemLayout = exports.makeFlatCategories = exports.makeOtherMenuSections = exports.makeItemChunks = exports.getBinaryArr = void 0; const helpers_1 = require("./helpers"); const datetimes_1 = require("./datetimes"); const getBinaryArr = (arr) => { const result = []; for (let i = 0; i < arr.length; i += 2) { const firstItem = arr[i]; const secondItem = arr[i + 1]; result.push(secondItem ? [firstItem, secondItem] : [firstItem]); } return result; }; exports.getBinaryArr = getBinaryArr; const makeItemChunks = (items, chunkSize) => { const arr = []; for (let i = 0; i < items.length; i += chunkSize) { const chunk = items.slice(i, i + chunkSize); const key = chunk.map((item, index) => `${i + index}-${item.id}`).join('-'); arr.push({ key, items: chunk }); } return arr; }; exports.makeItemChunks = makeItemChunks; const makeOtherMenuSections = (displayedSections, length = 10) => { return Object.entries(displayedSections).map(([section, items]) => { const slug = (0, helpers_1.slugify)(section); return { name: (0, helpers_1.capitalize)(section), id: slug, key: slug, data: items .map((i, idx) => (Object.assign(Object.assign({}, i), { key: `${slug}-${i.id}-${idx}` }))) .slice(0, length) }; }); }; exports.makeOtherMenuSections = makeOtherMenuSections; const makeFlatCategories = (categories) => { return categories .reduce((arr, cat) => { return [...arr, cat, ...(cat.children || [])]; }, []) .filter(c => c.items.length) .map(c => (Object.assign(Object.assign({}, c), { key: (0, helpers_1.slugify)(c.name), data: c.items.map((i, idx) => (Object.assign(Object.assign({}, i), { key: `${(0, helpers_1.slugify)(c.name)}-${i.id}-${idx}` }))) }))); }; exports.makeFlatCategories = makeFlatCategories; const makeMenuItemLayout = (position) => { switch (position) { case 'HIDDEN': return { hideImage: true, flexDirection: 'column', alignItems: 'stretch' }; case 'LEFT': return { hideImage: false, flexDirection: 'row', alignItems: 'flex-start' }; case 'RIGHT': return { hideImage: false, flexDirection: 'row-reverse', alignItems: 'flex-start' }; case 'BOTTOM': return { hideImage: false, flexDirection: 'column-reverse', alignItems: 'stretch' }; default: return { hideImage: false, flexDirection: 'column', alignItems: 'stretch' }; } }; exports.makeMenuItemLayout = makeMenuItemLayout; const makeSuspendUnitlMsg = (suspendedUntil, tz, soldOutMessage, withTime = true) => { const suspendedUntilDate = suspendedUntil ? new Date(suspendedUntil * 1000) : null; const soldOutDynamicMsg = soldOutMessage === null || soldOutMessage === void 0 ? void 0 : soldOutMessage.replace('{{suspended_until}}', suspendedUntilDate ? (0, datetimes_1.makeReadableDateStrFromIso)(suspendedUntilDate.toISOString(), tz, false, withTime) : ''); const soldOutMsg = soldOutDynamicMsg || 'Sold out for the day'; return soldOutMsg; }; exports.makeSuspendUnitlMsg = makeSuspendUnitlMsg;