Reduce duplicated code
This commit is contained in:
parent
2eb4d6016a
commit
04b130db11
1 changed files with 74 additions and 73 deletions
|
|
@ -197,6 +197,58 @@ function fetchMobileTimeSlots({ startDate, endDate, zipCode, pageNameToLog }) {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fetches inshop time slots (when providers are given) and mobile time slots (when requested)
|
||||||
|
* for a date range, settling both requests together. Either request is omitted entirely when
|
||||||
|
* it has no applicable providers/zip, rather than firing an empty/unnecessary call.
|
||||||
|
* @param {{
|
||||||
|
* startDate: string,
|
||||||
|
* endDate: string,
|
||||||
|
* providerNumbers: string[],
|
||||||
|
* zipCode?: string,
|
||||||
|
* includeMobile?: boolean,
|
||||||
|
* pageNameToLog: string,
|
||||||
|
* }} params
|
||||||
|
* @returns {Promise<{ inshopTimeSlots?: any, mobileTimeSlots?: any }>}
|
||||||
|
*/
|
||||||
|
function fetchTimeSlotsBatch({
|
||||||
|
startDate,
|
||||||
|
endDate,
|
||||||
|
providerNumbers,
|
||||||
|
zipCode,
|
||||||
|
includeMobile,
|
||||||
|
pageNameToLog,
|
||||||
|
}) {
|
||||||
|
return settleAllPromises([
|
||||||
|
...(providerNumbers.length
|
||||||
|
? [
|
||||||
|
{
|
||||||
|
resultKey: "inshopTimeSlots",
|
||||||
|
promise: fetchInshopTimeSlots({
|
||||||
|
startDate,
|
||||||
|
endDate,
|
||||||
|
providerNumbers,
|
||||||
|
pageNameToLog,
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
]
|
||||||
|
: []),
|
||||||
|
...(includeMobile
|
||||||
|
? [
|
||||||
|
{
|
||||||
|
resultKey: "mobileTimeSlots",
|
||||||
|
promise: fetchMobileTimeSlots({
|
||||||
|
startDate,
|
||||||
|
endDate,
|
||||||
|
zipCode,
|
||||||
|
pageNameToLog,
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
]
|
||||||
|
: []),
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "scheduling",
|
name: "scheduling",
|
||||||
async beforeRouteEnter(to, from, next) {
|
async beforeRouteEnter(to, from, next) {
|
||||||
|
|
@ -238,36 +290,14 @@ export default {
|
||||||
const startDate = toDateString(0);
|
const startDate = toDateString(0);
|
||||||
const endDate = toDateString(SCHEDULE_FETCH_DAYS - 1);
|
const endDate = toDateString(SCHEDULE_FETCH_DAYS - 1);
|
||||||
const providerNumbers = providers.map((provider) => provider.providerNumber);
|
const providerNumbers = providers.map((provider) => provider.providerNumber);
|
||||||
const timeSlotsPromiseResultMap = [
|
const timeSlotsResultMap = await fetchTimeSlotsBatch({
|
||||||
...(providerNumbers.length
|
startDate,
|
||||||
? [
|
endDate,
|
||||||
{
|
providerNumbers,
|
||||||
resultKey: "inshopTimeSlots",
|
zipCode: serviceZipCode,
|
||||||
promise: fetchInshopTimeSlots({
|
includeMobile: Boolean(mobileProviderNumber),
|
||||||
startDate,
|
pageNameToLog: to.name,
|
||||||
endDate,
|
});
|
||||||
providerNumbers,
|
|
||||||
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);
|
|
||||||
assignInshopTimeSlotsFromV2Response(
|
assignInshopTimeSlotsFromV2Response(
|
||||||
vm.inshopProvidersAndTimeSlots,
|
vm.inshopProvidersAndTimeSlots,
|
||||||
timeSlotsResultMap.inshopTimeSlots
|
timeSlotsResultMap.inshopTimeSlots
|
||||||
|
|
@ -398,19 +428,12 @@ export default {
|
||||||
this.isLoadingMoreShops = true;
|
this.isLoadingMoreShops = true;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const resultMap = await settleAllPromises([
|
const resultMap = await fetchTimeSlotsBatch({
|
||||||
{
|
startDate: this.datePickerStartDate,
|
||||||
resultKey: "inshopTimeSlots",
|
endDate: this.datePickerEndDate,
|
||||||
promise: fetchInshopTimeSlots({
|
providerNumbers: newProviders.map((provider) => provider.providerNumber),
|
||||||
startDate: this.datePickerStartDate,
|
pageNameToLog: this.pageName,
|
||||||
endDate: this.datePickerEndDate,
|
});
|
||||||
providerNumbers: newProviders.map(
|
|
||||||
(provider) => provider.providerNumber
|
|
||||||
),
|
|
||||||
pageNameToLog: this.pageName,
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
]);
|
|
||||||
assignInshopTimeSlotsFromV2Response(newEntries, resultMap.inshopTimeSlots);
|
assignInshopTimeSlotsFromV2Response(newEntries, resultMap.inshopTimeSlots);
|
||||||
} finally {
|
} finally {
|
||||||
newEntries.forEach((entry) => {
|
newEntries.forEach((entry) => {
|
||||||
|
|
@ -459,36 +482,14 @@ export default {
|
||||||
({ provider }) => provider.providerNumber
|
({ provider }) => provider.providerNumber
|
||||||
);
|
);
|
||||||
|
|
||||||
const promiseResultMap = [
|
const resultMap = await fetchTimeSlotsBatch({
|
||||||
...(providerNumbers.length
|
startDate: newStartDate,
|
||||||
? [
|
endDate: newEndDate,
|
||||||
{
|
providerNumbers,
|
||||||
resultKey: "inshopTimeSlots",
|
zipCode: this.serviceZipCode,
|
||||||
promise: fetchInshopTimeSlots({
|
includeMobile: Boolean(this.mobileProviderAndTimeSlot),
|
||||||
startDate: newStartDate,
|
pageNameToLog: this.pageName,
|
||||||
endDate: newEndDate,
|
});
|
||||||
providerNumbers,
|
|
||||||
pageNameToLog: this.pageName,
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
]
|
|
||||||
: []),
|
|
||||||
...(this.mobileProviderAndTimeSlot
|
|
||||||
? [
|
|
||||||
{
|
|
||||||
resultKey: "mobileTimeSlots",
|
|
||||||
promise: fetchMobileTimeSlots({
|
|
||||||
startDate: newStartDate,
|
|
||||||
endDate: newEndDate,
|
|
||||||
zipCode: this.serviceZipCode,
|
|
||||||
pageNameToLog: this.pageName,
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
]
|
|
||||||
: []),
|
|
||||||
];
|
|
||||||
|
|
||||||
const resultMap = await settleAllPromises(promiseResultMap);
|
|
||||||
|
|
||||||
appendInshopTimeSlotsFromV2Response(
|
appendInshopTimeSlotsFromV2Response(
|
||||||
this.inshopProvidersAndTimeSlots,
|
this.inshopProvidersAndTimeSlots,
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue