fix: 🐛 use first day of week option

This commit is contained in:
Jin
2025-04-01 17:25:03 +02:00
parent 1164126885
commit 3fe83e0ab4

View File

@@ -7,6 +7,7 @@ import searchService from "../services/search/services/search.js";
import SearchContext from "../services/search/search_context.js";
import hoistedNoteService from "./hoisted_note.js";
import type BNote from "../becca/entities/bnote.js";
import optionService from "./options.js";
import { t } from "i18next";
const CALENDAR_ROOT_LABEL = "calendarRoot";
@@ -32,8 +33,6 @@ const MONTH_TRANSLATION_IDS = [
"months.december"
];
type StartOfWeek = "monday" | "sunday";
function createNote(parentNote: BNote, noteTitle: string) {
return noteService.createNewNote({
parentNoteId: parentNote.noteId,
@@ -207,36 +206,24 @@ function getTodayNote(rootNote: BNote | null = null) {
return getDayNote(dateUtils.localNowDate(), rootNote);
}
function getStartOfTheWeek(date: Date, startOfTheWeek: StartOfWeek) {
const day = date.getDay();
let diff;
function getWeekFirstDayNote(dateStr: string, rootNote: BNote | null = null) {
const startOfWeek = optionService.getOption("firstDayOfWeek") === '0' ? 'sunday' : 'monday';
if (startOfTheWeek === "monday") {
diff = date.getDate() - day + (day === 0 ? -6 : 1); // adjust when day is sunday
} else if (startOfTheWeek === "sunday") {
diff = date.getDate() - day;
} else {
throw new Error(`Unrecognized start of the week ${startOfTheWeek}`);
}
return new Date(date.setDate(diff));
}
interface WeekNoteOpts {
startOfTheWeek?: StartOfWeek;
}
function getWeekFirstDayNote(dateStr: string, options: WeekNoteOpts = {}, rootNote: BNote | null = null) {
const startOfTheWeek = options.startOfTheWeek || "monday";
const dateObj = getStartOfTheWeek(dateUtils.parseLocalDate(dateStr), startOfTheWeek);
const dateObj = getWeekStartDate(dateUtils.parseLocalDate(dateStr), startOfWeek);
dateStr = dateUtils.utcDateTimeStr(dateObj);
return getDayNote(dateStr, rootNote);
}
function getWeekStartDate(date: Date, startOfWeek: StartOfWeek): Date {
function checkWeekNoteEnabled(rootNote: BNote) {
if (!rootNote.hasLabel('enableWeekNote')) {
return false;
}
return true;
}
function getWeekStartDate(date: Date, startOfWeek: string): Date {
const day = date.getDay();
let diff;
@@ -260,9 +247,9 @@ function getWeekNoteTitle(rootNote: BNote, weekNumber: number) {
.replace(/{weekNumber}/g, weekNumber.toString());
}
function getWeekNote(weekStr: string, options: WeekNoteOpts = {}, _rootNote: BNote | null = null): BNote | null {
function getWeekNote(weekStr: string, _rootNote: BNote | null = null): BNote | null {
const rootNote = _rootNote || getRootCalendarNote();
if (!rootNote.hasLabel('enableWeekNote')) {
if (!checkWeekNoteEnabled(rootNote)) {
return null;
}
@@ -283,7 +270,7 @@ function getWeekNote(weekStr: string, options: WeekNoteOpts = {}, _rootNote: BNo
const weekStartDate = new Date(firstDayOfYear);
weekStartDate.setDate(firstDayOfYear.getDate() + (weekNumber - 1) * 7);
const startDate = getWeekStartDate(weekStartDate, options.startOfTheWeek || "monday");
const startDate = getWeekStartDate(weekStartDate, optionService.getOption("firstDayOfWeek") === '0' ? 'sunday' : 'monday');
const monthNote = getMonthNote(dateUtils.utcDateStr(startDate), rootNote);
const noteTitle = getWeekNoteTitle(rootNote, weekNumber);