From 42d46bdb725b19600c54373205e9c5cec7bbbd90 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Fri, 21 Feb 2025 17:52:11 +0200 Subject: [PATCH] feat(views/calendar): add option to hide weekends --- src/public/app/widgets/note_list.ts | 6 ++++-- src/public/app/widgets/view_widgets/calendar_view.ts | 11 +++++++++-- src/public/app/widgets/view_widgets/view_mode.ts | 8 +++++++- 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/src/public/app/widgets/note_list.ts b/src/public/app/widgets/note_list.ts index 1ff4ffb90..84599d42b 100644 --- a/src/public/app/widgets/note_list.ts +++ b/src/public/app/widgets/note_list.ts @@ -117,8 +117,10 @@ export default class NoteListWidget extends NoteContextAwareWidget { this.checkRenderStatus(); } - if (this.viewMode) { - this.viewMode.entitiesReloadedEvents(e); + // Inform the view mode of changes and refresh if needed. + if (this.viewMode && this.viewMode.onEntitiesReloaded(e)) { + this.refresh(); + this.checkRenderStatus(); } } } diff --git a/src/public/app/widgets/view_widgets/calendar_view.ts b/src/public/app/widgets/view_widgets/calendar_view.ts index bf913c9e9..c5caafad8 100644 --- a/src/public/app/widgets/view_widgets/calendar_view.ts +++ b/src/public/app/widgets/view_widgets/calendar_view.ts @@ -102,6 +102,7 @@ export default class CalendarView extends ViewMode { select: (e) => this.#onCalendarSelection(e), eventChange: (e) => this.#onEventMoved(e), firstDay: options.getInt("firstDayOfWeek") ?? 0, + weekends: !this.parentNote.hasAttribute("label", "calendar:hideWeekends"), locale: await CalendarView.#getLocale(), height: "100%" }); @@ -179,12 +180,18 @@ export default class CalendarView extends ViewMode { CalendarView.#setAttribute(note, "label", "endDate", endDate); } - entitiesReloadedEvents({ loadResults }: EventData<"entitiesReloaded">): void { + onEntitiesReloaded({ loadResults }: EventData<"entitiesReloaded">) { // Refresh note IDs if they got changed. - if (loadResults.getBranchRows().some((branch) => branch.parentNoteId == this.parentNote.noteId)) { + if (loadResults.getBranchRows().some((branch) => branch.parentNoteId === this.parentNote.noteId)) { this.noteIds = this.parentNote.getChildNoteIds(); } + // Refresh calendar on attribute change. + if (loadResults.getAttributeRows().some((attribute) => attribute.noteId === this.parentNote.noteId && attribute.name?.startsWith("calendar:"))) { + return true; + } + + // Refresh dataset on subnote change. if (this.calendar && loadResults.getAttributeRows().some((a) => this.noteIds.includes(a.noteId ?? ""))) { this.calendar.refetchEvents(); } diff --git a/src/public/app/widgets/view_widgets/view_mode.ts b/src/public/app/widgets/view_widgets/view_mode.ts index 719f04bc1..b7454919e 100644 --- a/src/public/app/widgets/view_widgets/view_mode.ts +++ b/src/public/app/widgets/view_widgets/view_mode.ts @@ -17,7 +17,13 @@ export default abstract class ViewMode { abstract renderList(): Promise | undefined>; - entitiesReloadedEvents(e: EventData<"entitiesReloaded">) { + /** + * Called whenever an "entitiesReloaded" event has been received by the parent component. + * + * @param e the event data. + * @return {@code true} if the view should be re-rendered, a falsy value otherwise. + */ + onEntitiesReloaded(e: EventData<"entitiesReloaded">): boolean | void { // Do nothing by default. }