From fa3ae5cca367155d239b458d88e885d8fc742cdb Mon Sep 17 00:00:00 2001 From: Bryan Mauger Date: Thu, 10 Apr 2025 17:00:04 -0400 Subject: [PATCH 01/29] CASH-499 WIP calendar updates. --- .../date-picker-for-pricing-by-day.vue | 99 +++++++++---------- 1 file changed, 45 insertions(+), 54 deletions(-) diff --git a/src/experiment-components/date-picker-for-pricing-by-day.vue b/src/experiment-components/date-picker-for-pricing-by-day.vue index cad976cf7..5e50def6b 100644 --- a/src/experiment-components/date-picker-for-pricing-by-day.vue +++ b/src/experiment-components/date-picker-for-pricing-by-day.vue @@ -962,9 +962,7 @@ export default { &.selectable-day { label { - color: $blue; background-color: $blue-100; - border: 1px solid $blue; min-width: 2.5rem; width: 2.5rem; border-radius: 50%; @@ -972,12 +970,11 @@ export default { } &.unavailable-day { label { - color: $gray-500; - background-color: $gray-100; border: none; pointer-events: none; } } + //NEEDED? &.unavailable-day:not(&.sunday) { label { &::before { @@ -987,7 +984,6 @@ export default { left: -1rem; width: 1rem; height: 2.5rem; - background: $gray-100; } } } @@ -1094,11 +1090,10 @@ export default { } } } - + // pricing by day override styles &.pricing-by-day { - // pricing by day override styles .calendar-grid-container .grid-item { - margin: 0; + margin: 0 0 0.15rem 0; } .month-year { grid-area: 1 / 1 / 2 / 8; @@ -1109,9 +1104,8 @@ export default { .radio-wrapper { align-items: flex-start; width: 100%; - height: 3rem; - color: $gray-500; - background-color: $gray-100; + height: 2.5rem; + color: $black; input[type="radio"] { &:focus-visible + label { @@ -1122,42 +1116,35 @@ export default { &:checked:focus + label { box-shadow: none; background-color: $white; - color: $blue; + color: $black; } &:checked + label { background: $blue-100; border: 2px solid $blue; - border-radius: 4px; - color: $blue; + border-radius: .25rem; + color: $black; + span { + font-family: AvertaSemibold; + font-weight: 400; + } } } label { flex-direction: column; - height: 3rem; + height: 2.5rem; width: 100%; font-size: 0.75rem; line-height: 1.2; - justify-content: flex-start; + justify-content: center; padding: 0.25rem; - - span { - margin-top: 0.25rem; - } } &.selectable-day { - background-color: $white; label { - background-color: $white; - border: none; - min-width: 100%; - width: 100%; - height: -webkit-fill-available; - border-radius: 0; - cursor: pointer; - - span { - text-decoration: underline; - } + color: $black; + background-color: $blue-100; + min-width: 2.5rem; + width: 2.5rem; + border-radius: 0.25rem; } } &.current-day { @@ -1168,32 +1155,36 @@ export default { } } } - } + &.show-pricing-by-day { + .radio-wrapper { + &.selectable-day label span { + text-decoration: none; + color: $black; + font-weight: 400; + font-family: "AvertaSemibold"; - &.date-picker.show-pricing-by-day { - .radio-wrapper { - &.selectable-day label span { - text-decoration: none; - color: $gray-600; - font-weight: 400; - font-family: "AvertaSemibold"; - - &.price { - color: $green; + &.price { + font-family: "AvertaRegular"; + font-weight: 400; + } } - } - &.upch-day label span.price { - color: $gray-600; - font-weight: 400; - font-family: $font-family-sans-serif; - } - input[type="radio"] { - &:focus + label, - &:checked:focus + label { + &.upch-day label span.price { color: $gray-600; + font-weight: 400; + font-family: $font-family-sans-serif; } - &:checked + label { - color: $blue; + input[type="radio"] { + &:focus + label, + &:checked:focus + label { + color: $gray-600; + } + &:checked + label { + color: $blue; + span { + font-weight: 400; + font-family: "AvertaSemibold"; + } + } } } } From 28e5d40cf127d1c03431dced2f0dc2a18b2d859d Mon Sep 17 00:00:00 2001 From: Bryan Mauger Date: Mon, 14 Apr 2025 15:30:51 -0400 Subject: [PATCH 02/29] CASH-510, CASH-511 QA Ui footer fixes. --- src/fmg-components/funnel-footer/funnel-footer.vue | 14 +++++++++----- src/layouts/customer-details/customer-details.vue | 2 +- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/fmg-components/funnel-footer/funnel-footer.vue b/src/fmg-components/funnel-footer/funnel-footer.vue index 89db470f0..0cff25b0b 100644 --- a/src/fmg-components/funnel-footer/funnel-footer.vue +++ b/src/fmg-components/funnel-footer/funnel-footer.vue @@ -11,6 +11,7 @@ From b54754f82ce7b3f819af765335c100626ec76fcf Mon Sep 17 00:00:00 2001 From: Bryan Mauger Date: Mon, 14 Apr 2025 15:42:59 -0400 Subject: [PATCH 03/29] Format code. --- src/layouts/customer-details/customer-details.vue | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/layouts/customer-details/customer-details.vue b/src/layouts/customer-details/customer-details.vue index c849491cb..baa8636be 100644 --- a/src/layouts/customer-details/customer-details.vue +++ b/src/layouts/customer-details/customer-details.vue @@ -56,7 +56,10 @@ @back-clicked="backButtonAction" @ForwardClicked="forwardButtonAction" /> - + From 6376b8d89c1a9dfc0766edcd7e5aff81ac14860a Mon Sep 17 00:00:00 2001 From: Minojhini Valaiyapathi Date: Tue, 15 Apr 2025 08:24:43 -0400 Subject: [PATCH 04/29] CASH-505 - Added application name to header in Logger --- src/helpers/logger.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/helpers/logger.js b/src/helpers/logger.js index 8af062c3b..d6f5b25a1 100644 --- a/src/helpers/logger.js +++ b/src/helpers/logger.js @@ -72,6 +72,7 @@ export class Logger { applicationConfig.CONSUMER_CF_DISTRO + applicationConfig.FRONTEND_LOGGER_PATH; const headers = { [headerKeys.EXPERIMENT]: JSON.stringify(store.getters.experimentSettings), + [headerKeys.APPLICATION_NAME]: applicationConfig.APPLICATION_NAME }; axios({ From a8f07d6237b55648134f53af04a3dafe323125a4 Mon Sep 17 00:00:00 2001 From: Minojhini Valaiyapathi Date: Tue, 15 Apr 2025 08:26:28 -0400 Subject: [PATCH 05/29] CASH-505 - Fixed the format --- src/helpers/logger.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/helpers/logger.js b/src/helpers/logger.js index d6f5b25a1..824c7dac0 100644 --- a/src/helpers/logger.js +++ b/src/helpers/logger.js @@ -72,7 +72,7 @@ export class Logger { applicationConfig.CONSUMER_CF_DISTRO + applicationConfig.FRONTEND_LOGGER_PATH; const headers = { [headerKeys.EXPERIMENT]: JSON.stringify(store.getters.experimentSettings), - [headerKeys.APPLICATION_NAME]: applicationConfig.APPLICATION_NAME + [headerKeys.APPLICATION_NAME]: applicationConfig.APPLICATION_NAME, }; axios({ From 671d16da375e552fa20d78a5889dafd7ce916b4d Mon Sep 17 00:00:00 2001 From: Chris Redelinghuys Date: Tue, 15 Apr 2025 11:38:16 -0400 Subject: [PATCH 06/29] CASH-203: Truncate full price --- .../service-package-radio-for-afterpay.vue | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/experiment-components/service-package-radio-for-afterpay.vue b/src/experiment-components/service-package-radio-for-afterpay.vue index 3356ee225..255ccc15b 100644 --- a/src/experiment-components/service-package-radio-for-afterpay.vue +++ b/src/experiment-components/service-package-radio-for-afterpay.vue @@ -78,7 +78,7 @@ in 4 interest-free payments
or - + From 2c05886fd57482f2dd376889c23ac17d584625a3 Mon Sep 17 00:00:00 2001 From: Chris Redelinghuys Date: Tue, 15 Apr 2025 11:55:04 -0400 Subject: [PATCH 07/29] CASH-203: Missing comma --- .../service-package-radio-for-afterpay.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/experiment-components/service-package-radio-for-afterpay.vue b/src/experiment-components/service-package-radio-for-afterpay.vue index 255ccc15b..b936e21bf 100644 --- a/src/experiment-components/service-package-radio-for-afterpay.vue +++ b/src/experiment-components/service-package-radio-for-afterpay.vue @@ -143,7 +143,7 @@ export default { }, truncatedSinglePayment() { return "$" + Math.trunc(this.buttonAuxillaryCopy.replace("$", "")); - } + }, }, }; From 9b2c97c2710e07a1a2ce2cef2f4414c6c8cc7088 Mon Sep 17 00:00:00 2001 From: Bryan Mauger Date: Tue, 15 Apr 2025 13:58:32 -0400 Subject: [PATCH 08/29] CASH-500 fix z-index issue for insurance page. --- src/layouts/insurance-company/insurance-company.vue | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/layouts/insurance-company/insurance-company.vue b/src/layouts/insurance-company/insurance-company.vue index 0f7bca7c7..e680a728d 100644 --- a/src/layouts/insurance-company/insurance-company.vue +++ b/src/layouts/insurance-company/insurance-company.vue @@ -203,3 +203,9 @@ export default { }, }; + + From 39cb860888e10877da789ba439c886e01d52e5c2 Mon Sep 17 00:00:00 2001 From: Bryan Mauger Date: Tue, 15 Apr 2025 14:06:41 -0400 Subject: [PATCH 09/29] Format code. --- src/layouts/insurance-company/insurance-company.vue | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/layouts/insurance-company/insurance-company.vue b/src/layouts/insurance-company/insurance-company.vue index e680a728d..c9409eb71 100644 --- a/src/layouts/insurance-company/insurance-company.vue +++ b/src/layouts/insurance-company/insurance-company.vue @@ -205,7 +205,7 @@ export default { From 3053e10db9b17219884ab07a9a191a9fdeb16721 Mon Sep 17 00:00:00 2001 From: Bryan Mauger Date: Tue, 15 Apr 2025 15:17:41 -0400 Subject: [PATCH 10/29] CASH-499 refactor to use date-picker instead of experiment file. Delete experiment file. --- .../date-picker/date-picker.vue | 172 ++- .../date-picker-for-pricing-by-day.vue | 1212 ----------------- src/layouts/schedule/schedule.vue | 8 +- src/store/index.js | 10 +- 4 files changed, 162 insertions(+), 1240 deletions(-) delete mode 100644 src/experiment-components/date-picker-for-pricing-by-day.vue diff --git a/src/digital-components/date-picker/date-picker.vue b/src/digital-components/date-picker/date-picker.vue index 71c09bbbf..c869dc02c 100644 --- a/src/digital-components/date-picker/date-picker.vue +++ b/src/digital-components/date-picker/date-picker.vue @@ -1,5 +1,7 @@ - Date: Tue, 15 Apr 2025 15:21:34 -0400 Subject: [PATCH 11/29] CASH-499 undo changes. --- src/store/index.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/store/index.js b/src/store/index.js index 5d604e5ea..2ee5e2ec0 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -1856,11 +1856,11 @@ export const actions = { const shopRadiusInMiles = 100; - let url = `${endpoints.GetProviders.url}/${serviceZipCode}/${damageType}/${shopRadiusInMiles}/${accountNumber}/true/${carId}/false`; + let url = `${endpoints.GetProviders.url}/${serviceZipCode}/${damageType}/${shopRadiusInMiles}/${accountNumber}/true/${carId}`; - // if (windshieldPartWithRecal) { - // url += `/${windshieldPartWithRecal.partNumber}`; - // } + if (windshieldPartWithRecal) { + url += `/${windshieldPartWithRecal.partNumber}`; + } return globalMethods.callHttpClient({ method: endpoints.GetProviders.method, From 4918364282991e598226ba556fc3ee769140fff9 Mon Sep 17 00:00:00 2001 From: Bryan Mauger Date: Tue, 15 Apr 2025 15:22:41 -0400 Subject: [PATCH 12/29] CASH-499 remove changes to store/index. --- src/store/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/store/index.js b/src/store/index.js index 2ee5e2ec0..97a31068e 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -1474,7 +1474,7 @@ export const actions = { applicationName: applicationConfig.ANALYTICS_APPLICATION_NAME, category: category, action: action, - label: "x" + label, + label: label, value: value, shouldUseSessionId: shouldUseSessionId, experimentsForUser: experimentsForUser, From 35154ad3d1fde96426bcc903c876db8cfcf51609 Mon Sep 17 00:00:00 2001 From: Bryan Mauger Date: Tue, 15 Apr 2025 16:06:50 -0400 Subject: [PATCH 13/29] Format code. --- .../date-picker/date-picker.vue | 2 +- src/layouts/schedule/schedule.vue | 15 +++++++-------- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/src/digital-components/date-picker/date-picker.vue b/src/digital-components/date-picker/date-picker.vue index c869dc02c..0d0ef066d 100644 --- a/src/digital-components/date-picker/date-picker.vue +++ b/src/digital-components/date-picker/date-picker.vue @@ -1121,7 +1121,7 @@ export default { &:checked + label { background: $blue-100; border: 2px solid $blue; - border-radius: .25rem; + border-radius: 0.25rem; color: $black; span { font-family: AvertaSemibold; diff --git a/src/layouts/schedule/schedule.vue b/src/layouts/schedule/schedule.vue index ab1af257d..b30fd88d8 100644 --- a/src/layouts/schedule/schedule.vue +++ b/src/layouts/schedule/schedule.vue @@ -298,14 +298,13 @@ export default { ); // While Pricing By Day Experiment is active, using the updated datePicker - const datePickerInitialDataPromise = - await datePicker.methods.loadInitialData({ - // setup config options for date-picker - selectableDatesSetting: "custom", - initialViewRowsToShow: 5, - customSelectableDatesCallback: getAvailableDates, - preSelectedDate: preSelectedDate, - }); + const datePickerInitialDataPromise = await datePicker.methods.loadInitialData({ + // setup config options for date-picker + selectableDatesSetting: "custom", + initialViewRowsToShow: 5, + customSelectableDatesCallback: getAvailableDates, + preSelectedDate: preSelectedDate, + }); // Get pricingByDayUpcharge needed for Pricing By Day const pricingByDayUpchargePartPromise = showPricingByDay From b84b9d41f77d28d4a6532b669576238c7a1fd397 Mon Sep 17 00:00:00 2001 From: Johnny shultz Date: Tue, 15 Apr 2025 17:02:24 -0400 Subject: [PATCH 14/29] CASH-489 CASH-489 null check --- src/layouts/quote/quote.vue | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/layouts/quote/quote.vue b/src/layouts/quote/quote.vue index 42ccfb09a..6ef3d4749 100644 --- a/src/layouts/quote/quote.vue +++ b/src/layouts/quote/quote.vue @@ -275,8 +275,8 @@ export default { const emailFromStore = store.getters.order.customer.emailAddress; const isEmailInStoreOnPageLoad = emailFromStore?.length > 0; const isPopupSkipped = - store.getters.pageData(fmgPageValues.QUOTE).saveProgressPopupSkipped === true; - const showSaveProgressPopup = isEmailInStoreOnPageLoad || isPopupSkipped ? false : true; + store.getters.pageData(fmgPageValues.QUOTE)?.saveProgressPopupSkipped === true; + const showSaveProgressPopup = !(isEmailInStoreOnPageLoad || isPopupSkipped); const showSaveProgressModal = isEmailInStoreOnPageLoad ? false : true; const shouldSkipToInsurance = getBoolFromString( From 60f053f8519e198b864393b0d47afffed25dab5e Mon Sep 17 00:00:00 2001 From: Chris Redelinghuys Date: Wed, 16 Apr 2025 10:41:55 -0400 Subject: [PATCH 15/29] CASH-203: UI Updates for Afterpay breakout with service package discounts --- .../service-package-radio-for-afterpay.vue | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/src/experiment-components/service-package-radio-for-afterpay.vue b/src/experiment-components/service-package-radio-for-afterpay.vue index b936e21bf..6fc51b5b4 100644 --- a/src/experiment-components/service-package-radio-for-afterpay.vue +++ b/src/experiment-components/service-package-radio-for-afterpay.vue @@ -5,6 +5,7 @@ :class="[ this.buttonLabelSubCopy ? 'has-subheader' : '', this.additionalButtonData.isInsuranceSelected ? 'is-insurance' : '', + this.hasPackageDiscount() ? 'has-package-discount' : '', ]" for="testradio">
@@ -55,10 +56,7 @@
@@ -144,6 +142,10 @@ export default { truncatedSinglePayment() { return "$" + Math.trunc(this.buttonAuxillaryCopy.replace("$", "")); }, + hasPackageDiscount() { + return this.additionalButtonData.servicePackageDiscount && + this.additionalButtonData.Text; + }, }, }; @@ -212,11 +214,6 @@ export default { } &.has-subheader { - min-height: 150px; - - &.is-insurance { - min-height: 72px; - } & > .package-specs { & > div:first-of-type { @@ -225,6 +222,10 @@ export default { } } + &.has-package-discount { + min-height: 150px; + } + &:before { content: ""; position: relative; From 58c0b91b2b5c2d461cefba687ab5713853027ff1 Mon Sep 17 00:00:00 2001 From: Chris Redelinghuys Date: Wed, 16 Apr 2025 10:51:59 -0400 Subject: [PATCH 16/29] CASH-203: Prettier --- .../service-package-radio-for-afterpay.vue | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/experiment-components/service-package-radio-for-afterpay.vue b/src/experiment-components/service-package-radio-for-afterpay.vue index 6fc51b5b4..f38621462 100644 --- a/src/experiment-components/service-package-radio-for-afterpay.vue +++ b/src/experiment-components/service-package-radio-for-afterpay.vue @@ -55,9 +55,7 @@ v-html="this.buttonFooterCopy">
-
+
@@ -143,8 +141,9 @@ export default { return "$" + Math.trunc(this.buttonAuxillaryCopy.replace("$", "")); }, hasPackageDiscount() { - return this.additionalButtonData.servicePackageDiscount && - this.additionalButtonData.Text; + return ( + this.additionalButtonData.servicePackageDiscount && this.additionalButtonData.Text + ); }, }, }; @@ -214,7 +213,6 @@ export default { } &.has-subheader { - & > .package-specs { & > div:first-of-type { display: flex; From a08bc842a755ef29d8323a0b13e2e18755792368 Mon Sep 17 00:00:00 2001 From: hiteshkumar87 Date: Wed, 16 Apr 2025 21:05:32 +0530 Subject: [PATCH 17/29] Revert "CASH-433" This reverts commit 1649ea14077449503533cc4f99fa29c16402418a. --- .../appointment-type-question.vue | 19 +++---------------- .../service-location/service-location.vue | 13 ------------- 2 files changed, 3 insertions(+), 29 deletions(-) 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 4c1c0d031..64bf159ff 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 @@ -32,7 +32,6 @@ export default { cmsWidgetName: String, isServiceableMobile: Boolean, isServiceableInshop: Boolean, - isServiceableDropoff: Boolean, mobileFeeApplies: Boolean, }, computed: { @@ -46,7 +45,7 @@ export default { const shouldShowMobile = this.isServiceableMobile; const shouldShowInshop = this.isServiceableInshop; const shouldShowDropoff = - this.isServiceableDropoff && !this.$store.getters.damage.isRepair; + this.isServiceableInshop && !this.$store.getters.damage.isRepair; var answers = this.answersFromCms ? this.answersFromCms.filter((answer) => { @@ -78,11 +77,6 @@ export default { isMobileOnly() { return this.isServiceableMobile && !this.isServiceableInshop; }, - isInshopOnly() { - return ( - this.isServiceableInshop && !this.isServiceableMobile && !this.isServiceableDropoff - ); - }, }, watch: { answersToDisplay: { @@ -92,7 +86,7 @@ export default { newValue.length == 1 && newValue.findIndex((answer) => answer.Name == "Mobile") != -1 ) { - this.selectedValue = "Mobile"; + this.selectedValues = "Mobile"; } }, immediate: true, @@ -100,14 +94,7 @@ export default { isMobileOnly: { handler(newValue) { if (newValue) { - this.selectedValue = "Mobile"; - } - }, - }, - isInshopOnly: { - handler(newValue) { - if (newValue) { - this.selectedValue = "Inshop"; + this.selectedValues = "Mobile"; } }, }, diff --git a/src/layouts/service-location/service-location.vue b/src/layouts/service-location/service-location.vue index 7b3163c87..a85a5bd17 100644 --- a/src/layouts/service-location/service-location.vue +++ b/src/layouts/service-location/service-location.vue @@ -76,7 +76,6 @@ v-show="isAppointmentTypeDisplayed" :isServiceableMobile="isServiceableMobile" :isServiceableInshop="isServiceableInshop" - :isServiceableDropoff="isServiceableDropoff" :isDisplayed="isAppointmentTypeDisplayed" :mobileFeeApplies="mobileFeeApplies" ref="appointmentTypeQuestion" @@ -197,8 +196,6 @@ export default { isVehicleProtected: this.getIsVehicleProtectedFromStore(), isGlassServiceableInshop: null, isRecalibrationServiceableInshop: null, - isGlassServiceableDropoff: null, - isRecalibrationServiceableDropoff: null, isGlassServiceableMobile: null, isRecalibrationServiceableMobile: null, selectedAppointmentType: this.getSelectedAppointmentType(), @@ -357,13 +354,6 @@ export default { return this.isGlassServiceableInshop; } }, - isServiceableDropoff() { - if (this.isRecalibrationServiceableDropoff !== null) { - return this.isGlassServiceableDropoff && this.isRecalibrationServiceableDropoff; - } else { - return this.isGlassServiceableDropoff; - } - }, isShopQuestionDisplayed() { return ( this.selectedAppointmentType === "Inshop" || @@ -569,9 +559,6 @@ export default { this.isGlassServiceableInshop = serviceabilityDetails.isGlassServiceableInshop; this.isRecalibrationServiceableInshop = serviceabilityDetails.isRecalibrationServiceableInshop; - this.isGlassServiceableDropoff = serviceabilityDetails.isGlassServiceableDropoff; - this.isRecalibrationServiceableDropoff = - serviceabilityDetails.isRecalibrationServiceableDropoff; this.isGlassServiceableMobile = serviceabilityDetails.isGlassServiceableMobile; this.isRecalibrationServiceableMobile = serviceabilityDetails.isRecalibrationServiceableMobile; From 089632b7f1de38f334bf7807b957cf96756c4f2c Mon Sep 17 00:00:00 2001 From: Minojhini Valaiyapathi Date: Wed, 16 Apr 2025 12:04:47 -0400 Subject: [PATCH 18/29] CASH-353- Reverting back the 353 changes --- .../address-lookup/address-lookup.spec.js | 45 --------------- src/layouts/address-lookup/address-lookup.vue | 38 +------------ .../license-plate-lookup.spec.js | 49 ---------------- .../license-plate-lookup.vue | 37 ------------ src/layouts/service-zip/service-zip.spec.js | 38 ------------- src/layouts/service-zip/service-zip.vue | 37 +----------- src/layouts/vin-lookup/vin-lookup.spec.js | 33 ----------- src/layouts/vin-lookup/vin-lookup.vue | 56 +------------------ 8 files changed, 5 insertions(+), 328 deletions(-) diff --git a/src/layouts/address-lookup/address-lookup.spec.js b/src/layouts/address-lookup/address-lookup.spec.js index 19a46abb8..677c14069 100644 --- a/src/layouts/address-lookup/address-lookup.spec.js +++ b/src/layouts/address-lookup/address-lookup.spec.js @@ -182,39 +182,6 @@ describe("address-lookup.vue", () => { // Assert expect(wrapper.findComponent({ ref: "alertVinNotFound" }).isVisible()).toBe(true); }); - test("should show the AlertNoService when displayNoServiceAlert is true", async () => { - const { wrapper } = setupMocks({ - isZipServiceable: true, - displayNoServiceAlert: true, - lookupVinbyAddressResponse: { - isStatePermissible: true, - vinVehicles: [], // Return no vehicles - }, - }); - - // Set displayNoServiceAlert to true - await wrapper.setData({ displayNoServiceAlert: true }); - - // Check if the AlertNoService component is rendered - const alertNoService = wrapper.findComponent({ ref: "AlertNoService" }); - expect(alertNoService.exists()).toBe(true); - }); - test("should hide the AlertNoService when displayNoServiceAlert is false", async () => { - const { wrapper } = setupMocks({ - isZipServiceable: true, - displayNoServiceAlert: false, - lookupVinbyAddressResponse: { - isStatePermissible: true, - vinVehicles: [], // Return no vehicles - }, - }); - // Ensure displayNoServiceAlert is false - await wrapper.setData({ displayNoServiceAlert: false }); - - // Check if the AlertNoService component is not rendered - const alertNoService = wrapper.findComponent({ ref: "AlertNoService" }); - expect(alertNoService.exists()).toBe(false); - }); }); describe("navigation", () => { @@ -774,18 +741,6 @@ function setupMocks({ wrapper.vm.setCmsContent = jest.fn(); wrapper.vm.$refs.navbar.updateButtonText = jest.fn(); wrapper.vm.$refs.navbar.removeLoader = jest.fn(); - const closestShops = { - data: { - providers: [ - { id: 1, name: "Shop 1" }, - { id: 2, name: "Shop 2" }, - ], - }, - }; - - wrapper.vm.findClosestApplicableShops = jest.fn().mockImplementation(() => { - return new Promise((resolve) => resolve(closestShops)); - }); return { wrapper }; } diff --git a/src/layouts/address-lookup/address-lookup.vue b/src/layouts/address-lookup/address-lookup.vue index c33ef68e5..8c4e21e9a 100644 --- a/src/layouts/address-lookup/address-lookup.vue +++ b/src/layouts/address-lookup/address-lookup.vue @@ -81,20 +81,13 @@
- + :isForwardActionDisabled="!meta.valid" /> @@ -171,8 +164,6 @@ export default { emailOrSms: this.getEmailOrSmsFromStore(), }, serviceZipCode: this.getServiceZipFromStore(), - carId: this.getCarIdfromStore(), - isHeavyTruck: this.getIsVehicleHeavyTruckFromStore(), displayNonServiceableZipAlert: false, displayVinNotFoundAlert: false, displayMatchedDifferentVehicleAlert: false, @@ -184,7 +175,6 @@ export default { displayInvalidZipAlert: false, showServiceZipField: this.getServiceZipFromStore(), isZipServiceable: false, - displayNoServiceAlert: false, }; }, methods: { @@ -229,19 +219,6 @@ export default { getServiceZipFromStore() { return this.$store.getters.order.serviceLocation.zipCode; }, - getCarIdfromStore() { - return store.getters.vehicle.carId; - }, - getIsVehicleHeavyTruckFromStore() { - return store.getters.isHeavyTruckVehicle; - }, - async findClosestApplicableShops() { - return await this.dispatchStoreActionWithLogging( - storeActions.GET_CLOSEST_APPLICABLE_SHOPS, - { zip: this.serviceZipCode, carId: this.carId }, - "address-lookup" - ); - }, async forwardButtonAction() { this.resetWarningsAndErrors(); @@ -301,17 +278,6 @@ export default { return this.$refs.navbar.removeLoader(); } this.displayInvalidZipAlert = false; - if (this.serviceZipCode != null && this.isHeavyTruck) { - const closestShops = await this.findClosestApplicableShops( - this.serviceZipCode, - this.carId - ); - this.displayNoServiceAlert = !closestShops?.data?.providers?.length; - if (this.displayNoServiceAlert) { - return this.$refs.navbar.removeLoader(); - } - } - const carsFound = resultMap.vinLookupResponse.vinVehicles; // Handle cases for different amounts of VINS found for the address. @@ -463,7 +429,6 @@ export default { this.displayNonServiceableZipAlert = false; this.displayMatchedDifferentVehicleAlert = false; this.displayVinLookupByHomeAddressNotAllowedAlert = false; - this.displayNoServiceAlert = false; }, }, mounted() { @@ -515,7 +480,6 @@ export default { handler(newValue) { // If they modify the service zip code, then hide the error message. this.displayNonServiceableZipAlert = false; - this.displayNoServiceAlert = false; }, }, showServiceZipField: { diff --git a/src/layouts/license-plate-lookup/license-plate-lookup.spec.js b/src/layouts/license-plate-lookup/license-plate-lookup.spec.js index 2ffe61193..14f0408d1 100644 --- a/src/layouts/license-plate-lookup/license-plate-lookup.spec.js +++ b/src/layouts/license-plate-lookup/license-plate-lookup.spec.js @@ -611,42 +611,6 @@ describe("license-plate-lookup.vue", () => { expect(arePagePrerequisitesValid).toBe(false); }); }); - - describe("alerts", () => { - test("should show the AlertNoService when displayNoServiceAlert is true", async () => { - const { wrapper } = setupMocks({ - isZipServiceable: true, - displayNoServiceAlert: true, - lookupVinbyAddressResponse: { - isStatePermissible: true, - vinVehicles: [], // Return no vehicles - }, - }); - - // Set displayNoServiceAlert to true - await wrapper.setData({ displayNoServiceAlert: true }); - - // Check if the AlertNoService component is rendered - const alertNoService = wrapper.findComponent({ ref: "AlertNoService" }); - expect(alertNoService.exists()).toBe(true); - }); - test("should hide the AlertNoService when displayNoServiceAlert is false", async () => { - const { wrapper } = setupMocks({ - isZipServiceable: true, - displayNoServiceAlert: false, - lookupVinbyAddressResponse: { - isStatePermissible: true, - vinVehicles: [], // Return no vehicles - }, - }); - // Ensure displayNoServiceAlert is false - await wrapper.setData({ displayNoServiceAlert: false }); - - // Check if the AlertNoService component is not rendered - const alertNoService = wrapper.findComponent({ ref: "AlertNoService" }); - expect(alertNoService.exists()).toBe(false); - }); - }); }); function setupMocks({ @@ -752,18 +716,5 @@ function setupMocks({ wrapper.vm.getCmsContent = jest.fn().mockImplementation(() => ""); wrapper.vm.$refs.navbar.updateButtonText = jest.fn(); wrapper.vm.$refs.navbar.removeLoader = jest.fn(); - const closestShops = { - data: { - providers: [ - { id: 1, name: "Shop 1" }, - { id: 2, name: "Shop 2" }, - ], - }, - }; - - wrapper.vm.findClosestApplicableShops = jest.fn().mockImplementation(() => { - return new Promise((resolve) => resolve(closestShops)); - }); - return { wrapper, apiPromise }; } diff --git a/src/layouts/license-plate-lookup/license-plate-lookup.vue b/src/layouts/license-plate-lookup/license-plate-lookup.vue index a359d3a9d..c581af4b7 100644 --- a/src/layouts/license-plate-lookup/license-plate-lookup.vue +++ b/src/layouts/license-plate-lookup/license-plate-lookup.vue @@ -77,14 +77,6 @@ alertClass="alert-warning" v-bind:isDismissible="false" /> - - { expect(wrapper.vm.displayInvalidZipAlert).toBe(false); expect(wrapper.vm.displayNonServiceableZipAlert).toBe(false); }); - test("should show the AlertNoService when displayNoServiceAlert is true", async () => { - // Arrange - // no changes to store - applyMockStoreDataToGetters(); - - const wrapper = setupMocks({}); - wrapper.vm.serviceZipCode = "12345"; - - // Act - wrapper.vm.displayNoServiceAlert = true; - - // Check if the AlertNoService component is rendered - expect(wrapper.vm.displayNoServiceAlert).toBe(true); - }); - test("should hide the AlertNoService when displayNoServiceAlert is false", async () => { - // Arrange - // no changes to store - applyMockStoreDataToGetters(); - - const wrapper = setupMocks({}); - wrapper.vm.serviceZipCode = "12345"; - //ACT - wrapper.vm.displayNoServiceAlert = false; - - // Check if the AlertNoService component is rendered - expect(wrapper.vm.displayNoServiceAlert).toBe(false); - }); }); }); @@ -538,16 +511,5 @@ function setupMocks({ customMountOptions, customZipQuery, customZipDataResponse ]; const wrapper = shallowMount(serviceZip, mountOptions); - wrapper.vm.findClosestApplicableShops = jest.fn().mockImplementation(() => { - return Promise.resolve({ - data: { - providers: [ - { id: 1, name: "Shop 1" }, - { id: 2, name: "Shop 2" }, - ], - }, - }); - }); - return wrapper; } diff --git a/src/layouts/service-zip/service-zip.vue b/src/layouts/service-zip/service-zip.vue index 7d53d105d..9528d50bc 100644 --- a/src/layouts/service-zip/service-zip.vue +++ b/src/layouts/service-zip/service-zip.vue @@ -47,18 +47,10 @@ v-if="displayNonServiceableZipAlert" alertClass="alert-danger" /> - - @@ -118,11 +110,8 @@ export default { return { serviceZipCode: this.getZipFromStore() ?? this.$route.query.zipcode, emailOrSms: this.getEmailOrSmsFromStore(), - carId: this.getCarIdfromStore(), - isHeavyTruck: this.getIsVehicleHeavyTruckFromStore(), displayInvalidZipAlert: false, displayNonServiceableZipAlert: false, - displayNoServiceAlert: false, }; }, @@ -195,19 +184,6 @@ export default { arePagePrerequisitesValid() { return store.getters.damage.isRepair || store.getters.damage.glassToReplace?.length > 0; }, - getCarIdfromStore() { - return store.getters.vehicle.carId; - }, - getIsVehicleHeavyTruckFromStore() { - return store.getters.isHeavyTruckVehicle; - }, - async findClosestApplicableShops() { - return await this.dispatchStoreActionWithLogging( - storeActions.GET_CLOSEST_APPLICABLE_SHOPS, - { zip: this.serviceZipCode, carId: this.carId }, - "service-zip" - ); - }, async backButtonAction() { const skipVin = await skipVinLookup(); // route to move backwards @@ -276,16 +252,6 @@ export default { return this.$refs.navbar.removeLoader(); } this.displayNonServiceableZipAlert = false; - if (this.isHeavyTruck) { - const closestShops = await this.findClosestApplicableShops( - this.serviceZipCode, - this.carId - ); - this.displayNoServiceAlert = !closestShops?.data?.providers?.length; - if (this.displayNoServiceAlert) { - return this.$refs.navbar.removeLoader(); - } - } const payment = this.$store.getters.payment; const policy = this.$store.getters.policy; @@ -343,7 +309,6 @@ export default { watch: { serviceZipCode() { this.displayNonServiceableZipAlert = false; - this.displayNoServiceAlert = false; }, }, components: { diff --git a/src/layouts/vin-lookup/vin-lookup.spec.js b/src/layouts/vin-lookup/vin-lookup.spec.js index 458f9fc48..6eb1aa515 100644 --- a/src/layouts/vin-lookup/vin-lookup.spec.js +++ b/src/layouts/vin-lookup/vin-lookup.spec.js @@ -258,39 +258,6 @@ describe("vin-lookup.vue", () => { // Assert expect(wrapper.findAllComponents({ name: "alert" }).length).toBe(1); }); - - test("should show the AlertNoService when displayNoServiceAlert is true", async () => { - const { wrapper } = setupMocks({ - isZipServiceable: true, - displayNoServiceAlert: true, - lookupVinbyAddressResponse: { - isStatePermissible: true, - vinVehicles: [], // Return no vehicles - }, - }); - // Set displayNoServiceAlert to true - await wrapper.setData({ displayNoServiceAlert: true }); - - // Check if the AlertNoService component is rendered - const alertNoService = wrapper.findComponent({ ref: "AlertNoService" }); - expect(alertNoService.exists()).toBe(true); - }); - test("should hide the AlertNoService when displayNoServiceAlert is false", async () => { - const { wrapper } = setupMocks({ - isZipServiceable: true, - displayNoServiceAlert: false, - lookupVinbyAddressResponse: { - isStatePermissible: true, - vinVehicles: [], // Return no vehicles - }, - }); - // Ensure displayNoServiceAlert is false - await wrapper.setData({ displayNoServiceAlert: false }); - - // Check if the AlertNoService component is not rendered - const alertNoService = wrapper.findComponent({ ref: "AlertNoService" }); - expect(alertNoService.exists()).toBe(false); - }); }); describe("getVinFromImage", () => { diff --git a/src/layouts/vin-lookup/vin-lookup.vue b/src/layouts/vin-lookup/vin-lookup.vue index 788425861..4c6897717 100644 --- a/src/layouts/vin-lookup/vin-lookup.vue +++ b/src/layouts/vin-lookup/vin-lookup.vue @@ -71,8 +71,7 @@ vinPopulatedOnPageLoad && isInsuranceVerified && !displayInvalidZipAlert && - !displayNonServiceableZipAlert && - !displayNoServiceAlert + !displayNonServiceableZipAlert " alertClass="alert-success" /> @@ -108,23 +107,14 @@ vinPopulatedOnPageLoad && !isInsuranceVerified && !displayInvalidZipAlert && - !displayNonServiceableZipAlert && - !displayNoServiceAlert + !displayNonServiceableZipAlert " alertClass="alert-success" /> - - @@ -207,8 +197,6 @@ export default { vin: this.getVinFromStore(), serviceZipCode: this.getZipFromStore() ?? this.$route.query.zipcode, emailOrSms: this.getEmailOrSmsFromStore(), - carId: this.getCarIdfromStore(), - isHeavyTruck: this.getIsVehicleHeavyTruckFromStore(), isCarIdDifferent: false, customAlertData: {}, previouslyEnteredCarId: "", @@ -219,7 +207,6 @@ export default { displayVinNotFoundAlert: false, displayMatchedDifferentVehicleAlert: false, displayVinScanFailedAlert: false, - displayNoServiceAlert: false, }; }, methods: { @@ -235,12 +222,6 @@ export default { getZipFromStore() { return this.$store.getters.order.serviceLocation.zipCode; }, - getCarIdfromStore() { - return store.getters.vehicle.carId; - }, - getIsVehicleHeavyTruckFromStore() { - return store.getters.isHeavyTruckVehicle; - }, attachCustomEvents() { this.prependActionToMethod(this, this.forwardButtonAction, () => { this.pushEventToGA( @@ -264,13 +245,6 @@ export default { ); } }, - async findClosestApplicableShops() { - return await this.dispatchStoreActionWithLogging( - storeActions.GET_CLOSEST_APPLICABLE_SHOPS, - { zip: this.serviceZipCode, carId: this.carId }, - "vin-lookup" - ); - }, async forwardButtonAction() { this.resetAlerts(); @@ -303,18 +277,6 @@ export default { return this.$refs.navbar.removeLoader(); } this.displayInvalidZipAlert = false; - if (this.isHeavyTruck) { - // If a VIN has already been found. Validate the Service Zip (in case of changes) - var closestShops = await this.findClosestApplicableShops( - this.serviceZipCode, - this.carId - ); - this.displayNoServiceAlert = !closestShops?.data?.providers?.length; - if (this.displayNoServiceAlert) { - return this.$refs.navbar.removeLoader(); - } - } - // If either lookup fails, remove the loader and stop processing the page. if (!resultMap.vehicleLookupResponse || !resultMap.zipCodeData.isServiceable) { // If the vehicle result is undefined, the vin entered was invalid. @@ -431,16 +393,6 @@ export default { ); } - closestShops = await this.findClosestApplicableShops( - this.serviceZipCode, - this.carId - ); - this.displayNoServiceAlert = !closestShops?.data?.providers?.length; - if (this.displayNoServiceAlert) { - return this.$refs.navbar.removeLoader(); - } - - // if no value due to field being optional, blank both phone and email address if (!this.emailOrSms) { await this.dispatchStoreAction(storeActions.SAVE_PHONE_NUMBER, "", false); await this.dispatchStoreAction(storeActions.SAVE_EMAIL, "", false); @@ -522,7 +474,6 @@ export default { this.displayInvalidZipAlert = false; this.displayVinNotFoundAlert = false; this.displayVinScanFailedAlert = false; - this.displayNoServiceAlert = false; }, }, mounted() { @@ -599,7 +550,6 @@ export default { }, serviceZipCode() { this.displayNonServiceableZipAlert = false; - this.displayNoServiceAlert = false; }, }, components: { From e4b74f846ea30790d89b93487caf209bf2e56871 Mon Sep 17 00:00:00 2001 From: hiteshkumar87 Date: Wed, 16 Apr 2025 22:11:30 +0530 Subject: [PATCH 19/29] revert cash-433 unit test case --- .../appointment-type-question.spec.js | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/layouts/service-location/appointment-type-question/appointment-type-question.spec.js b/src/layouts/service-location/appointment-type-question/appointment-type-question.spec.js index 8ff7c9b1c..c6af1377f 100644 --- a/src/layouts/service-location/appointment-type-question/appointment-type-question.spec.js +++ b/src/layouts/service-location/appointment-type-question/appointment-type-question.spec.js @@ -100,7 +100,7 @@ describe("appointment-type-question.vue", () => { ]); }); - it("Should display only the In-Shop answer when only in-shop service is available", async () => { + it("Should display only the In-Shop and Drop-Off answers when only in-shop service is available", async () => { // Arrange/Act const { wrapper } = setupMocks({ mixins: [mockMixin], @@ -108,7 +108,6 @@ describe("appointment-type-question.vue", () => { cmsWidgetName: cmsWidgetName, isServiceableInshop: true, isServiceableMobile: false, - isServiceableDropoff: false, }, mountOptions: { attachTo: document.body, @@ -124,6 +123,13 @@ describe("appointment-type-question.vue", () => { SubWidgetName: "", Text: "In-shop", }, + { + AnswerImageUrl: "", + Name: "Dropoff", + SubText: "", + SubWidgetName: "", + Text: "Drop-off", + }, ]); }); From b2b4965a356ddcc16abf783478d121fd2b616e40 Mon Sep 17 00:00:00 2001 From: Bryan Mauger Date: Wed, 16 Apr 2025 15:53:18 -0400 Subject: [PATCH 20/29] CASH-403 update footer text color. --- src/fmg-components/funnel-footer/funnel-footer.vue | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/fmg-components/funnel-footer/funnel-footer.vue b/src/fmg-components/funnel-footer/funnel-footer.vue index 0cff25b0b..8e87eaa2c 100644 --- a/src/fmg-components/funnel-footer/funnel-footer.vue +++ b/src/fmg-components/funnel-footer/funnel-footer.vue @@ -78,10 +78,10 @@ export default { width: 100%; justify-content: center; align-items: center; + color: $gray-600; p { font-size: 0.875rem; - color: $black; @include media-breakpoint-up(md) { font-size: 1rem; } @@ -91,9 +91,11 @@ export default { text-decoration: none; &.new-window-link { margin: 0 0.75rem; + color: $gray-600; } &.navigation-link { margin: 0 0.75rem; + color: $gray-600; } } From 76b058077bf32a84f2df917f01c889ed73b71cb5 Mon Sep 17 00:00:00 2001 From: Minojhini Valaiyapathi Date: Thu, 17 Apr 2025 09:27:13 -0400 Subject: [PATCH 21/29] CASH-353 - Redoing 353 revert branch to get merged to develop --- src/layouts/address-lookup/address-lookup.vue | 6 ++-- .../license-plate-lookup.vue | 9 +++--- src/layouts/service-zip/service-zip.vue | 18 ++++++++++-- src/layouts/vin-lookup/vin-lookup.vue | 28 +++++++++++-------- 4 files changed, 39 insertions(+), 22 deletions(-) diff --git a/src/layouts/address-lookup/address-lookup.vue b/src/layouts/address-lookup/address-lookup.vue index c33ef68e5..44dbaaa5e 100644 --- a/src/layouts/address-lookup/address-lookup.vue +++ b/src/layouts/address-lookup/address-lookup.vue @@ -172,7 +172,7 @@ export default { }, serviceZipCode: this.getServiceZipFromStore(), carId: this.getCarIdfromStore(), - isHeavyTruck: this.getIsVehicleHeavyTruckFromStore(), + isHeavyTruck: this.getIsVehicleHeavyTruckServiceableFromStore(), displayNonServiceableZipAlert: false, displayVinNotFoundAlert: false, displayMatchedDifferentVehicleAlert: false, @@ -232,8 +232,8 @@ export default { getCarIdfromStore() { return store.getters.vehicle.carId; }, - getIsVehicleHeavyTruckFromStore() { - return store.getters.isHeavyTruckVehicle; + getIsVehicleHeavyTruckServiceableFromStore() { + return store.getters.vehicle.isBigTruck && store.getters.vehicle.canSafeliteService; }, async findClosestApplicableShops() { return await this.dispatchStoreActionWithLogging( diff --git a/src/layouts/license-plate-lookup/license-plate-lookup.vue b/src/layouts/license-plate-lookup/license-plate-lookup.vue index a359d3a9d..a8c68215a 100644 --- a/src/layouts/license-plate-lookup/license-plate-lookup.vue +++ b/src/layouts/license-plate-lookup/license-plate-lookup.vue @@ -76,7 +76,6 @@ :manualCopy="AlertMatchedDifferentVehicleBody" alertClass="alert-warning" v-bind:isDismissible="false" /> - + @ForwardClicked="forwardButtonAction || displayNoServiceAlert" /> @@ -167,7 +166,7 @@ export default { emailOrSms: this.getEmailOrSmsFromStore(), serviceZipCode: this.getServiceZipFromStore(), carId: this.getCarIdfromStore(), - isHeavyTruck: this.getIsVehicleHeavyTruckFromStore(), + isHeavyTruck: this.getIsVehicleHeavyTruckServiceableFromStore(), displayNonServiceableZipAlert: false, displayVinNotFoundAlert: false, displayMatchedDifferentVehicleAlert: false, @@ -214,8 +213,8 @@ export default { getCarIdfromStore() { return store.getters.vehicle.carId; }, - getIsVehicleHeavyTruckFromStore() { - return store.getters.isHeavyTruckVehicle; + getIsVehicleHeavyTruckServiceableFromStore() { + return store.getters.vehicle.isBigTruck && store.getters.vehicle.canSafeliteService; }, async findClosestApplicableShops() { return await this.dispatchStoreActionWithLogging( diff --git a/src/layouts/service-zip/service-zip.vue b/src/layouts/service-zip/service-zip.vue index 7d53d105d..a991119ef 100644 --- a/src/layouts/service-zip/service-zip.vue +++ b/src/layouts/service-zip/service-zip.vue @@ -119,7 +119,7 @@ export default { serviceZipCode: this.getZipFromStore() ?? this.$route.query.zipcode, emailOrSms: this.getEmailOrSmsFromStore(), carId: this.getCarIdfromStore(), - isHeavyTruck: this.getIsVehicleHeavyTruckFromStore(), + isHeavyTruck: this.getIsVehicleHeavyTruckServiceableFromStore(), displayInvalidZipAlert: false, displayNonServiceableZipAlert: false, displayNoServiceAlert: false, @@ -198,8 +198,8 @@ export default { getCarIdfromStore() { return store.getters.vehicle.carId; }, - getIsVehicleHeavyTruckFromStore() { - return store.getters.isHeavyTruckVehicle; + getIsVehicleHeavyTruckServiceableFromStore() { + return store.getters.vehicle.isBigTruck && store.getters.vehicle.canSafeliteService; }, async findClosestApplicableShops() { return await this.dispatchStoreActionWithLogging( @@ -208,6 +208,7 @@ export default { "service-zip" ); }, + async backButtonAction() { const skipVin = await skipVinLookup(); // route to move backwards @@ -286,6 +287,16 @@ export default { return this.$refs.navbar.removeLoader(); } } + if (this.isHeavyTruck) { + const closestShops = await this.findClosestApplicableShops( + this.serviceZipCode, + this.carId + ); + this.displayNoServiceAlert = !closestShops?.data?.providers?.length; + if (this.displayNoServiceAlert) { + return this.$refs.navbar.removeLoader(); + } + } const payment = this.$store.getters.payment; const policy = this.$store.getters.policy; @@ -344,6 +355,7 @@ export default { serviceZipCode() { this.displayNonServiceableZipAlert = false; this.displayNoServiceAlert = false; + this.displayNoServiceAlert = false; }, }, components: { diff --git a/src/layouts/vin-lookup/vin-lookup.vue b/src/layouts/vin-lookup/vin-lookup.vue index 788425861..b439b5e5e 100644 --- a/src/layouts/vin-lookup/vin-lookup.vue +++ b/src/layouts/vin-lookup/vin-lookup.vue @@ -208,7 +208,7 @@ export default { serviceZipCode: this.getZipFromStore() ?? this.$route.query.zipcode, emailOrSms: this.getEmailOrSmsFromStore(), carId: this.getCarIdfromStore(), - isHeavyTruck: this.getIsVehicleHeavyTruckFromStore(), + isHeavyTruck: this.getIsVehicleHeavyTruckServiceableFromStore(), isCarIdDifferent: false, customAlertData: {}, previouslyEnteredCarId: "", @@ -264,6 +264,9 @@ export default { ); } }, + getIsVehicleHeavyTruckServiceableFromStore() { + return store.getters.vehicle.isBigTruck && store.getters.vehicle.canSafeliteService; + }, async findClosestApplicableShops() { return await this.dispatchStoreActionWithLogging( storeActions.GET_CLOSEST_APPLICABLE_SHOPS, @@ -366,6 +369,18 @@ export default { }, false ); + if (this.isHeavyTruck) { + closestShops = await this.findClosestApplicableShops( + this.serviceZipCode, + this.carId + ); + this.displayNoServiceAlert = !closestShops?.data?.providers?.length; + if (this.displayNoServiceAlert) { + return this.$refs.navbar.removeLoader(); + } + } + + // if no value due to field being optional, blank both phone and email address // if no value due to field being optional, blank both phone and email address if (!this.emailOrSms) { @@ -430,16 +445,6 @@ export default { false ); } - - closestShops = await this.findClosestApplicableShops( - this.serviceZipCode, - this.carId - ); - this.displayNoServiceAlert = !closestShops?.data?.providers?.length; - if (this.displayNoServiceAlert) { - return this.$refs.navbar.removeLoader(); - } - // if no value due to field being optional, blank both phone and email address if (!this.emailOrSms) { await this.dispatchStoreAction(storeActions.SAVE_PHONE_NUMBER, "", false); @@ -523,6 +528,7 @@ export default { this.displayVinNotFoundAlert = false; this.displayVinScanFailedAlert = false; this.displayNoServiceAlert = false; + this.displayNoServiceAlert = false; }, }, mounted() { From a9a493888d2d53c2f03bf635d67c19adbcb5a1e7 Mon Sep 17 00:00:00 2001 From: Bryan Mauger Date: Thu, 17 Apr 2025 16:37:33 -0400 Subject: [PATCH 22/29] CASH-403 move copyright to bottom of footer. --- .../funnel-footer/funnel-footer.vue | 23 +++++++++++-------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/src/fmg-components/funnel-footer/funnel-footer.vue b/src/fmg-components/funnel-footer/funnel-footer.vue index 8e87eaa2c..ca8be5bf0 100644 --- a/src/fmg-components/funnel-footer/funnel-footer.vue +++ b/src/fmg-components/funnel-footer/funnel-footer.vue @@ -11,7 +11,6 @@ +

© 2025 Safelite Group

@@ -60,8 +60,9 @@ export default { flex-direction: column; width: 100%; background: transparent; - align-items: end; + align-items: center; margin-top: auto; + padding: 0 0 2rem 0; .skyline { height: 96px; @@ -70,23 +71,25 @@ export default { height: 48px; } + p { + font-size: 0.875rem; + margin-top: 0.25rem; + @include media-breakpoint-up(md) { + font-size: 1rem; + margin-top: 0.5rem; + } + } + .footer-inner-wrapper { display: flex; flex-direction: column; border-top: 1px solid $gray; - padding: 2rem 0; + padding: 2rem 0 0 0; width: 100%; justify-content: center; align-items: center; color: $gray-600; - p { - font-size: 0.875rem; - @include media-breakpoint-up(md) { - font-size: 1rem; - } - } - :deep(a) { text-decoration: none; &.new-window-link { From 44b878e87cadbd24a8c9ab4046d14dd84991870d Mon Sep 17 00:00:00 2001 From: Chris Redelinghuys Date: Mon, 21 Apr 2025 12:53:11 -0400 Subject: [PATCH 23/29] CASH-187: Progress bar --- src/constants/progress-bar-mapper.js | 26 ++++++ .../funnel-header/funnel-header.vue | 3 + .../progress-bar/progres-bar.spec.js | 84 +++++++++++++++++++ .../progress-bar/progress-bar.vue | 60 +++++++++++++ src/layouts/quote/quote.vue | 2 +- 5 files changed, 174 insertions(+), 1 deletion(-) create mode 100644 src/constants/progress-bar-mapper.js create mode 100644 src/fmg-components/funnel-header/progress-bar/progres-bar.spec.js create mode 100644 src/fmg-components/funnel-header/progress-bar/progress-bar.vue diff --git a/src/constants/progress-bar-mapper.js b/src/constants/progress-bar-mapper.js new file mode 100644 index 000000000..e219f1a10 --- /dev/null +++ b/src/constants/progress-bar-mapper.js @@ -0,0 +1,26 @@ +const pagePercentageMapper = { + 'vehicle': 4, + 'vehicle-damage': 16, + 'estimate': 28, + 'service-zip': 32, + 'vin-lookup': 32, + 'license-plate-lookup': 32, + 'address-lookup': 32, + 'address-vehicles': 36, + 'part-questions': 40, + 'molding-questions': 40, + 'vehicle-parts': 40, + 'capability-questions': 40, + 'quote': 48, + 'insurance-company': 52, + 'service-location': 60, + 'schedule': 72, + 'customer-details': 84, + 'payment-method': 92, + 'payment': 96, + 'confirmation': 100, +} + +export const getProgressBarPercentage = (page) => { + return pagePercentageMapper[page] || 0; +} \ No newline at end of file diff --git a/src/fmg-components/funnel-header/funnel-header.vue b/src/fmg-components/funnel-header/funnel-header.vue index c6cbb8727..092224551 100644 --- a/src/fmg-components/funnel-header/funnel-header.vue +++ b/src/fmg-components/funnel-header/funnel-header.vue @@ -6,6 +6,7 @@ +