filterSessions()

in js/tabs/schedule/F8ScheduleGantt.js [81:131]


  filterSessions(all) {
    let grouped = this.groupSessionsIntoRows(all);
    let filtered = [];
    let earliest = null,
      latest = null;

    (Object.keys(grouped) || []).map(title => {
      let session = { title, startTime: null, endTime: null, times: [] };
      (grouped[title] || []).map(each => {
        // find the earliest and latest start/end times
        if (!earliest || each.startTime < earliest) {
          earliest = each.startTime;
        }
        if (!latest || each.endTime > latest) {
          latest = each.endTime;
        }
        // update grouped session start/end times (if necessary)
        if (!session.startTime || each.startTime < session.startTime) {
          session.startTime = each.startTime;
        }
        if (!session.endTime || each.endTime > session.endTime) {
          session.endTime = each.endTime;
        }
        // pass through multiple times, deprecated
        if (title !== "Sessions" && each.times && each.times.length) {
          session.times = [...session.times, ...each.times];
        }
        // set the location (if necessary)
        if (!session.location) {
          session.location = each.location;
        }
      });
      filtered.push(session);
    });

    const roundedDownStart = moment
        .utc(earliest)
        .startOf("hour")
        .valueOf(),
      endMoment = moment.utc(latest),
      roundedUpEnd =
        endMoment.minute() || endMoment.second() || endMoment.millisecond()
          ? endMoment.add(1, "hour").startOf("hour")
          : endMoment.startOf("hour");

    return {
      filtered,
      earliest: roundedDownStart,
      latest: roundedUpEnd
    };
  }