Skip to content

Commit 39f29b2

Browse files
fix(api/get/meetings): send parent meeting when in range
1 parent 2ea33e6 commit 39f29b2

File tree

1 file changed

+19
-25
lines changed

1 file changed

+19
-25
lines changed

lib/api/get/meetings.ts

Lines changed: 19 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -35,29 +35,23 @@ export default async function getMeetings(
3535
const filters = getFilterStrings(query);
3636
const data = await list('meetings', query, Meeting.fromSearchHit, filters);
3737
let { hits } = data;
38-
const meetings = data.results
39-
.map((meeting) => {
40-
if (!meeting.time.recur) return [meeting];
41-
const options = RRule.parseString(meeting.time.recur);
42-
const rrule = new RRule({ ...options, dtstart: meeting.time.from });
43-
// TODO: What if meeting instance starts before window but end is within?
44-
const starts = rrule.between(query.from, query.to);
45-
console.log('Starts:', starts.map((s) => s.toString()).join(', '));
46-
hits += starts.length - 1;
47-
return starts.map(
48-
(start) =>
49-
new Meeting({
50-
...meeting,
51-
id: nanoid(),
52-
parentId: meeting.id,
53-
time: new Timeslot({
54-
...meeting.time,
55-
from: start,
56-
to: new Date(start.valueOf() + meeting.time.duration),
57-
}),
58-
})
59-
);
60-
})
61-
.flat();
62-
return { hits, results: meetings };
38+
const meetings = data.results.map((meeting) => {
39+
if (!meeting.time.recur) return [meeting];
40+
const options = RRule.parseString(meeting.time.recur);
41+
const rrule = new RRule({ ...options, dtstart: meeting.time.from });
42+
// TODO: What if meeting instance starts before window but end is within?
43+
const startTimes = rrule.between(query.from, query.to);
44+
hits += startTimes.length - 1;
45+
return startTimes.map((startTime) => {
46+
if (startTime.valueOf() === meeting.time.from.valueOf()) return meeting;
47+
const to = new Date(startTime.valueOf() + meeting.time.duration);
48+
return new Meeting({
49+
...meeting,
50+
id: nanoid(),
51+
parentId: meeting.id,
52+
time: new Timeslot({ ...meeting.time, to, from: startTime }),
53+
});
54+
});
55+
});
56+
return { hits, results: meetings.flat() };
6357
}

0 commit comments

Comments
 (0)