Jupiterrr/Vorlesungsverzeichnis

View on GitHub
react_renderer/scripts/kithub.js

Summary

Maintainability
C
1 day
Test Coverage
import React from 'react';
import Week from './Week';
import Layouter from './layoutday'
import {groupBy, values} from 'lodash';

// require("../styles/main.scss");
// require("../styles/kithub.scss");

var eventsData = require("./kithub-data.js");

// var events = [
//   {start: new Date("11:00 4.2.2015"), end: new Date("12:00 4.2.2015"), title: "test1"},
//   {start: new Date("12:00 4.9.2015"), end: new Date("12:45 4.9.2015"), title: "test2"},
//   {start: new Date("10:00 4.9.2015"), end: new Date("13:00 4.9.2015"), title: "test2"}
// ];

function weekMapper(d) {
  function getMonday(d) {
    var d = new Date(d),
    day = d.getDay(),
    diff = d.getDate() - day + (day == 0 ? -6:1); // adjust when day is sunday
    return new Date(d.setDate(diff));
  }
  var monday = getMonday(d);
  return function mapToCurrentWeek(d) {
    var d = new Date(d),
      day = d.getDay(),
     gday = day == 0 ? 6 : day-1, // wday starting with monday
     date = monday.getDate() + gday;
    return new Date(monday.getFullYear(), monday.getMonth(), date, d.getHours(), d.getMinutes(), d.getSeconds());
  };
}

function parseEventData(events) {
  const toCurrentWeek = weekMapper(new Date());
  const parseDate = (a) => new Date(a[0], a[1]-1, a[2], a[3], a[4], a[5]);

  return events.map((event) => {
    const startTime = parseDate(event.start);
    const endTime = parseDate(event.end);
    const new_event = {
      start: toCurrentWeek(startTime),
      end: toCurrentWeek(endTime),
      title: "<div>"+event.title+"</div>",
      react: (<div className="body" dangerouslySetInnerHTML={{__html: event.title}} />),
      id: event.id,
      url: event.url,
      color: event.color
      // "start_h": startTime.getHours(),
      // "end_h": endTime.getHours()
    };
    return new_event;
  });
}

function sliceWeek(days) {
  const showSat = days[6].events.length>0;
  days = days.slice(0, showSat?7:6); // remove saturday
  days = days.slice(1); // remove sunday
  return days;
}

function prepareData(dates) {
  // console.log("data", dates);
  // var groups = groupBy(dates, (e) => {
  //   return e.start + e.end + e._title + e.room + e.id;
  // });
  // console.log("groups", groups);
  // var reducedEvents = values(groups).map((group) => {
  //   var event = group[0];
  //   if (group.length > 1) event.room = "verschiedene Räume";
  //   return event;
  // });
  var myEvents = parseEventData(dates);

  var l = new Layouter({startHour: 7, endHour: 20, height: 800});
  l.layoutDay(myEvents);
  // window.events = myEvents;
  const days = sliceWeek(l.eventsToWeek(myEvents));
  return days;
}
//eventsToDays(this.props.events);

export default class App extends React.Component {
  render() {
    const days = prepareData(this.props.dates);
    return (
      <Week days={days}/>
    );
  }
}


// React.render(<App />, document.getElementById('root'));