Skip to content

Commit

Permalink
Also sort date ranges
Browse files Browse the repository at this point in the history
  • Loading branch information
emrysal committed Jan 21, 2025
1 parent a72f030 commit 1d59916
Showing 1 changed file with 15 additions and 9 deletions.
24 changes: 15 additions & 9 deletions packages/core/getAggregatedAvailability/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,20 @@ import { SchedulingType } from "@calcom/prisma/enums";

import { mergeOverlappingDateRanges } from "./date-range-utils/mergeOverlappingDateRanges";

function uniqueDateRanges(ranges: DateRange[]): DateRange[] {
const seen = new Set<string>();
return ranges.filter((range) => {
const key = `${range.start.valueOf()}-${range.end.valueOf()}`;
if (seen.has(key)) return false;
seen.add(key);
return true;
});
function uniqueAndSortedDateRanges(ranges: DateRange[]): DateRange[] {
const seen = new Set<number>();

return ranges
.sort((a, b) => {
const startDiff = a.start.valueOf() - b.start.valueOf();
return startDiff !== 0 ? startDiff : a.end.valueOf() - b.end.valueOf();
})
.filter((range) => {
const key = range.start.valueOf() * 1e12 + range.end.valueOf();
if (seen.has(key)) return false;
seen.add(key);
return true;
});
}

export const getAggregatedAvailability = (
Expand Down Expand Up @@ -43,5 +49,5 @@ export const getAggregatedAvailability = (
}
const availability = intersect(dateRangesToIntersect);
// we no longer merge overlapping date ranges, rr-hosts need to be individually available here.
return uniqueDateRanges(availability);
return uniqueAndSortedDateRanges(availability);
};

0 comments on commit 1d59916

Please sign in to comment.