@open-tender/utils
Version:
A library of utils for use with Open Tender applications that utilize our cloud-based Order API.
82 lines (81 loc) • 3.69 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.useFirstTimes = void 0;
const react_1 = require("react");
const utils_1 = require("../utils");
const useFirstTimes = (firstTime, revenueCenter, serviceType, orderType, requestedAt, isGroupOrder = false, days = 100) => {
const { timezone, holidays, days_ahead, valid_times, group_ordering } = revenueCenter;
const { prep_time = 0, lead_time = 0 } = group_ordering || {};
const leadTime = isGroupOrder ? prep_time + lead_time : 0;
const tz = utils_1.timezoneMap[timezone];
const selected = requestedAt && requestedAt !== 'asap';
const requested = selected
? (0, utils_1.isoToDateStrMinutes)(requestedAt, tz)
: { date: null, minutes: null };
const [date, setDate] = (0, react_1.useState)(requested.date || firstTime.date);
const [time, setTime] = (0, react_1.useState)(requested.minutes || firstTime.minutes);
const [dateChange, setDateChange] = (0, react_1.useState)(false);
const daysAhead = orderType === 'CATERING' ? days : days_ahead;
const dates = (0, react_1.useMemo)(() => (0, utils_1.makeDates)(firstTime.date, daysAhead, 'E, MMM d'), [firstTime.date, daysAhead]);
const dateOptions = dates.map(({ label, value }) => ({ name: label, value }));
const timeOptions = (0, react_1.useMemo)(() => {
if (date && valid_times) {
const options = (0, utils_1.makeTimes)(date, firstTime, valid_times, holidays, serviceType, leadTime);
return options !== null && options !== void 0 ? options : [];
}
else {
return [];
}
}, [date, firstTime, valid_times, holidays, serviceType, leadTime]);
const orderDate = dateOptions.find(i => i.value === date);
const showAsap = firstTime.has_asap && date === firstTime.date ? true : false;
const firstIso = (0, utils_1.dateStrMinutesToIso)(firstTime.date, firstTime.minutes + leadTime, tz);
const asapTime = showAsap ? (0, utils_1.makeReadableDateStrFromIso)(firstIso, tz) : null;
const asapTimeOption = {
name: `ASAP (about ${asapTime})`,
value: 'asap',
disabled: false
};
const timeOptionsAsap = showAsap
? [asapTimeOption, ...timeOptions]
: timeOptions;
const firstOrderableTime = timeOptionsAsap
? timeOptionsAsap.find(i => !i.disabled)
: null;
const firstMinutes = firstOrderableTime ? firstOrderableTime.value : null;
const defaultTime = timeOptionsAsap
? timeOptionsAsap.find(i => i.value === firstMinutes)
: null;
const orderTime = timeOptionsAsap
? timeOptionsAsap.find(i => i.value === time) || defaultTime
: null;
const isAsap = orderTime && orderTime.value === 'asap' ? true : false;
const orderMsg = orderDate && orderTime
? isAsap
? `Order ${orderTime.name}`
: `Order for ${orderDate.name} @ ${orderTime.name}`
: 'Choose Time';
const timeVal = orderTime ? orderTime.value : time;
const timeInt = timeVal === 'asap' ? 0 : Number(timeVal);
const requestedTime = isAsap
? 'asap'
: (0, utils_1.dateStrMinutesToIso)(date, timeInt, tz);
const closedTimeOptions = [{ name: 'Closed', value: null, disabled: false }];
const timeOptionsAdjusted = !timeOptionsAsap.length
? closedTimeOptions
: timeOptionsAsap;
return {
date,
setDate,
time,
setTime,
dateChange,
setDateChange,
dateOptions,
timeOptions: timeOptionsAdjusted,
firstMinutes,
requestedTime,
orderMsg
};
};
exports.useFirstTimes = useFirstTimes;