Reorganized code

This commit is contained in:
Arnaud Vergnet 2020-03-22 10:37:59 +01:00
parent 81eddd9bdd
commit 160dbb00c8
2 changed files with 81 additions and 81 deletions

View file

@ -29,7 +29,6 @@ type State = {
}; };
const FETCH_URL = "https://www.amicale-insat.fr/api/event/list"; const FETCH_URL = "https://www.amicale-insat.fr/api/event/list";
const AGENDA_MONTH_SPAN = 3; const AGENDA_MONTH_SPAN = 3;
/** /**
@ -107,17 +106,48 @@ export default class PlanningScreen extends React.Component<Props, State> {
} }
}; };
rowHasChanged(r1: Object, r2: Object) {
generateEmptyCalendar() { return false;
let end = new Date(new Date().setMonth(new Date().getMonth() + AGENDA_MONTH_SPAN + 1)); // if (r1 !== undefined && r2 !== undefined)
let daysOfYear = {}; // return r1.title !== r2.title;
for (let d = new Date(); d <= end; d.setDate(d.getDate() + 1)) { // else return !(r1 === undefined && r2 === undefined);
daysOfYear[
PlanningEventManager.getDateOnlyString(
PlanningEventManager.dateToString(new Date(d))
)] = []
} }
return daysOfYear;
/**
* Refresh data and show a toast if any error occurred
* @private
*/
onRefresh = () => {
let canRefresh;
if (this.lastRefresh !== undefined)
canRefresh = (new Date().getTime() - this.lastRefresh.getTime()) / 1000 > this.minTimeBetweenRefresh;
else
canRefresh = true;
if (canRefresh) {
this.setState({refreshing: true});
this.webDataManager.readData()
.then((fetchedData) => {
this.setState({
refreshing: false,
agendaItems: PlanningEventManager.generateEventAgenda(fetchedData, AGENDA_MONTH_SPAN)
});
this.lastRefresh = new Date();
})
.catch(() => {
this.setState({
refreshing: false,
});
});
}
};
onAgendaRef(ref: Object) {
this.agendaRef = ref;
}
onCalendarToggled(isCalendarOpened: boolean) {
this.setState({calendarShowing: isCalendarOpened});
} }
getRenderItem(item: Object) { getRenderItem(item: Object) {
@ -157,77 +187,6 @@ export default class PlanningScreen extends React.Component<Props, State> {
); );
} }
rowHasChanged(r1: Object, r2: Object) {
return false;
// if (r1 !== undefined && r2 !== undefined)
// return r1.title !== r2.title;
// else return !(r1 === undefined && r2 === undefined);
}
/**
* Refresh data and show a toast if any error occurred
* @private
*/
onRefresh = () => {
let canRefresh;
if (this.lastRefresh !== undefined)
canRefresh = (new Date().getTime() - this.lastRefresh.getTime()) / 1000 > this.minTimeBetweenRefresh;
else
canRefresh = true;
if (canRefresh) {
this.setState({refreshing: true});
this.webDataManager.readData()
.then((fetchedData) => {
this.setState({
refreshing: false,
});
this.generateEventAgenda(fetchedData);
this.lastRefresh = new Date();
})
.catch((err) => {
this.setState({
refreshing: false,
});
// console.log(err);
});
}
};
generateEventAgenda(eventList: Array<Object>) {
let agendaItems = this.generateEmptyCalendar();
for (let i = 0; i < eventList.length; i++) {
if (PlanningEventManager.getDateOnlyString(eventList[i]["date_begin"]) !== undefined) {
this.pushEventInOrder(agendaItems, eventList[i], PlanningEventManager.getDateOnlyString(eventList[i]["date_begin"]));
}
}
this.setState({agendaItems: agendaItems})
}
pushEventInOrder(agendaItems: Object, event: Object, startDate: string) {
if (agendaItems[startDate].length === 0)
agendaItems[startDate].push(event);
else {
for (let i = 0; i < agendaItems[startDate].length; i++) {
if (PlanningEventManager.isEventBefore(event["date_begin"], agendaItems[startDate][i]["date_begin"])) {
agendaItems[startDate].splice(i, 0, event);
break;
} else if (i === agendaItems[startDate].length - 1) {
agendaItems[startDate].push(event);
break;
}
}
}
}
onAgendaRef(ref: Object) {
this.agendaRef = ref;
}
onCalendarToggled(isCalendarOpened: boolean) {
this.setState({calendarShowing: isCalendarOpened});
}
render() { render() {
// console.log("rendering PlanningScreen"); // console.log("rendering PlanningScreen");
return ( return (

View file

@ -157,4 +157,45 @@ export default class PlanningEventManager {
} else } else
return true; return true;
} }
static generateEmptyCalendar(numberOfMonths: number) {
let end = new Date(new Date().setMonth(new Date().getMonth() + numberOfMonths + 1));
let daysOfYear = {};
for (let d = new Date(); d <= end; d.setDate(d.getDate() + 1)) {
daysOfYear[
PlanningEventManager.getDateOnlyString(
PlanningEventManager.dateToString(new Date(d))
)] = []
}
return daysOfYear;
}
static generateEventAgenda(eventList: Array<Object>, numberOfMonths: number) {
let agendaItems = PlanningEventManager.generateEmptyCalendar(numberOfMonths);
for (let i = 0; i < eventList.length; i++) {
console.log(PlanningEventManager.getDateOnlyString(eventList[i]["date_begin"]));
console.log(eventList[i]["date_begin"]);
if (PlanningEventManager.getDateOnlyString(eventList[i]["date_begin"]) !== undefined) {
this.pushEventInOrder(agendaItems, eventList[i], PlanningEventManager.getDateOnlyString(eventList[i]["date_begin"]));
}
}
return agendaItems;
}
static pushEventInOrder(agendaItems: Object, event: Object, startDate: string) {
if (agendaItems[startDate].length === 0)
agendaItems[startDate].push(event);
else {
for (let i = 0; i < agendaItems[startDate].length; i++) {
if (PlanningEventManager.isEventBefore(event["date_begin"], agendaItems[startDate][i]["date_begin"])) {
agendaItems[startDate].splice(i, 0, event);
break;
} else if (i === agendaItems[startDate].length - 1) {
agendaItems[startDate].push(event);
break;
}
}
}
}
} }