From 2cf558c18fc248e04b2492eea22c3c2fd0ad1300 Mon Sep 17 00:00:00 2001 From: Alex Humphries Date: Wed, 1 Apr 2026 11:18:05 -0400 Subject: [PATCH 1/4] Add events to vehicle-damage, vin-lookup, and license-plate-lookup --- .../license-plate-lookup.vue | 17 ++++- src/layouts/vehicle-damage/vehicle-damage.vue | 72 +++++++++++++++++++ .../vin-location-information.vue | 4 ++ src/layouts/vin-lookup/vin-lookup.vue | 24 ++++++- src/mixins/analytics-mixin.js | 8 ++- 5 files changed, 120 insertions(+), 5 deletions(-) diff --git a/src/layouts/license-plate-lookup/license-plate-lookup.vue b/src/layouts/license-plate-lookup/license-plate-lookup.vue index 32203b5c..86796e10 100644 --- a/src/layouts/license-plate-lookup/license-plate-lookup.vue +++ b/src/layouts/license-plate-lookup/license-plate-lookup.vue @@ -3,7 +3,7 @@ ref="theForm" v-slot="{ meta }" @submit="onSubmit" - @invalidSubmit="onInvalidSubmit"> + @invalidSubmit="customInvalidSubmit">
@@ -251,12 +251,15 @@ export default { if (vinLookupResponse.error) { this.displayVinNotFoundAlert = true; this.previouslyEnteredCarId = null; + this.pushEventToGA("VehicleDamage", "LicensePlate_NoMatch", "Trouble_Finding", true, null, '0'); showIssLoadingModal(false); return this.$refs.siteFooter.disableForwardButton(); } // Vehicle found from VIN lookup const vehicleFromLookup = vinLookupResponse.data.vehicle; + const vehicleString = vehicleFromLookup.year + '_' + vehicleFromLookup.make + '_' + vehicleFromLookup.model + '_' + vehicleFromLookup.style; + this.pushEventToGA("VehicleDamage", "LicensePlate_Vin_Match", vehicleString, true, null, '1'); if (!vehicleFromLookup.canSafeliteService) { this.mainStore.setBailout({ type: 'HeavyTruckVehicle', @@ -321,6 +324,18 @@ export default { resetWarningsAndErrors() { this.displayVinNotFoundAlert = false; this.displayMatchedDifferentVehicleAlert = false; + }, + customInvalidSubmit({ errors }) { + if (errors.length > 0) { + const licensePlateError = errors.find( + (error) => error.field === 'license-plate-question' + ); + + if (licensePlateError) { + this.pushEventToGA("VehicleDamage", "LicensePlate_NoMatch", "Plate_Required", true, null, '0'); + } + } + this.onInvalidSubmit({ errors }); } } }; diff --git a/src/layouts/vehicle-damage/vehicle-damage.vue b/src/layouts/vehicle-damage/vehicle-damage.vue index 47f7463d..82adfde4 100644 --- a/src/layouts/vehicle-damage/vehicle-damage.vue +++ b/src/layouts/vehicle-damage/vehicle-damage.vue @@ -412,6 +412,8 @@ export default { this.selectedWindshieldOptions.selectedWindshieldChipCount ); + this.logEvents(); + if (this.isWindshieldRepair) { const results = await Promise.allSettled([useMainStore().getSupportingItems(), useMainStore().getRecalParts()]); const supportingItems = results[0].value; @@ -481,6 +483,76 @@ export default { } return selectedGlassToReplace; + }, + logEvents() { + const vehicleString = this.mainStore.order.vehicle.make + '_' + this.mainStore.order.vehicle.model + '_' + this.mainStore.order.vehicle.style; + this.pushEventToGA("CAR SUBMISSION", this.mainStore.order.vehicle.year.toString(), vehicleString, true, null, 0); + + if (this.isWindshieldRepair) { + this.pushEventToGA("damage", "selected", "repair", true, null, null); + this.pushEventToGA("VehicleDamage", "Repair", this.mainStore.damage.numberOfChips.toString(), true, null, this.mainStore.damage.numberOfChips); + } else { + this.pushEventToGA("damage", "selected", "replace", true, null, null); + this.selectedGlassToReplace().forEach((glass) => { + this.logEventForPart(glass); + }); + } + }, + logEventForPart(glass) { + let eventGlassLocation = ''; + let eventGlassName = ''; + switch (glass.glassLocation) { + case damageLocationsSelected.WINDSHIELD: + eventGlassLocation = 'Windshield Replace'; + break; + case damageLocationsSelected.DRIVERSIDE: + eventGlassLocation = "Driver's Side"; + break; + case damageLocationsSelected.PASSENGERSIDE: + eventGlassLocation = "Passenger's Side"; + break; + case damageLocationsSelected.REAR: + eventGlassLocation = 'Back Glass'; + break; + default: + eventGlassLocation = glass.glassLocation; + } + + switch (glass.glassName) { + // Windshield options + case damageLocationsSelected.DRIVER: + eventGlassName = "Left piece"; + break; + case damageLocationsSelected.PASSENGER: + eventGlassName = "Right piece"; + break; + // Bottom two cases here are for rear options, but they are handled the same as single windshield + case damageLocationsSelected.SINGLE: + case damageLocationsSelected.STATIONARY: + case damageLocationsSelected.SLIDER: + eventGlassName = ''; + break; + // Side door options + case damageLocationsSelected.FRONT: + eventGlassName = "Front door"; + break; + case damageLocationsSelected.BACK: + eventGlassName = "Rear door"; + break; + case damageLocationsSelected.QUARTER: + eventGlassName = "Quarter"; + break; + case damageLocationsSelected.VENT: + eventGlassName = "Vent"; + break; + case damageLocationsSelected.SIDEDOOR: + eventGlassName = "Sliding door"; + break; + default: + eventGlassName = glass.glassName; + } + const label = eventGlassName ? `${eventGlassLocation} - ${eventGlassName}` : eventGlassLocation; + this.pushEventToGA("VehicleDamage", "Replacement", label, true, null, 1); } } }; diff --git a/src/layouts/vin-lookup/vin-location-information/vin-location-information.vue b/src/layouts/vin-lookup/vin-location-information/vin-location-information.vue index 7bc12729..b462e860 100644 --- a/src/layouts/vin-lookup/vin-location-information/vin-location-information.vue +++ b/src/layouts/vin-lookup/vin-location-information/vin-location-information.vue @@ -38,6 +38,7 @@ export default { isVinLocationDetailVisible: false }; }, + emits: ['vin-location-detail-shown'], computed: { textForToggle() { return this.getCmsContent('WhereCanIFindMyVINToggle', 'HeaderText'); @@ -52,6 +53,9 @@ export default { methods: { handleClickToggle() { this.isVinLocationDetailVisible = !this.isVinLocationDetailVisible; + if (this.isVinLocationDetailVisible) { + this.$emit('vin-location-detail-shown'); + } } } }; diff --git a/src/layouts/vin-lookup/vin-lookup.vue b/src/layouts/vin-lookup/vin-lookup.vue index a2efafc8..493683df 100644 --- a/src/layouts/vin-lookup/vin-lookup.vue +++ b/src/layouts/vin-lookup/vin-lookup.vue @@ -16,11 +16,12 @@ class="mt-4" /> - + Date: Wed, 1 Apr 2026 11:32:10 -0400 Subject: [PATCH 2/4] Remove console.log --- src/mixins/analytics-mixin.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/mixins/analytics-mixin.js b/src/mixins/analytics-mixin.js index c43f8bd7..cfe48753 100644 --- a/src/mixins/analytics-mixin.js +++ b/src/mixins/analytics-mixin.js @@ -96,8 +96,6 @@ export default { const currentPageName = this.getPageNameByQueryString(); const labelToLog = getValueToLog(label, valueToLogType); - console.log(`Pushing event to GA: category=${category}, action=${action}, label=${labelToLog}, value=${value}`); - const eventToBePushed = { event: GaEvents.GENERIC_EVENT, category, From 19c7d41b6273132fb2d04e7b4cde4cfafb4cad6c Mon Sep 17 00:00:00 2001 From: Alex Humphries Date: Wed, 1 Apr 2026 13:43:30 -0400 Subject: [PATCH 3/4] INSR-8879: Various fixes - Fixed some cases for events for specific parts - Fixed error handling/detection in license plate lookup and vin lookup --- .../license-plate-lookup/license-plate-lookup.vue | 10 ++-------- src/layouts/vehicle-damage/vehicle-damage.vue | 4 ++-- src/layouts/vin-lookup/vin-lookup.vue | 7 +------ src/layouts/vin-lookup/vin-question/vin-question.vue | 4 ++++ 4 files changed, 9 insertions(+), 16 deletions(-) diff --git a/src/layouts/license-plate-lookup/license-plate-lookup.vue b/src/layouts/license-plate-lookup/license-plate-lookup.vue index 86796e10..aeb58dcb 100644 --- a/src/layouts/license-plate-lookup/license-plate-lookup.vue +++ b/src/layouts/license-plate-lookup/license-plate-lookup.vue @@ -326,14 +326,8 @@ export default { this.displayMatchedDifferentVehicleAlert = false; }, customInvalidSubmit({ errors }) { - if (errors.length > 0) { - const licensePlateError = errors.find( - (error) => error.field === 'license-plate-question' - ); - - if (licensePlateError) { - this.pushEventToGA("VehicleDamage", "LicensePlate_NoMatch", "Plate_Required", true, null, '0'); - } + if (errors['license-plate-question']) { + this.pushEventToGA("VehicleDamage", "LicensePlate_NoMatch", "Plate_Required", true, null, '0'); } this.onInvalidSubmit({ errors }); } diff --git a/src/layouts/vehicle-damage/vehicle-damage.vue b/src/layouts/vehicle-damage/vehicle-damage.vue index 82adfde4..08e41a09 100644 --- a/src/layouts/vehicle-damage/vehicle-damage.vue +++ b/src/layouts/vehicle-damage/vehicle-damage.vue @@ -505,10 +505,10 @@ export default { case damageLocationsSelected.WINDSHIELD: eventGlassLocation = 'Windshield Replace'; break; - case damageLocationsSelected.DRIVERSIDE: + case damageLocationsSelected.DRIVER: eventGlassLocation = "Driver's Side"; break; - case damageLocationsSelected.PASSENGERSIDE: + case damageLocationsSelected.PASSENGER: eventGlassLocation = "Passenger's Side"; break; case damageLocationsSelected.REAR: diff --git a/src/layouts/vin-lookup/vin-lookup.vue b/src/layouts/vin-lookup/vin-lookup.vue index 493683df..af598359 100644 --- a/src/layouts/vin-lookup/vin-lookup.vue +++ b/src/layouts/vin-lookup/vin-lookup.vue @@ -291,12 +291,7 @@ export default { this.vehicleFromLookup = null; }, checkVinForErrors() { - const vinQuestionComponent = this.$refs['vin-question']; - if (vinQuestionComponent) { - const errorElement = vinQuestionComponent.$el.querySelector('.form-test-error'); - return errorElement && errorElement.checkVisibility(); - } - return false; + return this.$refs['vin-question'].hasErrors; }, resetDependentState() {} } diff --git a/src/layouts/vin-lookup/vin-question/vin-question.vue b/src/layouts/vin-lookup/vin-question/vin-question.vue index e3553229..8b7c730e 100644 --- a/src/layouts/vin-lookup/vin-question/vin-question.vue +++ b/src/layouts/vin-lookup/vin-question/vin-question.vue @@ -1,6 +1,7 @@