From da3459ce4f21f7ee746489e6545f0e91801cdd53 Mon Sep 17 00:00:00 2001 From: Michaela Brydon Date: Tue, 16 Jan 2024 12:54:29 -0500 Subject: [PATCH] Prepopulating tpa search page when return --- src/layouts/tpa-search/tpa-search.vue | 66 +++++++++++++------- src/router/router-constants/routing-table.js | 2 +- src/store/index.js | 2 + 3 files changed, 46 insertions(+), 24 deletions(-) diff --git a/src/layouts/tpa-search/tpa-search.vue b/src/layouts/tpa-search/tpa-search.vue index fb1cd7b1..25610da5 100644 --- a/src/layouts/tpa-search/tpa-search.vue +++ b/src/layouts/tpa-search/tpa-search.vue @@ -131,10 +131,8 @@ import BaseFormMixin from '@/mixins/base-form-mixin.js'; import globalRules from '@/constants/global-rules.js'; import widgetFields from '@/constants/cms-widget-fields.js'; import { shallowRef } from 'vue'; -import routerParams from '@/router/router-constants/router-params'; 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 = [ { radius: 15, filter: '15 miles' }, @@ -143,15 +141,35 @@ const radiusFilterPairs = [ { radius: 100, filter: '100 miles' } ]; -async function getInitialFilterAndProviders() { - const { zipCode } = useMainStore().order.customer.address; +function convertRadiusFilterToInteger(filter) { + 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 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 = ''; while (providers.length === 0 && pairIndex < radiusFilterPairs.length) { const pair = radiusFilterPairs[pairIndex]; - const { radius } = pair; + radius = pair.radius; filter = pair.filter; // eslint-disable-next-line no-await-in-loop const result = await useMainStore().getTpaProviders(zipCode, radius); @@ -160,7 +178,7 @@ async function getInitialFilterAndProviders() { pairIndex += 1; } - return { filter, providers }; + return { zipCode, filter, providers, providerNumber }; } export default { @@ -180,21 +198,19 @@ export default { }, mixins: [BaseFormMixin], async beforeRouteEnter(to, from, next) { - const { filter, providers } = await getInitialFilterAndProviders(); + const { zipCode, filter, providers, providerNumber } = await getInitialSearchData(); const cmsContent = await fetchCmsContentForPage(to.query.issPage); next(async (vm) => { vm.setCmsContent(cmsContent); - vm.setFilter(filter); - vm.setProviders(providers); + vm.setInitialSearchData(zipCode, filter, providers, providerNumber); }); }, data() { - const { zipCode } = useMainStore().order.customer.address; return { dataLoaded: false, - zipCode, - mapZipCode: zipCode, + zipCode: null, + mapZipCode: null, filter: '', providers: [], selectedProviderNumber: '', @@ -250,8 +266,7 @@ export default { ); }, radiusInMiles() { - const pair = radiusFilterPairs.find((p) => p.filter === this.filter); - return pair?.radius ?? 0; + return convertRadiusFilterToInteger(this.filter); }, noNetworkShopsAlertHeaderText() { return this.getCmsContent( @@ -279,14 +294,18 @@ export default { } }, providers(newProviders) { - this.selectedProviderNumber = newProviders?.length === 1 ?? false - ? newProviders[0]?.providerNumber ?? '' - : ''; + if (this.dataLoaded) { + this.selectedProviderNumber = newProviders?.length === 1 ?? false + ? newProviders[0]?.providerNumber ?? '' + : ''; + } }, selectedProviderNumber(newNumber) { const provider = this.providers?.find((p) => p.providerNumber === newNumber); - if (provider) { + if (provider && this.dataLoaded) { useMainStore().updateServiceLocation({ + searchFilter: this.filter, + zipCode: this.zipCode, provider: { providerNumber: provider?.providerNumber, address: { @@ -309,11 +328,12 @@ export default { } }, methods: { - setFilter(filter) { + setInitialSearchData(zipCode, filter, providers, providerNumber) { + this.zipCode = zipCode; + this.mapZipCode = zipCode; this.filter = filter; - }, - setProviders(providers) { this.providers = providers; + this.selectedProviderNumber = providerNumber; }, getProviderAddress(provider) { const city = toTitleCase(provider?.address?.city); diff --git a/src/router/router-constants/routing-table.js b/src/router/router-constants/routing-table.js index fc1bfdb5..9891ef39 100644 --- a/src/router/router-constants/routing-table.js +++ b/src/router/router-constants/routing-table.js @@ -671,7 +671,7 @@ const routingTable = () => [ }, { scenario: navigationScenarios.EDIT_PREFERRED_SHOP, - destinationIssPageValue: issPageValues.PROVIDER_PREFERENCE + destinationIssPageValue: issPageValues.TPA_SEARCH }, { scenario: navigationScenarios.EDIT_CONTACT_DETAILS, diff --git a/src/store/index.js b/src/store/index.js index 1c2667a9..0249b80c 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -122,6 +122,7 @@ const getDefaultState = () => ({ appointmentType: null, isVehicleProtected: null, IsSafeliteProvider: null, + searchFilter: null, provider: { providerNumber: null, address: { @@ -1373,6 +1374,7 @@ export const useMainStore = defineStore({ companyName: serviceLocationInfo.provider?.companyName, phoneNumber: serviceLocationInfo.provider?.phoneNumber }; + this.order.serviceLocation.searchFilter = serviceLocationInfo.searchFilter; }, resetRegistrationState() {