Merge branch 'release/2026.01.08' into nation/CASH-1931

This commit is contained in:
CarlNation 2025-12-09 09:26:45 -05:00
commit 2efd57feaa
6 changed files with 25 additions and 39 deletions

View file

@ -160,6 +160,10 @@ export default {
return this.staticBackdrop ? "static" : "true"; return this.staticBackdrop ? "static" : "true";
}, },
}, },
unmounted() {
// remove any modal effects before leaving page (e.g. user hits browser back button)
this.closeModal();
},
components: { components: {
modalButtonMain, modalButtonMain,
}, },

View file

@ -57,10 +57,6 @@ export default {
modalWidgetName: String, modalWidgetName: String,
pageName: String, pageName: String,
}, },
unmounted() {
// remove any modal effects before leaving page (e.g. user hits browser back button)
this.modal?.closeModal();
},
computed: { computed: {
buttonText() { buttonText() {
return this.getCmsContent(this.modalWidgetName, "SubheaderText"); return this.getCmsContent(this.modalWidgetName, "SubheaderText");

View file

@ -54,10 +54,6 @@ export default {
mounted() { mounted() {
if (this.showSaveProgressPopup) this.modal.openModal(); if (this.showSaveProgressPopup) this.modal.openModal();
}, },
unmounted() {
// remove any modal effects before leaving page (e.g. user hits browser back button)
this.modal.closeModal();
},
emits: ["close-save-progress-popup", "save-progress"], // <--- should remove oodles of warnings in dev tools emits: ["close-save-progress-popup", "save-progress"], // <--- should remove oodles of warnings in dev tools
props: { props: {
modelValue: Object, modelValue: Object,

View file

@ -167,6 +167,7 @@
:timeSlotsForSelectedDate="timeSlotsForSelectedDate" :timeSlotsForSelectedDate="timeSlotsForSelectedDate"
:isSameDay="isSameDay" :isSameDay="isSameDay"
:selectedRouteCodeData="selectedRouteCodeData" :selectedRouteCodeData="selectedRouteCodeData"
:isDatePickerDoneInitializing="isDatePickerDoneInitializing"
@waitListRequested="handleWaitListRequested" /> @waitListRequested="handleWaitListRequested" />
<navbar <navbar
cmsWidgetName="FunnelFooterWidget" cmsWidgetName="FunnelFooterWidget"
@ -474,6 +475,7 @@ export default {
experimentSettings.SHOW_MOBILE_FIRST_APPT, experimentSettings.SHOW_MOBILE_FIRST_APPT,
"true" "true"
), ),
isDatePickerDoneInitializing: false,
}; };
}, },
async beforeRouteEnter(to, from, next) { async beforeRouteEnter(to, from, next) {
@ -1130,29 +1132,6 @@ export default {
); );
} }
}, },
getTimeSlotInfo() {
// Get the current date
const currentDate = getTodayDate();
// Add 10 days to the current date
currentDate.setDate(currentDate.getDate() + 10);
// Format the date as yyyy-mm-dd
const year = currentDate.getFullYear();
const month = String(currentDate.getMonth() + 1).padStart(2, "0");
const day = String(currentDate.getDate()).padStart(2, "0");
const formattedDate = `${year}-${month}-${day}`;
return {
date: formattedDate,
endTime: "12:00",
jobMaxMinutes: "180",
jobMinMinutes: "120",
routeCode: "3357I-03357-M-I*20988*AM",
startTime: "08:00",
};
},
onShopSelected(shopQuestionPopUpData) { onShopSelected(shopQuestionPopUpData) {
this.resetWaitlist(); this.resetWaitlist();
this.preSelectedDate = null; this.preSelectedDate = null;
@ -1241,6 +1220,8 @@ export default {
} }
this.isShowMobileFirstAppt && this.hideLoadingModal(); this.isShowMobileFirstAppt && this.hideLoadingModal();
await this.$nextTick();
this.isDatePickerDoneInitializing = true;
}, },
getScheduleApiResponse, getScheduleApiResponse,
getServiceZipCtuCodeFromStore() { getServiceZipCtuCodeFromStore() {
@ -1876,6 +1857,10 @@ export default {
}, },
}, },
selectedDate(newValue, oldValue) { selectedDate(newValue, oldValue) {
if (!this.isDatePickerDoneInitializing) {
return;
} // needed otherwise it nulls selectedTimeSlotInfo too early and prevents a previously selected time slot from auto-selecting
// Clear time slot selection if date selected changes // Clear time slot selection if date selected changes
const selectedDate = this.getSelectedDateFromStore(); const selectedDate = this.getSelectedDateFromStore();
if (oldValue && this.appointmentType === AppointmentTypeStrings.MOBILE) { if (oldValue && this.appointmentType === AppointmentTypeStrings.MOBILE) {

View file

@ -548,9 +548,6 @@ export default {
} }
}, },
}, },
unmounted() {
if (this.isModalOpened) this.closeModal();
},
watch: { watch: {
waitListRequested(newVal) { waitListRequested(newVal) {
if (newVal) { if (newVal) {

View file

@ -1,6 +1,7 @@
<template> <template>
<div class="time-slots-question"> <div class="time-slots-question">
<buttonQuestion <buttonQuestion
ref="chooseDropOffOrInshop"
v-if="isDropOffAppointmentAvailable" v-if="isDropOffAppointmentAvailable"
v-model="selectedAnswerForDropOffOrInshop" v-model="selectedAnswerForDropOffOrInshop"
@update:modelValue="dropOffSelectionChanged" @update:modelValue="dropOffSelectionChanged"
@ -23,8 +24,9 @@
</div> </div>
</buttonQuestion> </buttonQuestion>
<buttonQuestion <buttonQuestion
ref="buttonQuestion" ref="chooseTimeSlot"
v-if="shouldDisplayTimeSlotQuestion" v-if="displayTimeSlotQuestion"
v-model="selectedAnswerForTimeSlots"
@update:modelValue="timeSlotSelectionChanged" @update:modelValue="timeSlotSelectionChanged"
buttonTypeString="timeSlotModalListButton" buttonTypeString="timeSlotModalListButton"
:buttonTypeObject="timeSlotModalListButton" :buttonTypeObject="timeSlotModalListButton"
@ -34,10 +36,12 @@
isInshopOrDropOffAppointment ? 'is-inshop-or-drop-off-appointment' : '', isInshopOrDropOffAppointment ? 'is-inshop-or-drop-off-appointment' : '',
]" ]"
:answers="availableTimeSlots" :answers="availableTimeSlots"
:lazyLoad="{ isLazyLoad: !isMobileAppointment, amountToLoad: 10 }" :lazyLoad="{
isLazyLoad: !isMobileAppointment && !selectedAnswerForTimeSlots,
amountToLoad: 10,
}"
groupName="chooseTimeSlot" groupName="chooseTimeSlot"
textPosition="text-center" textPosition="text-center"
v-model="selectedAnswerForTimeSlots"
questionText="Available times:" questionText="Available times:"
isRequired isRequired
validationRules="time-slot-required" /> validationRules="time-slot-required" />
@ -133,6 +137,7 @@ export default {
isSameDay: Boolean, isSameDay: Boolean,
displayWaitList: Boolean, displayWaitList: Boolean,
selectedRouteCodeData: Object, selectedRouteCodeData: Object,
isDatePickerDoneInitializing: Boolean,
}, },
data() { data() {
return { return {
@ -186,6 +191,9 @@ export default {
this.updateDropoffAndTimeSlotAnswersFromSelectedRouteCodeData(newValue); this.updateDropoffAndTimeSlotAnswersFromSelectedRouteCodeData(newValue);
}, },
timeSlotsForSelectedDate() { timeSlotsForSelectedDate() {
if (!this.isDatePickerDoneInitializing) {
return;
} // needed otherwise it nulls these too early and prevents a previously selected time slot from auto-selecting
this.selectedAnswerForDropOffOrInshop = null; this.selectedAnswerForDropOffOrInshop = null;
this.selectedAnswerForTimeSlots = null; this.selectedAnswerForTimeSlots = null;
this.autoSelectTimeSlotIfOnlyOneIsAvailable(); this.autoSelectTimeSlotIfOnlyOneIsAvailable();
@ -389,7 +397,7 @@ export default {
this.answersForDropOffQuestion[0].value !== PICK_A_TIME_BUTTON_VALUE this.answersForDropOffQuestion[0].value !== PICK_A_TIME_BUTTON_VALUE
); );
}, },
shouldDisplayTimeSlotQuestion() { displayTimeSlotQuestion() {
return ( return (
this.selectedAnswerForDropOffOrInshop == PICK_A_TIME_BUTTON_VALUE || this.selectedAnswerForDropOffOrInshop == PICK_A_TIME_BUTTON_VALUE ||
!this.isDropOffAppointmentAvailable !this.isDropOffAppointmentAvailable