diff --git a/src/services/backend_script_api.ts b/src/services/backend_script_api.ts index 3d07384a7..44215d3e2 100644 --- a/src/services/backend_script_api.ts +++ b/src/services/backend_script_api.ts @@ -241,11 +241,6 @@ interface Api { */ getWeekFirstDayNote( date: string, - options: { - // TODO: Deduplicate type with date_notes.ts once ES modules are added. - /** either "monday" (default) or "sunday" */ - startOfTheWeek: "monday" | "sunday"; - }, rootNote: BNote ): BNote | null; diff --git a/src/services/date_notes.ts b/src/services/date_notes.ts index 8ee14ffe9..c39362eb5 100644 --- a/src/services/date_notes.ts +++ b/src/services/date_notes.ts @@ -12,6 +12,7 @@ import { t } from "i18next"; import dayjs from "dayjs"; import type { Dayjs } from "dayjs"; import isSameOrAfter from "dayjs/plugin/isSameOrAfter.js"; +import cloningService from "./cloning.js"; dayjs.extend(isSameOrAfter); @@ -353,8 +354,13 @@ function getWeekNote(weekStr: string, _rootNote: BNote | null = null): BNote | n weekStartDate.setDate(firstDayOfYear.getDate() + (weekNumber - 1) * 7); const startDate = getWeekStartDate(weekStartDate, optionService.getOption("firstDayOfWeek") === '0' ? 'sunday' : 'monday'); - const monthNote = getMonthNote(dateUtils.utcDateStr(startDate), rootNote); + const endDate = new Date(startDate); + endDate.setDate(startDate.getDate() + 6); + const startMonth = startDate.getMonth(); + const endMonth = endDate.getMonth(); + + const monthNote = getMonthNote(dateUtils.utcDateStr(startDate), rootNote); const noteTitle = getWeekNoteTitle(rootNote, weekNumber); sql.transactional(() => { @@ -368,6 +374,12 @@ function getWeekNote(weekStr: string, _rootNote: BNote | null = null): BNote | n if (weekTemplateAttr) { attributeService.createRelation(weekNote.noteId, "template", weekTemplateAttr.value); } + + // If the week spans different months, clone the week note in the other month as well + if (startMonth !== endMonth) { + const secondMonthNote = getMonthNote(dateUtils.utcDateStr(endDate), rootNote); + cloningService.cloneNoteToParentNote(weekNote.noteId, secondMonthNote.noteId); + } }); return weekNote as unknown as BNote;