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