diff --git a/src/layouts/tpa-search/__snapshots__/tpa-search.spec.js.snap b/src/layouts/tpa-search/__snapshots__/tpa-search.spec.js.snap index 236f821c..fc429c1b 100644 --- a/src/layouts/tpa-search/__snapshots__/tpa-search.spec.js.snap +++ b/src/layouts/tpa-search/__snapshots__/tpa-search.spec.js.snap @@ -9,6 +9,20 @@ Object { "initialLoading": false, "mapZipCode": "12663", "providers": Array [], + "radiusFilterPairs": Array [ + Object { + "filter": "25 miles", + "radius": 25, + }, + Object { + "filter": "50 miles", + "radius": 50, + }, + Object { + "filter": "100 miles", + "radius": 100, + }, + ], "reloadProviders": false, "rules": Object { "filter": "option-required", diff --git a/src/layouts/tpa-search/tpa-search.spec.js b/src/layouts/tpa-search/tpa-search.spec.js index 233d2194..d8185733 100644 --- a/src/layouts/tpa-search/tpa-search.spec.js +++ b/src/layouts/tpa-search/tpa-search.spec.js @@ -1264,6 +1264,7 @@ describe('TPA search page', () => { // Assert expect(wrapper.vm.filter).toBe(expectedFilter); expect(wrapper.vm.providers).toEqual(providers); + expect(useMainStore().getTpaProviders).toBeCalledTimes(1); }); test('when providers exist at 50 mile radius but not 25, filter is set to "50 miles" and providers set to expected', async () => { // Arrange @@ -1289,6 +1290,7 @@ describe('TPA search page', () => { // Assert expect(wrapper.vm.filter).toBe(expectedFilter); expect(wrapper.vm.providers).toEqual(providers); + expect(useMainStore().getTpaProviders).toBeCalledTimes(2); }); test( 'when providers exist at 100 mile radius but not 50 or 25, filter is set to "100 miles" and providers set to expected', @@ -1316,6 +1318,7 @@ describe('TPA search page', () => { // Assert expect(wrapper.vm.filter).toBe(expectedFilter); expect(wrapper.vm.providers).toEqual(providers); + expect(useMainStore().getTpaProviders).toBeCalledTimes(3); } ); test( @@ -1342,6 +1345,7 @@ describe('TPA search page', () => { // Assert expect(wrapper.vm.filter).toBe(expectedFilter); expect(wrapper.vm.providers).toEqual([]); + expect(useMainStore().getTpaProviders).toBeCalledTimes(3); } ); }); diff --git a/src/layouts/tpa-search/tpa-search.vue b/src/layouts/tpa-search/tpa-search.vue index ba346dff..a2ec4231 100644 --- a/src/layouts/tpa-search/tpa-search.vue +++ b/src/layouts/tpa-search/tpa-search.vue @@ -141,32 +141,23 @@ import widgetFields from '@/constants/cms-widget-fields.js'; import { shallowRef } from 'vue'; async function getInitialFilterAndProviders() { - const radiusOptions = [15, 25, 50, 100]; const { zipCode } = useMainStore().order.customer.address; - const tpaProvidersRadius15 = useMainStore().getTpaProviders(zipCode, radiusOptions[0]); - const tpaProvidersRadius25 = useMainStore().getTpaProviders(zipCode, radiusOptions[1]); - const tpaProvidersRadius50 = useMainStore().getTpaProviders(zipCode, radiusOptions[2]); - const tpaProvidersRadius100 = useMainStore().getTpaProviders(zipCode, radiusOptions[3]); + let pairIndex = 0; + let providers = []; + let filter = ''; + while (providers.length === 0 && pairIndex < this.radiusFilterPairs.length) { + const pair = this.radiusFilterPairs[pairIndex]; + const { radius } = pair; + filter = pair.filter; + // eslint-disable-next-line no-await-in-loop + const result = await useMainStore().getTpaProviders(zipCode, radius); + providers = result?.data?.shopProviders ?? []; - let filter = '15 miles'; - let providers = await tpaProvidersRadius15; - if ((providers?.data?.shopProviders ?? []).length === 0) { - filter = '25 miles'; - providers = await tpaProvidersRadius25; - if ((providers?.data?.shopProviders ?? []).length === 0) { - filter = '50 miles'; - providers = await tpaProvidersRadius50; - if ((providers?.data?.shopProviders ?? []).length === 0) { - filter = '100 miles'; - providers = await tpaProvidersRadius100; - } - } + pairIndex += 1; } - return [ - filter, - providers?.data?.shopProviders ?? [] - ]; + + return {filter, providers}; } export default { @@ -186,7 +177,7 @@ export default { }, mixins: [BaseFormMixin], async beforeRouteEnter(to, from, next) { - const [filter, providers] = await getInitialFilterAndProviders(); + const { filter, providers } = await getInitialFilterAndProviders(); const cmsContent = await fetchCmsContentForPage(to.query.issPage); next(async (vm) => { @@ -222,7 +213,13 @@ export default { filter: globalRules.OPTION_REQUIRED, // TODO do we even need this? provider: globalRules.OPTION_REQUIRED }, - shopListButton: shallowRef(shopListButton) + shopListButton: shallowRef(shopListButton), + radiusFilterPairs: [ + { radius: 15, filter: '15 miles' }, + { radius: 25, filter: '25 miles' }, + { radius: 50, filter: '50 miles' }, + { radius: 100, filter: '100 miles' } + ] }; }, computed: { @@ -256,18 +253,8 @@ export default { ); }, radiusInMiles() { - switch (this.filter) { - case '15 miles': - return 15; - case '25 miles': - return 25; - case '50 miles': - return 50; - case '100 miles': - return 100; - default: - return 0; - } + const pair = this.radiusFilterPairs.find((p) => p.filter === this.filter); + return pair?.radius ?? 0; }, noNetworkShopsAlertHeaderText() { return this.getCmsContent( @@ -308,6 +295,12 @@ export default { } }, methods: { + setFilter(filter) { + this.filter = filter; + }, + setProviders(providers) { + this.providers = providers; + }, getProviderAddress(provider) { const city = provider?.address?.city ?? ''; const state = provider?.address?.state ?? ''; @@ -335,12 +328,6 @@ export default { ? `${provider.address.streetAddress}, ${addressLine2}` : addressLine2; }, - setFilter(filter) { - this.filter = filter; - }, - setProviders(providers) { - this.providers = providers; - }, async getProviderButtonData() { const getTpaProvidersResult = await useMainStore().getTpaProviders(this.zipCode, this.radiusInMiles); return getTpaProvidersResult?.data?.shopProviders ?? [];