2022-04-24 12:24:22 +02:00

48 lines
1.1 KiB
TypeScript

import EventGrouping from "./EventGrouping";
import { Event, Groups } from "../types";
import {
add,
differenceInCalendarWeeks,
getWeek as dateFnsGetWeek,
isThisWeek as dateFnsIsThisWeek,
} from "date-fns";
export default class WeekGrouping extends EventGrouping {
static isThisWeek(date: Date): boolean {
return dateFnsIsThisWeek(date);
}
static getWeek(date: Date): number {
return dateFnsGetWeek(date);
}
constructor(sortedEvents: Event[]) {
super(sortedEvents);
this.groups = this.group();
}
group(): Groups {
const numberOfGroups = differenceInCalendarWeeks(
this.lastEvent.date,
this.firstEvent.date
);
return this.sortedEvents.reduce((prev, event) => {
const groupNumber = differenceInCalendarWeeks(
event.date,
this.firstEvent.date
);
prev[groupNumber].push(event);
return prev;
}, this.generateEmptyGroups(numberOfGroups));
}
public getDateFromGroupIndex(index: number): Date {
const startDate = this.firstEvent.date;
return add(startDate, { weeks: index });
}
}