Continue with Cookie
Handles scenario 1,2,5 Will work on 3,4 while this PR is up. 3: TPA previously chosen 4: finished flow.
This commit is contained in:
parent
30f8729dae
commit
449c3ae634
8 changed files with 329 additions and 25 deletions
|
|
@ -96,7 +96,7 @@ export function getISSCookie() {
|
||||||
Used to set properties on the ISS cookie.
|
Used to set properties on the ISS cookie.
|
||||||
Takes an object with properties to set. Will overwrite existing properties.
|
Takes an object with properties to set. Will overwrite existing properties.
|
||||||
*/
|
*/
|
||||||
function setISSCookieProperties(properties) {
|
export function setISSCookieProperties(properties) {
|
||||||
if (typeof properties === 'object') {
|
if (typeof properties === 'object') {
|
||||||
const cookie = getISSCookie();
|
const cookie = getISSCookie();
|
||||||
|
|
||||||
|
|
@ -114,20 +114,24 @@ function setISSCookieProperties(properties) {
|
||||||
/*
|
/*
|
||||||
Will update the cookie if present, or create a new one if not.
|
Will update the cookie if present, or create a new one if not.
|
||||||
*/
|
*/
|
||||||
export function updateOrCreateISSCookie() {
|
export function updateOrCreateISSCookie(forceCreate = false) {
|
||||||
const store = useMainStore();
|
const store = useMainStore();
|
||||||
|
|
||||||
// Set up cookie with all the props.
|
// Set up cookie with all the props.
|
||||||
setISSCookieProperties({
|
if (forceCreate || store.order?.referralDate) {
|
||||||
LastTouched: new Date().toUTCString(),
|
setISSCookieProperties({
|
||||||
SavedSessionTimeoutDate: store.applicationUser.savedSessionTimeout,
|
LastTouched: new Date().toUTCString(),
|
||||||
ShouldResetState: false,
|
SavedSessionTimeoutDate: store.applicationUser.savedSessionTimeout,
|
||||||
ReferralNumber: store.order.referralNumber,
|
ShouldResetState: false,
|
||||||
ReferralDate: store.order.referralDate,
|
ReferralNumber: store.order.referralNumber,
|
||||||
ReferralCorrelationId: store.order.referralCorrelationId,
|
ReferralDate: store.order.referralDate,
|
||||||
ReferralParentAccountNumber: store.order.parentAccountNumber,
|
ReferralCorrelationId: store.order.referralCorrelationId,
|
||||||
SavedSessionId: store.applicationUser.savedSessionId
|
ReferralParentAccountNumber: store.order.parentAccountNumber,
|
||||||
});
|
SavedSessionId: store.applicationUser.savedSessionId,
|
||||||
|
VehicleMake: store.order.vehicle?.make,
|
||||||
|
VehicleModel: store.order.vehicle?.model
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
||||||
|
|
@ -78,3 +78,12 @@ export function deepEqual(obj1, obj2) {
|
||||||
|
|
||||||
return obj1 === obj2;
|
return obj1 === obj2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function getPropertyCaseInsensitive(obj, property) {
|
||||||
|
const props = [];
|
||||||
|
for (const i in obj) if (Object.prototype.hasOwnProperty.call(obj, i)) props.push(i);
|
||||||
|
let prop;
|
||||||
|
// eslint-disable-next-line no-cond-assign
|
||||||
|
while (prop = props.pop()) if (prop.toLowerCase() === property.toLowerCase()) return prop;
|
||||||
|
return property;
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
import { useMainStore } from '@/store';
|
import { useMainStore } from '@/store';
|
||||||
import { updateOrCreateISSCookie } from '@/helpers/cookie-helper';
|
|
||||||
import submitType from '@/constants/submit-type';
|
import submitType from '@/constants/submit-type';
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
@ -10,7 +9,6 @@ async function saveSessionHelper(store, { submitAfterSave }) {
|
||||||
if (savedSessionInfo) {
|
if (savedSessionInfo) {
|
||||||
store.setSaveSessionInfo(savedSessionInfo.data);
|
store.setSaveSessionInfo(savedSessionInfo.data);
|
||||||
}
|
}
|
||||||
updateOrCreateISSCookie();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
||||||
99
src/iss-components/continue-modal/continue-modal.vue
Normal file
99
src/iss-components/continue-modal/continue-modal.vue
Normal file
|
|
@ -0,0 +1,99 @@
|
||||||
|
<template>
|
||||||
|
<transition
|
||||||
|
name="fade"
|
||||||
|
mode="out-in">
|
||||||
|
<div class="continue-modal-container">
|
||||||
|
<modal
|
||||||
|
ref="continueModal"
|
||||||
|
:headerText="modalHeaderText"
|
||||||
|
:footerButtonText="modalFooterText"
|
||||||
|
@isModalOpened="setModalStatus"
|
||||||
|
@footerButtonEvent="startNewReferral">
|
||||||
|
<template v-if="1===1">
|
||||||
|
<p class="mb-2 subheader-text text-center">
|
||||||
|
{{ modalSubHeaderText }}
|
||||||
|
</p>
|
||||||
|
<button
|
||||||
|
id="btnContinueReferral"
|
||||||
|
type="button"
|
||||||
|
class="btn btn-white-blue continue-referral align-items-center justify-content-center mt-2 py-3 px-4 delay w-100"
|
||||||
|
@click="continueReferral">
|
||||||
|
{{ modalBodyText }}
|
||||||
|
</button>
|
||||||
|
</template>
|
||||||
|
</modal>
|
||||||
|
</div>
|
||||||
|
</transition>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import modal from '@/digital-components/modal/modal.vue';
|
||||||
|
import { getISSCookie } from '@/helpers/cookie-helper.js';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'continue-modal',
|
||||||
|
components: {
|
||||||
|
modal
|
||||||
|
},
|
||||||
|
emits: ['continue-previous-referral', 'start-new-referral'],
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
isModalOpened: false
|
||||||
|
};
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
getMakeModelString() {
|
||||||
|
const cookie = getISSCookie();
|
||||||
|
if (cookie) {
|
||||||
|
return `${cookie.VehicleMake} ${cookie.VehicleModel}`;
|
||||||
|
}
|
||||||
|
return 'CAR NOT SELECTED';
|
||||||
|
},
|
||||||
|
modalBodyText() {
|
||||||
|
return this.getCmsContent('ContinueReferralModalWidget', 'BodyText');
|
||||||
|
},
|
||||||
|
modalHeaderText() {
|
||||||
|
return this.getCmsContent('ContinueReferralModalWidget', 'HeaderText');
|
||||||
|
},
|
||||||
|
modalFooterText() {
|
||||||
|
return this.getCmsContent('ContinueReferralModalWidget', 'FooterText');
|
||||||
|
},
|
||||||
|
modalSubHeaderText() {
|
||||||
|
return this.getCmsContent('ContinueReferralModalWidget', 'SubheaderText')
|
||||||
|
.replaceAll('{custom:mmFound}', this.getMakeModelString);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
openModal() {
|
||||||
|
this.$refs.continueModal.openModal();
|
||||||
|
},
|
||||||
|
setModalStatus(isOpened) {
|
||||||
|
this.isModalOpened = isOpened;
|
||||||
|
},
|
||||||
|
closeModal() {
|
||||||
|
this.$refs.continueModal.closeModal();
|
||||||
|
},
|
||||||
|
continueReferral() {
|
||||||
|
this.$emit('continue-previous-referral');
|
||||||
|
},
|
||||||
|
startNewReferral() {
|
||||||
|
this.$emit('start-new-referral');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.btn-white-blue {
|
||||||
|
border-radius: 0.5rem;
|
||||||
|
border-color: $blue;
|
||||||
|
color: $blue;
|
||||||
|
font-size: 1rem;
|
||||||
|
font-weight: 500;
|
||||||
|
line-height: 1.5rem;
|
||||||
|
background-color: #ffffff;
|
||||||
|
|
||||||
|
--bs-btn-focus-shadow-rgb: 218, 72, 62;
|
||||||
|
--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
@ -10,6 +10,7 @@
|
||||||
// Supporting files
|
// Supporting files
|
||||||
import issPageValues from '@/router/router-constants/issPage-values';
|
import issPageValues from '@/router/router-constants/issPage-values';
|
||||||
import { validateISSClientTag, validateISSClientSignature } from '@/helpers/clientauth-helper';
|
import { validateISSClientTag, validateISSClientSignature } from '@/helpers/clientauth-helper';
|
||||||
|
import { getISSCookie, updateOrCreateISSCookie } from '@/helpers/cookie-helper.js';
|
||||||
import { useMainStore } from '@/store';
|
import { useMainStore } from '@/store';
|
||||||
import applicationConfig from '@/constants/application-config';
|
import applicationConfig from '@/constants/application-config';
|
||||||
|
|
||||||
|
|
@ -41,6 +42,24 @@ export default {
|
||||||
if (isAuthorized) {
|
if (isAuthorized) {
|
||||||
this.populateISSConfigValues(clientData);
|
this.populateISSConfigValues(clientData);
|
||||||
|
|
||||||
|
// Check cookie
|
||||||
|
const issCookie = getISSCookie();
|
||||||
|
if (issCookie !== null) {
|
||||||
|
const clientNumber = clientData.parentAccountNumber;
|
||||||
|
const cookieClient = issCookie.ReferralParentAccountNumber;
|
||||||
|
|
||||||
|
if (clientNumber === cookieClient) {
|
||||||
|
const savedSessionTimeStamp = new Date(issCookie.SavedSessionTimeoutDate);
|
||||||
|
const isSavedSessionTimedOut = new Date(new Date().toUTCString()) > savedSessionTimeStamp;
|
||||||
|
|
||||||
|
if (!isSavedSessionTimedOut) {
|
||||||
|
this.mainStore.issConfig.enableContinueFromCookie = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
updateOrCreateISSCookie(true);
|
||||||
|
}
|
||||||
|
|
||||||
if (clientData.parameters?.length > 0) {
|
if (clientData.parameters?.length > 0) {
|
||||||
const finalParams = this.combineClientParameters(clientData.parameters, queryStringParams);
|
const finalParams = this.combineClientParameters(clientData.parameters, queryStringParams);
|
||||||
this.populateStoreItemsFromParams(finalParams);
|
this.populateStoreItemsFromParams(finalParams);
|
||||||
|
|
|
||||||
|
|
@ -120,6 +120,11 @@
|
||||||
isRequired
|
isRequired
|
||||||
isSmallQuestionLabelText
|
isSmallQuestionLabelText
|
||||||
disableAutoFill />
|
disableAutoFill />
|
||||||
|
<continueModal
|
||||||
|
ref="continueModal"
|
||||||
|
modalWidgetName="ContinueModalWidget"
|
||||||
|
@continuePreviousReferral="loadReferralFromCookie"
|
||||||
|
@startNewReferral="startNewReferral" />
|
||||||
<div
|
<div
|
||||||
id="welcomeFooter"
|
id="welcomeFooter"
|
||||||
class="row">
|
class="row">
|
||||||
|
|
@ -153,6 +158,7 @@ import siteHeader from '@/iss-components/site-header/site-header.vue';
|
||||||
import siteSubHeader from '@/iss-components/site-sub-header/site-sub-header.vue';
|
import siteSubHeader from '@/iss-components/site-sub-header/site-sub-header.vue';
|
||||||
import siteFooter from '@/iss-components/site-footer/site-footer.vue';
|
import siteFooter from '@/iss-components/site-footer/site-footer.vue';
|
||||||
import alert from '@/ux-components/alert/alert.vue';
|
import alert from '@/ux-components/alert/alert.vue';
|
||||||
|
import continueModal from '@/iss-components/continue-modal/continue-modal.vue';
|
||||||
import textboxQuestion from '@/digital-components/textbox-question/textbox-question.vue';
|
import textboxQuestion from '@/digital-components/textbox-question/textbox-question.vue';
|
||||||
import buttonQuestion from '@/digital-components/button-question/button-question.vue';
|
import buttonQuestion from '@/digital-components/button-question/button-question.vue';
|
||||||
import dropdownQuestion from '@/digital-components/dropdown-question/dropdown-question.vue';
|
import dropdownQuestion from '@/digital-components/dropdown-question/dropdown-question.vue';
|
||||||
|
|
@ -174,7 +180,9 @@ import states from '@/constants/states';
|
||||||
import globalRules from '@/constants/global-rules';
|
import globalRules from '@/constants/global-rules';
|
||||||
import routerParams from '@/router/router-constants/router-params';
|
import routerParams from '@/router/router-constants/router-params';
|
||||||
import MaskaFormattedMasks from '@/constants/maska-masks';
|
import MaskaFormattedMasks from '@/constants/maska-masks';
|
||||||
|
import { getPropertyCaseInsensitive } from '@/helpers/object-helper';
|
||||||
import { saveSession } from '@/helpers/order-helper';
|
import { saveSession } from '@/helpers/order-helper';
|
||||||
|
import { getISSCookie, setISSCookieProperties } from '@/helpers/cookie-helper.js';
|
||||||
import bailoutMessage from '@/constants/bailoutMessage';
|
import bailoutMessage from '@/constants/bailoutMessage';
|
||||||
|
|
||||||
// define validation rules
|
// define validation rules
|
||||||
|
|
@ -191,6 +199,7 @@ export default {
|
||||||
footerImage,
|
footerImage,
|
||||||
alert,
|
alert,
|
||||||
buttonQuestion,
|
buttonQuestion,
|
||||||
|
continueModal,
|
||||||
textboxQuestion,
|
textboxQuestion,
|
||||||
dropdownQuestion,
|
dropdownQuestion,
|
||||||
siteFooter,
|
siteFooter,
|
||||||
|
|
@ -222,6 +231,7 @@ export default {
|
||||||
next((vm) => {
|
next((vm) => {
|
||||||
updateCmsSiteHeader(resultMap.globalSiteHeaderCmsContent);
|
updateCmsSiteHeader(resultMap.globalSiteHeaderCmsContent);
|
||||||
vm.setCmsContent(resultMap.cmsContent);
|
vm.setCmsContent(resultMap.cmsContent);
|
||||||
|
vm.checkContinueFromCookie();
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
setup() {
|
setup() {
|
||||||
|
|
@ -235,6 +245,7 @@ export default {
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
welcomePageModel: this.getWelcomePageModelFromStore(),
|
welcomePageModel: this.getWelcomePageModelFromStore(),
|
||||||
|
answeredContinueModal: false,
|
||||||
displayInvalidZipAlert: false,
|
displayInvalidZipAlert: false,
|
||||||
duplicates: [],
|
duplicates: [],
|
||||||
rules: {
|
rules: {
|
||||||
|
|
@ -302,11 +313,13 @@ export default {
|
||||||
async forwardButtonAction() {
|
async forwardButtonAction() {
|
||||||
try {
|
try {
|
||||||
this.mainStore.updatePolicyData(this.welcomePageModel);
|
this.mainStore.updatePolicyData(this.welcomePageModel);
|
||||||
await Promise.allSettled([
|
const promises = [];
|
||||||
this.configureZip().then(async () => await this.mainStore.getBillToInfo()),
|
promises.push(this.configureZip().then(async () => await this.mainStore.getBillToInfo()));
|
||||||
this.mainStore.getDuplicateReferrals(),
|
if (!this.mainStore.order.loadedFromCookie) {
|
||||||
this.mainStore.getCoveragePolicyInfo()
|
promises.push(this.mainStore.getDuplicateReferrals());
|
||||||
]);
|
}
|
||||||
|
promises.push(this.mainStore.getCoveragePolicyInfo());
|
||||||
|
await Promise.allSettled(promises);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error(e);
|
console.error(e);
|
||||||
// TODO: Bailout?
|
// TODO: Bailout?
|
||||||
|
|
@ -339,7 +352,8 @@ export default {
|
||||||
{},
|
{},
|
||||||
{ [routerParams.SKIP_SAVE_SESSION]: true }
|
{ [routerParams.SKIP_SAVE_SESSION]: true }
|
||||||
);
|
);
|
||||||
} else if (this.mainStore.applicationUser.duplicateOrders?.length > 0 ?? false) {
|
} else if ((this.mainStore.applicationUser.duplicateOrders?.length > 0 ?? false)
|
||||||
|
&& !this.answeredContinueModal) {
|
||||||
this.$router.navigate(
|
this.$router.navigate(
|
||||||
this.navigationScenarios.CLICKED_FORWARD_WITH_DUPLICATES,
|
this.navigationScenarios.CLICKED_FORWARD_WITH_DUPLICATES,
|
||||||
this.$route,
|
this.$route,
|
||||||
|
|
@ -389,6 +403,55 @@ export default {
|
||||||
email: this.mainStore.order.customer.emailAddress,
|
email: this.mainStore.order.customer.emailAddress,
|
||||||
isPolicyNumberDisabled: this.mainStore.order.policy.isPolicyNumberDisabled
|
isPolicyNumberDisabled: this.mainStore.order.policy.isPolicyNumberDisabled
|
||||||
};
|
};
|
||||||
|
},
|
||||||
|
updateWelcomePageModel(response) {
|
||||||
|
const getDamageCause = this.findDamageCause(response.policy.damageCause);
|
||||||
|
this.mainStore.order.policy.damageCause = getDamageCause;
|
||||||
|
|
||||||
|
this.welcomePageModel.policyNumber = response.policy.policyNumber;
|
||||||
|
this.welcomePageModel.policyZipCode = response.policy.policyZipCode;
|
||||||
|
this.welcomePageModel.dateOfLoss = response.policy.dateOfLoss;
|
||||||
|
this.welcomePageModel.damageCause = getDamageCause;
|
||||||
|
this.welcomePageModel.damageState = response.policy.damageState;
|
||||||
|
this.welcomePageModel.damageCity = response.policy.damageCity;
|
||||||
|
this.welcomePageModel.isDamageGlassOnly = response.policy.isDamageGlassOnly;
|
||||||
|
this.welcomePageModel.phoneNumber = response.customer.homePhone;
|
||||||
|
this.welcomePageModel.email = response.customer.emailAddress;
|
||||||
|
},
|
||||||
|
findDamageCause(damageCause) {
|
||||||
|
const damageCauseOptions = this.DamageCauseOptions;
|
||||||
|
return getPropertyCaseInsensitive(damageCauseOptions, damageCause);
|
||||||
|
},
|
||||||
|
checkContinueFromCookie() {
|
||||||
|
if (this.mainStore.issConfig.enableContinueFromCookie) {
|
||||||
|
this.showCookieDrawer();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
showCookieDrawer() {
|
||||||
|
this.$refs.continueModal.openModal();
|
||||||
|
},
|
||||||
|
async loadReferralFromCookie() {
|
||||||
|
const issCookie = getISSCookie();
|
||||||
|
if (issCookie) {
|
||||||
|
const cookieReferral = {
|
||||||
|
referralNumber: issCookie.ReferralNumber,
|
||||||
|
responseDate: issCookie.ReferralDate,
|
||||||
|
parentAccountNumber: issCookie.ReferralParentAccountNumber,
|
||||||
|
correlationId: issCookie.ReferralCorrelationId
|
||||||
|
};
|
||||||
|
await this.mainStore.loadSessionFromCookie(cookieReferral)
|
||||||
|
.then((response) => {
|
||||||
|
this.updateWelcomePageModel(response);
|
||||||
|
this.answeredContinueModal = true;
|
||||||
|
});
|
||||||
|
|
||||||
|
this.$refs.continueModal.closeModal();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
startNewReferral() {
|
||||||
|
this.mainStore.issConfig.enableContinueFromCookie = false;
|
||||||
|
this.answeredContinueModal = true;
|
||||||
|
this.$refs.continueModal.closeModal();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
@ -415,4 +478,8 @@ form {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
.temp-div {
|
||||||
|
text-decoration: underline;
|
||||||
|
color: blue;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
|
||||||
|
|
@ -17,9 +17,8 @@ import analyticsMixin from '@/mixins/analytics-mixin';
|
||||||
import { saveSession } from '@/helpers/order-helper.js';
|
import { saveSession } from '@/helpers/order-helper.js';
|
||||||
import routerParams from '@/router/router-constants/router-params';
|
import routerParams from '@/router/router-constants/router-params';
|
||||||
import canBailoutNavigateBack from '@/helpers/bailout-helper';
|
import canBailoutNavigateBack from '@/helpers/bailout-helper';
|
||||||
import bailoutMessage from '@/constants/bailoutMessage';
|
|
||||||
import navigationScenarios from './router-constants/navigation-scenarios';
|
|
||||||
import submitType from '@/constants/submit-type';
|
import submitType from '@/constants/submit-type';
|
||||||
|
import navigationScenarios from './router-constants/navigation-scenarios';
|
||||||
|
|
||||||
const routes = [
|
const routes = [
|
||||||
{
|
{
|
||||||
|
|
@ -28,6 +27,7 @@ const routes = [
|
||||||
async beforeEnter(to, from, next) {
|
async beforeEnter(to, from, next) {
|
||||||
try {
|
try {
|
||||||
const issPageToUse = !to.query.issPage ? issPageValues.WELCOME_PAGE : to.query.issPage;
|
const issPageToUse = !to.query.issPage ? issPageValues.WELCOME_PAGE : to.query.issPage;
|
||||||
|
const fromQueryPage = from.query?.issPage;
|
||||||
|
|
||||||
if ((issPageToUse === issPageValues.ACCESS_DENIED
|
if ((issPageToUse === issPageValues.ACCESS_DENIED
|
||||||
|| (issPageToUse !== issPageValues.ENTRY_PAGE && !useMainStore().issConfig.parentAccountNumber))
|
|| (issPageToUse !== issPageValues.ENTRY_PAGE && !useMainStore().issConfig.parentAccountNumber))
|
||||||
|
|
@ -61,7 +61,11 @@ const routes = [
|
||||||
}
|
}
|
||||||
|
|
||||||
// Process ISS cookie.
|
// Process ISS cookie.
|
||||||
updateOrCreateISSCookie();
|
// Skip if Entry Page or Refreshing Welcome page
|
||||||
|
if (issPageToUse !== issPageValues.ENTRY_PAGE
|
||||||
|
&& !(issPageToUse === issPageValues.WELCOME_PAGE && fromQueryPage === undefined)) {
|
||||||
|
updateOrCreateISSCookie();
|
||||||
|
}
|
||||||
|
|
||||||
if (router.hasRoute(issPageToUse)) {
|
if (router.hasRoute(issPageToUse)) {
|
||||||
// Since our route is already in scope, we can grab the component and call the arePagePrerequisitesValid function.
|
// Since our route is already in scope, we can grab the component and call the arePagePrerequisitesValid function.
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,6 @@ import issPageValues from '@/router/router-constants/issPage-values';
|
||||||
import damageLocationsSelected from '@/constants/damage-locations-selected';
|
import damageLocationsSelected from '@/constants/damage-locations-selected';
|
||||||
import coverageStatuses from '@/constants/coverage-statuses';
|
import coverageStatuses from '@/constants/coverage-statuses';
|
||||||
import { AppointmentTypeStrings } from '@/constants/schedule-constants';
|
import { AppointmentTypeStrings } from '@/constants/schedule-constants';
|
||||||
import { deepClone } from '@/helpers/object-helper';
|
|
||||||
import { convertDateStringToDate, getDateDifferenceInDays, militaryToTwelveHourTime } from '@/helpers/date-helper';
|
import { convertDateStringToDate, getDateDifferenceInDays, militaryToTwelveHourTime } from '@/helpers/date-helper';
|
||||||
import { paymentMethods } from '@/constants/payment-method-constants';
|
import { paymentMethods } from '@/constants/payment-method-constants';
|
||||||
import webStorageConstants from '@/constants/web-storage-constants';
|
import webStorageConstants from '@/constants/web-storage-constants';
|
||||||
|
|
@ -212,6 +211,7 @@ export const getDefaultState = () => ({
|
||||||
originalDeductible: null,
|
originalDeductible: null,
|
||||||
currentDeductible: null,
|
currentDeductible: null,
|
||||||
carrierPhoneNumber: null,
|
carrierPhoneNumber: null,
|
||||||
|
loadedFromCookie: null,
|
||||||
loadedFromDupeCheck: null,
|
loadedFromDupeCheck: null,
|
||||||
loadedSessionClearedPreviousData: null,
|
loadedSessionClearedPreviousData: null,
|
||||||
availableVaps: null
|
availableVaps: null
|
||||||
|
|
@ -240,6 +240,7 @@ export const getDefaultState = () => ({
|
||||||
isCoverageEnabled: false, // Indicates if we should be calling coverage on this flow.
|
isCoverageEnabled: false, // Indicates if we should be calling coverage on this flow.
|
||||||
isClaimRegistrationRequired: false, // Indicates if the claim registration call needs to be made for a client to complete coverage verification.
|
isClaimRegistrationRequired: false, // Indicates if the claim registration call needs to be made for a client to complete coverage verification.
|
||||||
isAuthenticated: false, // Indicates if user is authenticated or not.
|
isAuthenticated: false, // Indicates if user is authenticated or not.
|
||||||
|
enableContinueFromCookie: false, // Indicates if the continue from cookie should appear.
|
||||||
enableTPAFlow: false, // Indicates if the TPA flow is supported for this client.
|
enableTPAFlow: false, // Indicates if the TPA flow is supported for this client.
|
||||||
successReturnURL: null, // Client URL to return the user to upon a successfull flow completetion (order submission).
|
successReturnURL: null, // Client URL to return the user to upon a successfull flow completetion (order submission).
|
||||||
failureReturnURL: null, // Client URL to return the user to when they encounter an error or bailout and are unable to complete the flow.
|
failureReturnURL: null, // Client URL to return the user to when they encounter an error or bailout and are unable to complete the flow.
|
||||||
|
|
@ -1369,7 +1370,18 @@ export const useMainStore = defineStore({
|
||||||
}, (error) => reject(error));
|
}, (error) => reject(error));
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
async getReferralByPayload(payload) {
|
||||||
|
return await globalMethods.callHttpClient({
|
||||||
|
method: endpoints.LoadSession.method,
|
||||||
|
endpoint: endpoints.LoadSession.url,
|
||||||
|
payload: {
|
||||||
|
referralNumber: payload.referralNumber,
|
||||||
|
referralDate: payload.responseDate,
|
||||||
|
parentAccountNumber: payload.parentAccountNumber,
|
||||||
|
referralCorrelationId: payload.correlationId
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
async loadSession(duplicate) {
|
async loadSession(duplicate) {
|
||||||
const { order, issConfig } = this;
|
const { order, issConfig } = this;
|
||||||
const response = await globalMethods.callHttpClient({
|
const response = await globalMethods.callHttpClient({
|
||||||
|
|
@ -1450,6 +1462,97 @@ export const useMainStore = defineStore({
|
||||||
order.loadedFromDupeCheck = true;
|
order.loadedFromDupeCheck = true;
|
||||||
order.loadedSessionClearedPreviousData = false;
|
order.loadedSessionClearedPreviousData = false;
|
||||||
},
|
},
|
||||||
|
async loadSessionFromCookie(cookie) {
|
||||||
|
const { order, issConfig } = this;
|
||||||
|
// eslint-disable-next-line no-useless-catch
|
||||||
|
try {
|
||||||
|
const response = await this.getReferralByPayload(cookie);
|
||||||
|
const { data } = response;
|
||||||
|
if (!data) {
|
||||||
|
// TODO how should we handle this case?
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
|
||||||
|
order.customer.address.streetAddress = data.customer?.address?.streetAddress;
|
||||||
|
order.customer.address.streetAddress2 = data.customer?.address?.streetAddress2;
|
||||||
|
order.customer.address.city = data.customer?.address?.city;
|
||||||
|
order.customer.address.state = data.customer?.address?.state;
|
||||||
|
order.customer.address.zipCode = data.customer?.address?.zipCode;
|
||||||
|
order.customer.emailAddress = data.customer?.emailAddress;
|
||||||
|
|
||||||
|
order.contactInfo.firstName = data?.customer?.firstName;
|
||||||
|
order.contactInfo.lastName = data?.customer?.lastName;
|
||||||
|
order.contactInfo.emailAddress = data?.customer?.emailAddress;
|
||||||
|
order.contactInfo.homePhone = data?.customer?.homePhone;
|
||||||
|
order.contactInfo.servicePhone = data?.customer?.servicePhone;
|
||||||
|
order.contactInfo.alternativePhone = data?.customer?.alternativePhone;
|
||||||
|
order.contactInfo.requestTextUpdates = data?.customer?.isSmsOptIn;
|
||||||
|
|
||||||
|
if (data.insuranceCoverage) {
|
||||||
|
order.insuranceCoverage.coverageType = data?.insuranceCoverage?.coverageType;
|
||||||
|
order.insuranceCoverage.coverageStatus = data?.insuranceCoverage?.coverageStatus;
|
||||||
|
order.insuranceCoverage.claimNumber = data?.insuranceCoverage?.claimNumber;
|
||||||
|
} else if (data?.payment?.insuranceCoverage) {
|
||||||
|
if (data?.payment?.insuranceCoverage?.isVerified) {
|
||||||
|
order.insuranceCoverage.coverageStatus = coverageStatuses.VERIFIED;
|
||||||
|
}
|
||||||
|
order.insuranceCoverage.claimNumber = data?.payment?.insuranceCoverage?.claimNumber;
|
||||||
|
} else {
|
||||||
|
order.customer.firstName = data?.customer?.firstName;
|
||||||
|
order.customer.lastName = data?.customer?.lastName;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (order.policy.vehicles.length !== 0 && data.vehicle?.carId) {
|
||||||
|
order.vehicle.registration.licensePlate = data?.vehicle?.licensePlateNumber;
|
||||||
|
if (data.vehicle.vin) {
|
||||||
|
const vehicle = order.policy.vehicles.find((v) => v.vin === data.vehicle.vin);
|
||||||
|
if (vehicle) {
|
||||||
|
const vehicleResponse = await this.lookupVehicleByVin(vehicle.vin);
|
||||||
|
if (vehicleResponse) {
|
||||||
|
this.updateVehicle({
|
||||||
|
...vehicleResponse.data,
|
||||||
|
policyVehicleId: vehicle.id,
|
||||||
|
vin: vehicle.vin
|
||||||
|
});
|
||||||
|
this.updateVehicleCoverage({
|
||||||
|
noCoverage: noCoverageForSelectedVehicle(vehicle),
|
||||||
|
deductible: deductibleForSelectedVehicle(vehicle),
|
||||||
|
repairWaived: repairWaivedForSelectedVehicle(vehicle),
|
||||||
|
endorsements: endorsementsForSelectedVehicle(vehicle)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
order.vehicle.year = data.vehicle.year;
|
||||||
|
order.vehicle.make = data.vehicle.make;
|
||||||
|
order.vehicle.model = data.vehicle.model;
|
||||||
|
order.vehicle.style = data.vehicle.style;
|
||||||
|
}
|
||||||
|
|
||||||
|
order.policy.damageCause = data?.policy?.damageCause;
|
||||||
|
order.policy.damageCity = data?.policy?.damageCity;
|
||||||
|
order.policy.damageState = data?.policy?.damageState;
|
||||||
|
order.policy.dateOfLoss = data?.policy?.dateOfLoss;
|
||||||
|
order.policy.isDamageGlassOnly = data?.policy?.isDamageGlassOnly;
|
||||||
|
order.policy.policyNumber = data?.policy?.policyNumber;
|
||||||
|
order.policy.policyZipCode = data?.policy?.policyZipCode;
|
||||||
|
|
||||||
|
order.referralNumber = data?.referralNumber;
|
||||||
|
order.referralDate = data?.referralDate;
|
||||||
|
order.referralCorrelationId = data?.referralCorrelationId;
|
||||||
|
order.referralSequenceNumber = data?.referralSequenceNumber;
|
||||||
|
order.eon = data?.eon;
|
||||||
|
order.loadedFromCookie = true;
|
||||||
|
order.loadedSessionClearedPreviousData = false;
|
||||||
|
issConfig.enableContinueFromCookie = false;
|
||||||
|
|
||||||
|
return data;
|
||||||
|
} catch (ex) {
|
||||||
|
// TODO how should we handle this case?
|
||||||
|
throw ex;
|
||||||
|
}
|
||||||
|
},
|
||||||
updateCreditCardToken(token) {
|
updateCreditCardToken(token) {
|
||||||
this.order.payment.creditCardToken.subscriptionId = token.subscriptionId;
|
this.order.payment.creditCardToken.subscriptionId = token.subscriptionId;
|
||||||
this.order.payment.creditCardToken.expMonth = token.expMonth;
|
this.order.payment.creditCardToken.expMonth = token.expMonth;
|
||||||
|
|
@ -1855,6 +1958,7 @@ export const useMainStore = defineStore({
|
||||||
this.issConfig.styleSheet = '';
|
this.issConfig.styleSheet = '';
|
||||||
this.issConfig.isCoverageEnabled = false;
|
this.issConfig.isCoverageEnabled = false;
|
||||||
this.issConfig.isAuthenticated = false;
|
this.issConfig.isAuthenticated = false;
|
||||||
|
this.issConfig.enableContinueFromCookie = false;
|
||||||
this.issConfig.enableTPAFlow = false;
|
this.issConfig.enableTPAFlow = false;
|
||||||
this.issConfig.isClaimRegistrationRequired = false;
|
this.issConfig.isClaimRegistrationRequired = false;
|
||||||
this.issConfig.successReturnURL = null;
|
this.issConfig.successReturnURL = null;
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue