feat(views/table): force a refresh if data tree changes

This commit is contained in:
Elian Doran
2025-07-14 16:58:14 +03:00
parent 38fce25b86
commit fcbbc21a80
5 changed files with 19 additions and 12 deletions

View File

@@ -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();

View File

@@ -251,7 +251,7 @@ export default class GeoView extends ViewMode<MapData> {
}
}
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();

View File

@@ -136,7 +136,7 @@ export default class TableView extends ViewMode<StateInfo> {
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<StateInfo> {
}
}
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<StateInfo> {
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<StateInfo> {
}
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) {

View File

@@ -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
};
}

View File

@@ -43,16 +43,16 @@ export default abstract class ViewMode<T extends object> 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<boolean | void> {
// 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 });
}
}