83 lines
2.8 KiB
JavaScript
83 lines
2.8 KiB
JavaScript
import { queryStrings } from "@/constants/query-strings";
|
|
import { sessionStorageKeyConstants } from "@/constants/session-storage";
|
|
import {
|
|
getFunnelCookie,
|
|
updateOrCreateFunnelCookie,
|
|
} from "@/helpers/heritage-integration/cookie-helper";
|
|
import { loadSessionIfPresent } from "@/helpers/heritage-integration/order-helper";
|
|
import { isSavedSessionStillActive } from "@/helpers/heritage-integration/session-helper";
|
|
import analyticsMixin from "@/mixins/analytics-mixin";
|
|
import { routeData, FUNNEL_START_PAGE } from "@/router/constants/routes";
|
|
import { consumeQueryFromStash } from "@/router/methods/helpers/querystring-stash";
|
|
import { runExperiments } from "@/router/methods/helpers/run-experiments";
|
|
|
|
import { bailout } from "@/router/methods/error";
|
|
import { checkPagePrerequisites } from "@/router/methods/page-prerequisites";
|
|
|
|
export async function beforeEach(to, from) {
|
|
try {
|
|
await analyticsMixin.methods.validateSession();
|
|
|
|
if (getFunnelCookie()?.SuppressConceptFunnel) {
|
|
// Redirect to heritage.
|
|
return {
|
|
name: routeData.HERITAGE.name,
|
|
};
|
|
}
|
|
|
|
// Ensure session has not expired
|
|
if (getFunnelCookie() !== null && !isSavedSessionStillActive()) {
|
|
const errorPayload = {
|
|
cause: "expired session",
|
|
currentPage: from?.name,
|
|
nextPage: to?.name,
|
|
};
|
|
|
|
bailout(errorPayload, true);
|
|
return false;
|
|
}
|
|
|
|
// Block navigation if an order has been submitted.
|
|
if (window.sessionStorage.getItem(sessionStorageKeyConstants.SUBMITTED_STATE) !== null) {
|
|
if (to.name !== FUNNEL_START_PAGE.name && to.name !== routeData.CONFIRMATION.name) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
// Process funnel cookie.
|
|
updateOrCreateFunnelCookie();
|
|
|
|
// If sent from heritage, need to load session.
|
|
const fromHeritageFlag = consumeQueryFromStash(queryStrings.FROM_HERITAGE);
|
|
if (fromHeritageFlag) {
|
|
await loadSessionIfPresent(true, routeData.SERVICE_LOCATION.name);
|
|
}
|
|
|
|
// Ensure page-prerequisites are fulfilled
|
|
const arePagePrerequisitesValid = await checkPagePrerequisites(to.name);
|
|
|
|
if (!arePagePrerequisitesValid) {
|
|
const errorPayload = {
|
|
cause: "invalid page prerequisites for page",
|
|
currentPage: from?.name,
|
|
nextPage: to?.name,
|
|
};
|
|
|
|
bailout(errorPayload);
|
|
return;
|
|
}
|
|
|
|
await runExperiments(to.name);
|
|
} catch (error) {
|
|
const errorPayload = {
|
|
cause: "Uncaught exception in `beforeEach`.",
|
|
currentPage: from?.name,
|
|
nextPage: to?.name,
|
|
};
|
|
|
|
console.log(error);
|
|
|
|
bailout(errorPayload);
|
|
return;
|
|
}
|
|
}
|