lion/packages/ui/components/calendar/utils/createWeek.js
2022-10-31 16:55:07 +01:00

37 lines
932 B
JavaScript

import { createDay } from './createDay.js';
/**
* @param {Date} date
* @param {Object} opts
* @param {number} [opts.firstDayOfWeek]
* @returns {import('../../types/day').Week}
*/
export function createWeek(date, { firstDayOfWeek = 0 } = {}) {
if (Object.prototype.toString.call(date) !== '[object Date]') {
throw new Error('invalid date provided');
}
let weekStartDate = new Date(date);
const tmpDate = new Date(date);
while (tmpDate.getDay() !== firstDayOfWeek) {
tmpDate.setDate(tmpDate.getDate() - 1);
weekStartDate = new Date(tmpDate);
}
const week = {
/** @type {import('../../types/day').Day[]} */
days: [],
};
for (let i = 0; i < 7; i += 1) {
if (i !== 0) {
weekStartDate.setDate(weekStartDate.getDate() + 1);
}
week.days.push(
createDay(new Date(weekStartDate), {
weekOrder: i,
startOfWeek: i === 0,
}),
);
}
return week;
}