You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
ReactOrganizer/tabs/Vertretungsplan.js

93 lines
3.2 KiB

import React, {Component} from 'react';
import {Container, Content, Header, Tab, Tabs} from 'native-base';
import Stundenliste from './Stundenliste';
import DefaultHeader from "../components/DefaultHeader";
import NoResultsFound from "../pages/NoResultsFound";
import ReplacementLesson from "../model/ReplacementLesson";
import ReplacementLessonsApi from "../api/ReplacementLessonsApi";
import ApiClient from "../ApiClient";
export default class Vertretungsplan extends Component {
constructor(props) {
super(props);
this.state = {
replacementLessons: []
};
api = new ApiClient();
api.authentications.passwordAuth.username = "de"
api.authentications.passwordAuth.password = "de"
this.rla = new ReplacementLessonsApi(api);
vplan = this
this.rla.findReplacementLessons((s, lessons, pure) =>{
console.log(lessons, "lessons");
console.log(s, "s");
console.log(pure, "pure")
vplan.setState({replacementLessons: lessons})
} )
}
refreshData() {
alert("HEY!");
}
render() {
return (
<Container>
<DefaultHeader hasTabs title="Vertretungsplan" navigation={this.props.navigation} refresh={this.refreshData()}/>
{this.renderTabsForLessons(this.state.replacementLessons)}
</Container>
);
}
/**
*
* @param {ReplacementLesson[]} lessons
*/
renderTabsForLessons(lessons) {
//Grouping by date and course
rawTabs = this._groupByDateAndCourse(lessons);
//Bringing grouped things into machine-readable format
tabsByDate = {};
for(date in rawTabs) {
tabItems = [];
content = rawTabs[date];
content.forEach(function (value, course) {
console.log(course, "c");
console.log(value, "con");
tabItems.push({title: course, data: value})
});
tabsByDate[new Date(date).toLocaleDateString()] = tabItems;
}
console.log(tabsByDate, "tabs");
tabs = Object.keys(tabsByDate).map(value => <Tab heading={value}><Stundenliste
data={tabsByDate[value]}/></Tab>);
if (tabsByDate.length == 0) {
tabsByDate.push(<Tab heading="Keine Ergebnisse"><NoResultsFound/></Tab>)
}
console.log(tabs);
return <Tabs>{tabs}</Tabs>
}
_groupByDateAndCourse(lessons) {
groupedByDate = _.mapValues(_.groupBy(lessons, 'date'),
clist => clist.map(car => _.omit(car, 'date')));
function groupBy(list, keyGetter) {
const map = new Map();
list.forEach((item) => {
const key = keyGetter(item);
const collection = map.get(key);
if (!collection) {
map.set(key, [item]);
} else {
collection.push(item);
}
});
return map;
}
Object.keys(groupedByDate).map(function (key, index) {
groupedByDate[key] = groupBy(groupedByDate[key], replacementLesson => replacementLesson.lesson.course)
});
return groupedByDate
}
}