diff --git a/src/iss-components/shop-list-button/shop-list-button.vue b/src/iss-components/shop-list-button/shop-list-button.vue index f27cc3a5..74997b54 100644 --- a/src/iss-components/shop-list-button/shop-list-button.vue +++ b/src/iss-components/shop-list-button/shop-list-button.vue @@ -32,7 +32,8 @@ :allowPageInteraction="true" />
+ id="availabilityIndicator" + class="d-flex align-items-center">

@@ -33,7 +33,7 @@ import { splitCopyOnCMSPlaceHolder, getRouterLinkRouteFromCopy, getRouterLinkDisplayTextFromCopy, - getRouterLinkHtmlStringFromCopy, + getRouterLinkHtmlStringFromCopy } from '@/helpers/cms-content-helper'; import { stripRteStyle } from '@/helpers/text-helper'; @@ -51,7 +51,7 @@ export default { stripRteStyle: Boolean, subContentProperty: String, subHeaderClasses: String, - subTextClasses: String, + subTextClasses: String }, emits: ['click-event'], computed: { @@ -103,10 +103,10 @@ export default { alternateFormatting() { // override for service-packages unique style if (this.issContainingPage?.toLowerCase() === 'service-packages') { - return 'service-packages-subtext mt-4 mb-4 px-5'; + return 'service-packages-subtext my-4'; } return this.darkGraySubText ? 'dark-gray' : 'light-gray'; - }, + } }, methods: { doesCopyContainRouterLink, @@ -116,8 +116,8 @@ export default { getRouterLinkHtmlStringFromCopy, clickEvent() { this.$emit('click-event'); - }, - }, + } + } }; diff --git a/src/layouts/order-confirmation/order-confirmation.spec.js b/src/layouts/order-confirmation/order-confirmation.spec.js index 83ae6067..dca28fb8 100644 --- a/src/layouts/order-confirmation/order-confirmation.spec.js +++ b/src/layouts/order-confirmation/order-confirmation.spec.js @@ -72,7 +72,10 @@ const initialStore = { }, payment: { isInsurance: true, - isPayInAdvance: false + isPayInAdvance: false, + insuranceCoverage: { + isVerified: true + } }, contactInfo: { firstName: 'Test', @@ -108,7 +111,10 @@ const sessionStorage = { } }, payment: { - isPayInAdvance: false + isPayInAdvance: false, + insuranceCoverage: { + isVerified: true + } }, lineItems: { vaps: [] @@ -315,7 +321,10 @@ describe('OrderConfirmation.vue', () => { appointmentType: 'Mobile' }, payment: { - isPayInAdvance: false + isPayInAdvance: false, + insuranceCoverage: { + isVerified: true + } }, lineItems: { vaps: [] @@ -354,7 +363,10 @@ describe('OrderConfirmation.vue', () => { } }, payment: { - isPayInAdvance: false + isPayInAdvance: false, + insuranceCoverage: { + isVerified: true + } }, lineItems: { vaps: [] @@ -401,7 +413,10 @@ describe('OrderConfirmation.vue', () => { appointmentType: 'Mobile' }, payment: { - isPayInAdvance: false + isPayInAdvance: false, + insuranceCoverage: { + isVerified: true + } }, lineItems: { vaps: [] @@ -440,7 +455,10 @@ describe('OrderConfirmation.vue', () => { appointmentType: 'Dropoff' }, payment: { - isPayInAdvance: false + isPayInAdvance: false, + insuranceCoverage: { + isVerified: true + } }, lineItems: { vaps: [] @@ -479,7 +497,10 @@ describe('OrderConfirmation.vue', () => { appointmentType: 'Inshop' }, payment: { - isPayInAdvance: false + isPayInAdvance: false, + insuranceCoverage: { + isVerified: true + } }, lineItems: { vaps: [] @@ -515,7 +536,10 @@ describe('OrderConfirmation.vue', () => { appointmentType: 'Mobile' }, payment: { - isPayInAdvance: false + isPayInAdvance: false, + insuranceCoverage: { + isVerified: true + } }, lineItems: { vaps: [] @@ -554,7 +578,10 @@ describe('OrderConfirmation.vue', () => { appointmentType: 'Inshop' }, payment: { - isPayInAdvance: false + isPayInAdvance: false, + insuranceCoverage: { + isVerified: true + } }, lineItems: { vaps: [] @@ -590,7 +617,10 @@ describe('OrderConfirmation.vue', () => { appointmentType: 'Mobile' }, payment: { - isPayInAdvance: false + isPayInAdvance: false, + insuranceCoverage: { + isVerified: true + } }, lineItems: { vaps: [] @@ -629,7 +659,10 @@ describe('OrderConfirmation.vue', () => { appointmentType: 'Dropoff' }, payment: { - isPayInAdvance: false + isPayInAdvance: false, + insuranceCoverage: { + isVerified: true + } }, lineItems: { vaps: [] @@ -669,7 +702,10 @@ describe('OrderConfirmation.vue', () => { appointmentType: 'Inshop' }, payment: { - isPayInAdvance: false + isPayInAdvance: false, + insuranceCoverage: { + isVerified: true + } }, lineItems: { vaps: [] diff --git a/src/layouts/schedule-page/schedule-page.vue b/src/layouts/schedule-page/schedule-page.vue index e2d008f8..ee25c354 100644 --- a/src/layouts/schedule-page/schedule-page.vue +++ b/src/layouts/schedule-page/schedule-page.vue @@ -90,16 +90,16 @@ import { AppointmentTypeStrings, GET_MOBILE_TIME_SLOTS, GET_SHOP_TIME_SLOTS, - PREMIUM_FEE_PART_TYPE, + PREMIUM_FEE_PART_TYPE } from '@/constants/schedule-constants.js'; import { fetchCmsContentForPage, - splitCopyOnCMSPlaceHolder, + splitCopyOnCMSPlaceHolder } from '@/helpers/cms-content-helper'; import { calcDaysBetweenDates, convertDateStringToDate, - sumDateString, + sumDateString } from '@/helpers/date-helper'; import settleAllPromises from '@/helpers/layout-helper'; import { Form, defineRule } from 'vee-validate'; @@ -156,16 +156,16 @@ const getAvailableDates = async ( } if ( - appointmentType === AppointmentTypeStrings.MOBILE || - appointmentType === - AppointmentTypeStrings.MOBILE_NOT_ITAC_AND_NOT_NOCOMP + appointmentType === AppointmentTypeStrings.MOBILE + || appointmentType + === AppointmentTypeStrings.MOBILE_NOT_ITAC_AND_NOT_NOCOMP ) { storeActionConfig = { storeAction: GET_MOBILE_TIME_SLOTS, payload: { startDate: apiStartDate, - endDate: apiEndDate, - }, + endDate: apiEndDate + } }; } else { storeActionConfig = { @@ -174,16 +174,15 @@ const getAvailableDates = async ( startDate: apiStartDate, endDate: apiEndDate, shopAppointmentType: appointmentType, - providerNumber, - }, + providerNumber + } }; } - if (apiStartDate < apiEndDate) - storeActionConfigs.push(storeActionConfig); + if (apiStartDate < apiEndDate) storeActionConfigs.push(storeActionConfig); } const timeSlotsResponsesData = { - days: [], + days: [] }; function compareDayStrings(a, b) { @@ -193,33 +192,31 @@ const getAvailableDates = async ( } const makeParallelCalls = async () => { - await Promise.all( - storeActionConfigs.map(async (storeAction) => { - let timeSlotsResponse = null; - if (storeAction.storeAction === GET_SHOP_TIME_SLOTS) { - timeSlotsResponse = await useMainStore().getShopTimeSlots( - storeAction.payload.startDate, - storeAction.payload.endDate, - storeAction.payload.shopAppointmentType, - storeAction.payload.providerNumber - ); - } else { - timeSlotsResponse = await useMainStore().getMobileTimeSlots( - storeAction.payload.startDate, - storeAction.payload.endDate - ); - } + await Promise.all(storeActionConfigs.map(async (storeAction) => { + let timeSlotsResponse = null; + if (storeAction.storeAction === GET_SHOP_TIME_SLOTS) { + timeSlotsResponse = await useMainStore().getShopTimeSlots( + storeAction.payload.startDate, + storeAction.payload.endDate, + storeAction.payload.shopAppointmentType, + storeAction.payload.providerNumber + ); + } else { + timeSlotsResponse = await useMainStore().getMobileTimeSlots( + storeAction.payload.startDate, + storeAction.payload.endDate + ); + } - timeSlotsResponsesData.estimatedServiceMinutesMinimum = + timeSlotsResponsesData.estimatedServiceMinutesMinimum = timeSlotsResponse.data.estimatedServiceMinutesMinimum; - timeSlotsResponsesData.estimatedServiceMinutesMaximum = + timeSlotsResponsesData.estimatedServiceMinutesMaximum = timeSlotsResponse.data.estimatedServiceMinutesMaximum; - timeSlotsResponsesData.days = [ - ...timeSlotsResponsesData.days, - ...timeSlotsResponse.data.days, - ]; - }) - ); + timeSlotsResponsesData.days = [ + ...timeSlotsResponsesData.days, + ...timeSlotsResponse.data.days + ]; + })); }; return makeParallelCalls().then(() => { @@ -240,7 +237,7 @@ export default { siteFooter, textBlock, // eslint-disable-next-line vue/no-reserved-component-names - Form, + Form }, mixins: [BaseFormMixin], async beforeRouteEnter(to, from, next) { @@ -257,7 +254,7 @@ export default { selectableDatesSetting: 'custom', initialViewRowsToShow: 5, customSelectableDatesCallback: getAvailableDates, - preSelectedDate, + preSelectedDate }); const premiumFeePromise = useMainStore().getMobilePremiumFee(); @@ -278,29 +275,27 @@ export default { const promiseResultMap = [ { resultKey: 'cmsContent', - promise: cmsContentPromise, + promise: cmsContentPromise }, { resultKey: 'alertReasons', - promise: alertReasonsPromise, + promise: alertReasonsPromise }, { resultKey: 'datePickerInitialData', - promise: datePickerInitialDataPromise, + promise: datePickerInitialDataPromise }, { resultKey: 'premiumFeeWithPrice', - promise: premiumFeeWithPricePromise, - }, + promise: premiumFeeWithPricePromise + } ]; // use resultMap to populate layout content. const resultMap = await settleAllPromises(promiseResultMap); next((vm) => { vm.setCmsContent(resultMap.cmsContent); - vm.$refs.datePicker.initializeComponent( - resultMap.datePickerInitialData - ); + vm.$refs.datePicker.initializeComponent(resultMap.datePickerInitialData); vm.$refs.locationAlerts.initializeComponent(resultMap.alertReasons); vm.setData( resultMap.datePickerInitialData.initialShopTimeSlotsResponse, @@ -318,7 +313,7 @@ export default { selectedDate: this.getSelectedDate(), selectedTimeSlotInfo: this.getSelectedTimeSlotInfo(), selectableDatesData: [], - mobilePremiumAppointmentFee: null, + mobilePremiumAppointmentFee: null }; }, computed: { @@ -336,13 +331,11 @@ export default { return null; } - return this.selectableDatesData.days?.find( - (selectableDate) => selectableDate.date === this.selectedDate - ); + return this.selectableDatesData.days?.find((selectableDate) => selectableDate.date === this.selectedDate); }, supportingItems() { return useMainStore().lineItems.supportingItems; - }, + } }, watch: { selectedDate(newValue, oldValue) { @@ -355,34 +348,34 @@ export default { startTime: null, endTime: null, jobMaxMinutes: null, - jobMinMinutes: null, + jobMinMinutes: null }, - isPremiumAppointment: null, + isPremiumAppointment: null }; } }, selectedTimeSlotInfo(newValue) { this.updateFooterButtonText(newValue); - }, + } }, methods: { splitCopyOnCMSPlaceHolder, arePagePrerequisitesValid() { const { serviceLocation } = useMainStore().order; const serviceLocationPreReqs = - serviceLocation.zipCode && - serviceLocation.zipCodeCtu && - serviceLocation.appointmentType && - (serviceLocation.appointmentType === - AppointmentTypeStrings.MOBILE || - serviceLocation.appointmentType === - AppointmentTypeStrings.MOBILE_NOT_ITAC_AND_NOT_NOCOMP || - serviceLocation.provider.providerNumber); + serviceLocation.zipCode + && serviceLocation.zipCodeCtu + && serviceLocation.appointmentType + && (serviceLocation.appointmentType + === AppointmentTypeStrings.MOBILE + || serviceLocation.appointmentType + === AppointmentTypeStrings.MOBILE_NOT_ITAC_AND_NOT_NOCOMP + || serviceLocation.provider.providerNumber); const supportingItems = this.supportingItems !== null; const damageInfo = - useMainStore().order.damage.isRepair || - (useMainStore().order.lineItems?.glassParts != null && - useMainStore().order.lineItems.glassParts.length > 0); + useMainStore().order.damage.isRepair + || (useMainStore().order.lineItems?.glassParts != null + && useMainStore().order.lineItems.glassParts.length > 0); return serviceLocationPreReqs && supportingItems && damageInfo; }, @@ -417,15 +410,13 @@ export default { getSelectedTimeSlotInfo() { const isPremiumAppointment = !!( - this.supportingItems?.filter( - (lineItem) => - lineItem.partType === PREMIUM_FEE_PART_TYPE - ) ?? [] + this.supportingItems?.filter((lineItem) => + lineItem.partType === PREMIUM_FEE_PART_TYPE) ?? [] ).length > 0; const selectedTimeSlotInfo = { timeSlot: this.mainStore.order.schedule, - isPremiumAppointment, + isPremiumAppointment }; return selectedTimeSlotInfo; @@ -441,16 +432,12 @@ export default { if (!timeSlotInfo || !timeSlotInfo.timeSlot.date) { navbarButtonText = 'Continue'; } else { - navbarButtonText = `Select ${this.convertSelectedDateToShortMonthAndDay( - timeSlotInfo.timeSlot.date - )}`; + navbarButtonText = `Select ${this.convertSelectedDateToShortMonthAndDay(timeSlotInfo.timeSlot.date)}`; if (this.appointmentType === AppointmentTypeStrings.IN_SHOP) { - navbarButtonText += ` at ${this.getDisplayTextForMilitaryTime( - timeSlotInfo.timeSlot.startTime - )}`; + navbarButtonText += ` at ${this.getDisplayTextForMilitaryTime(timeSlotInfo.timeSlot.startTime)}`; } else if ( - this.appointmentType === AppointmentTypeStrings.MOBILE && - !timeSlotInfo.isPremiumAppointment + this.appointmentType === AppointmentTypeStrings.MOBILE + && !timeSlotInfo.isPremiumAppointment ) { navbarButtonText += ` at ${this.getDisplayTextForMilitaryTime( timeSlotInfo.timeSlot.startTime, @@ -468,7 +455,7 @@ export default { const dateObject = convertDateStringToDate(selectedDate); return dateObject.toLocaleDateString('en-us', { month: 'short', - day: 'numeric', + day: 'numeric' }); }, getDisplayTextForMilitaryTime( @@ -496,8 +483,8 @@ export default { this.navigationScenarios.CLICKED_FORWARD, this.$route ); - }, - }, + } + } }; diff --git a/src/layouts/service-packages/service-packages.vue b/src/layouts/service-packages/service-packages.vue index 2858d855..37879fd5 100644 --- a/src/layouts/service-packages/service-packages.vue +++ b/src/layouts/service-packages/service-packages.vue @@ -13,6 +13,7 @@
- + @@ -44,7 +47,9 @@ - +
@@ -80,7 +85,7 @@ export default { Form, servicePackageQuestion, loadingModal, - contentGroupModal, + contentGroupModal }, mixins: [baseFormMixin], async beforeRouteEnter(to, from, next) { @@ -93,20 +98,20 @@ export default { const promiseResultMap = [ { resultKey: 'cmsContent', - promise: cmsContentPromise, + promise: cmsContentPromise }, { resultKey: 'wipers', - promise: wipersPromise, + promise: wipersPromise }, { resultKey: 'rainDefense', - promise: rainDefensePromise, + promise: rainDefensePromise }, { resultKey: 'supportingItems', - promise: supportingItemsPromise, - }, + promise: supportingItemsPromise + } ]; const resultMap = await settleAllPromises(promiseResultMap); @@ -117,19 +122,17 @@ export default { resultMap.rainDefense, ...resultMap.supportingItems, ...resultMap.wipers, - ...clonedGlassParts, + ...clonedGlassParts ]; let hasBailedOut = false; const pricingResults = await store .getPriceOrderItems(availableLineItems) .catch((err) => { - useMainStore().setBailout( - bailoutMessage.pricingResponseError( - availableLineItems.map((li) => li.partNumber), - { code: err.code, message: err.message, data: err.data } - ) - ); + useMainStore().setBailout(bailoutMessage.pricingResponseError( + availableLineItems.map((li) => li.partNumber), + { code: err.code, message: err.message, data: err.data } + )); hasBailedOut = true; next(`/?issPage=${issPageValues.BAILOUT_PAGE}`); }); @@ -155,17 +158,17 @@ export default { 'Looking for dates', 'Searching for times', 'Nearly there', - 'Finishing up', + 'Finishing up' ], rules: { - optionRequired: globalRules.OPTION_REQUIRED, - }, + optionRequired: globalRules.OPTION_REQUIRED + } }; }, computed: { PriceDisclaimerText() { return this.getCmsContent('PriceDisclaimerWidget', 'Text'); - }, + } }, methods: { openModalAction(modalName) { @@ -173,11 +176,11 @@ export default { }, arePagePrerequisitesValid() { return ( - store.order.serviceLocation.zipCode && - store.order.serviceLocation.zipCodeCtu && - (store.order.damage.isRepair || - (store.order.lineItems?.glassParts != null && - store.order.lineItems.glassParts.length > 0)) + store.order.serviceLocation.zipCode + && store.order.serviceLocation.zipCodeCtu + && (store.order.damage.isRepair + || (store.order.lineItems?.glassParts != null + && store.order.lineItems.glassParts.length > 0)) ); }, vapsItemsSelectedAction(vapsItemsSelected) { @@ -187,12 +190,10 @@ export default { const parts = { glassParts: this.pricedGlassParts, supportingItems: this.supportingItems, - vaps: this.selectedVaps, + vaps: this.selectedVaps }; if (!allGlassPartsAndItemsHavePrices(parts)) { - window.console.error( - 'One or more items have no price assigned!' - ); + window.console.error('One or more items have no price assigned!'); } if (this.pricedGlassParts.length > 0) { store.updateGlassParts(this.pricedGlassParts); @@ -204,8 +205,8 @@ export default { this.navigationScenarios.CLICKED_FORWARD, this.$route ); - }, - }, + } + } }; diff --git a/src/layouts/vehicle-damage/vehicle-damage.vue b/src/layouts/vehicle-damage/vehicle-damage.vue index a8ae5494..7e37cb1a 100644 --- a/src/layouts/vehicle-damage/vehicle-damage.vue +++ b/src/layouts/vehicle-damage/vehicle-damage.vue @@ -522,12 +522,6 @@ export default { flex: 0 auto; } } -.damage-location-question { - span { - font-size: 1.25rem; - font-weight: 400; - } -} .button-question, .windshield-damage-type-question, .damage-location-question { diff --git a/src/layouts/welcome-page/welcome-page.vue b/src/layouts/welcome-page/welcome-page.vue index c07763a4..5ef4090d 100644 --- a/src/layouts/welcome-page/welcome-page.vue +++ b/src/layouts/welcome-page/welcome-page.vue @@ -11,7 +11,7 @@
-
+
@@ -24,7 +24,7 @@ disableAutoFill :isDisabled="isPolicyHolderDisabled" :validationRules="rules.policyNumber" - class="mb-3" /> + class="mt-5" /> + class="mt-3" /> + class="mt-3" /> + class="mt-2" /> + class="mt-3" /> + class="mt-3" /> + class="mt-3" /> -
+
+ set to display: flex and height 100dvh or height 100% -->
@@ -161,7 +163,7 @@ import footerImage from '@/iss-components/site-footer/footer-image/footer-image. import { fetchCmsContentForPage, fetchGlobalCmsContent, - updateCmsSiteHeader, + updateCmsSiteHeader } from '@/helpers/cms-content-helper'; import settleAllPromises from '@/helpers/layout-helper'; import { required } from '@/helpers/validation-rules'; @@ -194,7 +196,7 @@ export default { siteFooter, textBlock, // eslint-disable-next-line vue/no-reserved-component-names - Form, + Form }, mixins: [BaseFormMixin], async beforeRouteEnter(to, from, next) { @@ -207,12 +209,12 @@ export default { const promiseResultMap = [ { resultKey: 'cmsContent', - promise: cmsContentPromise, + promise: cmsContentPromise }, { resultKey: 'globalSiteHeaderCmsContent', - promise: cmsGlobalSiteHeaderContentPromise, - }, + promise: cmsGlobalSiteHeaderContentPromise + } ]; // use resultMap to populate layout content. @@ -244,8 +246,8 @@ export default { lossState: `${globalRules.DATE_OF_LOSS_STATE_REQUIRED}`, policyNumber: `${globalRules.POLICY_NUMBER_REQUIRED}|${globalRules.POLICY_NUMBER_FORMAT}`, policyZip: `${globalRules.POLICY_ZIP_REQUIRED}|${globalRules.POLICY_ZIP_FORMAT}`, - phoneNumber: `${globalRules.PHONE_NUMBER_REQUIRED}|${globalRules.PHONE_NUMBER_FORMAT}`, - }, + phoneNumber: `${globalRules.PHONE_NUMBER_REQUIRED}|${globalRules.PHONE_NUMBER_FORMAT}` + } }; }, computed: { @@ -300,7 +302,7 @@ export default { }, phoneMask() { return MaskaFormattedMasks.PHONE_NUMBER; - }, + } }, methods: { async forwardButtonAction() { @@ -335,8 +337,8 @@ export default { ) .finally(async () => { if ( - this.isCoverageEnabled && - !this.maxCoverageLookupAttemptsReached + this.isCoverageEnabled + && !this.maxCoverageLookupAttemptsReached ) { await this.mainStore .getCoveragePolicyInfo() @@ -362,29 +364,24 @@ export default { providerNumber: providerNumber.toString(), billToSelectionCriteria: { typeOfClaim: 'GLASS ONLY', - lineOfBusiness: 'PERSONAL', - }, + lineOfBusiness: 'PERSONAL' + } }; const response = await globalMethods.callHttpClient({ method: endpoints.GetBillToInfo.method, endpoint: endpoints.GetBillToInfo.url, - payload, + payload }); return response.data; } catch (err) { - console.error( - `Error Status Code: ${err.data?.status}: ${err.data?.title}` - ); + console.error(`Error Status Code: ${err.data?.status}: ${err.data?.title}`); return null; } }, navigateForward() { - if ( - this.mainStore.applicationUser.duplicateOrders?.length > 0 ?? - false - ) { + if (this.mainStore.applicationUser.duplicateOrders?.length > 0 ?? false) { this.$router.navigate( this.navigationScenarios.CLICKED_FORWARD_WITH_DUPLICATES, this.$route, @@ -429,15 +426,13 @@ export default { damageCause: this.mainStore.order.policy.damageCause, damageState: this.mainStore.order.policy.damageState, damageCity: this.mainStore.order.policy.damageCity, - isDamageGlassOnly: - this.mainStore.order.policy.isDamageGlassOnly, + isDamageGlassOnly: this.mainStore.order.policy.isDamageGlassOnly, phoneNumber: this.mainStore.order.contactInfo.homePhone, email: this.mainStore.order.customer.emailAddress, - isPolicyNumberDisabled: - this.mainStore.order.policy.isPolicyNumberDisabled, + isPolicyNumberDisabled: this.mainStore.order.policy.isPolicyNumberDisabled }; - }, - }, + } + } }; diff --git a/src/ux-components/loader/loader.vue b/src/ux-components/loader/loader.vue index 1783c626..0da0b359 100644 --- a/src/ux-components/loader/loader.vue +++ b/src/ux-components/loader/loader.vue @@ -45,7 +45,7 @@ export default { display: flex; //Open an overlay to prevent page interaction - &:before:not(.date-picker-hidden) { + &:before { content: ""; position: fixed; top: 0; @@ -56,6 +56,13 @@ export default { z-index: 9999; cursor: default; } + + &.date-picker-hidden { + &:before { + content: none; + } + } + //Spinner basics &:after { content: "";