Partial fixes

This commit is contained in:
Michaela Brydon 2023-11-30 11:14:31 -05:00
parent cdac218b41
commit d7fcadb1f0

View file

@ -37,14 +37,14 @@
</div> </div>
</div> </div>
</Form> </Form>
<loader <!-- <loader
v-if="initialLoading" v-if="initialLoading"
id="mapLoader" id="mapLoader"
loaderPosition="center" loaderPosition="center"
loaderColor="blue" loaderColor="blue"
:width="4" :width="4"
:height="4" /> :height="4" /> -->
<div v-else> <div>
<googleMap <googleMap
id="map" id="map"
class="mb-4" class="mb-4"
@ -70,8 +70,8 @@
id="providersLoader" id="providersLoader"
loaderPosition="center" loaderPosition="center"
loaderColor="blue" loaderColor="blue"
:width="4" :width="2"
:height="4" :height="2"
class="my-4" /> class="my-4" />
<div v-else> <div v-else>
<div class="my-4"> <div class="my-4">
@ -134,13 +134,41 @@ import loader from '@/ux-components/loader/loader.vue';
// Supporting files // Supporting files
import { fetchCmsContentForPage } from '@/helpers/cms-content-helper'; import { fetchCmsContentForPage } from '@/helpers/cms-content-helper';
import settleAllPromises from '@/helpers/layout-helper';
import { useMainStore } from '@/store'; import { useMainStore } from '@/store';
import BaseFormMixin from '@/mixins/base-form-mixin.js'; 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';
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 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;
}
}
}
return [
filter,
providers?.data?.shopProviders ?? []
];
}
export default { export default {
name: 'tpa-search', name: 'tpa-search',
components: { components: {
@ -158,29 +186,24 @@ export default {
}, },
mixins: [BaseFormMixin], mixins: [BaseFormMixin],
async beforeRouteEnter(to, from, next) { async beforeRouteEnter(to, from, next) {
const cmsContentPromise = fetchCmsContentForPage(to.query.issPage); const [filter, providers] = await getInitialFilterAndProviders();
const promiseResultMap = [ const cmsContent = await fetchCmsContentForPage(to.query.issPage);
{
resultKey: 'cmsContent',
promise: cmsContentPromise
}
];
const resultMap = await settleAllPromises(promiseResultMap);
next(async (vm) => { next(async (vm) => {
vm.setCmsContent(resultMap.cmsContent); vm.setCmsContent(cmsContent);
await vm.setInitialFilterAndProviders(); vm.setFilter(filter);
vm.setProviders(providers);
}); });
}, },
data() { data() {
const { zipCode } = useMainStore().order.customer.address; const { zipCode } = useMainStore().order.customer.address;
return { return {
dataLoaded: false,
zipCode, zipCode,
mapZipCode: zipCode, mapZipCode: zipCode,
filter: '', filter: '',
providers: [], providers: [],
selectedProviderNumber: '', selectedProviderNumber: '',
initialLoading: false,
reloadProviders: false, reloadProviders: false,
additionalButtonData: { additionalButtonData: {
displayAvailabilityIndicators: false displayAvailabilityIndicators: false
@ -234,6 +257,8 @@ export default {
}, },
radiusInMiles() { radiusInMiles() {
switch (this.filter) { switch (this.filter) {
case '15 miles':
return 15;
case '25 miles': case '25 miles':
return 25; return 25;
case '50 miles': case '50 miles':
@ -262,15 +287,13 @@ export default {
}, },
watch: { watch: {
async filter() { async filter() {
if (!this.initialLoading) { if (this.dataLoaded) {
this.reloadProviders = true; this.reloadProviders = true;
await this.getProviderButtonData().then((providers) => { await this.getProviderButtonData().then((providers) => {
this.providers = providers; this.providers = providers;
}); });
this.mapZipCode = this.zipCode; this.mapZipCode = this.zipCode;
this.reloadProviders = false; this.reloadProviders = false;
} else {
this.initialLoading = false;
} }
}, },
async providers(newProviders) { async providers(newProviders) {
@ -279,8 +302,12 @@ export default {
} }
} }
}, },
methods: beforeUpdate() {
{ if (!this.dataLoaded) {
this.dataLoaded = true;
}
},
methods: {
getProviderAddress(provider) { getProviderAddress(provider) {
const city = provider?.address?.city ?? ''; const city = provider?.address?.city ?? '';
const state = provider?.address?.state ?? ''; const state = provider?.address?.state ?? '';
@ -308,27 +335,11 @@ export default {
? `${provider.address.streetAddress}, ${addressLine2}` ? `${provider.address.streetAddress}, ${addressLine2}`
: addressLine2; : addressLine2;
}, },
async setInitialFilterAndProviders() { setFilter(filter) {
this.initialLoading = true; this.filter = filter;
const radiusOptions = [25, 50, 100]; },
const { zipCode } = useMainStore().order.customer.address; setProviders(providers) {
this.providers = providers;
const tpaProvidersRadius25 = useMainStore().getTpaProviders(zipCode, radiusOptions[0]);
const tpaProvidersRadius50 = useMainStore().getTpaProviders(zipCode, radiusOptions[1]);
const tpaProvidersRadius100 = useMainStore().getTpaProviders(zipCode, radiusOptions[2]);
let radius = '25 miles';
let providers = await tpaProvidersRadius25;
if ((providers?.data?.shopProviders ?? []).length === 0) {
radius = '50 miles';
providers = await tpaProvidersRadius50;
if ((providers?.data?.shopProviders ?? []).length === 0) {
radius = '100 miles';
providers = await tpaProvidersRadius100;
}
}
this.filter = radius;
this.providers = providers?.data?.shopProviders ?? [];
}, },
async getProviderButtonData() { async getProviderButtonData() {
const getTpaProvidersResult = await useMainStore().getTpaProviders(this.zipCode, this.radiusInMiles); const getTpaProvidersResult = await useMainStore().getTpaProviders(this.zipCode, this.radiusInMiles);
@ -364,7 +375,7 @@ export default {
} }
}, },
getShopButtonDataFromProvider(provider) { getShopButtonDataFromProvider(provider) {
const cellNumber = provider?.phoneNumber ?? ''; const cellNumber = this.getDisplayPhoneNumber(provider?.phoneNumber ?? '');
const distance = provider?.distanceInMiles !== null && !Number.isNaN(parseFloat(provider?.distanceInMiles)) const distance = provider?.distanceInMiles !== null && !Number.isNaN(parseFloat(provider?.distanceInMiles))
? +provider.distanceInMiles.toFixed(1) ? +provider.distanceInMiles.toFixed(1)
: null; : null;
@ -377,6 +388,18 @@ export default {
buttonBodyCopy: `${this.getProviderAddress(provider)}<br>${cellNumber ?? ''}`, buttonBodyCopy: `${this.getProviderAddress(provider)}<br>${cellNumber ?? ''}`,
value: provider?.providerNumber ?? '' value: provider?.providerNumber ?? ''
}; };
},
getDisplayPhoneNumber(phoneNumber) {
let result = '';
let remainingDigits = phoneNumber;
if (phoneNumber.length === 11) {
result += `${remainingDigits[0]}-`;
remainingDigits = remainingDigits.substring(1);
}
if (phoneNumber.length > 9) {
result += remainingDigits.replace(/^(\d{3})(\d{3})(\d{4})/, '$1-$2-$3');
}
return result;
} }
} }
}; };