mirror of
https://github.com/TriliumNext/Notes.git
synced 2025-07-28 18:42:28 +08:00
feat: 🎸 add create week note func
This commit is contained in:
parent
84def1aa30
commit
1313003bdb
@ -14,7 +14,7 @@ UPDATE attributes SET name = 'name', value = 'value' WHERE type = 'label'
|
||||
'widget', 'noteInfoWidgetDisabled', 'linkMapWidgetDisabled', 'revisionsWidgetDisabled',
|
||||
'whatLinksHereWidgetDisabled', 'similarNotesWidgetDisabled', 'workspace', 'workspaceIconClass',
|
||||
'workspaceTabBackgroundColor', 'workspaceCalendarRoot', 'workspaceTemplate', 'searchHome', 'workspaceInbox',
|
||||
'workspaceSearchHome', 'sqlConsoleHome', 'datePattern', 'monthPattern', 'pageSize', 'viewType', 'mapRootNoteId',
|
||||
'workspaceSearchHome', 'sqlConsoleHome', 'datePattern', 'weekPattern', 'enableWeekNote', 'monthPattern', 'pageSize', 'viewType', 'mapRootNoteId',
|
||||
'bookmarkFolder', 'sorted', 'sortDirection', 'sortFoldersFirst', 'sortNatural', 'sortLocale', 'top',
|
||||
'fullContentWidth', 'shareHiddenFromTree', 'shareExternalLink', 'shareOmitDefaultCss', 'shareRoot', 'shareDescription',
|
||||
'shareRaw', 'shareDisallowRobotIndexing', 'shareIndex', 'displayRelations', 'hideRelations', 'titleTemplate',
|
||||
@ -31,7 +31,7 @@ UPDATE attributes SET name = 'name' WHERE type = 'relation'
|
||||
'widget', 'noteInfoWidgetDisabled', 'linkMapWidgetDisabled', 'revisionsWidgetDisabled',
|
||||
'whatLinksHereWidgetDisabled', 'similarNotesWidgetDisabled', 'workspace', 'workspaceIconClass',
|
||||
'workspaceTabBackgroundColor', 'workspaceCalendarRoot', 'workspaceTemplate', 'searchHome', 'workspaceInbox',
|
||||
'workspaceSearchHome', 'sqlConsoleHome', 'datePattern', 'monthPattern', 'pageSize', 'viewType', 'mapRootNoteId',
|
||||
'workspaceSearchHome', 'sqlConsoleHome', 'datePattern', 'weekPattern', 'enableWeekNote', 'monthPattern', 'pageSize', 'viewType', 'mapRootNoteId',
|
||||
'bookmarkFolder', 'sorted', 'sortDirection', 'sortFoldersFirst', 'sortNatural', 'sortLocale', 'top',
|
||||
'fullContentWidth', 'shareHiddenFromTree', 'shareExternalLink', 'shareOmitDefaultCss', 'shareRoot', 'shareDescription',
|
||||
'shareRaw', 'shareDisallowRobotIndexing', 'shareIndex', 'displayRelations', 'hideRelations', 'titleTemplate',
|
||||
|
@ -1,5 +1,3 @@
|
||||
"use strict";
|
||||
|
||||
import dateNoteService from "../../services/date_notes.js";
|
||||
import sql from "../../services/sql.js";
|
||||
import cls from "../../services/cls.js";
|
||||
@ -19,6 +17,10 @@ function getWeekFirstDayNote(req: Request) {
|
||||
return dateNoteService.getWeekFirstDayNote(req.params.date);
|
||||
}
|
||||
|
||||
function getWeekNote(req: Request) {
|
||||
return dateNoteService.getWeekNote(req.params.week);
|
||||
}
|
||||
|
||||
function getMonthNote(req: Request) {
|
||||
return dateNoteService.getMonthNote(req.params.month);
|
||||
}
|
||||
@ -102,6 +104,7 @@ export default {
|
||||
getInboxNote,
|
||||
getDayNote,
|
||||
getWeekFirstDayNote,
|
||||
getWeekNote,
|
||||
getMonthNote,
|
||||
getYearNote,
|
||||
getDayNotesForMonth,
|
||||
|
@ -36,6 +36,8 @@ export default [
|
||||
{ type: "label", name: "workspaceSearchHome" },
|
||||
{ type: "label", name: "sqlConsoleHome" },
|
||||
{ type: "label", name: "datePattern" },
|
||||
{ type: "label", name: "weekPattern" },
|
||||
{ type: "label", name: "enableWeekNote" },
|
||||
{ type: "label", name: "monthPattern" },
|
||||
{ type: "label", name: "pageSize" },
|
||||
{ type: "label", name: "viewType" },
|
||||
|
@ -236,10 +236,81 @@ function getWeekFirstDayNote(dateStr: string, options: WeekNoteOpts = {}, rootNo
|
||||
return getDayNote(dateStr, rootNote);
|
||||
}
|
||||
|
||||
function getWeekStartDate(date: Date, startOfWeek: StartOfWeek): Date {
|
||||
const day = date.getDay();
|
||||
let diff;
|
||||
|
||||
if (startOfWeek === "monday") {
|
||||
diff = date.getDate() - day + (day === 0 ? -6 : 1); // adjust when day is sunday
|
||||
} else if (startOfWeek === "sunday") {
|
||||
diff = date.getDate() - day;
|
||||
} else {
|
||||
throw new Error(`Unrecognized start of the week ${startOfWeek}`);
|
||||
}
|
||||
|
||||
const startDate = new Date(date);
|
||||
startDate.setDate(diff);
|
||||
return startDate;
|
||||
}
|
||||
|
||||
function getWeekNoteTitle(rootNote: BNote, weekNumber: number) {
|
||||
const pattern = rootNote.getOwnedLabelValue("weekPattern") || "Week {weekNumber}";
|
||||
|
||||
return pattern
|
||||
.replace(/{weekNumber}/g, weekNumber.toString());
|
||||
}
|
||||
|
||||
function getWeekNote(weekStr: string, options: WeekNoteOpts = {}, _rootNote: BNote | null = null): BNote | null {
|
||||
const rootNote = _rootNote || getRootCalendarNote();
|
||||
if (!rootNote.hasLabel('enableWeekNote')) {
|
||||
return null;
|
||||
}
|
||||
|
||||
weekStr = weekStr.trim().substring(0, 8);
|
||||
|
||||
let weekNote = searchService.findFirstNoteWithQuery(`#${WEEK_LABEL}="${weekStr}"`, new SearchContext({ ancestorNoteId: rootNote.noteId }));
|
||||
|
||||
if (weekNote) {
|
||||
return weekNote;
|
||||
}
|
||||
|
||||
const [yearStr, weekNumStr] = weekStr.trim().split('-W');
|
||||
|
||||
const year = parseInt(yearStr);
|
||||
const weekNumber = parseInt(weekNumStr);
|
||||
|
||||
const firstDayOfYear = new Date(year, 0, 1);
|
||||
const weekStartDate = new Date(firstDayOfYear);
|
||||
weekStartDate.setDate(firstDayOfYear.getDate() + (weekNumber - 1) * 7);
|
||||
|
||||
const startDate = getWeekStartDate(weekStartDate, options.startOfTheWeek || "monday");
|
||||
const monthNote = getMonthNote(dateUtils.utcDateStr(startDate), rootNote);
|
||||
|
||||
const noteTitle = getWeekNoteTitle(rootNote, weekNumber);
|
||||
|
||||
sql.transactional(() => {
|
||||
weekNote = createNote(monthNote, noteTitle);
|
||||
|
||||
attributeService.createLabel(weekNote.noteId, WEEK_LABEL, weekStr);
|
||||
attributeService.createLabel(weekNote.noteId, "sorted");
|
||||
|
||||
const weekTemplateAttr = rootNote.getOwnedAttribute("relation", "weekTemplate");
|
||||
console.log("weekTemplateAttr", weekTemplateAttr);
|
||||
|
||||
if (weekTemplateAttr) {
|
||||
console.log("weekTemplateAttr.value", weekTemplateAttr.value);
|
||||
attributeService.createRelation(weekNote.noteId, "template", weekTemplateAttr.value);
|
||||
}
|
||||
});
|
||||
|
||||
return weekNote as unknown as BNote;
|
||||
}
|
||||
|
||||
export default {
|
||||
getRootCalendarNote,
|
||||
getYearNote,
|
||||
getMonthNote,
|
||||
getWeekNote,
|
||||
getWeekFirstDayNote,
|
||||
getDayNote,
|
||||
getTodayNote
|
||||
|
Loading…
x
Reference in New Issue
Block a user