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.
93 lines
3.2 KiB
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
|
|
}
|
|
} |