59 lines
1.4 KiB
TypeScript
59 lines
1.4 KiB
TypeScript
|
|
|
|
import dayjs from 'dayjs';
|
|
import type { ThingType } from './type';
|
|
import isoWeek from 'dayjs/plugin/isoWeek';
|
|
import weekday from 'dayjs/plugin/weekday';
|
|
|
|
|
|
|
|
export function getWeekDates(date: string | number | Date | dayjs.Dayjs | null | undefined) {
|
|
|
|
|
|
dayjs.extend(isoWeek);
|
|
dayjs.extend(weekday);
|
|
|
|
const startOfWeek = dayjs(date).weekday(0);
|
|
const _weekDates: { date: number; day: string; weekDay: string }[] = [];
|
|
for (let i = 0; i < 7; i += 1) {
|
|
_weekDates.push({
|
|
date: startOfWeek.add(i, 'day').startOf('day').valueOf(),
|
|
day: startOfWeek.add(i, 'day').format('D'),
|
|
weekDay: startOfWeek.add(i, 'day').format('周dd')
|
|
});
|
|
}
|
|
return _weekDates;
|
|
}
|
|
|
|
export function groupEventsByDay({
|
|
events,
|
|
minuteStep
|
|
}: {
|
|
events: ThingType[];
|
|
minuteStep: number;
|
|
}): Map<number, ThingType[]> {
|
|
const _groupedEvents = new Map();
|
|
|
|
events.forEach(event => {
|
|
const { startTime, endTime } = event;
|
|
|
|
const startOfDay = dayjs(startTime).startOf('day').valueOf();
|
|
const startDayTime = dayjs(startTime);
|
|
|
|
const toTop = startDayTime.diff(startDayTime.startOf('day'), 'minute');
|
|
const duration = dayjs(endTime).diff(startTime, 'minute');
|
|
|
|
if (!_groupedEvents.has(startOfDay)) {
|
|
_groupedEvents.set(startOfDay, []);
|
|
}
|
|
|
|
_groupedEvents.get(startOfDay).push({
|
|
...event,
|
|
toTop: toTop * minuteStep,
|
|
height: duration * minuteStep
|
|
});
|
|
});
|
|
|
|
return _groupedEvents;
|
|
}
|