import wixWindow from 'wix-window'; import wixData from 'wix-data'; import moment from 'moment'; const CONSTANTS = { SLOTS: [], MAX: 4, UNIT_DELTA: 'days', WEEKDAY_DELTA: 2, WEEKEND_DELTA: 4, THURSDAY: 4 } $w.onReady(function () { const recievedData = wixWindow.lightbox.getContext(); getSlots(); skipTheWeekend(); setDisabledDates(); loadCustomerChoice(recievedData.cartId); $w('#deliveryDatePicker').onChange((event) => { setAvailableSlots($w('#deliveryDatePicker').value); }); $w('#close').onClick((event) => { setDeliveryTime(recievedData.cartId, $w('#deliveryDatePicker').value, getSelectedDeliverySlot()) setTimeout(function () { closeLightbox(); }, 1000); }); }); function loadCustomerChoice(cartId) { wixData.query('deliveries') .eq('cartId', cartId) .find() .then((results) => { if (results.items.length > 0) { $w('#deliveryDatePicker').value = new Date(results.items[0].date); $w('#timeSlotDropdown').value = results.items[0].deliveryTime; } else { loadDeliverySlots(CONSTANTS.SLOTS); } }) .catch((err) => { console.error('loadCustomerChoice error', err); }); } function skipTheWeekend() { let day = new Date().getDay() === CONSTANTS.THURSDAY ? moment().add(CONSTANTS.WEEKEND_DELTA, CONSTANTS.UNIT_DELTA) : moment().add(CONSTANTS.WEEKDAY_DELTA, CONSTANTS.UNIT_DELTA); console.log("Day:", day); $w('#deliveryDatePicker').minDate = day._d; $w('#deliveryDatePicker').value = day._d; } function setDisabledDates() { wixData.query('deliveries-disableddates') .find() .then((results) => { if (results.items.length > 0) { let items = results.items; let dates = []; items.forEach(item => { dates.push(item.date); }); $w('#deliveryDatePicker').disabledDates = dates; } }) .catch((err) => { console.error('getDisabledDates error', err); }); } function getSlots() { wixData.query('deliveries-slots') .find() .then((results) => { if (results.items.length > 0) { let items = results.items; items.forEach(item => { CONSTANTS.SLOTS.push({ label: item.slots, value: item.slots }); }); loadDeliverySlots(CONSTANTS.SLOTS); } }) .catch((err) => { console.error('getSlots error', err); }); } function loadDeliverySlots(availableSlots) { $w('#timeSlotDropdown').options = availableSlots; $w('#timeSlotDropdown').selectedIndex = 0; } function setAvailableSlots(deliveryDay) { let slots = []; wixData.query('deliveries-availability') .eq('deliveryDate', deliveryDay.toDateString()) .find() .then((results) => { if (results.items.length > 0) { let deliverySlots = results.items; // find full slots let fullSlots = []; deliverySlots.forEach(element => { if (element.counter >= CONSTANTS.MAX) { fullSlots.push(element.deliveryTime); } }); // remove full slots from the slots list if (fullSlots.length > 0) { fullSlots.forEach(element => { CONSTANTS.SLOTS.forEach(item => { if (element !== item.label) { slots.push(item); } }); }); loadDeliverySlots(slots); } else { loadDeliverySlots(CONSTANTS.SLOTS) } } else { loadDeliverySlots(CONSTANTS.SLOTS); } }) .catch((err) => { console.error('setAvailableSlots error', err); }); } function setDeliveryTime(cartId, date, time) { wixData.query('deliveries') .eq('cartId', cartId) .find() .then((results) => { if (results.items.length > 0) { deliveryUpdate(results.items[0]._id, date, time) } else { deliveryTimeInsert(cartId, date, time) } }) .catch((err) => { console.error('setDelivery error', err); }); } function deliveryUpdate(itemId, date, time) { wixData.get('deliveries', itemId) .then((item) => { item.date = date.toDateString(); item.deliveryTime = time; item.orderNumber = ''; wixData.update('deliveries', item); }) .catch((err) => { console.error('deliveryUpdate error', err); }); } function deliveryTimeInsert(cartId, date, time) { let toInsert = { 'cartId': cartId, 'date': new Date(date).toDateString(), 'deliveryTime': time, 'orderNumber': '' }; wixData.insert('deliveries', toInsert) .then((result) => { console.log('deliveryInsert result', result); }) .catch((err) => { console.error('deliveryInsert error', err); }); } function closeLightbox() { let data = { deliveryDate: $w('#deliveryDatePicker').value, deliveryTime: $w('#timeSlotDropdown').value } wixWindow.lightbox.close(data); } function getSelectedDeliverySlot() { return $w('#timeSlotDropdown').value; }