diff --git a/src/becca/becca_loader.js b/src/becca/becca_loader.js index 8af9dd656..c1294cdc7 100644 --- a/src/becca/becca_loader.js +++ b/src/becca/becca_loader.js @@ -34,7 +34,11 @@ function load() { new BNote().update(row).init(); } - for (const row of sql.getRawRows(`SELECT branchId, noteId, parentNoteId, prefix, notePosition, isExpanded, utcDateModified FROM branches WHERE isDeleted = 0`)) { + const branchRows = sql.getRawRows(`SELECT branchId, noteId, parentNoteId, prefix, notePosition, isExpanded, utcDateModified FROM branches WHERE isDeleted = 0`); + // in-memory sort is faster than in the DB + branchRows.sort((a, b) => a.notePosition - b.notePosition); + + for (const row of branchRows) { new BBranch().update(row).init(); } @@ -164,6 +168,12 @@ function branchUpdated(branch) { childNote.flatTextCache = null; childNote.sortParents(); } + + const parentNote = becca.notes[branch.parentNoteId]; + + if (parentNote) { + parentNote.sortChildren(); + } } function attributeDeleted(attributeId) { diff --git a/src/becca/entities/bnote.js b/src/becca/entities/bnote.js index 1e34315dd..3aa685b95 100644 --- a/src/becca/entities/bnote.js +++ b/src/becca/entities/bnote.js @@ -730,6 +730,21 @@ class BNote extends AbstractBeccaEntity { .filter(note => !!note); } + sortChildren() { + if (this.children.length === 0) { + return; + } + + const becca = this.becca; + + this.children.sort((a, b) => { + const aBranch = becca.getBranchFromChildAndParent(a.noteId, this.noteId); + const bBranch = becca.getBranchFromChildAndParent(b.noteId, this.noteId); + + return aBranch?.notePosition < bBranch?.notePosition ? -1 : 1; + }); + } + /** * This is used for: * - fast searching