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