fix expand subtree's conflict with auto-lazy loading

This commit is contained in:
zadam 2020-04-30 23:09:25 +02:00
parent 7482ed063b
commit 0a05a40186

View File

@ -222,13 +222,17 @@ export default class NoteTreeWidget extends TabAwareWidget {
}, },
// this is done to automatically lazy load all expanded search notes after tree load // this is done to automatically lazy load all expanded search notes after tree load
loadChildren: (event, data) => { loadChildren: (event, data) => {
data.node.visit((subNode) => { // semaphore since the conflict when two processes are trying to load the same data
// Load all lazy/unloaded child nodes // breaks the fancytree
// (which will trigger `loadChildren` recursively) if (!this.tree || !this.tree.autoLoadingDisabled) {
if (subNode.isUndefined() && subNode.isExpanded()) { data.node.visit((subNode) => {
subNode.load(); // Load all lazy/unloaded child nodes
} // (which will trigger `loadChildren` recursively)
}); if (subNode.isUndefined() && subNode.isExpanded()) {
subNode.load();
}
});
}
} }
}); });
@ -262,7 +266,7 @@ export default class NoteTreeWidget extends TabAwareWidget {
return notes; return notes;
} }
expandTree(node = null) { async expandTree(node = null) {
if (!node) { if (!node) {
const hoistedNoteId = hoistedNoteService.getHoistedNoteId(); const hoistedNoteId = hoistedNoteService.getHoistedNoteId();
@ -270,11 +274,18 @@ export default class NoteTreeWidget extends TabAwareWidget {
} }
this.batchUpdate(async () => { this.batchUpdate(async () => {
// trick - first force load of the whole subtree and then visit and expand. try {
// unfortunately the two steps can't be combined this.tree.autoLoadingDisabled = true;
await node.visitAndLoad(node => {}, true);
node.visit(node => node.setExpanded(true), true); // trick - first force load of the whole subtree and then visit and expand.
// unfortunately the two steps can't be combined
await node.visitAndLoad(_ => {}, true);
node.visit(node => node.setExpanded(true), true);
}
finally {
this.tree.autoLoadingDisabled = false;
}
}); });
} }
@ -478,16 +489,14 @@ export default class NoteTreeWidget extends TabAwareWidget {
} }
async batchUpdate(cb) { async batchUpdate(cb) {
let prevUpdate;
try { try {
// disable rendering during update for increased performance // disable rendering during update for increased performance
prevUpdate = this.tree.enableUpdate(false); this.tree.enableUpdate(false);
await cb(); await cb();
} }
finally { finally {
this.tree.enableUpdate(prevUpdate); this.tree.enableUpdate(true);
} }
} }
@ -782,7 +791,7 @@ export default class NoteTreeWidget extends TabAwareWidget {
} }
} }
expandSubtreeCommand({node}) {console.log("HQY!", node); expandSubtreeCommand({node}) {
this.expandTree(node); this.expandTree(node);
} }