@@ -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