diff --git a/src/constants/application-config.js b/src/constants/application-config.js index 7799506f..1e5ee6d8 100644 --- a/src/constants/application-config.js +++ b/src/constants/application-config.js @@ -23,7 +23,10 @@ const applicationConfig = Object.freeze({ YAHOO_CALENDAR: 'https://calendar.yahoo.com/?v=60', OUTLOOK_CALENDAR: 'https://outlook.office.com/calendar/deeplink/compose?path=/calendar/action/compose&rru=addevent', - FRONTEND_LOGGER_PATH: "/analytics/api/v1/logging" + FRONTEND_LOGGER_PATH: "/analytics/api/v1/logging", + BAILOUT_ON_APPLICATION_ERROR: true, + BAILOUT_ON_API_ERROR: true, + BAILOUT_ON_ROUTER_ERROR: true }); export default applicationConfig; diff --git a/src/constants/bailoutCode.js b/src/constants/bailoutCode.js index fb1ac071..f108570a 100644 --- a/src/constants/bailoutCode.js +++ b/src/constants/bailoutCode.js @@ -12,7 +12,10 @@ const bailoutCode = Object.freeze({ NoPartsAvailable: 10, PartsServiceError: 11, SafeliteNotTheProvider: 12, - VehicleYMMSLookupError: 13 + VehicleYMMSLookupError: 13, + ApplicationError: 14, + ApiError: 15, + RouterError: 16 }); export default bailoutCode; diff --git a/src/constants/bailoutMessage.js b/src/constants/bailoutMessage.js index 1daa702e..77292a1e 100644 --- a/src/constants/bailoutMessage.js +++ b/src/constants/bailoutMessage.js @@ -17,6 +17,18 @@ const bailoutMessage = Object.freeze({ code: bailoutCode.Unknown, message: `An unknown bailout occurred: ${getItemData(error)}` }), + applicationError: (error) => ({ + code: bailoutCode.ApplicationError, + message: `An application error occurred: ${getItemData(error)}` + }), + apiError: (error) => ({ + code: bailoutCode.ApiError, + message: `An API error occurred: ${getItemData(error)}` + }), + routerError: (error) => ({ + code: bailoutCode.RouterError, + message: `A router error occurred: ${getItemData(error)}` + }), saveSessionError: (error) => ({ code: bailoutCode.SaveSessionError, message: `An error occurred during save session: ${getItemData(error)}` diff --git a/src/digital-components/button-question/button-question.vue b/src/digital-components/button-question/button-question.vue index 4dabb09a..7ab57e82 100644 --- a/src/digital-components/button-question/button-question.vue +++ b/src/digital-components/button-question/button-question.vue @@ -127,6 +127,7 @@ export default { isOverflowScrollable: Boolean, isWide: Boolean, isCashOrInsurance: Boolean, + isHorizontalLayout: Boolean, modelValue: [Array, Number, String], value: [Number, String], validationRules: String, @@ -211,7 +212,10 @@ export default { classes = 'ui-radio d-flex'; break; case 'servicePackageRadio': - classes = 'package-main'; + classes = 'package-main d-flex flex-column'; + if (this.isHorizontalLayout) { + classes += ' flex-md-row gap-3'; + } break; case 'providerPrefRadio': classes = 'option-main'; @@ -231,6 +235,9 @@ export default { break; case 'servicePackageRadio': classes = 'package-wrapper'; + if (this.isHorizontalLayout) { + classes += ' flex-grow-0 flex-shrink-0'; + } break; case 'providerPrefRadio': classes = 'option-wrapper'; @@ -325,6 +332,12 @@ export default { diff --git a/src/layouts/service-packages/service-package-question/service-package-radio/service-package-radio.vue b/src/layouts/service-packages/service-package-question/service-package-radio/service-package-radio.vue index 3a035bf4..5951d611 100644 --- a/src/layouts/service-packages/service-package-question/service-package-radio/service-package-radio.vue +++ b/src/layouts/service-packages/service-package-question/service-package-radio/service-package-radio.vue @@ -7,18 +7,24 @@ :class="[buttonLabelSubCopy ? 'has-subheader' : '']" for="testradio">
-
-

- +

+
+

+ +

+

+

+
+
-

-

-

+
    @@ -53,10 +59,16 @@ + class="package-footer fw-bold caption mt-4 mr-3" + v-html="buttonFooterCopy"> +
+
+ +
@@ -111,6 +123,7 @@ export default { diff --git a/src/layouts/tpa-search/tpa-search.spec.js b/src/layouts/tpa-search/tpa-search.spec.js index 1562635b..a888e60f 100644 --- a/src/layouts/tpa-search/tpa-search.spec.js +++ b/src/layouts/tpa-search/tpa-search.spec.js @@ -355,7 +355,7 @@ describe('tpa-search.vue', () => { // Assert expect(result.length).toBe(1); - expect(result[0].title).toBe('test shop'); + expect(result[0].title).toBe('Test Shop'); expect(result[0].addressLines.length).toBe(2); }); @@ -395,7 +395,7 @@ describe('tpa-search.vue', () => { // Assert expect(result.length).toBe(1); - expect(result[0].buttonLabel).toBe('auto glass shop'); + expect(result[0].buttonLabel).toBe('Auto Glass Shop'); expect(result[0].buttonLabelSubCopy).toBe('5.8 mi'); expect(result[0].value).toBe('12345'); }); @@ -616,7 +616,7 @@ describe('tpa-search.vue', () => { const result = wrapper.vm.getShopButtonDataFromProvider(provider); // Assert - expect(result.buttonLabel).toBe('test shop'); + expect(result.buttonLabel).toBe('Test Shop'); expect(result.buttonLabelSubCopy).toBe('5.8 mi'); expect(result.value).toBe('12345'); expect(result.buttonBodyCopy).toContain('
'); diff --git a/src/layouts/tpa-search/tpa-search.vue b/src/layouts/tpa-search/tpa-search.vue index 37748faf..99241b1f 100644 --- a/src/layouts/tpa-search/tpa-search.vue +++ b/src/layouts/tpa-search/tpa-search.vue @@ -265,7 +265,7 @@ export default { }, providerAddresses() { return this.radiusFilteredAndCappedProviders?.map((provider) => ({ - title: provider.companyName.toLowerCase(), + title: toTitleCase(provider.companyName), fullAddress: this.getFullProviderAddress(provider), addressLines: [this.getProviderAddress(provider), this.getProviderCityZipState(provider)] })) ?? []; @@ -395,7 +395,7 @@ export default { : null; return { - buttonLabel: provider?.companyName.toLowerCase() ?? '', + buttonLabel: toTitleCase(provider?.companyName) ?? '', buttonLabelSubCopy: distance === null ? '' : `${distance} mi`, buttonBodyCopy: `${this.getFullProviderAddress(provider)}
${ cellNumber ?? '' diff --git a/src/layouts/vehicle-damage/vehicle-damage.spec.js b/src/layouts/vehicle-damage/vehicle-damage.spec.js index 42c4ed6b..db8ae50d 100644 --- a/src/layouts/vehicle-damage/vehicle-damage.spec.js +++ b/src/layouts/vehicle-damage/vehicle-damage.spec.js @@ -5,6 +5,7 @@ import routerParams from '@/router/router-constants/router-params'; import { useMainStore } from '@/store'; import vehicleCategories from '@/constants/vehicle-categories'; import VehicleDamageComponent from '@/layouts/vehicle-damage/vehicle-damage.vue'; +import vehicleQuestionsMixin from '@/mixins/vehicle-questions-mixin'; const mockRoute = { params: {} @@ -12,6 +13,16 @@ const mockRoute = { const mockRouter = { navigate: jest.fn() }; +jest.mock('@/mixins/vehicle-questions-mixin', () => ({ + methods: { + navigateForward: jest.fn(), + getPartsOrQuestions: jest.fn(() => Promise.resolve({ + data: { + partsOrQuestions: [] + } + })) + } +})); const mountOptions = { global: { mixins: [ @@ -91,6 +102,43 @@ describe('vehicle-damage.vue', () => { expect(mockRouter.navigate) .toHaveBeenCalledWith(navigationScenarios.CLICKED_FORWARD_WITH_REPAIR, mockRoute); }); + test('When damage selected is a replace but not windshield, navigate forward from vehicle-questions-mixin', async () => { + mountOptions.global.plugins = [createTestingPinia({ + initialState: { + main: { + order: { + damage: { + isRepair: false, + glassToReplace: [{ glassLocation: 'Rear', glassName: 'Stationary' }] + } + } + } + } + })]; + const wrapper = mount(VehicleDamageComponent, mountOptions); + const siteFooterWrapper = wrapper.getComponent({ ref: 'siteFooter' }); + + useMainStore().getSupportingItems = jest.fn().mockImplementation(() => Promise.resolve({ + data: { data: [ + { + description: null, + partNumber: 'SUPPLIES-REPAIR', + partType: 'REPAIR FEE' + }, + { + description: null, + partNumber: 'WSREPAIR', + partType: 'REPAIR FEE' + } + ] } + })); + + siteFooterWrapper.vm.$emit('forwardClicked'); + + await flushPromises(); + expect(vehicleQuestionsMixin.methods.getPartsOrQuestions).toHaveBeenCalledTimes(1); + expect(vehicleQuestionsMixin.methods.navigateForward).toHaveBeenCalledTimes(1); + }); test('Error in getPartsOrQuestions call => bailout true and navigate forward with CLICKED_FORWARD_WITH_BAILOUT scenario', async () => { mountOptions.global.plugins = [createTestingPinia({ initialState: { @@ -115,7 +163,7 @@ describe('vehicle-damage.vue', () => { const partsQuestionsErrorResponse = { error: 'Error getting parts' }; - useMainStore().getPartsOrQuestions = jest.fn().mockImplementation(() => ( + vehicleQuestionsMixin.methods.getPartsOrQuestions.mockImplementation(() => ( partsQuestionsErrorResponse )); siteFooterWrapper.vm.$emit('forwardClicked'); diff --git a/src/layouts/vehicle-damage/vehicle-damage.vue b/src/layouts/vehicle-damage/vehicle-damage.vue index 265ad56a..b486f90e 100644 --- a/src/layouts/vehicle-damage/vehicle-damage.vue +++ b/src/layouts/vehicle-damage/vehicle-damage.vue @@ -216,6 +216,13 @@ export default { === damageLocationsSelected.REPAIR ); }, + isWindshieldReplace() { + return ( + this.isWindshieldDamageLocation + && this.selectedWindshieldOptions.selectedWindshieldDamageType + === damageLocationsSelected.REPLACE + ); + }, isDriverSideReplace() { if (!this.isSideDoorDamageLocation) return false; @@ -418,8 +425,8 @@ export default { this.navigationScenarios.CLICKED_FORWARD_WITH_REPAIR, this.$route ); - } else if (this.mainStore.order.vehicle.vin) { - // If vin already exists, navigate directly to vin-lookup + } else if (this.mainStore.order.vehicle.vin || !this.isWindshieldReplace) { + // If vin already exists or not replacing windshield, get parts/questions and navigate forward const partsOrQuestionsResponse = await this.getPartsOrQuestions(); if (partsOrQuestionsResponse.error) { diff --git a/src/layouts/vehicle-lookup/vin-lookup-methods/vin-lookup-methods.vue b/src/layouts/vehicle-lookup/vin-lookup-methods/vin-lookup-methods.vue index 633dc865..fa5868aa 100644 --- a/src/layouts/vehicle-lookup/vin-lookup-methods/vin-lookup-methods.vue +++ b/src/layouts/vehicle-lookup/vin-lookup-methods/vin-lookup-methods.vue @@ -62,7 +62,8 @@ export default { const answers = this.getCmsContent(this.cmsWidgetName, 'Answers'); if (Array.isArray(answers)) { if (!isVinbyAddressPermissible) { - answers.splice(answers.indexOf(vinLookupMethodSelections.HOMEADDRESS), 1); + const homeAddressIndex = answers.findIndex(answer => answer.Name === vinLookupMethodSelections.HOMEADDRESS); + answers.splice(homeAddressIndex, 1); } this.answersFromCms = answers; } diff --git a/src/layouts/vehicle-parts/vehicle-parts.spec.js b/src/layouts/vehicle-parts/vehicle-parts.spec.js index e05f2298..909bf57c 100644 --- a/src/layouts/vehicle-parts/vehicle-parts.spec.js +++ b/src/layouts/vehicle-parts/vehicle-parts.spec.js @@ -212,6 +212,7 @@ describe('vehicle-parts.vue', () => { test('User had part questions > navigateBack triggers a router.navigateWithoutSaving change with correct scenario', async () => { // Arrange + useMainStore().damage.glassToReplace = [{ glassLocation: 'Rear', glassName: 'Stationary' }, { glassLocation: 'Windshield', glassName: 'Single' }]; const { wrapper } = setupMocks({ mountOptionsMockData: { router: { @@ -244,6 +245,7 @@ describe('vehicle-parts.vue', () => { test('User did not have part questions > navigateBack triggers a router.navigate change with correct scenario', async () => { // Arrange + useMainStore().damage.glassToReplace = [{ glassLocation: 'Rear', glassName: 'Stationary' }, { glassLocation: 'Windshield', glassName: 'Single' }]; const { wrapper } = setupMocks({ mountOptionsMockData: { router: { diff --git a/src/layouts/vin-lookup/vin-lookup.vue b/src/layouts/vin-lookup/vin-lookup.vue index 66bc41a9..3bb0d637 100644 --- a/src/layouts/vin-lookup/vin-lookup.vue +++ b/src/layouts/vin-lookup/vin-lookup.vue @@ -14,8 +14,6 @@ - + { const pageName = getPageName(vm); - global.$logger.logError( - `Page Name - ${pageName} - ${info}: ${err.message}\n${err.stack}` - ); + global.$logger.logError(`Page Name - ${pageName} - ${info}: ${err.message}\n${err.stack}`); + if (applicationConfig.BAILOUT_ON_APPLICATION_ERROR) { + router.navigateBailout(bailoutMessage.applicationError(`[${pageName}] ${info}: ${err.message}\n${err.stack}`)); + } }; // Vue Router Error Handling router.onError((err) => { global.$logger.logError(err.message, err.cause); + if (applicationConfig.BAILOUT_ON_ROUTER_ERROR) { + router.navigateBailout(bailoutMessage.routerError(`${err.message}\n${err.stack}`)); + } }); + +global.bailoutOnAxiosError = (error) => { + if (applicationConfig.BAILOUT_ON_API_ERROR) { + router.navigateBailout(bailoutMessage.apiError(error)); + } +} + vueApp.mount('#app'); // define global rules diff --git a/src/mixins/vehicle-questions-mixin.js b/src/mixins/vehicle-questions-mixin.js index b92bb837..d5c492d8 100644 --- a/src/mixins/vehicle-questions-mixin.js +++ b/src/mixins/vehicle-questions-mixin.js @@ -1,3 +1,4 @@ +import { includesWindshieldReplacement } from '@/helpers/damage-helper'; import issPageValues from '@/router/router-constants/issPage-values'; import navigationScenarios from '@/router/router-constants/navigation-scenarios'; import { useMainStore } from '@/store'; @@ -457,6 +458,8 @@ export default { let backNavigationScenario = ''; if (self.mainStore.order.damage.isRepair) { backNavigationScenario = navigationScenarios.CLICKED_BACK_WITH_REPAIR; + } else if (!includesWindshieldReplacement()) { + backNavigationScenario = navigationScenarios.CLICKED_BACK_WITH_SKIP_VIN_AND_NO_MORE_QUESTIONS; } else { backNavigationScenario = self.mainStore.vehicle.vin ? navigationScenarios.CLICKED_BACK_WITH_VIN_AND_NO_MORE_QUESTIONS diff --git a/src/mixins/vehicle-questions-mixin.spec.js b/src/mixins/vehicle-questions-mixin.spec.js index 5efde63c..a878e09f 100644 --- a/src/mixins/vehicle-questions-mixin.spec.js +++ b/src/mixins/vehicle-questions-mixin.spec.js @@ -3,7 +3,7 @@ import { shallowMount } from '@vue/test-utils'; import { setupMocksForJsFiles, getMountOptions } from '@/helpers/unit-test-helper.js'; import issPageValues from '@/router/router-constants/issPage-values'; import navigationScenarios from '@/router/router-constants/navigation-scenarios'; -import { useMainStore } from '@/store'; +import { useMainStore, getDefaultState } from '@/store'; /** @ignore */ function setupMocks({ issPage = issPageValues.VIN_LOOKUP }) { @@ -53,6 +53,7 @@ function setupMocks({ issPage = issPageValues.VIN_LOOKUP }) { describe('vehicle-questions-mixin', () => { afterEach(() => { jest.clearAllMocks(); + useMainStore().order = getDefaultState().order; }); describe('hasPartQuestions', () => { @@ -2181,19 +2182,83 @@ describe('vehicle-questions-mixin', () => { }); describe('navigateBackByVehicleQuestions', () => { - test('current page is coverage-statement and damage is repair => go to vehicle-damage', () => { - // Arrange - const { wrapper } = setupMocks({ issPage: issPageValues.COVERAGE_STATEMENT }); - useMainStore().order.damage.isRepair = true; + describe('current page is coverage-statement', () => { + test('damage is repair => go to vehicle-damage', () => { + // Arrange + const { wrapper } = setupMocks({ issPage: issPageValues.COVERAGE_STATEMENT }); + useMainStore().order.damage.isRepair = true; - // Act - wrapper.vm.navigateBackByVehicleQuestions(); + // Act + wrapper.vm.navigateBackByVehicleQuestions(); - // Assert - expect(wrapper.vm.$router.navigateWithSpinner).toHaveBeenCalledWith( - navigationScenarios.CLICKED_BACK_WITH_REPAIR, - { query: { issPage: issPageValues.COVERAGE_STATEMENT } } - ); + // Assert + expect(wrapper.vm.$router.navigateWithSpinner).toHaveBeenCalledWith( + navigationScenarios.CLICKED_BACK_WITH_REPAIR, + { query: { issPage: issPageValues.COVERAGE_STATEMENT } } + ); + }); + test('damage is replace but not windshield => go to vehicle-damage', () => { + // Arrange + const { wrapper } = setupMocks({ issPage: issPageValues.COVERAGE_STATEMENT }); + useMainStore().order.damage.isRepair = false; + useMainStore().order.damage.glassToReplace = [{ glassLocation: 'Rear', glassName: 'Stationary' }]; + + // Act + wrapper.vm.navigateBackByVehicleQuestions(); + + // Assert + expect(wrapper.vm.$router.navigateWithSpinner).toHaveBeenCalledWith( + navigationScenarios.CLICKED_BACK_WITH_SKIP_VIN_AND_NO_MORE_QUESTIONS, + { query: { issPage: issPageValues.COVERAGE_STATEMENT } } + ); + }); + test('damage is replace and includes windshield, we have vin => go to vehicle-damage', () => { + // Arrange + const { wrapper } = setupMocks({ issPage: issPageValues.COVERAGE_STATEMENT }); + useMainStore().order.damage.isRepair = false; + useMainStore().order.damage.glassToReplace = [{ glassLocation: 'Rear', glassName: 'Stationary' }, { glassLocation: 'Windshield', glassName: 'Single' }]; + useMainStore().order.vehicle.vin = '5NMS3CADXLH233004'; + + // Act + wrapper.vm.navigateBackByVehicleQuestions(); + + // Assert + expect(wrapper.vm.$router.navigateWithSpinner).toHaveBeenCalledWith( + navigationScenarios.CLICKED_BACK_WITH_VIN_AND_NO_MORE_QUESTIONS, + { query: { issPage: issPageValues.COVERAGE_STATEMENT } } + ); + }); + test('damage is replace and includes windshield => go to vehicle-lookup', () => { + // Arrange + const { wrapper } = setupMocks({ issPage: issPageValues.COVERAGE_STATEMENT }); + useMainStore().order.damage.isRepair = false; + useMainStore().order.damage.glassToReplace = [{ glassLocation: 'Rear', glassName: 'Stationary' }, { glassLocation: 'Windshield', glassName: 'Single' }]; + + // Act + wrapper.vm.navigateBackByVehicleQuestions(); + + // Assert + expect(wrapper.vm.$router.navigateWithSpinner).toHaveBeenCalledWith( + navigationScenarios.CLICKED_BACK_WITH_NO_VIN_NOR_QUESTIONS, + { query: { issPage: issPageValues.COVERAGE_STATEMENT } } + ); + }); + test('damage is replace and includes windshield but there are parts to choose => go to vehicle-parts', () => { + // Arrange + const { wrapper } = setupMocks({ issPage: issPageValues.COVERAGE_STATEMENT }); + useMainStore().order.damage.isRepair = false; + useMainStore().order.damage.glassToReplace = [{ glassLocation: 'Rear', glassName: 'Stationary' }, { glassLocation: 'Windshield', glassName: 'Single' }]; + wrapper.vm.hasGlassLocationWithMultipleParts = jest.fn().mockReturnValue(true); + + // Act + wrapper.vm.navigateBackByVehicleQuestions(); + + // Assert + expect(wrapper.vm.$router.navigateWithSpinner).toHaveBeenCalledWith( + navigationScenarios.CLICKED_BACK_WITH_MULTIPLE_PARTS_TO_CHOOSE, + { query: { issPage: issPageValues.COVERAGE_STATEMENT } } + ); + }); }); test( diff --git a/src/router/index.js b/src/router/index.js index b611694f..cd77544f 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -281,7 +281,10 @@ function navigate( } // Match our maps up and navigate if we have a destination. - const matchingScenarioMap = getNavigationMap(scenario, currentRoute); + let matchingScenarioMap = getNavigationMap(scenario, currentRoute); + if (!matchingScenarioMap && scenario === navigationScenarios.BAILOUT) { + matchingScenarioMap = { destinationIssPageValue: issPageValues.BAILOUT_PAGE } + } if (!matchingScenarioMap) { window.console.error('No matching scenario found. Please review the routing table.'); @@ -332,6 +335,18 @@ function navigateToUrl(url, optionalQuery = {}) { window.location.assign(externalUrl); } +router.navigateBailout = (bailoutData = null) => { + if (bailoutData != null && !useMainStore().isBailout) { + useMainStore().setBailout(bailoutData) + } + router.navigate( + navigationScenarios.BAILOUT, + router.currentRoute.value, + {}, + { [routerParams.SKIP_SAVE_SESSION]: true } + ); +} + // Get navigation map depending on the scenario and the current 'page' you're on. function getNavigationMap(scenario, currentRoute) { const issPageValue = currentRoute.query.issPage; diff --git a/src/router/router-constants/navigation-scenarios.js b/src/router/router-constants/navigation-scenarios.js index 6f17494d..f0603b96 100644 --- a/src/router/router-constants/navigation-scenarios.js +++ b/src/router/router-constants/navigation-scenarios.js @@ -61,6 +61,7 @@ const navigationScenarios = Object.freeze({ CLICKED_BACK_WITH_MOLDING_QUESTIONS: 'CLICKED_BACK_WITH_MOLDING_QUESTIONS', CLICKED_BACK_WITH_CAPABILITY_QUESTIONS: 'CLICKED_BACK_WITH_CAPABILITY_QUESTIONS', CLICKED_BACK_WITH_VIN_AND_NO_MORE_QUESTIONS: 'CLICKED_BACK_WITH_VIN_AND_NO_MORE_QUESTIONS', + CLICKED_BACK_WITH_SKIP_VIN_AND_NO_MORE_QUESTIONS: 'CLICKED_BACK_WITH_SKIP_VIN_AND_NO_MORE_QUESTIONS', CLICKED_BACK_WITH_NO_VIN_NOR_QUESTIONS: 'CLICKED_BACK_WITH_NO_VIN_NOR_QUESTIONS', // Schedule @@ -113,6 +114,7 @@ const navigationScenarios = Object.freeze({ // Bailout CLICKED_FORWARD_WITH_BAILOUT: 'CLICKED_FORWARD_WITH_BAILOUT', CLICKED_NEED_HELP_WITH_BAILOUT: 'CLICKED_NEED_HELP_WITH_BAILOUT', + BAILOUT: 'BAILOUT' }); export default navigationScenarios; diff --git a/src/router/router-constants/routing-table.js b/src/router/router-constants/routing-table.js index b8bb2318..3751060c 100644 --- a/src/router/router-constants/routing-table.js +++ b/src/router/router-constants/routing-table.js @@ -192,6 +192,10 @@ const routingTable = () => [ scenario: navigationScenarios.CLICKED_BACK_WITH_VIN_AND_NO_MORE_QUESTIONS, destinationIssPageValue: issPageValues.VEHICLE_DAMAGE }, + { + scenario: navigationScenarios.CLICKED_BACK_WITH_SKIP_VIN_AND_NO_MORE_QUESTIONS, + destinationIssPageValue: issPageValues.VEHICLE_DAMAGE + }, { scenario: navigationScenarios.CLICKED_BACK_WITH_NO_VIN_NOR_QUESTIONS, destinationIssPageValue: issPageValues.VEHICLE_LOOKUP @@ -233,6 +237,10 @@ const routingTable = () => [ scenario: navigationScenarios.CLICKED_BACK_WITH_VIN_AND_NO_MORE_QUESTIONS, destinationIssPageValue: issPageValues.VEHICLE_DAMAGE }, + { + scenario: navigationScenarios.CLICKED_BACK_WITH_SKIP_VIN_AND_NO_MORE_QUESTIONS, + destinationIssPageValue: issPageValues.VEHICLE_DAMAGE + }, { scenario: navigationScenarios.CLICKED_BACK_WITH_NO_VIN_NOR_QUESTIONS, destinationIssPageValue: issPageValues.VEHICLE_LOOKUP @@ -262,6 +270,10 @@ const routingTable = () => [ scenario: navigationScenarios.CLICKED_BACK_WITH_VIN_AND_NO_MORE_QUESTIONS, destinationIssPageValue: issPageValues.VEHICLE_DAMAGE }, + { + scenario: navigationScenarios.CLICKED_BACK_WITH_SKIP_VIN_AND_NO_MORE_QUESTIONS, + destinationIssPageValue: issPageValues.VEHICLE_DAMAGE + }, { scenario: navigationScenarios.CLICKED_BACK_WITH_NO_VIN_NOR_QUESTIONS, destinationIssPageValue: issPageValues.VEHICLE_LOOKUP @@ -295,6 +307,10 @@ const routingTable = () => [ scenario: navigationScenarios.CLICKED_BACK_WITH_VIN_AND_NO_MORE_QUESTIONS, destinationIssPageValue: issPageValues.VEHICLE_DAMAGE }, + { + scenario: navigationScenarios.CLICKED_BACK_WITH_SKIP_VIN_AND_NO_MORE_QUESTIONS, + destinationIssPageValue: issPageValues.VEHICLE_DAMAGE + }, { scenario: navigationScenarios.CLICKED_BACK_WITH_NO_VIN_NOR_QUESTIONS, destinationIssPageValue: issPageValues.VEHICLE_LOOKUP @@ -540,6 +556,10 @@ const routingTable = () => [ scenario: navigationScenarios.CLICKED_BACK_WITH_VIN_AND_NO_MORE_QUESTIONS, destinationIssPageValue: issPageValues.VEHICLE_DAMAGE }, + { + scenario: navigationScenarios.CLICKED_BACK_WITH_SKIP_VIN_AND_NO_MORE_QUESTIONS, + destinationIssPageValue: issPageValues.VEHICLE_DAMAGE + }, { scenario: navigationScenarios.CLICKED_BACK_WITH_NO_VIN_NOR_QUESTIONS, destinationIssPageValue: issPageValues.VEHICLE_LOOKUP diff --git a/src/store/index.js b/src/store/index.js index 676fadb7..3e3b8a57 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -879,8 +879,7 @@ export const useMainStore = defineStore({ return globalMethods.callHttpClient({ method: endpoints.GetMobilePremiumFee.method, - endpoint: `${endpoints.GetMobilePremiumFee.url}/${paymentType}/${damageType}`, - logApiCall: true + endpoint: `${endpoints.GetMobilePremiumFee.url}/${paymentType}/${damageType}` }); }, getMobileTimeSlots(startDate, endDate, zipCodeOverride = null) { @@ -935,14 +934,7 @@ export const useMainStore = defineStore({ return globalMethods.callHttpClient({ method: endpoints.GetMobileTimeSlots.method, endpoint: endpoints.GetMobileTimeSlots.url, - payload, - logApiCall: true, - additionalSuccessEventDataHandler: (response) => - getTimeSlotsAdditionalEventData( - response.data.provisionalTriggers, - zipCodeOverride ?? order.serviceLocation.zipCode, - response.data.days?.[0]?.date - ) + payload }); }, getShopTimeSlots(startDate, endDate, shopAppointmentType, providerNumber) { @@ -998,8 +990,7 @@ export const useMainStore = defineStore({ return globalMethods.callHttpClient({ method: endpoints.GetShopTimeSlots.method, endpoint: endpoints.GetShopTimeSlots.url, - payload, - additionalSuccessEventDataHandler: (response) => provisionalTriggersToString(response.data.provisionalTriggers) + payload }); }, async getWipers() { @@ -1553,8 +1544,7 @@ export const useMainStore = defineStore({ method: endpoints.SaveSession.method, endpoint: endpoints.SaveSession.url, payload, - additionalSuccessEventDataHandler: () => - `Email provided: ${customer.emailAddress ? 'true' : 'false'}` + bailoutOnError: false }).then((response) => { if (loadedFromDupeCheck) { this.order.loadedSessionClearedPreviousData = true; @@ -2457,7 +2447,7 @@ export const useMainStore = defineStore({ // populate initial state populateInitialState(forceReset) { if (!sessionStorage.getItem(storeId) || forceReset) { - this.$state = state; + this.$state = getDefaultState(); } }, @@ -2466,8 +2456,7 @@ export const useMainStore = defineStore({ return globalMethods.callHttpClient({ method: endpoints.GetAlertReasons.method, endpoint: `${endpoints.GetAlertReasons.url}/${ctu}`, - payload: {}, - logApiCall: true + payload: {} }); }, diff --git a/src/ux-components/alert/alert.vue b/src/ux-components/alert/alert.vue index a6323194..0e0ea2be 100644 --- a/src/ux-components/alert/alert.vue +++ b/src/ux-components/alert/alert.vue @@ -355,7 +355,7 @@ export default { border-top-color: $alert-red-color; } svg { - fill: $red-600; + fill: $alert-red-color; width: 1rem; height: 1rem; }