From 17bc2cf8cebc17b30dd338e2c437161756ea1f67 Mon Sep 17 00:00:00 2001 From: Adam Caouette Date: Tue, 14 Nov 2023 11:18:54 -0500 Subject: [PATCH 01/15] CSR-1689: swap to using submitted order --- src/layouts/confirmation/confirmation.vue | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/layouts/confirmation/confirmation.vue b/src/layouts/confirmation/confirmation.vue index bd8ee8acd..8f34feb23 100644 --- a/src/layouts/confirmation/confirmation.vue +++ b/src/layouts/confirmation/confirmation.vue @@ -98,13 +98,13 @@ export default { ]; const resultMap = await settleAllPromises(promiseResultMap); - const lineItemsFromStore = deepClone(store.getters.order.lineItems); + const lineItemsFromSubmittedOrder = deepClone(store.getters.submittedOrder.lineItems); // Call the "next" function to complete the transition to this page. next((vm) => { vm.setCmsContent(resultMap.cmsContent); - vm.lineItems = lineItemsFromStore; - vm.vaps = lineItemsFromStore.vaps; + vm.lineItems = lineItemsFromSubmittedOrder; + vm.vaps = lineItemsFromSubmittedOrder.vaps; }); }, data() { From 2591ab993586215bfff71eea3ddf180a8c71eb5d Mon Sep 17 00:00:00 2001 From: Adam Caouette Date: Tue, 14 Nov 2023 11:47:33 -0500 Subject: [PATCH 02/15] CSR-1689: restore removed recycle label on cart --- src/fmg-components/cart/cart.vue | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/fmg-components/cart/cart.vue b/src/fmg-components/cart/cart.vue index 84752cb1c..97341dd57 100644 --- a/src/fmg-components/cart/cart.vue +++ b/src/fmg-components/cart/cart.vue @@ -53,6 +53,9 @@ :text="recycleFeeCartItem.name" href="#!" @click-event="openModal(recyclingModalCmsWidgetName)" /> + + {{ recycleFeeCartItem.name }} + {{ getFormattedAmount(cartItem.category, cartItem.subTotal) }} From 28c42a057252d0de309e95b90a9f762b1fdd2495 Mon Sep 17 00:00:00 2001 From: Matt Caimi Date: Tue, 14 Nov 2023 15:02:25 -0500 Subject: [PATCH 03/15] CSR-1391 click x on afterpay modal sends user back to payment-method --- src/layouts/payment/payment.vue | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/layouts/payment/payment.vue b/src/layouts/payment/payment.vue index 3cd7e3f0b..633723ae8 100644 --- a/src/layouts/payment/payment.vue +++ b/src/layouts/payment/payment.vue @@ -360,6 +360,7 @@ export default { next(async (vm) => { vm.setCmsContent(resultMap.cmsContent); vm.fetchSignatureInfo(resultMap.signature); + vm.setIFrameListener(); vm.availableVaps = taxedVaps; vm.lineItems = lineItems; @@ -577,6 +578,16 @@ export default { this.submitHopForm(); }, + handleIFrameContentWindwMessage(event) { + if (event.data.indexOf("afterpayClosed") > -1) { + this.backButtonAction(); + } + }, + setIFrameListener() { + window.addEventListener("message", (event) => + this.handleIFrameContentWindwMessage(event) + ); + }, }, components: { funnelHeader, From f322d4a9a38044edab0264d8701e81f7ea47c70d Mon Sep 17 00:00:00 2001 From: Chloe Herd Date: Tue, 14 Nov 2023 15:21:37 -0500 Subject: [PATCH 04/15] Stop capturing pointer-events on shop button loaders --- src/ux-components/loader/loader.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ux-components/loader/loader.vue b/src/ux-components/loader/loader.vue index eb244c796..f340dbe12 100644 --- a/src/ux-components/loader/loader.vue +++ b/src/ux-components/loader/loader.vue @@ -95,7 +95,7 @@ export default { } &.allow-ui-interaction::before { //no-block to enable clicking on certain buttons with loaders while the loader is actives - z-index: -1; + pointer-events: none; } } From 61aeb06e0ab4babd816716d4d72ae4a9ca8e4069 Mon Sep 17 00:00:00 2001 From: Sneha Date: Wed, 15 Nov 2023 16:02:21 +0530 Subject: [PATCH 05/15] validate alphanumeric values --- .../promo-modal-question/promo-question/promo-question.vue | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/layouts/payment-method/promo-modal-question/promo-question/promo-question.vue b/src/layouts/payment-method/promo-modal-question/promo-question/promo-question.vue index 25744e652..7b4fd9049 100644 --- a/src/layouts/payment-method/promo-modal-question/promo-question/promo-question.vue +++ b/src/layouts/payment-method/promo-modal-question/promo-question/promo-question.vue @@ -8,6 +8,7 @@ cornerStyle="rounded" :displayQuestionText="false" isRequired + @input="validateAlphanumeric" validationRules="promo-required" /> @@ -38,6 +39,11 @@ export default { }, }, }, + methods: { + validateAlphanumeric() { + this.value = this.value.replace(/[^a-zA-Z0-9]/g, ""); + }, + }, components: { textboxQuestion, }, From 5a7732382026b49a012e8002db73c3f25c03e962 Mon Sep 17 00:00:00 2001 From: hiteshkumar87 Date: Wed, 15 Nov 2023 16:42:37 +0530 Subject: [PATCH 06/15] Update date-helper.js replacing Math.floor with Math.round --- src/helpers/date-helper.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/helpers/date-helper.js b/src/helpers/date-helper.js index 482440431..b5afc535c 100644 --- a/src/helpers/date-helper.js +++ b/src/helpers/date-helper.js @@ -5,7 +5,7 @@ export function getDateDifferenceInDays(startDate, endDate) { // Use the built-in method to get the difference in milliseconds var difference = date1 - date2; // Convert milliseconds to days and return the result - return Math.floor(difference / (1000 * 3600 * 24)); + return Math.round(difference / (1000 * 3600 * 24)); } export function get12HourTimeFormat(time) { // Check correct time format and split into components From bc3468f8d62ca2f277b8a7d9255e8d29494da2b7 Mon Sep 17 00:00:00 2001 From: Sneha Date: Wed, 15 Nov 2023 18:14:52 +0530 Subject: [PATCH 07/15] Format --- .../promo-modal-question/promo-modal-question.vue | 6 ++---- .../promo-modal-question/promo-question/promo-question.vue | 4 +++- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/layouts/payment-method/promo-modal-question/promo-modal-question.vue b/src/layouts/payment-method/promo-modal-question/promo-modal-question.vue index ac42fce2e..deff594e5 100644 --- a/src/layouts/payment-method/promo-modal-question/promo-modal-question.vue +++ b/src/layouts/payment-method/promo-modal-question/promo-modal-question.vue @@ -217,13 +217,11 @@ export default { } else { if (promoCodeData.errorCode == promoErrorCodes.PROMO_STACKING_NOT_ALLOWED) { this.displayInvalidOnOrderPromoAlert = true; - this.focusOnPromoInput(); - this.resetModalButtonStyle(); } else { this.displayInvalidPromoAlert = true; - this.focusOnPromoInput(); - this.resetModalButtonStyle(); } + this.focusOnPromoInput(); + this.resetModalButtonStyle(); } } }, diff --git a/src/layouts/payment-method/promo-modal-question/promo-question/promo-question.vue b/src/layouts/payment-method/promo-modal-question/promo-question/promo-question.vue index 7b4fd9049..053e8eedc 100644 --- a/src/layouts/payment-method/promo-modal-question/promo-question/promo-question.vue +++ b/src/layouts/payment-method/promo-modal-question/promo-question/promo-question.vue @@ -23,6 +23,8 @@ import { errorMessages } from "@/constants/error-messages"; // Define Validation Rules defineRule("promo-required", required(errorMessages.PROMO_REQUIRED)); +const ALPHANUMERIC_REGEX = /[^a-zA-Z0-9]/g; + export default { name: "promo-question", props: { @@ -41,7 +43,7 @@ export default { }, methods: { validateAlphanumeric() { - this.value = this.value.replace(/[^a-zA-Z0-9]/g, ""); + this.value = this.value.replace(ALPHANUMERIC_REGEX, ""); }, }, components: { From 2b44e2274a4beeec64f9bf2f2b18fe8c115225b3 Mon Sep 17 00:00:00 2001 From: Adam Caouette Date: Wed, 15 Nov 2023 09:50:02 -0500 Subject: [PATCH 08/15] CSR-1778: swap button positions --- .../add-vaps-modal-buttons.vue | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/layouts/payment-method/add-vaps-modal-buttons/add-vaps-modal-buttons.vue b/src/layouts/payment-method/add-vaps-modal-buttons/add-vaps-modal-buttons.vue index c822fa318..0dac2d1db 100644 --- a/src/layouts/payment-method/add-vaps-modal-buttons/add-vaps-modal-buttons.vue +++ b/src/layouts/payment-method/add-vaps-modal-buttons/add-vaps-modal-buttons.vue @@ -287,13 +287,6 @@ export default { return answers[answerIndex]; }; - if (!this.rainDefenseInCart) { - // NO RAIN DEFENSE IN CART; SHOW RAIN DEFENSE BUTTON - const modalData = getAnswer("RainDefenseModal", this.answersCmsData); - modalData.SubText = "+$" + this.rainDefenseModal?.listPrice; - buttons.push(modalData); - } - const modalData = getAnswer("WipersModal", this.answersCmsData); if (this.wipersOffered === wipersOfferedStrings.BOTH) { // NO REAR WIPERS or FRONT WIPERS IN CART; SHOW COMBO BUTTON @@ -318,6 +311,13 @@ export default { buttons.push(modalData); } + if (!this.rainDefenseInCart) { + // NO RAIN DEFENSE IN CART; SHOW RAIN DEFENSE BUTTON + const modalData = getAnswer("RainDefenseModal", this.answersCmsData); + modalData.SubText = "+$" + this.rainDefenseModal?.listPrice; + buttons.push(modalData); + } + return buttons; }, wipersOfferedStrings() { From f9332b1028104e63e804afcbcf314f184b1b3101 Mon Sep 17 00:00:00 2001 From: Scott Kiener Date: Wed, 15 Nov 2023 11:12:08 -0500 Subject: [PATCH 09/15] CSR-1452 | Working on integrating promo-modal --- src/helpers/promotions-helper.js | 65 ++++++++++--------- src/layouts/payment-method/payment-method.vue | 34 ++++++---- src/store/index.js | 2 +- 3 files changed, 59 insertions(+), 42 deletions(-) diff --git a/src/helpers/promotions-helper.js b/src/helpers/promotions-helper.js index f91a7a91b..98ae47c95 100644 --- a/src/helpers/promotions-helper.js +++ b/src/helpers/promotions-helper.js @@ -173,13 +173,7 @@ export function buildToastMessagesFromRevalidateOrValidatePromoResponse( alerts.push(createPromoSuccessAlert(newlyActivatedPromoCode)); }); - const inactivePromoCodesFromResponse = getPromoCodesFromPromoObjectsWithoutDuplicates( - promoResponse.errors - ); - const newlyInactivatedPromos = inactivePromoCodesFromResponse.filter( - (errorPromoCode) => !oldInactivePromos.includes(errorPromoCode) - ); - + const newlyInactivatedPromos = getNewlyInactivatedPromos(oldInactivePromos, promoResponse.errors); newlyInactivatedPromos.forEach((newlyInactivatedPromo) => { alerts.push(createPromoErrorAlert(newlyInactivatedPromo)); }); @@ -269,6 +263,40 @@ export function shouldStripPromoQueryString(fmgPageQueryValue) { return pagesToStripPromoQueryStringFrom.includes(fmgPageQueryValue); } +export function getNewlyInactivatedPromos(oldInactivePromos, newInactivePromos) { + const inactivePromoCodesFromResponse = getPromoCodesFromPromoObjectsWithoutDuplicates( + newInactivePromos + ); + return inactivePromoCodesFromResponse.filter( + (errorPromoCode) => !oldInactivePromos.includes(errorPromoCode) + ); +} + +export function createPromoSuccessAlert(promoCode) { + return { + messageHeadline: "Promo applied!", + messageCopy: `Promo "${getPromoCodeWithoutBundleIdentifier(promoCode.toUpperCase())}" was successfully applied to your cart.`, + type: "alert-success", + isDismissible: true, + shouldAutoFade: true, + }; +} + +export function createPromoErrorAlert(promoCode, errorCode = null, additionalInfo) { + const alert = { + messageHeadline: "Promo error", + type: "alert-danger", + shouldAutoFade: false, + isDismissible: true, + }; + if (stackingPromoErrorCodes.includes(errorCode)) { + alert.messageCopy = `Sorry, promo code "${getPromoCodeWithoutBundleIdentifier(promoCode.toUpperCase())}" cannot be combined with "${additionalInfo[0].toUpperCase()}"`; + } else { + alert.messageCopy = `Sorry, promo code "${getPromoCodeWithoutBundleIdentifier(promoCode.toUpperCase())}" is not valid`; + } + return alert; +} + // private methods function findLineItemsWithPartType(typeToFind, itemsToSearch) { const partTypeMatches = itemsToSearch?.filter( @@ -291,27 +319,4 @@ function getPromoCodesFromPromoObjectsWithoutDuplicates(promos) { return promoCodes; } -function createPromoSuccessAlert(promoCode) { - return { - messageHeadline: "Promo applied!", - messageCopy: `Promo "${promoCode.toUpperCase()}" was successfully applied to your cart.`, - type: "alert-success", - isDismissible: true, - shouldAutoFade: true, - }; -} -function createPromoErrorAlert(promoCode, errorCode = null, additionalInfo) { - const alert = { - messageHeadline: "Promo error", - type: "alert-danger", - shouldAutoFade: false, - isDismissible: true, - }; - if (stackingPromoErrorCodes.includes(errorCode)) { - alert.messageCopy = `Sorry, promo code "${promoCode.toUpperCase()}" cannot be combined with "${additionalInfo[0].toUpperCase()}"`; - } else { - alert.messageCopy = `Sorry, promo code "${promoCode.toUpperCase()}" is not valid`; - } - return alert; -} diff --git a/src/layouts/payment-method/payment-method.vue b/src/layouts/payment-method/payment-method.vue index d32c03fdc..4ff2ef25f 100644 --- a/src/layouts/payment-method/payment-method.vue +++ b/src/layouts/payment-method/payment-method.vue @@ -96,6 +96,11 @@ import { revalidatePromosAndValidateQueryStringPromo, buildToastMessagesFromRevalidateOrValidatePromoResponse, getVapsThatNeedToBeAddedToSatisfyPromos, + getPromoCodeWithoutBundleIdentifier, + removeCurrentlyActivePromoCodesFromInactivePromos, + createPromoSuccessAlert, + createPromoErrorAlert, + getNewlyInactivatedPromos, } from "@/helpers/promotions-helper"; import { queryStrings } from "@/constants/query-strings"; import { getQuerystringParameter } from "@/helpers/querystring-helper"; @@ -219,6 +224,7 @@ export default { vm.setCmsContent(resultMap.cmsContent); vm.availableVaps = taxedVaps; vm.lineItems = lineItems; + vm.inactivePromos = removeCurrentlyActivePromoCodesFromInactivePromos(vm.lineItems.promos, vm.inactivePromos); vm.updateFooterButtonText(vm.customCtaCopy); if (revalidatePromoResponse) { @@ -334,17 +340,15 @@ export default { "payment-method", false ); - const revalidateAlerts = buildToastMessagesFromRevalidateOrValidatePromoResponse( - revalidatePromoResponse, - this.lineItems.promos, - this.inactivePromos - ); - revalidateAlerts.forEach((alert) => { - this.$refs.funnelHeader.pushGlobalAlert(alert, alert.shouldAutoFade); - }); - + // Handle error alerts here, success alerts are handled in the watcher + if (revalidatePromoResponse.errors.length) { + getNewlyInactivatedPromos(this.inactivePromos, revalidatePromoResponse.errors).forEach(promoCode => { + const errorAlert = createPromoErrorAlert(promoCode); + this.$refs.funnelHeader.pushGlobalAlert(errorAlert, errorAlert.shouldAutoFade); + }); + } this.lineItems.promos = revalidatePromoResponse.promoLineItems; - this.inactivePromos = revalidatePromoResponse.errors.map((x) => x.promoCode); + this.inactivePromos = revalidatePromoResponse.errors.map((x) => getPromoCodeWithoutBundleIdentifier(x.promoCode)); this.$refs.loadingModal.hideModal(); }, backButtonAction() { @@ -479,7 +483,15 @@ export default { ) { return; } - if (oldValue.vaps.length != newValue.vaps.length) { + if (oldValue.promos.length < newValue.promos.length) { + const oldPromoCodes = oldValue.promos.map(promoObject => promoObject.promoCode); + const newlyActivatedPromoCodes = newValue.promos.filter( + (newPromo) => !oldPromoCodes.includes(newPromo.promoCode) + ); + const alert = createPromoSuccessAlert(newlyActivatedPromoCodes[0].promoCode) + this.$refs.funnelHeader.pushGlobalAlert(alert, alert.shouldAutoFade); + } + else if (oldValue.promos.length == newValue.promos.length && oldValue.vaps.length != newValue.vaps.length) { this.revalidatePromos(); } }, diff --git a/src/store/index.js b/src/store/index.js index 941b65aca..22d70868d 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -1317,7 +1317,6 @@ export const actions = { }); syncLineItemIds(response.data, context.getters.order.lineItems.vaps); - return response; }, @@ -2349,6 +2348,7 @@ export const actions = { activePromosToUse = activePromosToUse ?? order.lineItems.promos; lineItemsToUse = lineItemsToUse ? deepClone(lineItemsToUse) : deepClone(order.lineItems); + addGuidToLineItemsIfNotAlreadyThere(lineItemsToUse.vaps); lineItemsToUse.promos = activePromosToUse; inactivePromosToUse = inactivePromosToUse ?? order.payment.inactivePromos; From e2c86d0516b094492d72d575957316db242bc2be Mon Sep 17 00:00:00 2001 From: Scott Kiener Date: Wed, 15 Nov 2023 11:13:51 -0500 Subject: [PATCH 10/15] CSR-1452 | Formatting --- src/helpers/promotions-helper.js | 24 ++++++++++------- src/layouts/payment-method/payment-method.vue | 26 ++++++++++++++----- 2 files changed, 34 insertions(+), 16 deletions(-) diff --git a/src/helpers/promotions-helper.js b/src/helpers/promotions-helper.js index 98ae47c95..b8b8f2b4e 100644 --- a/src/helpers/promotions-helper.js +++ b/src/helpers/promotions-helper.js @@ -173,7 +173,10 @@ export function buildToastMessagesFromRevalidateOrValidatePromoResponse( alerts.push(createPromoSuccessAlert(newlyActivatedPromoCode)); }); - const newlyInactivatedPromos = getNewlyInactivatedPromos(oldInactivePromos, promoResponse.errors); + const newlyInactivatedPromos = getNewlyInactivatedPromos( + oldInactivePromos, + promoResponse.errors + ); newlyInactivatedPromos.forEach((newlyInactivatedPromo) => { alerts.push(createPromoErrorAlert(newlyInactivatedPromo)); }); @@ -264,9 +267,8 @@ export function shouldStripPromoQueryString(fmgPageQueryValue) { } export function getNewlyInactivatedPromos(oldInactivePromos, newInactivePromos) { - const inactivePromoCodesFromResponse = getPromoCodesFromPromoObjectsWithoutDuplicates( - newInactivePromos - ); + const inactivePromoCodesFromResponse = + getPromoCodesFromPromoObjectsWithoutDuplicates(newInactivePromos); return inactivePromoCodesFromResponse.filter( (errorPromoCode) => !oldInactivePromos.includes(errorPromoCode) ); @@ -275,7 +277,9 @@ export function getNewlyInactivatedPromos(oldInactivePromos, newInactivePromos) export function createPromoSuccessAlert(promoCode) { return { messageHeadline: "Promo applied!", - messageCopy: `Promo "${getPromoCodeWithoutBundleIdentifier(promoCode.toUpperCase())}" was successfully applied to your cart.`, + messageCopy: `Promo "${getPromoCodeWithoutBundleIdentifier( + promoCode.toUpperCase() + )}" was successfully applied to your cart.`, type: "alert-success", isDismissible: true, shouldAutoFade: true, @@ -290,9 +294,13 @@ export function createPromoErrorAlert(promoCode, errorCode = null, additionalInf isDismissible: true, }; if (stackingPromoErrorCodes.includes(errorCode)) { - alert.messageCopy = `Sorry, promo code "${getPromoCodeWithoutBundleIdentifier(promoCode.toUpperCase())}" cannot be combined with "${additionalInfo[0].toUpperCase()}"`; + alert.messageCopy = `Sorry, promo code "${getPromoCodeWithoutBundleIdentifier( + promoCode.toUpperCase() + )}" cannot be combined with "${additionalInfo[0].toUpperCase()}"`; } else { - alert.messageCopy = `Sorry, promo code "${getPromoCodeWithoutBundleIdentifier(promoCode.toUpperCase())}" is not valid`; + alert.messageCopy = `Sorry, promo code "${getPromoCodeWithoutBundleIdentifier( + promoCode.toUpperCase() + )}" is not valid`; } return alert; } @@ -318,5 +326,3 @@ function getPromoCodesFromPromoObjectsWithoutDuplicates(promos) { return promoCodes; } - - diff --git a/src/layouts/payment-method/payment-method.vue b/src/layouts/payment-method/payment-method.vue index 0212b3f01..7cc4f4372 100644 --- a/src/layouts/payment-method/payment-method.vue +++ b/src/layouts/payment-method/payment-method.vue @@ -225,7 +225,10 @@ export default { vm.setCmsContent(resultMap.cmsContent); vm.availableVaps = taxedVaps; vm.lineItems = lineItems; - vm.inactivePromos = removeCurrentlyActivePromoCodesFromInactivePromos(vm.lineItems.promos, vm.inactivePromos); + vm.inactivePromos = removeCurrentlyActivePromoCodesFromInactivePromos( + vm.lineItems.promos, + vm.inactivePromos + ); vm.updateFooterButtonText(vm.customCtaCopy); if (revalidatePromoResponse) { @@ -343,13 +346,18 @@ export default { ); // Handle error alerts here, success alerts are handled in the watcher if (revalidatePromoResponse.errors.length) { - getNewlyInactivatedPromos(this.inactivePromos, revalidatePromoResponse.errors).forEach(promoCode => { + getNewlyInactivatedPromos( + this.inactivePromos, + revalidatePromoResponse.errors + ).forEach((promoCode) => { const errorAlert = createPromoErrorAlert(promoCode); this.$refs.funnelHeader.pushGlobalAlert(errorAlert, errorAlert.shouldAutoFade); }); } this.lineItems.promos = revalidatePromoResponse.promoLineItems; - this.inactivePromos = revalidatePromoResponse.errors.map((x) => getPromoCodeWithoutBundleIdentifier(x.promoCode)); + this.inactivePromos = revalidatePromoResponse.errors.map((x) => + getPromoCodeWithoutBundleIdentifier(x.promoCode) + ); this.$refs.loadingModal.hideModal(); }, backButtonAction() { @@ -484,14 +492,18 @@ export default { return; } if (oldValue.promos.length < newValue.promos.length) { - const oldPromoCodes = oldValue.promos.map(promoObject => promoObject.promoCode); + const oldPromoCodes = oldValue.promos.map( + (promoObject) => promoObject.promoCode + ); const newlyActivatedPromoCodes = newValue.promos.filter( (newPromo) => !oldPromoCodes.includes(newPromo.promoCode) ); - const alert = createPromoSuccessAlert(newlyActivatedPromoCodes[0].promoCode) + const alert = createPromoSuccessAlert(newlyActivatedPromoCodes[0].promoCode); this.$refs.funnelHeader.pushGlobalAlert(alert, alert.shouldAutoFade); - } - else if (oldValue.promos.length == newValue.promos.length && oldValue.vaps.length != newValue.vaps.length) { + } else if ( + oldValue.promos.length == newValue.promos.length && + oldValue.vaps.length != newValue.vaps.length + ) { this.revalidatePromos(); } }, From 12459ecc9701883cf241e2c68d20c59c6d00dd91 Mon Sep 17 00:00:00 2001 From: Matt Caimi Date: Wed, 15 Nov 2023 11:34:01 -0500 Subject: [PATCH 11/15] CSR-1391 combine like line items for pia --- src/layouts/payment/payment.vue | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/layouts/payment/payment.vue b/src/layouts/payment/payment.vue index 633723ae8..c66730541 100644 --- a/src/layouts/payment/payment.vue +++ b/src/layouts/payment/payment.vue @@ -509,17 +509,26 @@ export default { } }, getPiaLineItems() { - let itemsForPia = ""; + const itemMap = new Map(); const glassParts = store.getters.order.lineItems.glassParts; const supportingItems = store.getters.order.lineItems.supportingItems; const vaps = store.getters.order.lineItems.vaps; const items = [...(glassParts ?? []), ...(supportingItems ?? []), ...(vaps ?? [])]; - for (let i = 0; i < items.length; i++) { - const amount = items[i].laborAmount + items[i].sellingPrice; - itemsForPia += items[i].partType + "|" + amount + "|1|"; + for (const item of items) { + const amount = item.laborAmount + item.sellingPrice; + const key = `${item.partType}|${amount}`; + + if (itemMap.has(key)) { + itemMap.get(key).quantity++; + } else { + itemMap.set(key, { partType: item.partType, amount, quantity: 1 }); + } } - return itemsForPia; + + return Array.from(itemMap.values()) + .map((item) => `${item.partType}|${item.amount}|${item.quantity}`) + .join("||"); }, getAmountDue() { return baseMixin.methods.getAmountDue(store.getters.order.lineItems); From e9eccce1fe01aa49b3286d144ee28f254dd2017d Mon Sep 17 00:00:00 2001 From: Matt Caimi Date: Wed, 15 Nov 2023 11:35:45 -0500 Subject: [PATCH 12/15] removed comment --- src/layouts/payment/payment.vue | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/layouts/payment/payment.vue b/src/layouts/payment/payment.vue index c66730541..0cd632dc6 100644 --- a/src/layouts/payment/payment.vue +++ b/src/layouts/payment/payment.vue @@ -267,8 +267,6 @@ export default { "payment" ); - // TODO: Data fetching Promise declarations - const promiseResultMap = [ { resultKey: "cmsContent", From 6927e11e26b435a8899e6ee9d9b786355ae4478a Mon Sep 17 00:00:00 2001 From: Chloe Herd Date: Wed, 15 Nov 2023 12:47:58 -0500 Subject: [PATCH 13/15] Capture and don't propogate clicks on loader --- src/ux-components/loader/loader.vue | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/ux-components/loader/loader.vue b/src/ux-components/loader/loader.vue index f340dbe12..86903dd7d 100644 --- a/src/ux-components/loader/loader.vue +++ b/src/ux-components/loader/loader.vue @@ -3,6 +3,7 @@ class="loader" role="alert" aria-label="Loading new page" + @click="captureClick" v-bind:class="[ this.loaderColor, this.loaderPosition, @@ -30,6 +31,13 @@ export default { default: false, }, }, + methods: { + captureClick(event) { + if (!this.allowPageInteraction) { + event.stopPropagation(); + } + }, + }, }; From e49f41d1cd9574c4c75a1eac82a6387bc7b593f4 Mon Sep 17 00:00:00 2001 From: hiteshkumar87 Date: Thu, 16 Nov 2023 14:07:11 +0530 Subject: [PATCH 14/15] Update vehicle.vue Center align description text shown on YMMS page --- src/layouts/vehicle/vehicle.vue | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/layouts/vehicle/vehicle.vue b/src/layouts/vehicle/vehicle.vue index ea63eefcc..282133743 100644 --- a/src/layouts/vehicle/vehicle.vue +++ b/src/layouts/vehicle/vehicle.vue @@ -9,10 +9,6 @@
-
Date: Thu, 16 Nov 2023 14:08:58 +0530 Subject: [PATCH 15/15] focus on input --- src/layouts/payment-method/payment-method.vue | 1 - .../promo-modal-question/promo-modal-question.spec.js | 11 ----------- .../promo-modal-question/promo-modal-question.vue | 8 ++++++-- 3 files changed, 6 insertions(+), 14 deletions(-) diff --git a/src/layouts/payment-method/payment-method.vue b/src/layouts/payment-method/payment-method.vue index d672dbd06..ada14d27f 100644 --- a/src/layouts/payment-method/payment-method.vue +++ b/src/layouts/payment-method/payment-method.vue @@ -34,7 +34,6 @@ class="pb-3" v-model="lineItems" :availableVaps="availableVaps" - linkWidgetName="PromoLinkWidget" modalWidgetName="PromoModalWidget" />
diff --git a/src/layouts/payment-method/promo-modal-question/promo-modal-question.spec.js b/src/layouts/payment-method/promo-modal-question/promo-modal-question.spec.js index 3846a6bfd..94de72765 100644 --- a/src/layouts/payment-method/promo-modal-question/promo-modal-question.spec.js +++ b/src/layouts/payment-method/promo-modal-question/promo-modal-question.spec.js @@ -14,13 +14,8 @@ jest.mock("@/digital-components/modal/modal", () => ({ }, })); -const linkWidgetName = "linkWidgetName"; const modalWidgetName = "modalWidgetName"; -const mockLinkCmsContent = { - BodyText: "Sample link body text here.", -}; - const mockModalCmsContent = { FooterText: "Sample modal footer text here.", }; @@ -28,10 +23,6 @@ const mockModalCmsContent = { const mockMixin = { methods: { getCmsContent: jest.fn((widgetName, cmsFieldName) => { - if (widgetName === linkWidgetName) { - return mockLinkCmsContent[cmsFieldName]; - } - if (widgetName === modalWidgetName) { return mockModalCmsContent[cmsFieldName]; } @@ -48,7 +39,6 @@ describe("promo-modal-question.vue", () => { const wrapper = mount(promoModalQuestion, { mixins: [mockMixin], props: { - linkWidgetName: linkWidgetName, modalWidgetName: modalWidgetName, }, attachTo: document.body, @@ -74,7 +64,6 @@ describe("promo-modal-question.vue", () => { mixins: [mockMixin], props: { modelValue: lineItems, - linkWidgetName: linkWidgetName, modalWidgetName: modalWidgetName, }, attachTo: document.body, diff --git a/src/layouts/payment-method/promo-modal-question/promo-modal-question.vue b/src/layouts/payment-method/promo-modal-question/promo-modal-question.vue index deff594e5..1f9fc4a9a 100644 --- a/src/layouts/payment-method/promo-modal-question/promo-modal-question.vue +++ b/src/layouts/payment-method/promo-modal-question/promo-modal-question.vue @@ -10,12 +10,14 @@ :ref="modalName" :headerText="modalHeaderText" :onModalClosedCallback="onModalClosed" + :onModalOpenedCallback="focusOnPromoInput" :footerButtonText="modalFooterText" @footer-button-event="addPromoCode">