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;
}