From 84f7911c1a140a78f238afbb48210c9c54e2f594 Mon Sep 17 00:00:00 2001 From: Chris Redelinghuys Date: Wed, 23 Jul 2025 14:04:30 -0400 Subject: [PATCH 1/9] CASH-1214: Reset selected timeslot on date change --- .../time-slot-question/time-slot-question.vue | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) 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 cb0120539..b1c6846d7 100644 --- a/src/layouts/schedule/time-slot-question/time-slot-question.vue +++ b/src/layouts/schedule/time-slot-question/time-slot-question.vue @@ -183,6 +183,7 @@ export default { let appointmentTypeCmsWidgetName; if ( + this.selectedDate == null || this.appointmentType === AppointmentTypeStrings.IN_SHOP_OR_DROP_OFF || this.appointmentType === AppointmentTypeStrings.IN_SHOP || this.appointmentType === AppointmentTypeStrings.DROP_OFF @@ -440,6 +441,8 @@ export default { ); } + this.resetSelectedTimeSlotIfDateChange(timeSlotsForSelectedDate); + return availableTimeSlots; }, getPremiumAppointmentTimeSlot(timeSlotData) { @@ -535,6 +538,20 @@ export default { successMessageElement.scrollIntoView({ behavior: "smooth" }); } }, + resetSelectedTimeSlotIfDateChange(timeSlotsForSelectedDate) { + if (this.selectedRouteCode) { + const selectedRouteCodeString = this.selectedRouteCode.replace( + PREMIUM_TIME_SLOT_ID_FLAG, + "" + ); + const matchingTimeSlot = timeSlotsForSelectedDate.find((slot) => { + return slot.id === selectedRouteCodeString; + }); + if (!matchingTimeSlot) { + this.selectedRouteCode = null; + } + } + }, }, watch: { waitListRequested(newVal) { From 6d3af6d1af5ec25bbc221360291377151e04b8ae Mon Sep 17 00:00:00 2001 From: Chloe Herd Date: Wed, 23 Jul 2025 14:27:30 -0400 Subject: [PATCH 2/9] Dont reset fields unnecessarily --- src/layouts/schedule/schedule.vue | 1 - 1 file changed, 1 deletion(-) diff --git a/src/layouts/schedule/schedule.vue b/src/layouts/schedule/schedule.vue index aff734249..dad3515b3 100644 --- a/src/layouts/schedule/schedule.vue +++ b/src/layouts/schedule/schedule.vue @@ -1611,7 +1611,6 @@ export default { }, handleZipCodeChange(newZipCode) { this.resetMobileLocation(); - this.appointmentTypeFromAppointmentTypeQuestion = null; getShopProviderData(newZipCode.zipCode).then((result) => { this.shopProviderData = result.data; From 42c479177ee8e6a773eb075eb59513ec0170375e Mon Sep 17 00:00:00 2001 From: Minojhini Valaiyapathi Date: Thu, 24 Jul 2025 08:24:24 -0400 Subject: [PATCH 3/9] CASH-1226 - Passed mobile provider number when appointment type is mobile --- src/layouts/schedule/schedule.vue | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/layouts/schedule/schedule.vue b/src/layouts/schedule/schedule.vue index dad3515b3..3c37adde5 100644 --- a/src/layouts/schedule/schedule.vue +++ b/src/layouts/schedule/schedule.vue @@ -1601,10 +1601,20 @@ export default { if (newProvider) { this.selectedProvider = newProvider; this.initializeDatePicker(); + } else if (this.appointmentType === this.appointmentTypeStrings.MOBILE) { + this.selectedProvider = { + providerNumber: this.shopProviderData.mobileProviderNumber.toString(), + address: { + streetAddress: null, + city: null, + state: null, + zipCode: null, + zipCodeCtu: null, + }, + }; } else if ( - // use closest shopProvider if none exists !this.selectedProvider?.address?.streetAddress && - this.shopProviderData?.shopProviders + this.shopProviderData?.shopProviders?.length ) { this.selectedProvider = this.shopProviderData.shopProviders[0]; } @@ -1636,6 +1646,7 @@ export default { this.updateFooterButtonText(); if (newAppointmentType === AppointmentTypeStrings.MOBILE) { this.appointmentType = AppointmentTypeStrings.MOBILE; + this.updateSelectedProvider(); } else if (newAppointmentType) { if (this.selectedTimeSlotInfo?.timeSlot?.routeCode) { // update appointmentType based on routeCode to determine if it should be dropoff or inshop From e2c256fe2115c759317711a5df98ff056ded7d8c Mon Sep 17 00:00:00 2001 From: Bryan Mauger Date: Thu, 24 Jul 2025 08:44:57 -0400 Subject: [PATCH 4/9] CASH-1028 make waitlist show only if date is selected. --- src/layouts/schedule/time-slot-question/time-slot-question.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 b1c6846d7..38f97d756 100644 --- a/src/layouts/schedule/time-slot-question/time-slot-question.vue +++ b/src/layouts/schedule/time-slot-question/time-slot-question.vue @@ -40,7 +40,7 @@ v-if="supplementalInformationBlock" v-html="supplementalInformationBlock" />
Date: Thu, 24 Jul 2025 09:53:06 -0400 Subject: [PATCH 5/9] CASH-1230 CASH-1230 modified waitlist to display for mobile and for inshop when it should/shouldnt --- src/layouts/schedule/schedule.vue | 15 ++++++++++++--- .../time-slot-question/time-slot-question.vue | 2 +- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/layouts/schedule/schedule.vue b/src/layouts/schedule/schedule.vue index 3c37adde5..5dd7316ad 100644 --- a/src/layouts/schedule/schedule.vue +++ b/src/layouts/schedule/schedule.vue @@ -1441,9 +1441,17 @@ export default { } }, setDisplayWaitList() { - const dateString = this.isMobileSelected - ? this.selectableDatesMobile?.days[0]?.date - : this.selectableDatesInshop?.days[0]?.date; + let dateString = null; + if (this.appointmentType === AppointmentTypeStrings.MOBILE && this.selectableDatesMobile.days.length > 0) { + dateString = this.selectableDatesMobile?.days[0]?.date; + } else if ( + this.appointmentType === AppointmentTypeStrings.IN_SHOP || + this.appointmentType === AppointmentTypeStrings.DROP_OFF || + this.appointmentType === AppointmentTypeStrings.IN_SHOP_OR_DROP_OFF && + this.selectableDatesInshop.days.length > 0 + ) { + dateString = this.selectableDatesInshop?.days[0]?.date; + } if ( experimentMixin.methods.hasSettingEqualTo( experimentSettings.DISPLAY_WAITLIST, @@ -1663,6 +1671,7 @@ export default { this.appointmentType = null; } this.selectedDate = this.getSelectedDate(); + this.setDisplayWaitList(); }, }, watch: { 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 38f97d756..c3e178a30 100644 --- a/src/layouts/schedule/time-slot-question/time-slot-question.vue +++ b/src/layouts/schedule/time-slot-question/time-slot-question.vue @@ -53,7 +53,7 @@ v-model="waitListRequested" @click="waitListChecked" />
-
+
From 1b7eb2962e507b86385af45d49f7b6cc042ae92c Mon Sep 17 00:00:00 2001 From: Johnny shultz Date: Thu, 24 Jul 2025 10:07:09 -0400 Subject: [PATCH 6/9] CASH-1230 formatting --- src/layouts/schedule/schedule.vue | 11 +++++++---- .../time-slot-question/time-slot-question.vue | 5 ++++- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/layouts/schedule/schedule.vue b/src/layouts/schedule/schedule.vue index 5dd7316ad..2e328c1eb 100644 --- a/src/layouts/schedule/schedule.vue +++ b/src/layouts/schedule/schedule.vue @@ -1442,16 +1442,19 @@ export default { }, setDisplayWaitList() { let dateString = null; - if (this.appointmentType === AppointmentTypeStrings.MOBILE && this.selectableDatesMobile.days.length > 0) { + if ( + this.appointmentType === AppointmentTypeStrings.MOBILE && + this.selectableDatesMobile.days.length > 0 + ) { dateString = this.selectableDatesMobile?.days[0]?.date; } else if ( this.appointmentType === AppointmentTypeStrings.IN_SHOP || this.appointmentType === AppointmentTypeStrings.DROP_OFF || - this.appointmentType === AppointmentTypeStrings.IN_SHOP_OR_DROP_OFF && - this.selectableDatesInshop.days.length > 0 + (this.appointmentType === AppointmentTypeStrings.IN_SHOP_OR_DROP_OFF && + this.selectableDatesInshop.days.length > 0) ) { dateString = this.selectableDatesInshop?.days[0]?.date; - } + } if ( experimentMixin.methods.hasSettingEqualTo( experimentSettings.DISPLAY_WAITLIST, 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 c3e178a30..e7c603f65 100644 --- a/src/layouts/schedule/time-slot-question/time-slot-question.vue +++ b/src/layouts/schedule/time-slot-question/time-slot-question.vue @@ -53,7 +53,10 @@ v-model="waitListRequested" @click="waitListChecked" />
-
+
From b909b90f349124fe410fad7f594e17a8c741a7fe Mon Sep 17 00:00:00 2001 From: Chris Redelinghuys Date: Thu, 24 Jul 2025 12:22:50 -0400 Subject: [PATCH 7/9] CASH-1222: Add validation rules to inshop/dropoff options --- src/layouts/schedule/time-slot-question/time-slot-question.vue | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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 38f97d756..82d94d76f 100644 --- a/src/layouts/schedule/time-slot-question/time-slot-question.vue +++ b/src/layouts/schedule/time-slot-question/time-slot-question.vue @@ -7,7 +7,8 @@ :answers="answersForDropOffQuestion" isRequired insertOrLabelBeforeFinalOption - groupName="chooseDropOffOrInshop"> + groupName="chooseDropOffOrInshop" + validationRules="time-slot-required">
Date: Thu, 24 Jul 2025 12:41:19 -0400 Subject: [PATCH 8/9] CASH-1230 CASH-1230 simplifed code back to the way it was in setDisplayWaitlist, only need to call this method on an appointment type change --- src/layouts/schedule/schedule.vue | 17 +++-------------- 1 file changed, 3 insertions(+), 14 deletions(-) diff --git a/src/layouts/schedule/schedule.vue b/src/layouts/schedule/schedule.vue index 2e328c1eb..23671a356 100644 --- a/src/layouts/schedule/schedule.vue +++ b/src/layouts/schedule/schedule.vue @@ -1441,20 +1441,9 @@ export default { } }, setDisplayWaitList() { - let dateString = null; - if ( - this.appointmentType === AppointmentTypeStrings.MOBILE && - this.selectableDatesMobile.days.length > 0 - ) { - dateString = this.selectableDatesMobile?.days[0]?.date; - } else if ( - this.appointmentType === AppointmentTypeStrings.IN_SHOP || - this.appointmentType === AppointmentTypeStrings.DROP_OFF || - (this.appointmentType === AppointmentTypeStrings.IN_SHOP_OR_DROP_OFF && - this.selectableDatesInshop.days.length > 0) - ) { - dateString = this.selectableDatesInshop?.days[0]?.date; - } + const dateString = this.isMobileSelected + ? this.selectableDatesMobile?.days[0]?.date + : this.selectableDatesInshop?.days[0]?.date; if ( experimentMixin.methods.hasSettingEqualTo( experimentSettings.DISPLAY_WAITLIST, From 9bb93af14993954265ca4e06f5c7ca8545568ef1 Mon Sep 17 00:00:00 2001 From: Chloe Herd Date: Thu, 24 Jul 2025 12:53:03 -0400 Subject: [PATCH 9/9] Don't change serviceability details when new shop is chosen --- src/layouts/schedule/schedule.vue | 1 - .../shop-question/shop-question-popup.vue | 8 -------- 2 files changed, 9 deletions(-) diff --git a/src/layouts/schedule/schedule.vue b/src/layouts/schedule/schedule.vue index 23671a356..59af1eea3 100644 --- a/src/layouts/schedule/schedule.vue +++ b/src/layouts/schedule/schedule.vue @@ -1113,7 +1113,6 @@ export default { this.resetWaitlist(); this.preSelectedDate = null; this.shopProviderData = shopQuestionPopUpData.shopProviderData; - this.setServiceabilityDetails(shopQuestionPopUpData.serviceabilityDetails); const selectedProvider = this.shopProviderData.shopProviders.find((shopProvider) => { return shopProvider.providerNumber === shopQuestionPopUpData.selectedProviderNumber; }); diff --git a/src/layouts/service-location/shop-question/shop-question-popup.vue b/src/layouts/service-location/shop-question/shop-question-popup.vue index a9ca720ad..df0a185a3 100644 --- a/src/layouts/service-location/shop-question/shop-question-popup.vue +++ b/src/layouts/service-location/shop-question/shop-question-popup.vue @@ -310,16 +310,8 @@ export default { const selectedProvider = this.shopProviders.find( (provider) => provider.providerNumber == this.localSelectedProviderNumber ); - const serviceZipCode = selectedProvider.address.zipCode; - // retrieve serviceability details - const serviceabilityDetails = await getServiceabilityDetails( - serviceZipCode, - null, - "service-location" - ); const shopQuestionPopUpData = { - serviceabilityDetails: serviceabilityDetails.data, zipCodeData: this.zipCodeData, shopProviderData: this.localShopProviderData, selectedProviderNumber: this.localSelectedProviderNumber,