Merge pull request #1786 from Safelite/feature/CSR-1971

CSR-1971 | Re-work quote page promos
This commit is contained in:
scottkiener 2024-03-04 08:39:39 -05:00 committed by GitHub
commit b842e5804f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 17 additions and 20 deletions

View file

@ -99,7 +99,7 @@ export default {
props: {
modelValue: Object,
modalWidgetName: String,
availableVaps: Object,
addableVaps: Object,
pageName: String,
taxPromos: {
type: Boolean,
@ -186,14 +186,14 @@ export default {
resetModalButtonStyle() {
this.modal.resetButtonStyle();
},
async getPromoCodeData(promoCode, lineItems, availableVaps, pageNameToLog = null) {
async getPromoCodeData(promoCode, lineItems, addableVaps, pageNameToLog = null) {
const pageName = pageNameToLog ?? this.$options?.name;
const promoValidationResponse = await baseMixin.methods.dispatchStoreActionWithLogging(
storeActions.VALIDATE_ORDER_PROMO_AND_SAVE_SERVER_DATA,
{
promoCode: promoCode,
lineItemsToUse: lineItems,
addableVaps: availableVaps,
addableVaps: addableVaps,
},
pageName,
false
@ -258,7 +258,7 @@ export default {
const promoCodeData = await this.getPromoCodeData(
this.promoCode,
this.lineItems,
this.availableVaps,
this.addableVaps,
this.pageName
);
if (promoCodeData.isValid) {
@ -292,7 +292,7 @@ export default {
);
const taxedVaps = mapTaxedLineItemsToStoreFormat(
taxedLineItems,
this.availableVaps
this.addableVaps
);
const getVaps = getVapsThatNeedToBeAddedToSatisfyPromos(

View file

@ -29,7 +29,7 @@
:availableLineItems="availableLineItems"
:isInsuranceSelected="isInsuranceSelected"
@vapsItemsSelected="vapsItemsSelectedAction"
:activePromos="allActivePromos"
:activePromos="lineItems.promos"
v-on="{ 'buttonEvent.openModal': openModalAction }"
validationRules="option-required"
isRequired />
@ -42,7 +42,7 @@
<promoModalQuestion
class="small mt-4"
v-model="lineItems"
:availableVaps="availableVaps"
:addableVaps="addableVaps"
pageName="quote"
:taxPromos="false"
modalWidgetName="PromoModalWidget" />
@ -86,6 +86,7 @@ import baseMixin from "@/mixins/base-mixin.js";
import vehicleQuestionsMixin from "../../mixins/vehicle-questions-mixin";
import { settleAllPromises } from "@/helpers/layout-helper";
import { storeActions } from "@/constants/store-actions";
import { deepClone } from "@/helpers/object-helper";
import store from "@/store";
import { fetchCmsContentForPage } from "@/helpers/cms-content-helper";
import { required } from "@/helpers/validation-rules";
@ -149,7 +150,8 @@ export default {
];
const resultMap = await settleAllPromises(promiseResultMap);
const lineItems = store.getters.order.lineItems;
const lineItems = deepClone(store.getters.order.lineItems);
lineItems.vaps = lineItems.vaps ?? [];
const nullSafeGlassParts = lineItems.glassParts ?? [];
const availableLineItems = [
resultMap.rainDefense,
@ -172,30 +174,29 @@ export default {
resultMap.supportingItems,
false
);
lineItems.supportingItems = resultMap.supportingItems;
const addableVaps = [...resultMap.wipers, resultMap.rainDefense];
// Promo logic
// Populate the previous state of promos for toast message usage in "next()"
const availableVaps = [...resultMap.wipers, resultMap.rainDefense];
const oldActivePromos = store.getters.lineItems.promos?.slice(0);
const oldInactivePromos = store.getters.order.payment.inactivePromos?.slice(0);
const promoCodeFromQueryString = getQuerystringParameter(queryStrings.PROMO);
const { validatePromoResponse, revalidatePromoResponse } =
await revalidatePromosAndValidateQueryStringPromo(
promoCodeFromQueryString,
pricingResults,
"quote"
);
lineItems.glassParts = nullSafeGlassParts;
lineItems.promos = lineItems.promos ?? [];
lineItems.vaps = lineItems.vaps ?? [];
// Sync local promos with any new promos added by validate/revalidate
lineItems.promos = store.getters.lineItems.promos ?? [];
// End of promo logic
// Call the "next" function to complete the transition to this page.
next((vm) => {
vm.setCmsContent(resultMap.cmsContent);
vm.availableVaps = availableVaps;
vm.addableVaps = addableVaps;
vm.lineItems = lineItems;
vm.availableLineItems = pricingResults;
vm.isInsuranceSelected = vm.getDefaultIsInsuranceSelectedValue(vm.availableLineItems);
@ -225,13 +226,10 @@ export default {
isInsuranceSelected: null,
availableLineItems: null,
lineItems: [],
availableVaps: [],
addableVaps: [],
};
},
computed: {
allActivePromos() {
return this.lineItems.promos ?? [];
},
lineItemsCloneForWatcher() {
return Object.assign({}, this.lineItems);
},
@ -304,7 +302,7 @@ export default {
this.$store.getters.order.payment.parentAccountNumber !=
applicationConfig.CASH_PARENT_ACCOUNT_NUMBER
) {
this.supportingItems = this.filterOutFees(this.supportingItems);
this.lineItems.supportingItems = this.filterOutFees(this.lineItems.supportingItems);
}
if (this.lineItems.glassParts?.length > 0) {
@ -320,7 +318,6 @@ export default {
storeActions.SAVE_ACTIVE_AND_OR_INACTIVE_PROMOS,
{
activePromos: this.lineItems.promos,
inactivePromos: this.$store.getters.order.payment.inactivePromos,
},
false
);