Merge remote-tracking branch 'origin/develop' into feature/skiener/INSR-8540

This commit is contained in:
scottkiener-at-safelite 2026-04-21 15:08:37 -04:00
commit ffed366333
11 changed files with 63 additions and 15 deletions

View file

@ -0,0 +1,6 @@
const endorsementCodes_LibertyMutual = Object.freeze({
EDUCATOR: '001',
PARKING_GUARD: '003'
});
export default endorsementCodes_LibertyMutual;

View file

@ -526,13 +526,18 @@ export function doesCopyContainTextLink(copy) {
* *
* @param context * @param context
*/ */
export function setupModalLinks(context) { export function setupModalLinks(context, abortSignal = null) {
context.$nextTick(() => { context.$nextTick(() => {
const elements = document.getElementsByClassName('modal-text'); const elements = document.getElementsByClassName('modal-text');
for (const element of elements) { for (const element of elements) {
const target = element.getAttribute('modalTarget'); const target = element.getAttribute('modalTarget');
if (target) { if (target) {
element.addEventListener('click', () => context.$refs[target].openModal()); if (abortSignal) {
element.addEventListener('click', () => context.$refs[target].openModal(), { signal: abortSignal });
}
else {
element.addEventListener('click', () => context.$refs[target].openModal());
}
} }
} }
}); });

View file

@ -1,4 +1,5 @@
import endorsementOptions from '@/constants/endorsement-options'; import endorsementOptions from '@/constants/endorsement-options';
import endorsementCodes_LibertyMutual from '@/constants/endorsement-codes';
export function noCoverageForSelectedVehicle(vehicle) { export function noCoverageForSelectedVehicle(vehicle) {
return (vehicle?.coverages?.length ?? 0) === 0; return (vehicle?.coverages?.length ?? 0) === 0;
@ -18,6 +19,20 @@ export function endorsementsForSelectedVehicle(vehicle) {
} }
return []; return [];
} }
export function endorsementCodesForSelectedVehicle(vehicle) {
if (!Array.isArray(vehicle?.endorsements) || vehicle.endorsements.length === 0) {
return '';
}
let codes = [];
if (vehicle.endorsements.includes(endorsementOptions.EDUCATOR)) {
codes.push(endorsementCodes_LibertyMutual.EDUCATOR);
}
if (vehicle.endorsements.includes(endorsementOptions.PARKING_GUARD)) {
codes.push(endorsementCodes_LibertyMutual.PARKING_GUARD);
}
return codes.join(',');
}
export function repairWaivedForSelectedVehicle(vehicle) { export function repairWaivedForSelectedVehicle(vehicle) {
return vehicle?.endorsements?.includes(endorsementOptions.REPAIR_WAIVED) ?? false; return vehicle?.endorsements?.includes(endorsementOptions.REPAIR_WAIVED) ?? false;
} }

View file

@ -5,6 +5,11 @@ Object {
"CANCEL_CLAIM_REF_NAME": "CancelClaimModal", "CANCEL_CLAIM_REF_NAME": "CancelClaimModal",
"OEM_ENDORSEMENT_REF_NAME": "OEMModal", "OEM_ENDORSEMENT_REF_NAME": "OEMModal",
"RECAL_MODAL_REF_NAME": "RecalModal", "RECAL_MODAL_REF_NAME": "RecalModal",
"abortController": AbortController {
Symbol(SameObject caches): Object {
"signal": AbortSignal {},
},
},
"baseServiceLineItems": Array [], "baseServiceLineItems": Array [],
"isPageLoading": true, "isPageLoading": true,
"widget": Object { "widget": Object {

View file

@ -131,7 +131,6 @@ import recalModal from '@/iss-components/recal-modal/recal-modal.vue';
// Import Supporting Files // Import Supporting Files
import { import {
fetchCmsContentForPage, fetchCmsContentForPage,
setupModalLink,
setupModalLinks, setupModalLinks,
processIfStatements processIfStatements
} from '@/helpers/cms-content-helper.js'; } from '@/helpers/cms-content-helper.js';
@ -231,7 +230,8 @@ export default {
}, },
RECAL_MODAL_REF_NAME, RECAL_MODAL_REF_NAME,
CANCEL_CLAIM_REF_NAME, CANCEL_CLAIM_REF_NAME,
OEM_ENDORSEMENT_REF_NAME OEM_ENDORSEMENT_REF_NAME,
abortController: new AbortController()
}; };
}, },
computed: { computed: {
@ -367,8 +367,9 @@ export default {
watch: { watch: {
nextStepsBody(newValue, oldValue) { nextStepsBody(newValue, oldValue) {
if (newValue !== oldValue) { if (newValue !== oldValue) {
setupModalLink(this, RECAL_MODAL_REF_NAME); this.abortController.abort();
setupModalLink(this, OEM_ENDORSEMENT_REF_NAME); this.abortController = new AbortController();
setupModalLinks(this, this.abortController.signal);
} }
} }
}, },
@ -376,7 +377,7 @@ export default {
if (this.isPageLoading) { if (this.isPageLoading) {
showIssLoadingModal(true); showIssLoadingModal(true);
} }
setupModalLinks(this); setupModalLinks(this, this.abortController.signal);
}, },
methods: { methods: {
logEventsToGA() { logEventsToGA() {

View file

@ -441,7 +441,7 @@ describe('OrderConfirmation.vue', () => {
const testValue = wrapper.vm.appointmentTimeText; const testValue = wrapper.vm.appointmentTimeText;
// Assert // Assert
expect(testValue).toEqual('Drop off before 9:30 AM'); expect(testValue).toEqual('Drop off by 9:30 AM. Pick-up time dependent on shop schedule');
}); });
test.each([ test.each([
['Your appointment is at 9:00 AM', '09:00', '10:00'], ['Your appointment is at 9:00 AM', '09:00', '10:00'],

View file

@ -341,7 +341,7 @@ export default {
appointmentTimeText() { appointmentTimeText() {
const { startTime, endTime } = this.schedule; const { startTime, endTime } = this.schedule;
if (this.isDropOffAppointment) { if (this.isDropOffAppointment) {
return 'Drop off before 9:30 AM'; return 'Drop off by 9:30 AM. Pick-up time dependent on shop schedule';
} }
if (this.isInShopAppointment) { if (this.isInShopAppointment) {
const formattedStartTime = get12HourTimeFormat(startTime); const formattedStartTime = get12HourTimeFormat(startTime);

View file

@ -125,7 +125,8 @@ describe('policy-vehicles.vue', () => {
noCoverage: true, noCoverage: true,
deductible: 0, deductible: 0,
repairWaived: false, repairWaived: false,
endorsements: [] endorsements: [],
cvrgEndorsementCode: ""
}; };
// Act // Act
@ -180,7 +181,8 @@ describe('policy-vehicles.vue', () => {
noCoverage: true, noCoverage: true,
deductible: 0, deductible: 0,
repairWaived: false, repairWaived: false,
endorsements endorsements,
cvrgEndorsementCode: "001"
}; };
// Act // Act
@ -233,7 +235,8 @@ describe('policy-vehicles.vue', () => {
noCoverage: true, noCoverage: true,
deductible: 0, deductible: 0,
repairWaived: false, repairWaived: false,
endorsements endorsements,
cvrgEndorsementCode: "003"
}; };
// Act // Act

View file

@ -55,6 +55,7 @@ import { useMainStore } from '@/store/index.js';
import { import {
deductibleForSelectedVehicle, deductibleForSelectedVehicle,
endorsementsForSelectedVehicle, endorsementsForSelectedVehicle,
endorsementCodesForSelectedVehicle,
noCoverageForSelectedVehicle, noCoverageForSelectedVehicle,
repairWaivedForSelectedVehicle repairWaivedForSelectedVehicle
} from '@/helpers/policy-vehicle-helper'; } from '@/helpers/policy-vehicle-helper';
@ -132,6 +133,9 @@ export default {
endorsementsForSelectedVehicle() { endorsementsForSelectedVehicle() {
return endorsementsForSelectedVehicle(this.selectedPolicyVehicle); return endorsementsForSelectedVehicle(this.selectedPolicyVehicle);
}, },
endorsementCodesForSelectedVehicle() {
return endorsementCodesForSelectedVehicle(this.selectedPolicyVehicle);
},
repairWaivedForSelectedVehicle() { repairWaivedForSelectedVehicle() {
return repairWaivedForSelectedVehicle(this.selectedPolicyVehicle); return repairWaivedForSelectedVehicle(this.selectedPolicyVehicle);
} }
@ -201,7 +205,8 @@ export default {
noCoverage: this.noCoverageForSelectedVehicle, noCoverage: this.noCoverageForSelectedVehicle,
deductible: this.deductibleForSelectedVehicle, deductible: this.deductibleForSelectedVehicle,
repairWaived: this.repairWaivedForSelectedVehicle, repairWaived: this.repairWaivedForSelectedVehicle,
endorsements: this.endorsementsForSelectedVehicle endorsements: this.endorsementsForSelectedVehicle,
cvrgEndorsementCode: this.endorsementCodesForSelectedVehicle
}); });
this.navigateForward(); this.navigateForward();
} catch (e) { } catch (e) {

View file

@ -71,6 +71,7 @@ import siteSubHeader from '@/iss-components/site-sub-header/site-sub-header.vue'
import contentGroupModal from '@/iss-components/content-group-modal/content-group-modal.vue'; import contentGroupModal from '@/iss-components/content-group-modal/content-group-modal.vue';
import loadingModal from '@/iss-components/loading-modal/loading-modal.vue'; import loadingModal from '@/iss-components/loading-modal/loading-modal.vue';
import settleAllPromises from '@/helpers/layout-helper'; import settleAllPromises from '@/helpers/layout-helper';
import showIssLoadingModal from '@/helpers/loading-modal-helper';
import { useMainStore } from '@/store'; import { useMainStore } from '@/store';
import { fetchCmsContentForPage } from '@/helpers/cms-content-helper'; import { fetchCmsContentForPage } from '@/helpers/cms-content-helper';
import { Form } from 'vee-validate'; import { Form } from 'vee-validate';
@ -227,6 +228,7 @@ export default {
this.selectedPackageTier = packageTier; this.selectedPackageTier = packageTier;
}, },
forwardButtonAction() { forwardButtonAction() {
showIssLoadingModal(true);
const parts = { const parts = {
vaps: this.selectedVaps vaps: this.selectedVaps
}; };

View file

@ -4,6 +4,7 @@ import bailoutCode from '@/constants/bailoutCode';
import coverageStatuses from '@/constants/coverage-statuses'; import coverageStatuses from '@/constants/coverage-statuses';
import coverageType from '@/constants/coverage-type'; import coverageType from '@/constants/coverage-type';
import damageLocationsSelected from '@/constants/damage-locations-selected'; import damageLocationsSelected from '@/constants/damage-locations-selected';
import endorsementOptions from '@/constants/endorsement-options';
import endpoints from '@/constants/endpoints'; import endpoints from '@/constants/endpoints';
import { experimentSettings, experimentTriggers, experimentUniverses } from '@/constants/experiments'; import { experimentSettings, experimentTriggers, experimentUniverses } from '@/constants/experiments';
import partNumberStrings from '@/constants/part-number-strings'; import partNumberStrings from '@/constants/part-number-strings';
@ -17,7 +18,7 @@ import { convertDateStringToDate, getDateDifferenceInDays, militaryToTwelveHourT
import { getExperimentSettingValue, getFeatureTogglesPayloadObject } from '@/helpers/experiment-helper'; import { getExperimentSettingValue, getFeatureTogglesPayloadObject } from '@/helpers/experiment-helper';
import { findLineItemIndex, getLineItemsFlattened } from '@/helpers/line-items-helper'; import { findLineItemIndex, getLineItemsFlattened } from '@/helpers/line-items-helper';
import { import {
deductibleForSelectedVehicle, endorsementsForSelectedVehicle, deductibleForSelectedVehicle, endorsementsForSelectedVehicle, endorsementCodesForSelectedVehicle,
noCoverageForSelectedVehicle, noCoverageForSelectedVehicle,
repairWaivedForSelectedVehicle repairWaivedForSelectedVehicle
} from '@/helpers/policy-vehicle-helper'; } from '@/helpers/policy-vehicle-helper';
@ -109,6 +110,7 @@ export const getDefaultState = () => ({
vehicles: [], vehicles: [],
endorsements: [], endorsements: [],
endorsementQuestionAnswers: [], endorsementQuestionAnswers: [],
cvrgEndorsementCode: null,
status: null, status: null,
policyData: null policyData: null
}, },
@ -1469,7 +1471,9 @@ export const useMainStore = defineStore({
currentDeductible: this.currentDeductible, currentDeductible: this.currentDeductible,
OemEndorsement: this.hasOemEndorsement, OemEndorsement: this.hasOemEndorsement,
noCoverage: this.isNoComp, noCoverage: this.isNoComp,
isItac: this.isITAC isItac: this.isITAC,
cvrgEndorsementCode: policy.cvrgEndorsementCode ?? endorsementCodesForSelectedVehicle(vehicle),
endorsementQuestionAnswers: policy.endorsementQuestionAnswers
}, },
customer: { customer: {
address: { address: {
@ -2071,6 +2075,7 @@ export const useMainStore = defineStore({
this.order.policy.deductible.replace = coverage.deductible; this.order.policy.deductible.replace = coverage.deductible;
this.order.policy.deductible.repair = coverage?.repairWaived ?? false ? 0 : coverage.deductible; this.order.policy.deductible.repair = coverage?.repairWaived ?? false ? 0 : coverage.deductible;
this.order.policy.endorsements = coverage?.endorsements; this.order.policy.endorsements = coverage?.endorsements;
this.order.policy.cvrgEndorsementCode = coverage?.cvrgEndorsementCode;
this.order.originalDeductible.replace = this.order.policy.deductible.replace; this.order.originalDeductible.replace = this.order.policy.deductible.replace;
this.order.currentDeductible.replace = this.order.policy.deductible.replace; this.order.currentDeductible.replace = this.order.policy.deductible.replace;
@ -2112,6 +2117,7 @@ export const useMainStore = defineStore({
this.order.policy.vehicles = []; this.order.policy.vehicles = [];
this.order.policy.endorsements = []; this.order.policy.endorsements = [];
this.order.policy.endorsementQuestionAnswers = []; this.order.policy.endorsementQuestionAnswers = [];
this.order.policy.cvrgEndorsementCode = null;
this.order.policy.policyData = null; this.order.policy.policyData = null;
this.order.policy.deductible.repair = null; this.order.policy.deductible.repair = null;
this.order.policy.deductible.replace = null; this.order.policy.deductible.replace = null;