From 9b32d86f78b9fd2c02ed648762c7c0bfa91cf004 Mon Sep 17 00:00:00 2001 From: zadam Date: Wed, 3 May 2023 23:42:44 +0200 Subject: [PATCH] take branch prefix into account while sorting, fixes #3896 --- src/services/handlers.js | 6 ++++++ src/services/tree.js | 17 ++++++++++++----- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/src/services/handlers.js b/src/services/handlers.js index 0a95deebd..b1ccfa63f 100644 --- a/src/services/handlers.js +++ b/src/services/handlers.js @@ -61,6 +61,12 @@ eventService.subscribe([ eventService.ENTITY_CHANGED, eventService.ENTITY_DELETE eventService.subscribe(eventService.ENTITY_CHANGED, ({entityName, entity}) => { if (entityName === 'note_contents') { // FIXME runAttachedRelations(entity, 'runOnNoteContentChange', entity); + } else if (entityName === 'branches') { + const parentNote = becca.getNote(entity.parentNoteId); + + if (parentNote?.hasLabel("sorted")) { + treeService.sortNotesIfNeeded(parentNote.noteId); + } } }); diff --git a/src/services/tree.js b/src/services/tree.js index 371b777f4..ac12481ca 100644 --- a/src/services/tree.js +++ b/src/services/tree.js @@ -90,22 +90,29 @@ function sortNotes(parentNoteId, customSortBy = 'title', reverse = false, folder } function fetchValue(note, key) { - const rawValue = ['title', 'dateCreated', 'dateModified'].includes(key) - ? note[key] - : note.getLabelValue(key); + let rawValue; + + if (key === 'title') { + const branch = note.getParentBranches().find(branch => branch.parentNoteId === parentNoteId); + const prefix = branch?.prefix; + rawValue = prefix ? `${prefix} - ${note.title}` : note.title; + } else { + rawValue = ['dateCreated', 'dateModified'].includes(key) + ? note[key] + : note.getLabelValue(key); + } return normalize(rawValue); } function compare(a, b) { - if (!sortNatural){ + if (!sortNatural) { // alphabetical sort return b === null || b === undefined || a < b ? -1 : 1; } else { // natural sort return a.localeCompare(b, sortLocale, {numeric: true, sensitivity: 'base'}); } - } const topAEl = fetchValue(a, 'top');