diff --git a/src/helpers/heritage-integration-helper.js b/src/helpers/heritage-integration-helper.js index 53ff90aab..3ee84c437 100644 --- a/src/helpers/heritage-integration-helper.js +++ b/src/helpers/heritage-integration-helper.js @@ -1,14 +1,13 @@ import { storeActions } from "@/constants/store-actions.js"; import { cookieNames } from "@/constants/cookie-names"; -import { navigationScenarios } from "@/router/router-constants/navigation-scenarios"; +import { externalUrls } from "@/router/router-constants/externalUrl-values"; import { applicationConfig } from "@/constants/application-config"; +import { lazyLoadComponent } from "@/router/dynamic-routing/component-loader.js"; import store from "@/store"; import router from "@/router"; import baseMixin from "../mixins/base-mixin"; - -// Saves Referral if one is available and commits referral details to state. export async function saveOrder() { console.log("saving order..."); const savedOrderInfo = await baseMixin.methods.dispatchNonBlockingStoreAction(storeActions.SAVE_ORDER); @@ -24,23 +23,14 @@ export async function saveOrder() { updateOrCreateConceptCookie(); } -// Loads order based on referral data in cookie, also loads the referral information into state. -export async function loadOrder(referralNumber, referralDate, correlationId) { - console.log("loading order...", referralNumber, referralDate, correlationId); - await baseMixin.methods.dispatchNonBlockingStoreAction(storeActions.LOAD_ORDER, - { referralNumber: referralNumber.toString(), referralDate: referralDate, correlationId: correlationId } - , false); -} - -// Read info from heritage funnel and reset state or load referral -export async function loadReferralIfPresent() { +export async function loadOrderIfPresent() { console.log("attempting to load referral...."); const conceptCookie = getConceptCookie(); // Do nothing if there is no cookie or no correlation id. if (conceptCookie === null || conceptCookie.ReferralCorrelationId === null) { console.log("No referral found"); - return; + return null; } // Reset state if cookie says to. @@ -48,12 +38,32 @@ export async function loadReferralIfPresent() { console.log("Resetting state..."); baseMixin.methods.dispatchNonBlockingStoreAction(storeActions.RESET_STATE); deleteConceptCookie(); - return; + return null; } - console.log("calling load order from loadReferralIfPresent()..."); + console.log("calling load order from loadOrderIfPresent()..."); + // Load referral if there is a cookie, and it doesn't indicate it needs a state reset. - await loadOrder(conceptCookie.ReferralNumber, conceptCookie.ReferralDate, conceptCookie.ReferralCorrelationId); + return (await loadOrder(conceptCookie.ReferralNumber, conceptCookie.ReferralDate, conceptCookie.ReferralCorrelationId)).data; +} + +export async function getPageToRouteExistingOrderTo() { + const vehicleMakeComponent = (await lazyLoadComponent('vehicle-make')()).default; + const vehicleModelComponent = (await lazyLoadComponent('vehicle-model')()).default; + const vehicleStyleComponent = (await lazyLoadComponent('vehicle-style')()).default; + const vehicleDamageComponent = (await lazyLoadComponent('vehicle-damage')()).default; + + if (!vehicleMakeComponent.methods.arePagePrerequisitesValid()) { + return "vehicle-year"; + } else if (!vehicleModelComponent.methods.arePagePrerequisitesValid()) { + return "vehicle-make"; + } else if (!vehicleStyleComponent.methods.arePagePrerequisitesValid()) { + return "vehicle-model"; + } else if (!vehicleDamageComponent.methods.arePagePrerequisitesValid()) { + return "vehicle-style"; + }else { + return "vehicle-damage"; + } } export function updateOrCreateConceptCookie() { @@ -96,16 +106,13 @@ export function isConceptSessionStillActive() { } } -// Navigate to Heritage Funnel with the proper URL format. -// Will Save the referral if there is one in state, or create a new one if one is not in state. export async function navigateToHeritageFunnel() { // Create the order (or save existing order) when navigating to Heritage Funnel. await saveOrder(); - router.navigate( - navigationScenarios.MOVE_TO_HERITAGE_FUNNEL, - router.currentRoute.value, + router.navigateToExternalUrl( + externalUrls.HERITAGE_FUNNEL, { corid: store.state.order.referralCorrelationId, src: "concept-funnel", @@ -115,7 +122,6 @@ export async function navigateToHeritageFunnel() { ); } -/* Start cookie related functions */ export function getConceptCookie() { const cookieJson = document.cookie ?.split("; ") @@ -129,7 +135,27 @@ export function getConceptCookie() { } } + + + // --------- PRIVATE FUNCTIONS --------- +async function loadOrder(referralNumber, referralDate, correlationId) { + console.log("loading order...", referralNumber, referralDate, correlationId); + try { + + const response = await baseMixin.methods.dispatchNonBlockingStoreAction(storeActions.LOAD_ORDER, + { + referralNumber: referralNumber.toString(), + referralDate: referralDate, + correlationId: correlationId + }, false); + + return response; + + } catch (e) { + console.log("error loading order:", e); + } +} function setConceptCookieProperties(properties) { if (typeof properties == "object") { @@ -154,4 +180,3 @@ function deleteConceptCookie() { } -/* End cookie related functions */ diff --git a/src/helpers/heritage-integration-helper.spec.js b/src/helpers/heritage-integration-helper.spec.js index eb1130c21..1a2f09e48 100644 --- a/src/helpers/heritage-integration-helper.spec.js +++ b/src/helpers/heritage-integration-helper.spec.js @@ -19,7 +19,7 @@ describe("saveOrder", () => { } } - describe("loadReferralIfPresent", () => { + describe("loadOrderIfPresent", () => { // test("ShouldResetState == true => heritage cookie is deleted", () => { // // Arrange // // TODO CSR-98 Can we not mock this?? @@ -42,7 +42,7 @@ describe("saveOrder", () => { // console.log(document.cookie) // // Act - // helper.loadReferralIfPresent(); + // helper.loadOrderIfPresent(); // // Assert // console.log(document.cookie) @@ -54,7 +54,7 @@ describe("saveOrder", () => { // helper.getHeritageCookieValue = jest.fn(x => x.ShouldResetState = false); // // Act - // helper.loadReferralIfPresent(); + // helper.loadOrderIfPresent(); // // Assert // expect(helper.getHeritageCookieValue).toHaveBeenCalled(); @@ -65,7 +65,7 @@ describe("saveOrder", () => { // helper.getHeritageCookieValue = jest.fn(x => x.ShouldResetState = true); // // Act - // helper.loadReferralIfPresent(); + // helper.loadOrderIfPresent(); // // Assert // expect(helper.getHeritageCookieValue).toHaveBeenCalled(); diff --git a/src/layouts/vehicle-damage/vehicle-damage.vue b/src/layouts/vehicle-damage/vehicle-damage.vue index d2d786d5d..4268a7f92 100644 --- a/src/layouts/vehicle-damage/vehicle-damage.vue +++ b/src/layouts/vehicle-damage/vehicle-damage.vue @@ -70,8 +70,6 @@ import alert from "@/ux-components/alert/alert"; import { fetchCmsContentForPage } from "@/helpers/cms-content-helper"; import { settleAllPromises } from "@/helpers/layout-helper"; import { storeActions } from "@/constants/store-actions"; -import store from "@/store"; -import baseMixin from "@/mixins/base-mixin"; import { Form, defineRule } from "vee-validate"; import { required } from "@/helpers/validation-rules"; import { errorMessages } from "@/constants/error-messages"; @@ -79,6 +77,9 @@ import { damageLocationsCms } from "@/constants/damage-locations-cms.js"; import { damageLocationsSelected } from "@/constants/damage-locations-selected.js"; import { navigateToHeritageFunnel } from "@/helpers/heritage-integration-helper"; +import store from "@/store"; +import baseMixin from "@/mixins/base-mixin"; + // DEFINE VALIDATION RULES defineRule("replace-options-required", required(errorMessages.REPLACE_OPTIONS_REQUIRED)); @@ -150,7 +151,10 @@ export default { }, methods: { arePagePrerequisitesValid() { - return store.getters.vehicle.carId !== null; + if(store.getters.vehicle.carId){ + return true; + } + return false; }, resetDependentState() { store.dispatch(storeActions.RESET_PARTS_STATE_AND_DEPENDENCIES); diff --git a/src/layouts/vehicle-make/vehicle-make.vue b/src/layouts/vehicle-make/vehicle-make.vue index 262bee6fd..4c00d7454 100644 --- a/src/layouts/vehicle-make/vehicle-make.vue +++ b/src/layouts/vehicle-make/vehicle-make.vue @@ -84,7 +84,10 @@ export default { ); }, arePagePrerequisitesValid() { - return store.getters.vehicle.year !== null; + if (store.getters.vehicle.year){ + return true; + } + return false; }, resetDependentState() { // Set diff --git a/src/layouts/vehicle-model/vehicle-model.vue b/src/layouts/vehicle-model/vehicle-model.vue index 97d017e34..749a926fe 100644 --- a/src/layouts/vehicle-model/vehicle-model.vue +++ b/src/layouts/vehicle-model/vehicle-model.vue @@ -85,7 +85,10 @@ export default { ); }, arePagePrerequisitesValid() { - return store.getters.vehicle.make !== null; + if(store.getters.vehicle.make){ + return true; + } + return false; }, resetDependentState() { // Set diff --git a/src/layouts/vehicle-parts/vehicle-parts.vue b/src/layouts/vehicle-parts/vehicle-parts.vue index abc8ee936..11f0811bf 100644 --- a/src/layouts/vehicle-parts/vehicle-parts.vue +++ b/src/layouts/vehicle-parts/vehicle-parts.vue @@ -1,26 +1,42 @@ diff --git a/src/layouts/vehicle-style/vehicle-style.vue b/src/layouts/vehicle-style/vehicle-style.vue index c5aec920c..137dda687 100644 --- a/src/layouts/vehicle-style/vehicle-style.vue +++ b/src/layouts/vehicle-style/vehicle-style.vue @@ -96,7 +96,10 @@ export default { ); }, arePagePrerequisitesValid() { - return store.getters.vehicle.model !== null; + if(store.getters.vehicle.model){ + return true; + } + return false; }, resetDependentState() { // Invokes diff --git a/src/router/index.js b/src/router/index.js index 54a64c5d2..4e85f7b21 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -35,8 +35,7 @@ const routes = [ } else { try { - // Check our 'Session' is still good. - // If not, reset state and go back to the start. + // Check our 'Session' is still good. If not, reset state and go back to the start. if (!integrationHelper.isConceptSessionStillActive()) { baseMixin.methods.dispatchNonBlockingStoreAction(storeActions.RESET_STATE); await GoToFunnelStartOn404(next); @@ -47,7 +46,14 @@ const routes = [ // On entering the concept funnel "fresh", read cookie information, decide what to do next. if (from.redirectedFrom === undefined) { - await integrationHelper.loadReferralIfPresent(); + await integrationHelper.loadOrderIfPresent(); + + const pageToRedirectTo = await integrationHelper.getPageToRouteExistingOrderTo(); + + // Assign our fmgPage so it will load normally like the other pages. + to.query.fmgPage = pageToRedirectTo; + + console.log("Page to redirect to: ", pageToRedirectTo); } // If we already have our route, go to it. @@ -117,6 +123,10 @@ router.navigateAfterSave = (scenario, currentRoute, optionalQuery = {}, optional navigate(scenario, currentRoute, true, optionalQuery, optionalParams, optionalPageData); } +router.navigateToExternalUrl = (url, optionalQuery = {}) => { + navigateToUrl(url, optionalQuery); +} + // PRIVATE FUNCTIONS // Navigate to the next route, depending on the scenario. diff --git a/src/router/router-constants/routing-table.js b/src/router/router-constants/routing-table.js index c6a758cef..438d230a0 100644 --- a/src/router/router-constants/routing-table.js +++ b/src/router/router-constants/routing-table.js @@ -1,5 +1,4 @@ import { fmgPageValues } from "@/router/router-constants/fmgPage-values"; -import { externalUrls } from "@/router/router-constants/externalUrl-values"; import { navigationScenarios } from "@/router/router-constants/navigation-scenarios"; const routingTable = [ @@ -58,10 +57,6 @@ const routingTable = [ scenario: navigationScenarios.CLICKED_BACK, destinationFmgPageValue: fmgPageValues.VEHICLE_STYLE, }, - { - scenario: navigationScenarios.MOVE_TO_HERITAGE_FUNNEL, - destinationUrl: externalUrls.HERITAGE_FUNNEL, - }, { scenario: navigationScenarios.SELECTED_DAMAGE_WITH_SINGLE_PART, destinationFmgPageValue: fmgPageValues.REVEAL diff --git a/src/store/index.js b/src/store/index.js index af280675e..494be3dfb 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -152,15 +152,15 @@ export const mutations = { state.order.referralDate = orderInformation.referralDate; state.order.referralCorrelationId = orderInformation.correlationId; state.order.vehicle = { - year: orderInformation.vehicle.year, - make: orderInformation.vehicle.make, - model: orderInformation.vehicle.model, - style: orderInformation.vehicle.style, - carId: orderInformation.vehicle.carId, - category: orderInformation.vehicle.category, - imageUrl: orderInformation.vehicle.imageUrl, - imageVifNumber: orderInformation.vehicle.imageVifNumber, - imageColor: orderInformation.vehicle.imageVifColor + year: orderInformation.vehicle?.year, + make: orderInformation.vehicle?.make, + model: orderInformation.vehicle?.model, + style: orderInformation.vehicle?.style, + carId: orderInformation.vehicle?.carId, + category: orderInformation.vehicle?.category, + imageUrl: orderInformation.vehicle?.imageUrl, + imageVifNumber: orderInformation.vehicle?.imageVifNumber, + imageColor: orderInformation.vehicle?.imageVifColor }; state.order.damage.glassToReplace = orderInformation.glassToReplace; state.order.damage.isRepair = orderInformation.isRepair;