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,6 +222,9 @@ export default class NoteTreeWidget extends TabAwareWidget {
},
// this is done to automatically lazy load all expanded search notes after tree load
loadChildren: (event, data) => {
// semaphore since the conflict when two processes are trying to load the same data
// breaks the fancytree
if (!this.tree || !this.tree.autoLoadingDisabled) {
data.node.visit((subNode) => {
// Load all lazy/unloaded child nodes
// (which will trigger `loadChildren` recursively)
@ -230,6 +233,7 @@ export default class NoteTreeWidget extends TabAwareWidget {
}
});
}
}
});
this.$widget.on('contextmenu', '.fancytree-node', e => {
@ -262,7 +266,7 @@ export default class NoteTreeWidget extends TabAwareWidget {
return notes;
}
expandTree(node = null) {
async expandTree(node = null) {
if (!node) {
const hoistedNoteId = hoistedNoteService.getHoistedNoteId();
@ -270,11 +274,18 @@ export default class NoteTreeWidget extends TabAwareWidget {
}
this.batchUpdate(async () => {
try {
this.tree.autoLoadingDisabled = 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(node => {}, true);
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) {
let prevUpdate;
try {
// disable rendering during update for increased performance
prevUpdate = this.tree.enableUpdate(false);
this.tree.enableUpdate(false);
await cb();
}
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);
}