diff --git a/src/constants/store-mutations.js b/src/constants/store-mutations.js index 1f38134f3..c07e88bf2 100644 --- a/src/constants/store-mutations.js +++ b/src/constants/store-mutations.js @@ -13,6 +13,7 @@ const storeMutations = { UPDATE_IS_REPAIR: "updateIsRepair", UPDATE_NUMBER_OF_CHIPS: "updateNumberOfChips", UPDATE_GLASS_TO_REPLACE: "updateGlassToReplace", + UPDATE_PARTS: "updateParts", // EVENT BUS MUTATIONS ADD_EVENT_TO_BUS: "addEventToBus", @@ -23,6 +24,9 @@ const storeMutations = { RESET_DAMAGE_STATE: "resetDamageState", RESET_REGISTRATION_STATE: "resetRegistrationState", RESET_PARTS_STATE: "resetPartsState", + + // OTHER MUTATIONS + UPDATE_PAGE_DATA: "updatePageData", }; diff --git a/src/layouts/vehicle-damage/vehicle-damage.vue b/src/layouts/vehicle-damage/vehicle-damage.vue index 80db1cd99..cc9f7c155 100644 --- a/src/layouts/vehicle-damage/vehicle-damage.vue +++ b/src/layouts/vehicle-damage/vehicle-damage.vue @@ -145,7 +145,7 @@ export default { const partsData = await baseMixin.methods.dispatchNonBlockingStoreAction(this.storeActions.GET_PARTS_OR_QUESTIONS, { carId: this.$store.getters.vehicle.carId, glassArray: this.selectedGlassToReplace()}, false); - this.$router.navigateAfterSave(this.navigationScenarios.SELECTED_GLASS_MULTIPLE_PARTS, this.$route, {}, { [routerParameterKeys.VEHICLE_PARTS_DATA]: JSON.stringify(partsData.data)}); + this.$router.navigateAfterSave(this.navigationScenarios.SELECTED_GLASS_MULTIPLE_PARTS, this.$route, {}, {}, partsData.data); }, selectedGlassToReplace() { diff --git a/src/layouts/vehicle-parts/part-question/part-question.vue b/src/layouts/vehicle-parts/glass-part-question/glass-part-question.vue similarity index 99% rename from src/layouts/vehicle-parts/part-question/part-question.vue rename to src/layouts/vehicle-parts/glass-part-question/glass-part-question.vue index 7046e1b79..f5f5cdaa0 100644 --- a/src/layouts/vehicle-parts/part-question/part-question.vue +++ b/src/layouts/vehicle-parts/glass-part-question/glass-part-question.vue @@ -44,7 +44,7 @@ import { } from "@/constants/dynamictext-mapper"; export default { - name: "part-question", + name: "glass-part-question", inheritAttrs: false, data() { return { diff --git a/src/layouts/vehicle-parts/vehicle-parts.vue b/src/layouts/vehicle-parts/vehicle-parts.vue index 1a6af93da..3bb3b9f41 100644 --- a/src/layouts/vehicle-parts/vehicle-parts.vue +++ b/src/layouts/vehicle-parts/vehicle-parts.vue @@ -17,15 +17,15 @@
- + - + diff --git a/src/mixins/base-mixin.js b/src/mixins/base-mixin.js index d37ba38d7..d46841b6a 100644 --- a/src/mixins/base-mixin.js +++ b/src/mixins/base-mixin.js @@ -18,6 +18,9 @@ export default { return store.dispatch(type, payload); }, + savePageDataToStore(page, data){ + store.commit(storeMutations.UPDATE_PAGE_DATA, { page: page, data: data }); + } }, computed: { storeActions() { diff --git a/src/router/index.js b/src/router/index.js index 0195dd8d9..bd3254d02 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -1,6 +1,7 @@ // Supporting files import { createWebHistory, createRouter } from "vue-router"; import { storeActions } from "@/constants/store-actions"; +import baseMixin from "@/mixins/base-mixin"; import { lazyLoadComponent } from "@/router/dynamic-routing/component-loader.js"; import { routingTable } from "@/router/router-constants/routing-table.js"; import { globalEvents, globalEventTypes } from "@/constants/events"; @@ -55,7 +56,7 @@ const routes = [ .getRoutes() .filter((x) => x.name === to.query.fmgPage)[0].components; - if (!arePagePrerequisitesValid(component, to.params)) { + if (!arePagePrerequisitesValid(component)) { await GoToFunnelStartOn404(next); } @@ -80,7 +81,7 @@ const routes = [ .filter((x) => x.name === routeData[0].name)[0] .components.default(); - if (!arePagePrerequisitesValid(nextComponent, to.params)) { + if (!arePagePrerequisitesValid(nextComponent)) { await GoToFunnelStartOn404(next); } @@ -108,18 +109,18 @@ const router = createRouter({ //---------------------------------------------------------- Router Functions ---------------------------------------------------------- -router.navigate = (scenario, currentRoute, optionalQuery = {}, optionalParams = {}) => { - navigate(scenario, currentRoute, false, optionalQuery, optionalParams); +router.navigate = (scenario, currentRoute, optionalQuery = {}, optionalParams = {}, optionalPageData = {}) => { + navigate(scenario, currentRoute, false, optionalQuery, optionalParams, optionalPageData); } -router.navigateAfterSave = (scenario, currentRoute, optionalQuery = {}, optionalParams = {}) => { - navigate(scenario, currentRoute, true, optionalQuery, optionalParams); +router.navigateAfterSave = (scenario, currentRoute, optionalQuery = {}, optionalParams = {}, optionalPageData = {}) => { + navigate(scenario, currentRoute, true, optionalQuery, optionalParams, optionalPageData); } // PRIVATE FUNCTIONS // Navigate to the next route, depending on the scenario. -function navigate(scenario, currentRoute, invalidateOnSave, optionalQuery = {}, optionalParams = {}) { +function navigate(scenario, currentRoute, invalidateOnSave, optionalQuery = {}, optionalParams = {}, optionalPageData = {}) { if (!scenario) { console.error("No scenario provided. Please review the routing table."); return; @@ -138,6 +139,9 @@ function navigate(scenario, currentRoute, invalidateOnSave, optionalQuery = {}, resetDependentState(currentComponent); } + // Append page data to the store for the NEXT page, if any. It will be an empty object if none is provided. + baseMixin.methods.savePageDataToStore(matchingScenarioMap.destinationFmgPageValue, optionalPageData); + router.push({ name: "root", query: Object.assign(optionalQuery, { @@ -217,8 +221,8 @@ async function GoToFunnelStartOn404(next) { } // Checks arePagePrerequisitesValid on the component passed in. -function arePagePrerequisitesValid(component, parameters = {}) { - return component.default.methods.arePagePrerequisitesValid(parameters); +function arePagePrerequisitesValid(component) { + return component.default.methods.arePagePrerequisitesValid(); } // Reset dependant state on route change. diff --git a/src/router/router-constants/router-parameter-keys.js b/src/router/router-constants/router-parameter-keys.js index 27f6a54b0..0c75eb738 100644 --- a/src/router/router-constants/router-parameter-keys.js +++ b/src/router/router-constants/router-parameter-keys.js @@ -1,5 +1,3 @@ -const routerParameterKeys = { - VEHICLE_PARTS_DATA: "vehiclePartsData", - }; +const routerParameterKeys = { }; export { routerParameterKeys }; \ No newline at end of file diff --git a/src/router/router-constants/routing-table.js b/src/router/router-constants/routing-table.js index c5018716c..1e5b9833f 100644 --- a/src/router/router-constants/routing-table.js +++ b/src/router/router-constants/routing-table.js @@ -76,6 +76,19 @@ const routingTable = [ }, ], }, + { + fmgPageValue: fmgPageValues.VEHICLE_PARTS, + maps: [ + { + scenario: navigationScenarios.CLICKED_BACK, + destinationFmgPageValue: fmgPageValues.VEHICLE_DAMAGE, + }, + { + scenario: navigationScenarios.SELECTED_PARTS, + destinationFmgPageValue: fmgPageValues.QUOTE, + }, + ], + }, ]; export { routingTable }; diff --git a/src/store/index.js b/src/store/index.js index 24cd4ef24..619f4a950 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -27,12 +27,12 @@ export const state = { }, lineItems:{ glassParts: null, - childParts: null, otherParts: null } }, applicationUser: { eventBus: [], + pageData: {} }, } @@ -75,7 +75,12 @@ export const mutations = { updateGlassToReplace(state, glassToReplace){ state.order.damage.glassToReplace = glassToReplace; }, - + updateParts(state, partsData){ + state.order.lineItems.glassParts = partsData; + }, + updatePageData(state, pageData){ + state.applicationUser.pageData[pageData.page] = pageData.data; + }, // EVENT BUS MUTATIONS addEventToBus(state, event) { @@ -136,7 +141,10 @@ export const getters = { }, eventBus: (state) => state.applicationUser.eventBus, damage: (state) => state.order.damage, - lineItems: (state) => state.order.lineItems + lineItems: (state) => state.order.lineItems, + pageData: (state) => (page) => { + return state.applicationUser.pageData[page]; + } } // Export Actions