0;
+ } else {
+ return this.selectableDatesInshop?.days?.length > 0;
+ }
+ },
},
methods: {
splitCopyOnCMSPlaceHolder,
@@ -1200,8 +1206,6 @@ export default {
async initializeDatePicker() {
this.isShowMobileFirstAppt && this.showLoadingModal();
- this.selectedDate = null;
-
const includeMobileTimeSlots = this.isServiceableMobile;
const includeInshopTimeSlots = this.isServiceableInshop || this.isServiceableDropoff;
const datePickerInitialData = await this.$refs.datePicker.loadInitialData({
@@ -1613,28 +1617,39 @@ export default {
handleWaitListRequested(value) {
this.waitListRequested = value;
},
- handleDateClicked(date) {
- // do something to mark this as upcharge day or not...
- if (date.isPricingByDayUpchargeDay) {
- this.includePricingByDayUpcharge = true;
- } else {
- this.includePricingByDayUpcharge = false;
+ handleDateSelected(date) {
+ const previousDate = this.selectedDate;
+ // check if date actually changed
+ if (previousDate !== date.dateString) {
+ this.selectedTimeSlotInfo = this.getEmptyTimeSlot();
+ this.updateFooterButtonText(this.selectedTimeSlotInfo);
}
+
+ // TODO: REMOVE AS PART OF CASH-1634
+ // // do something to mark this as upcharge day or not...
+ // if (date.isPricingByDayUpchargeDay) {
+ // this.includePricingByDayUpcharge = true;
+ // } else {
+ // this.includePricingByDayUpcharge = false;
+ // }
+ },
+ getEmptyTimeSlot() {
+ return {
+ timeSlot: {
+ date: null,
+ routeCode: null,
+ startTime: null,
+ endTime: null,
+ jobMaxMinutes: null,
+ jobMinMinutes: null,
+ },
+ isPremiumAppointment: null,
+ };
},
updateTimeSlot(timeSlotObj) {
if (!timeSlotObj?.routeCode) {
this.appointmentType = AppointmentTypeStrings.IN_SHOP_OR_DROP_OFF;
- this.selectedTimeSlotInfo = {
- timeSlot: {
- date: null,
- routeCode: null,
- startTime: null,
- endTime: null,
- jobMaxMinutes: null,
- jobMinMinutes: null,
- },
- isPremiumAppointment: null,
- };
+ this.selectedTimeSlotInfo = this.getEmptyTimeSlot();
return;
}
const timeSlot = this.timeSlotsForSelectedDate?.timeSlots?.find(
@@ -1752,6 +1767,9 @@ export default {
},
handleAppointmentTypeChange(newAppointmentType) {
this.updateFooterButtonText();
+ // if time appointment type changes, clear any selected time slot
+ this.selectedTimeSlotInfo = this.getEmptyTimeSlot();
+
if (newAppointmentType === AppointmentTypeStrings.MOBILE) {
// Remember last shop selected if previous selection was inshop/dropoff
if (
@@ -1760,17 +1778,6 @@ export default {
AppointmentTypeStrings.IN_SHOP_OR_DROP_OFF) &&
this.selectedProvider
) {
- this.selectedTimeSlotInfo = {
- timeSlot: {
- date: null,
- routeCode: null,
- startTime: null,
- endTime: null,
- jobMaxMinutes: null,
- jobMinMinutes: null,
- },
- isPremiumAppointment: null,
- };
this.lastSelectedInshopOrDropoffProvider = this.selectedProvider;
}
this.appointmentType = AppointmentTypeStrings.MOBILE;
@@ -1797,8 +1804,8 @@ export default {
} else {
this.appointmentType = null;
}
- this.setSelectedDateToFirstAvailable();
- this.setDisplayWaitList();
+ this.setSelectedDateToFirstAvailable(); // v-if on appointmentTypeQuestion ensures dates have been loaded by now
+ this.setDisplayWaitList(); // v-if on appointmentTypeQuestion ensures dates have been loaded by now
},
setSelectedDateToFirstAvailable() {
this.selectedDate = this.getFirstAvailableDate();
@@ -2025,35 +2032,9 @@ export default {
watch: {
appointmentTypeFromAppointmentTypeQuestion: {
handler(newValue, oldValue) {
- this.handleAppointmentTypeChange(newValue);
+ this.handleAppointmentTypeChange(newValue); // v-if on appointmentTypeQuestion ensures dates have been loaded by now
},
},
- selectedDate(newValue, oldValue) {
- // Clear time slot selection if date selected changes
- const selectedDate = this.getSelectedDateFromStore();
- if (oldValue && this.appointmentType === AppointmentTypeStrings.MOBILE) {
- oldValue = `${oldValue}-mobile`;
- }
- const hasValueChanged = newValue !== oldValue;
- const isDateDifferent = (newValue || oldValue) !== selectedDate;
-
- if (hasValueChanged && isDateDifferent && !this.selectedMobileFirstAppointment) {
- this.selectedTimeSlotInfo = {
- timeSlot: {
- date: null,
- routeCode: null,
- startTime: null,
- endTime: null,
- jobMaxMinutes: null,
- jobMinMinutes: null,
- },
- isPremiumAppointment: null,
- };
- }
- },
- selectedTimeSlotInfo(newValue) {
- this.updateFooterButtonText(newValue);
- },
},
components: {
funnelHeader,
diff --git a/src/layouts/schedule/time-slot-question/time-slot-question.vue b/src/layouts/schedule/time-slot-question/time-slot-question.vue
index 1b8a2cb2e..b4a2937b7 100644
--- a/src/layouts/schedule/time-slot-question/time-slot-question.vue
+++ b/src/layouts/schedule/time-slot-question/time-slot-question.vue
@@ -1,6 +1,7 @@
@@ -389,7 +390,7 @@ export default {
this.answersForDropOffQuestion[0].value !== PICK_A_TIME_BUTTON_VALUE
);
},
- shouldDisplayTimeSlotQuestion() {
+ displayTimeSlotQuestion() {
return (
this.selectedAnswerForDropOffOrInshop == PICK_A_TIME_BUTTON_VALUE ||
!this.isDropOffAppointmentAvailable
diff --git a/src/layouts/service-location/appointment-type-question/appointment-type-question.vue b/src/layouts/service-location/appointment-type-question/appointment-type-question.vue
index fc4d08b92..924b2e62a 100644
--- a/src/layouts/service-location/appointment-type-question/appointment-type-question.vue
+++ b/src/layouts/service-location/appointment-type-question/appointment-type-question.vue
@@ -80,6 +80,7 @@ export default {
},
set: function (newValue) {
this.$emit("update:modelValue", newValue);
+ this.$emit("handle-appointment-type-change", newValue);
},
},
isMobileOnly() {
diff --git a/src/router/constants/routing-table.js b/src/router/constants/routing-table.js
index 3b237d747..d5f8e442c 100644
--- a/src/router/constants/routing-table.js
+++ b/src/router/constants/routing-table.js
@@ -569,6 +569,10 @@ const routingTable = function () {
piaError: "true",
},
},
+ {
+ scenario: navigationScenarios.CLICKED_PAY_LATER,
+ destinationPageData: routeData.CONFIRMATION,
+ },
],
},
{
@@ -589,6 +593,10 @@ const routingTable = function () {
piaError: "true",
},
},
+ {
+ scenario: navigationScenarios.CLICKED_PAY_LATER,
+ destinationPageData: routeData.CONFIRMATION,
+ },
],
},
{