diff --git a/src/layouts/scheduling/date-picker/date-picker.vue b/src/layouts/scheduling/date-picker/date-picker.vue
index a7f78cc2c..39ecbded1 100644
--- a/src/layouts/scheduling/date-picker/date-picker.vue
+++ b/src/layouts/scheduling/date-picker/date-picker.vue
@@ -14,23 +14,39 @@
class="date-picker__track d-flex flex-grow-1"
:class="{ 'date-picker__track--loading': isLoadingDates }"
:style="isLoadingDates ? { '--card-count': windowSize } : null">
-
+
+
+
+ MON
+ Jan 00
+
+
+
+
+
({
- resultKey: `inshopTimeSlots_${i}`,
- promise: fetchInshopTimeSlots({
- startDate,
- endDate,
- providerNumber: provider.providerNumber,
+ {
+ resultKey: "providers",
+ promise: store.dispatch("getProviders", {
+ payload: { serviceZipCode },
pageNameToLog: to.name,
}),
- })),
- // Get the mobile time slots if a mobile provider number is available
- ...(mobileProviderNumber
- ? [
- {
- resultKey: "mobileTimeSlots",
- promise: fetchMobileTimeSlots({
- startDate,
- endDate,
- zipCode: serviceZipCode,
- pageNameToLog: to.name,
- }),
- },
- ]
- : []),
+ },
];
const resultMap = await settleAllPromises(promiseResultMap);
- next((vm) => {
+ // Get the first 3 providers from the shopProviderData
+ const providers = resultMap.providers?.shopProviders?.slice(0, 3) ?? [];
+ const mobileProviderNumber = resultMap.providers?.mobileProviderNumber ?? null;
+ next(async (vm) => {
vm.setCmsContent(resultMap.cmsContent);
- vm.inShopProvidersAndTimeslots = providers.map((provider, i) => ({
+ vm.inShopProvidersAndTimeslots = providers.map((provider) => ({
provider,
- timeSlots: resultMap[`inshopTimeSlots_${i}`] ?? null,
+ timeSlots: null,
}));
vm.mobileProviderAndTimeSlot = mobileProviderNumber
- ? {
- providerNumber: mobileProviderNumber,
- timeSlots: resultMap.mobileTimeSlots ?? null,
- }
+ ? { providerNumber: mobileProviderNumber, timeSlots: null }
: null;
+ const startDate = toDateString(0);
+ const endDate = toDateString(SCHEDULE_FETCH_DAYS - 1);
+ const timeSlotsPromiseResultMap = [
+ ...providers.map((provider, i) => ({
+ resultKey: `inshopTimeSlots_${i}`,
+ promise: fetchInshopTimeSlots({
+ startDate,
+ endDate,
+ providerNumber: provider.providerNumber,
+ pageNameToLog: to.name,
+ }),
+ })),
+ // Get the mobile time slots if a mobile provider number is available
+ ...(mobileProviderNumber
+ ? [
+ {
+ resultKey: "mobileTimeSlots",
+ promise: fetchMobileTimeSlots({
+ startDate,
+ endDate,
+ zipCode: serviceZipCode,
+ pageNameToLog: to.name,
+ }),
+ },
+ ]
+ : []),
+ ];
+ const timeSlotsResultMap = await settleAllPromises(timeSlotsPromiseResultMap);
+ vm.inShopProvidersAndTimeslots.forEach((entry, i) => {
+ entry.timeSlots = timeSlotsResultMap[`inshopTimeSlots_${i}`] ?? null;
+ });
+ if (vm.mobileProviderAndTimeSlot) {
+ vm.mobileProviderAndTimeSlot.timeSlots = timeSlotsResultMap.mobileTimeSlots ?? null;
+ }
vm.datesLoaded = true;
vm.mobilePremiumAppointmentFee = resultMap.mobilePremiumFee ?? null;
+ vm.isLoadingDates = false;
});
},
watch: {
@@ -217,7 +225,12 @@ export default {
return store.getters.order.serviceLocation.zipCode;
},
showMobileSchedulingCard() {
- return Boolean(this.mobileProviderAndTimeSlot && this.selectedDate);
+ return Boolean(
+ this.mobileProviderAndTimeSlot && (this.selectedDate || this.isLoadingDates)
+ );
+ },
+ showInshopSchedulingCards() {
+ return this.selectedDate || this.isLoadingDates;
},
mobileTimeSlotsForSelectedDate() {
if (!this.selectedDate) {
@@ -251,7 +264,7 @@ export default {
data() {
return {
selectedDate: null,
- isLoadingDates: false,
+ isLoadingDates: true,
datesLoaded: false,
datePickerStartDate: toDateString(0),
datePickerEndDate: toDateString(SCHEDULE_FETCH_DAYS - 1),