From cd6293d2207acb8f08e92308223d442d1e3b4e6c Mon Sep 17 00:00:00 2001 From: Balaji Krishnamurthy <107975017+BKM14@users.noreply.github.com> Date: Mon, 7 Jul 2025 23:11:47 +0530 Subject: [PATCH] fix: sort the availabilities based on start time for each day (#21656) * sort the availabilities based on start time for each day * move the sorting outside the reduce * add guard variable for safe access --------- Co-authored-by: Kartik Saini <41051387+kart1ka@users.noreply.github.com> --- .../lib/schedules/transformers/for-atom.ts | 21 +++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/packages/lib/schedules/transformers/for-atom.ts b/packages/lib/schedules/transformers/for-atom.ts index a862a507a5..d17a0d3bda 100644 --- a/packages/lib/schedules/transformers/for-atom.ts +++ b/packages/lib/schedules/transformers/for-atom.ts @@ -31,7 +31,7 @@ export function transformDateOverridesForAtom( schedule: { availability: ScheduleOverride }, timeZone: string ) { - return schedule.availability.reduce((acc, override) => { + const acc = schedule.availability.reduce((acc, override) => { // only if future date override const currentUtcOffset = dayjs().tz(timeZone).utcOffset(); const currentTimeInTz = dayjs().utc().add(currentUtcOffset, "minute"); @@ -63,10 +63,17 @@ export function transformDateOverridesForAtom( acc[dayRangeIndex].ranges.push(newValue); return acc; }, [] as { ranges: TimeRange[] }[]); + + acc.sort((a, b) => { + const aTime = a.ranges?.[0]?.start?.getTime?.() ?? 0; + const bTime = b.ranges?.[0]?.start?.getTime?.() ?? 0; + return aTime - bTime; + }); + return acc; } export const transformScheduleToAvailabilityForAtom = (schedule: { availability: ScheduleAvailability }) => { - return schedule.availability.reduce( + const result = schedule.availability.reduce( (schedule: Schedule, availability) => { availability.days.forEach((day) => { schedule[day].push({ @@ -94,4 +101,14 @@ export const transformScheduleToAvailabilityForAtom = (schedule: { availability: }, Array.from([...Array(7)]).map(() => []) ); + + result.forEach((daySlots) => { + daySlots.sort((a, b) => { + const aTime = a?.start?.getTime?.() ?? 0; + const bTime = b?.start?.getTime?.() ?? 0; + return aTime - bTime; + }); + }); + + return result; };