UNPKG

@open-tender/utils

Version:

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

86 lines (85 loc) 3.12 kB
import { capitalize, slugify } from './helpers'; import { makeReadableDateStrFromIso } from './datetimes'; export 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; }; export 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; }; export const makeOtherMenuSections = (displayedSections, length = 10) => { return Object.entries(displayedSections).map(([section, items]) => { const slug = slugify(section); return { name: capitalize(section), id: slug, key: slug, data: items .map((i, idx) => (Object.assign(Object.assign({}, i), { key: `${slug}-${i.id}-${idx}` }))) .slice(0, length) }; }); }; export 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: slugify(c.name), data: c.items.map((i, idx) => (Object.assign(Object.assign({}, i), { key: `${slugify(c.name)}-${i.id}-${idx}` }))) }))); }; export 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' }; } }; export 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 ? makeReadableDateStrFromIso(suspendedUntilDate.toISOString(), tz, false, withTime) : ''); const soldOutMsg = soldOutDynamicMsg || 'Sold out for the day'; return soldOutMsg; };