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 {
|
||||
name: "scheduling",
|
||||
async beforeRouteEnter(to, from, next) {
|
||||
|
|
@ -238,36 +290,14 @@ export default {
|
|||
const startDate = toDateString(0);
|
||||
const endDate = toDateString(SCHEDULE_FETCH_DAYS - 1);
|
||||
const providerNumbers = providers.map((provider) => provider.providerNumber);
|
||||
const timeSlotsPromiseResultMap = [
|
||||
...(providerNumbers.length
|
||||
? [
|
||||
{
|
||||
resultKey: "inshopTimeSlots",
|
||||
promise: fetchInshopTimeSlots({
|
||||
const timeSlotsResultMap = await fetchTimeSlotsBatch({
|
||||
startDate,
|
||||
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,
|
||||
includeMobile: Boolean(mobileProviderNumber),
|
||||
pageNameToLog: to.name,
|
||||
}),
|
||||
},
|
||||
]
|
||||
: []),
|
||||
];
|
||||
const timeSlotsResultMap = await settleAllPromises(timeSlotsPromiseResultMap);
|
||||
});
|
||||
assignInshopTimeSlotsFromV2Response(
|
||||
vm.inshopProvidersAndTimeSlots,
|
||||
timeSlotsResultMap.inshopTimeSlots
|
||||
|
|
@ -398,19 +428,12 @@ export default {
|
|||
this.isLoadingMoreShops = true;
|
||||
|
||||
try {
|
||||
const resultMap = await settleAllPromises([
|
||||
{
|
||||
resultKey: "inshopTimeSlots",
|
||||
promise: fetchInshopTimeSlots({
|
||||
const resultMap = await fetchTimeSlotsBatch({
|
||||
startDate: this.datePickerStartDate,
|
||||
endDate: this.datePickerEndDate,
|
||||
providerNumbers: newProviders.map(
|
||||
(provider) => provider.providerNumber
|
||||
),
|
||||
providerNumbers: newProviders.map((provider) => provider.providerNumber),
|
||||
pageNameToLog: this.pageName,
|
||||
}),
|
||||
},
|
||||
]);
|
||||
});
|
||||
assignInshopTimeSlotsFromV2Response(newEntries, resultMap.inshopTimeSlots);
|
||||
} finally {
|
||||
newEntries.forEach((entry) => {
|
||||
|
|
@ -459,36 +482,14 @@ export default {
|
|||
({ provider }) => provider.providerNumber
|
||||
);
|
||||
|
||||
const promiseResultMap = [
|
||||
...(providerNumbers.length
|
||||
? [
|
||||
{
|
||||
resultKey: "inshopTimeSlots",
|
||||
promise: fetchInshopTimeSlots({
|
||||
const resultMap = await fetchTimeSlotsBatch({
|
||||
startDate: newStartDate,
|
||||
endDate: newEndDate,
|
||||
providerNumbers,
|
||||
pageNameToLog: this.pageName,
|
||||
}),
|
||||
},
|
||||
]
|
||||
: []),
|
||||
...(this.mobileProviderAndTimeSlot
|
||||
? [
|
||||
{
|
||||
resultKey: "mobileTimeSlots",
|
||||
promise: fetchMobileTimeSlots({
|
||||
startDate: newStartDate,
|
||||
endDate: newEndDate,
|
||||
zipCode: this.serviceZipCode,
|
||||
includeMobile: Boolean(this.mobileProviderAndTimeSlot),
|
||||
pageNameToLog: this.pageName,
|
||||
}),
|
||||
},
|
||||
]
|
||||
: []),
|
||||
];
|
||||
|
||||
const resultMap = await settleAllPromises(promiseResultMap);
|
||||
});
|
||||
|
||||
appendInshopTimeSlotsFromV2Response(
|
||||
this.inshopProvidersAndTimeSlots,
|
||||
|
|
|
|||
Loading…
Reference in a new issue