Collate & Push info to data layer on confirmation enter

This commit is contained in:
Chloe Herd 2024-01-24 10:24:40 -05:00
parent 8ce1dd7d00
commit fe1376438e
2 changed files with 78 additions and 0 deletions

View file

@ -75,6 +75,7 @@ import cart from "@/fmg-components/cart/cart";
//Supporting files
import baseMixin from "@/mixins/base-mixin.js";
import analyticsMixin from "@/mixins/analytics-mixin";
import store from "@/store";
import { storeActions } from "@/constants/store-actions";
import { fetchCmsContentForPage } from "@/helpers/cms-content-helper";
@ -134,6 +135,7 @@ export default {
vm.setCmsContent(resultMap.cmsContent);
vm.lineItems = lineItemsFromSubmittedOrder;
vm.vaps = availableVaps;
analyticsMixin.methods.pushSubmittedOrderToDataLayer();
});
},
data() {

View file

@ -21,6 +21,7 @@ import {
GaEvents,
ValueToLogTypes,
} from "@/constants/analytics";
import { AppointmentTypeStrings } from "@/constants/schedule-constants";
import store from "@/store";
import baseMixin from "@/mixins/base-mixin";
@ -119,6 +120,81 @@ export default {
await this.logPageView(analyticsPageEvents.ENTRY);
},
pushSubmittedOrderToDataLayer() {
// check if submitted order exists; exit if not.
const hasSubmittedOrder = store.getters.hasSubmittedOrder;
if (!hasSubmittedOrder) {
return;
}
const order = store.getters.submittedOrder;
// assemble data for payload
// // reduce promocode array
const promos = order.lineItems.promos ?? [];
const promoString =
promos.length === 0 ? "" : promos.reduce((prev, next) => `${prev},${next}`);
// // reduce glass array
const glassToReplace = order.damage.glassToReplace ?? [];
const glassToReplaceNames = glassToReplace.map(
(glassPiece) => `${glassPiece.glassLocation}/${glassPiece.glassName}`
);
const glassString =
glassToReplaceNames.length === 0
? ""
: glassToReplaceNames.reduce((prev, next) => `${prev},${next}`);
// // calculate subtotal
const lineItems = order.lineItems;
const combinedLineItems = [
...(lineItems.glassParts ?? []),
...(lineItems.supportingItems ?? []),
...(lineItems.vaps ?? []),
...(lineItems.promos ?? []),
];
const subtotal = baseMixin.methods.getTotalPriceOfAllLineItemsAndChildParts(
combinedLineItems,
false
);
// // get correct zip code
const providerZip = order.serviceLocation.provider.address.zipCode;
const serviceZip =
order.serviceLocation.appointmentType === AppointmentTypeStrings.MOBILE
? order.serviceLocation.zipCode
: providerZip;
// // calculate total
const total = baseMixin.methods.getTotalPriceOfAllLineItemsAndChildParts(
combinedLineItems,
true
);
const payload = {
serviceZipCode: serviceZip,
damage: order.damage.isRepair ? "repair" : "replace",
accountType: order.payment.isInsurance ? "insurance" : "cash",
promoCodes: promoString,
vehicleYear: order.vehicle.year,
vehicleMake: order.vehicle.make,
vehicleModel: order.vehicle.model,
vehicleStyle: order.vehicle.style,
glassToReplace: glassString,
workOrderId: order.workOrderId,
providerCtu: order.serviceLocation.zipCodeCtu,
orderNumber: order.workOrderNumber,
priceTotal: total,
priceSubTotal: subtotal,
isRecalibrationOnOrder: store.getters.isRecalibrationOnSubmittedOrder,
appointmentType: order.serviceLocation.appointmentType,
};
// push to data layer.
pushToDataLayerIfDefined(payload);
},
pushExperimentsToDataLayer() {
const experiments = store.getters.applicationUser.experiments;
experiments?.forEach((exp) => {