diff --git a/apps/client/src/widgets/view_widgets/calendar_view.ts b/apps/client/src/widgets/view_widgets/calendar_view.ts index d3f20d565..8402d1eb8 100644 --- a/apps/client/src/widgets/view_widgets/calendar_view.ts +++ b/apps/client/src/widgets/view_widgets/calendar_view.ts @@ -390,7 +390,7 @@ export default class CalendarView extends ViewMode<{}> { } } - onEntitiesReloaded({ loadResults }: EventData<"entitiesReloaded">) { + async onEntitiesReloaded({ loadResults }: EventData<"entitiesReloaded">) { // Refresh note IDs if they got changed. if (loadResults.getBranchRows().some((branch) => branch.parentNoteId === this.parentNote.noteId)) { this.noteIds = this.parentNote.getChildNoteIds(); diff --git a/apps/client/src/widgets/view_widgets/geo_view/index.ts b/apps/client/src/widgets/view_widgets/geo_view/index.ts index 758123ced..2ead57bde 100644 --- a/apps/client/src/widgets/view_widgets/geo_view/index.ts +++ b/apps/client/src/widgets/view_widgets/geo_view/index.ts @@ -251,7 +251,7 @@ export default class GeoView extends ViewMode { } } - onEntitiesReloaded({ loadResults }: EventData<"entitiesReloaded">): boolean | void { + async onEntitiesReloaded({ loadResults }: EventData<"entitiesReloaded">): boolean | void { // If any of the children branches are altered. if (loadResults.getBranchRows().find((branch) => branch.parentNoteId === this.parentNote.noteId)) { this.#reloadMarkers(); diff --git a/apps/client/src/widgets/view_widgets/table_view/index.ts b/apps/client/src/widgets/view_widgets/table_view/index.ts index dac44fd3f..6f7d49156 100644 --- a/apps/client/src/widgets/view_widgets/table_view/index.ts +++ b/apps/client/src/widgets/view_widgets/table_view/index.ts @@ -136,7 +136,7 @@ export default class TableView extends ViewMode { const viewStorage = await this.viewStorage.restore(); this.persistentData = viewStorage?.tableData || {}; - const { definitions: rowData, hasChildren } = await buildRowDefinitions(this.parentNote, info); + const { definitions: rowData, hasSubtree: hasChildren } = await buildRowDefinitions(this.parentNote, info); const movableRows = canReorderRows(this.parentNote) && !hasChildren; const columnDefs = buildColumnDefinitions(info, movableRows); let opts: Options = { @@ -242,7 +242,7 @@ export default class TableView extends ViewMode { } } - onEntitiesReloaded({ loadResults }: EventData<"entitiesReloaded">): boolean | void { + async onEntitiesReloaded({ loadResults }: EventData<"entitiesReloaded">) { if (!this.api) { return; } @@ -258,7 +258,7 @@ export default class TableView extends ViewMode { if (loadResults.getBranchRows().some(branch => branch.parentNoteId === this.parentNote.noteId || this.noteIds.includes(branch.parentNoteId ?? "")) || loadResults.getNoteIds().some(noteId => this.noteIds.includes(noteId) || loadResults.getAttributeRows().some(attr => this.noteIds.includes(attr.noteId!)))) { - this.#manageRowsUpdate(); + return await this.#manageRowsUpdate(); } return false; @@ -280,8 +280,15 @@ export default class TableView extends ViewMode { } const info = getAttributeDefinitionInformation(this.parentNote); - const { definitions } = await buildRowDefinitions(this.parentNote, info); + const { definitions, hasSubtree } = await buildRowDefinitions(this.parentNote, info); + + // Force a refresh if the data tree needs enabling/disabling. + if (this.api.options.dataTree !== hasSubtree) { + return true; + } + await this.api.replaceData(definitions); + return false; } focusOnBranch(branchId: string) { diff --git a/apps/client/src/widgets/view_widgets/table_view/rows.ts b/apps/client/src/widgets/view_widgets/table_view/rows.ts index f2e355516..615dd7f9b 100644 --- a/apps/client/src/widgets/view_widgets/table_view/rows.ts +++ b/apps/client/src/widgets/view_widgets/table_view/rows.ts @@ -14,7 +14,7 @@ export type TableData = { export async function buildRowDefinitions(parentNote: FNote, infos: AttributeDefinitionInformation[]) { const definitions: TableData[] = []; - let hasChildren = false; + let hasSubtree = false; for (const branch of parentNote.getChildBranches()) { const note = await branch.getNote(); if (!note) { @@ -42,7 +42,7 @@ export async function buildRowDefinitions(parentNote: FNote, infos: AttributeDef if (note.hasChildren()) { def._children = (await buildRowDefinitions(note, infos)).definitions; - hasChildren = true; + hasSubtree = true; } definitions.push(def); @@ -50,7 +50,7 @@ export async function buildRowDefinitions(parentNote: FNote, infos: AttributeDef return { definitions, - hasChildren + hasSubtree }; } diff --git a/apps/client/src/widgets/view_widgets/view_mode.ts b/apps/client/src/widgets/view_widgets/view_mode.ts index 4d04130f7..4755294f8 100644 --- a/apps/client/src/widgets/view_widgets/view_mode.ts +++ b/apps/client/src/widgets/view_widgets/view_mode.ts @@ -43,16 +43,16 @@ export default abstract class ViewMode extends 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 { + async onEntitiesReloaded(e: EventData<"entitiesReloaded">): Promise { // Do nothing by default. } - entitiesReloadedEvent(e: EventData<"entitiesReloaded">) { + async entitiesReloadedEvent(e: EventData<"entitiesReloaded">) { if (e.loadResults.getBranchRows().some(branch => branch.parentNoteId === this.parentNote.noteId || this.noteIds.includes(branch.parentNoteId ?? ""))) { this.#refreshNoteIds(); } - if (this.onEntitiesReloaded(e)) { + if (await this.onEntitiesReloaded(e)) { appContext.triggerEvent("refreshNoteList", { noteId: this.parentNote.noteId }); } }