Compare commits
No commits in common. "c37f6d07a42f2e27517b6c3edeb1f12d78afa599" and "40d7985bbd14ea36ac2a6273c2776bdfe51f27f4" have entirely different histories.
c37f6d07a4
...
40d7985bbd
3 changed files with 72 additions and 3 deletions
|
|
@ -28,7 +28,7 @@ type State = {
|
||||||
calendarShowing: boolean,
|
calendarShowing: boolean,
|
||||||
};
|
};
|
||||||
|
|
||||||
const FETCH_URL = "https://www.amicale-insat.fr/api/event/list";
|
const FETCH_URL = "https://amicale-insat.fr/event/json/list";
|
||||||
|
|
||||||
const AGENDA_MONTH_SPAN = 3;
|
const AGENDA_MONTH_SPAN = 3;
|
||||||
|
|
||||||
|
|
@ -194,16 +194,53 @@ export default class PlanningScreen extends React.Component<Props, State> {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
getClonedEventArray(event: Object, times: number) {
|
||||||
|
let cloneArray = [];
|
||||||
|
if (times > 1) {
|
||||||
|
for (let i = 0; i < times; i++) {
|
||||||
|
let clone = JSON.parse(JSON.stringify(event));
|
||||||
|
let startDate = PlanningEventManager.stringToDate(clone["date_begin"]);
|
||||||
|
let endDate = new Date();
|
||||||
|
if (i !== 0) {
|
||||||
|
startDate.setHours(0, 0, 0);
|
||||||
|
startDate.setDate(startDate.getDate() + i);
|
||||||
|
clone["date_begin"] = PlanningEventManager.dateToString(startDate);
|
||||||
|
}
|
||||||
|
if (i !== (times - 1)) {
|
||||||
|
endDate = PlanningEventManager.stringToDate(clone["date_end"]);
|
||||||
|
endDate.setHours(23, 59, 0);
|
||||||
|
endDate.setFullYear(startDate.getFullYear(),
|
||||||
|
startDate.getMonth(),
|
||||||
|
startDate.getDate() + i);
|
||||||
|
clone["date_end"] = PlanningEventManager.dateToString(endDate);
|
||||||
|
}
|
||||||
|
cloneArray.push(clone)
|
||||||
|
}
|
||||||
|
} else
|
||||||
|
cloneArray = [event];
|
||||||
|
return cloneArray;
|
||||||
|
}
|
||||||
|
|
||||||
generateEventAgenda(eventList: Array<Object>) {
|
generateEventAgenda(eventList: Array<Object>) {
|
||||||
let agendaItems = this.generateEmptyCalendar();
|
let agendaItems = this.generateEmptyCalendar();
|
||||||
for (let i = 0; i < eventList.length; i++) {
|
for (let i = 0; i < eventList.length; i++) {
|
||||||
if (PlanningEventManager.getDateOnlyString(eventList[i]["date_begin"]) !== undefined) {
|
if (PlanningEventManager.getDateOnlyString(eventList[i]["date_begin"]) !== undefined) {
|
||||||
this.pushEventInOrder(agendaItems, eventList[i], PlanningEventManager.getDateOnlyString(eventList[i]["date_begin"]));
|
const clonedEventArray = this.getClonedEventArray(
|
||||||
|
eventList[i],
|
||||||
|
PlanningEventManager.getEventDaysNumber(eventList[i]["date_begin"], eventList[i]["date_end"])
|
||||||
|
);
|
||||||
|
this.pushEvents(agendaItems, clonedEventArray);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
this.setState({agendaItems: agendaItems})
|
this.setState({agendaItems: agendaItems})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pushEvents(agendaItems: Object, eventList: Array<Object>) {
|
||||||
|
for (let i = 0; i < eventList.length; i++) {
|
||||||
|
this.pushEventInOrder(agendaItems, eventList[i], PlanningEventManager.getDateOnlyString(eventList[i]["date_begin"]));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pushEventInOrder(agendaItems: Object, event: Object, startDate: string) {
|
pushEventInOrder(agendaItems: Object, event: Object, startDate: string) {
|
||||||
if (agendaItems[startDate].length === 0)
|
if (agendaItems[startDate].length === 0)
|
||||||
agendaItems[startDate].push(event);
|
agendaItems[startDate].push(event);
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,31 @@ export default class PlanningEventManager {
|
||||||
return PlanningEventManager.dateToString(new Date());
|
return PlanningEventManager.dateToString(new Date());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* Gets how many days the event lasts. If no end date is specified, defaults to 1.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @param start The start date string in format YYYY-MM-DD HH:MM:SS
|
||||||
|
* @param end The end date string in format YYYY-MM-DD HH:MM:SS
|
||||||
|
* @return {number} The number of days, 0 on error
|
||||||
|
*/
|
||||||
|
static getEventDaysNumber(start: string, end: string): number {
|
||||||
|
let startDate = PlanningEventManager.stringToDate(start);
|
||||||
|
let endDate = PlanningEventManager.stringToDate(end);
|
||||||
|
if (startDate !== undefined && endDate !== undefined) {
|
||||||
|
if (startDate.getTime() !== endDate.getTime()) {
|
||||||
|
const diffTime = endDate - startDate;
|
||||||
|
return Math.ceil(diffTime / (1000 * 60 * 60 * 24));
|
||||||
|
} else
|
||||||
|
return 1;
|
||||||
|
} else if (startDate !== undefined)
|
||||||
|
return 1;
|
||||||
|
else
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
* Checks if the given date is before the other.
|
* Checks if the given date is before the other.
|
||||||
*
|
*
|
||||||
* @param event1Date Event 1 date in format YYYY-MM-DD HH:MM:SS
|
* @param event1Date Event 1 date in format YYYY-MM-DD HH:MM:SS
|
||||||
|
|
|
||||||
|
|
@ -127,3 +127,11 @@ test('dateToString', () => {
|
||||||
expect(PlanningEventManager.dateToString(testDate)).toBe("2022-12-31 09:10:15");
|
expect(PlanningEventManager.dateToString(testDate)).toBe("2022-12-31 09:10:15");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('getEventDaysNumber', () => {
|
||||||
|
expect(PlanningEventManager.getEventDaysNumber('2020-03-21 09:00:00', '2020-03-22 17:00:00')).toBe(2);
|
||||||
|
expect(PlanningEventManager.getEventDaysNumber('2020-03-21 09:00:00', '2020-03-21 17:00:00')).toBe(1);
|
||||||
|
expect(PlanningEventManager.getEventDaysNumber('2020-03-21 09:00:00', '2020-03-21 09:00:00')).toBe(1);
|
||||||
|
expect(PlanningEventManager.getEventDaysNumber('2020-03-21 09:gg:00', '2020-03-21 17:00:00')).toBe(0);
|
||||||
|
expect(PlanningEventManager.getEventDaysNumber('2020-03-21 09:00:00', undefined)).toBe(1);
|
||||||
|
expect(PlanningEventManager.getEventDaysNumber('2020-03-21 09:00:00', '2020-04-05 20:00:00')).toBe(16);
|
||||||
|
});
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue