Merge pull request #1786 from Safelite/feature/CSR-1971
CSR-1971 | Re-work quote page promos
This commit is contained in:
commit
b842e5804f
2 changed files with 17 additions and 20 deletions
|
|
@ -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(
|
||||
|
|
|
|||
|
|
@ -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
|
||||
);
|
||||
|
|
|
|||
Loading…
Reference in a new issue