mirror of
https://github.com/zadam/trilium.git
synced 2025-11-10 08:29:00 +01:00
feat(views/table): support recursive children update
This commit is contained in:
parent
8c56315313
commit
402540f483
@ -259,6 +259,7 @@ class FNote {
|
|||||||
async getSubtreeNoteIds() {
|
async getSubtreeNoteIds() {
|
||||||
let noteIds: (string | string[])[] = [];
|
let noteIds: (string | string[])[] = [];
|
||||||
for (const child of await this.getChildNotes()) {
|
for (const child of await this.getChildNotes()) {
|
||||||
|
noteIds.push(child.noteId);
|
||||||
noteIds.push(await child.getSubtreeNoteIds());
|
noteIds.push(await child.getSubtreeNoteIds());
|
||||||
}
|
}
|
||||||
return noteIds.flat();
|
return noteIds.flat();
|
||||||
|
|||||||
@ -6,33 +6,18 @@ import TableView from "../widgets/view_widgets/table_view/index.js";
|
|||||||
import type { ViewModeArgs } from "../widgets/view_widgets/view_mode.js";
|
import type { ViewModeArgs } from "../widgets/view_widgets/view_mode.js";
|
||||||
import type ViewMode from "../widgets/view_widgets/view_mode.js";
|
import type ViewMode from "../widgets/view_widgets/view_mode.js";
|
||||||
|
|
||||||
|
export type ArgsWithoutNoteId = Omit<ViewModeArgs, "noteIds">;
|
||||||
export type ViewTypeOptions = "list" | "grid" | "calendar" | "table" | "geoMap";
|
export type ViewTypeOptions = "list" | "grid" | "calendar" | "table" | "geoMap";
|
||||||
|
|
||||||
export default class NoteListRenderer {
|
export default class NoteListRenderer {
|
||||||
|
|
||||||
private viewType: ViewTypeOptions;
|
private viewType: ViewTypeOptions;
|
||||||
public viewMode: ViewMode<any> | null;
|
private args: ArgsWithoutNoteId;
|
||||||
|
public viewMode?: ViewMode<any>;
|
||||||
|
|
||||||
constructor(args: ViewModeArgs) {
|
constructor(args: ArgsWithoutNoteId) {
|
||||||
|
this.args = args;
|
||||||
this.viewType = this.#getViewType(args.parentNote);
|
this.viewType = this.#getViewType(args.parentNote);
|
||||||
|
|
||||||
switch (this.viewType) {
|
|
||||||
case "list":
|
|
||||||
case "grid":
|
|
||||||
this.viewMode = new ListOrGridView(this.viewType, args);
|
|
||||||
break;
|
|
||||||
case "calendar":
|
|
||||||
this.viewMode = new CalendarView(args);
|
|
||||||
break;
|
|
||||||
case "table":
|
|
||||||
this.viewMode = new TableView(args);
|
|
||||||
break;
|
|
||||||
case "geoMap":
|
|
||||||
this.viewMode = new GeoView(args);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
this.viewMode = null;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#getViewType(parentNote: FNote): ViewTypeOptions {
|
#getViewType(parentNote: FNote): ViewTypeOptions {
|
||||||
@ -57,11 +42,36 @@ export default class NoteListRenderer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async renderList() {
|
async renderList() {
|
||||||
if (!this.viewMode) {
|
const args = this.args;
|
||||||
return null;
|
|
||||||
|
let noteIds: string[];
|
||||||
|
if (this.viewType === "list" || this.viewType === "grid") {
|
||||||
|
noteIds = args.parentNote.getChildNoteIds();
|
||||||
|
} else {
|
||||||
|
noteIds = await args.parentNote.getSubtreeNoteIds();
|
||||||
}
|
}
|
||||||
|
|
||||||
return await this.viewMode.renderList();
|
const viewMode = this.#buildViewMode({
|
||||||
|
...args,
|
||||||
|
noteIds
|
||||||
|
});
|
||||||
|
this.viewMode = viewMode;
|
||||||
|
return await viewMode.renderList();
|
||||||
|
}
|
||||||
|
|
||||||
|
#buildViewMode(args: ViewModeArgs) {
|
||||||
|
switch (this.viewType) {
|
||||||
|
case "calendar":
|
||||||
|
return new CalendarView(args);
|
||||||
|
case "table":
|
||||||
|
return new TableView(args);
|
||||||
|
case "geoMap":
|
||||||
|
return new GeoView(args);
|
||||||
|
case "list":
|
||||||
|
case "grid":
|
||||||
|
default:
|
||||||
|
return new ListOrGridView(this.viewType, args);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -123,8 +123,7 @@ export default class NoteListWidget extends NoteContextAwareWidget {
|
|||||||
const noteListRenderer = new NoteListRenderer({
|
const noteListRenderer = new NoteListRenderer({
|
||||||
$parent: this.$content,
|
$parent: this.$content,
|
||||||
parentNote: note,
|
parentNote: note,
|
||||||
parentNotePath: this.notePath,
|
parentNotePath: this.notePath
|
||||||
noteIds: note.getChildNoteIds()
|
|
||||||
});
|
});
|
||||||
this.$widget.toggleClass("full-height", noteListRenderer.isFullHeight);
|
this.$widget.toggleClass("full-height", noteListRenderer.isFullHeight);
|
||||||
await noteListRenderer.renderList();
|
await noteListRenderer.renderList();
|
||||||
|
|||||||
@ -68,7 +68,6 @@ export default class SearchResultWidget extends NoteContextAwareWidget {
|
|||||||
const noteListRenderer = new NoteListRenderer({
|
const noteListRenderer = new NoteListRenderer({
|
||||||
$parent: this.$content,
|
$parent: this.$content,
|
||||||
parentNote: note,
|
parentNote: note,
|
||||||
noteIds: note.getChildNoteIds(),
|
|
||||||
showNotePath: true
|
showNotePath: true
|
||||||
});
|
});
|
||||||
await noteListRenderer.renderList();
|
await noteListRenderer.renderList();
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user