Prepopulating tpa search page when return

This commit is contained in:
Michaela Brydon 2024-01-16 12:54:29 -05:00
parent 592e21289e
commit da3459ce4f
3 changed files with 46 additions and 24 deletions

View file

@ -131,10 +131,8 @@ import BaseFormMixin from '@/mixins/base-form-mixin.js';
import globalRules from '@/constants/global-rules.js'; import globalRules from '@/constants/global-rules.js';
import widgetFields from '@/constants/cms-widget-fields.js'; import widgetFields from '@/constants/cms-widget-fields.js';
import { shallowRef } from 'vue'; import { shallowRef } from 'vue';
import routerParams from '@/router/router-constants/router-params';
import { toTitleCase, toDisplayPhoneNumber } from '@/helpers/text-helper.js'; import { toTitleCase, toDisplayPhoneNumber } from '@/helpers/text-helper.js';
import bailoutCode from '@/constants/bailoutCode'; import bailoutMessage from '@/constants/bailoutMessage';
import bailoutMessage from "@/constants/bailoutMessage";
const radiusFilterPairs = [ const radiusFilterPairs = [
{ radius: 15, filter: '15 miles' }, { radius: 15, filter: '15 miles' },
@ -143,15 +141,35 @@ const radiusFilterPairs = [
{ radius: 100, filter: '100 miles' } { radius: 100, filter: '100 miles' }
]; ];
async function getInitialFilterAndProviders() { function convertRadiusFilterToInteger(filter) {
const { zipCode } = useMainStore().order.customer.address; const pair = radiusFilterPairs.find((p) => p.filter === filter);
return pair?.radius ?? 0;
}
async function getInitialSearchData() {
const customerZipCode = useMainStore().order.customer.address.zipCode;
const serviceLocationZipCode = useMainStore().order.serviceLocation.zipCode;
const zipCode = serviceLocationZipCode ?? customerZipCode;
const { searchFilter } = useMainStore().order.serviceLocation;
let { providerNumber } = useMainStore().order.serviceLocation.provider;
let pairIndex = 0;
let providers = []; let providers = [];
let radius = 0;
if (searchFilter) {
radius = convertRadiusFilterToInteger(searchFilter);
const result = await useMainStore().getTpaProviders(zipCode, radius);
providers = result?.data?.shopProviders ?? [];
return { zipCode, filter: searchFilter, providers, providerNumber };
}
providerNumber = null;
let pairIndex = 0;
let filter = ''; let filter = '';
while (providers.length === 0 && pairIndex < radiusFilterPairs.length) { while (providers.length === 0 && pairIndex < radiusFilterPairs.length) {
const pair = radiusFilterPairs[pairIndex]; const pair = radiusFilterPairs[pairIndex];
const { radius } = pair; radius = pair.radius;
filter = pair.filter; filter = pair.filter;
// eslint-disable-next-line no-await-in-loop // eslint-disable-next-line no-await-in-loop
const result = await useMainStore().getTpaProviders(zipCode, radius); const result = await useMainStore().getTpaProviders(zipCode, radius);
@ -160,7 +178,7 @@ async function getInitialFilterAndProviders() {
pairIndex += 1; pairIndex += 1;
} }
return { filter, providers }; return { zipCode, filter, providers, providerNumber };
} }
export default { export default {
@ -180,21 +198,19 @@ export default {
}, },
mixins: [BaseFormMixin], mixins: [BaseFormMixin],
async beforeRouteEnter(to, from, next) { async beforeRouteEnter(to, from, next) {
const { filter, providers } = await getInitialFilterAndProviders(); const { zipCode, filter, providers, providerNumber } = await getInitialSearchData();
const cmsContent = await fetchCmsContentForPage(to.query.issPage); const cmsContent = await fetchCmsContentForPage(to.query.issPage);
next(async (vm) => { next(async (vm) => {
vm.setCmsContent(cmsContent); vm.setCmsContent(cmsContent);
vm.setFilter(filter); vm.setInitialSearchData(zipCode, filter, providers, providerNumber);
vm.setProviders(providers);
}); });
}, },
data() { data() {
const { zipCode } = useMainStore().order.customer.address;
return { return {
dataLoaded: false, dataLoaded: false,
zipCode, zipCode: null,
mapZipCode: zipCode, mapZipCode: null,
filter: '', filter: '',
providers: [], providers: [],
selectedProviderNumber: '', selectedProviderNumber: '',
@ -250,8 +266,7 @@ export default {
); );
}, },
radiusInMiles() { radiusInMiles() {
const pair = radiusFilterPairs.find((p) => p.filter === this.filter); return convertRadiusFilterToInteger(this.filter);
return pair?.radius ?? 0;
}, },
noNetworkShopsAlertHeaderText() { noNetworkShopsAlertHeaderText() {
return this.getCmsContent( return this.getCmsContent(
@ -279,14 +294,18 @@ export default {
} }
}, },
providers(newProviders) { providers(newProviders) {
if (this.dataLoaded) {
this.selectedProviderNumber = newProviders?.length === 1 ?? false this.selectedProviderNumber = newProviders?.length === 1 ?? false
? newProviders[0]?.providerNumber ?? '' ? newProviders[0]?.providerNumber ?? ''
: ''; : '';
}
}, },
selectedProviderNumber(newNumber) { selectedProviderNumber(newNumber) {
const provider = this.providers?.find((p) => p.providerNumber === newNumber); const provider = this.providers?.find((p) => p.providerNumber === newNumber);
if (provider) { if (provider && this.dataLoaded) {
useMainStore().updateServiceLocation({ useMainStore().updateServiceLocation({
searchFilter: this.filter,
zipCode: this.zipCode,
provider: { provider: {
providerNumber: provider?.providerNumber, providerNumber: provider?.providerNumber,
address: { address: {
@ -309,11 +328,12 @@ export default {
} }
}, },
methods: { methods: {
setFilter(filter) { setInitialSearchData(zipCode, filter, providers, providerNumber) {
this.zipCode = zipCode;
this.mapZipCode = zipCode;
this.filter = filter; this.filter = filter;
},
setProviders(providers) {
this.providers = providers; this.providers = providers;
this.selectedProviderNumber = providerNumber;
}, },
getProviderAddress(provider) { getProviderAddress(provider) {
const city = toTitleCase(provider?.address?.city); const city = toTitleCase(provider?.address?.city);

View file

@ -671,7 +671,7 @@ const routingTable = () => [
}, },
{ {
scenario: navigationScenarios.EDIT_PREFERRED_SHOP, scenario: navigationScenarios.EDIT_PREFERRED_SHOP,
destinationIssPageValue: issPageValues.PROVIDER_PREFERENCE destinationIssPageValue: issPageValues.TPA_SEARCH
}, },
{ {
scenario: navigationScenarios.EDIT_CONTACT_DETAILS, scenario: navigationScenarios.EDIT_CONTACT_DETAILS,

View file

@ -122,6 +122,7 @@ const getDefaultState = () => ({
appointmentType: null, appointmentType: null,
isVehicleProtected: null, isVehicleProtected: null,
IsSafeliteProvider: null, IsSafeliteProvider: null,
searchFilter: null,
provider: { provider: {
providerNumber: null, providerNumber: null,
address: { address: {
@ -1373,6 +1374,7 @@ export const useMainStore = defineStore({
companyName: serviceLocationInfo.provider?.companyName, companyName: serviceLocationInfo.provider?.companyName,
phoneNumber: serviceLocationInfo.provider?.phoneNumber phoneNumber: serviceLocationInfo.provider?.phoneNumber
}; };
this.order.serviceLocation.searchFilter = serviceLocationInfo.searchFilter;
}, },
resetRegistrationState() { resetRegistrationState() {