mirror of
				https://github.com/zadam/trilium.git
				synced 2025-10-31 02:16:05 +01:00 
			
		
		
		
	load only expanded tree with the rest being lazy loaded, WIP
This commit is contained in:
		| @@ -3,56 +3,46 @@ | ||||
| const sql = require('../../services/sql'); | ||||
| const optionService = require('../../services/options'); | ||||
| const protectedSessionService = require('../../services/protected_session'); | ||||
| const utils = require('../../services/utils'); | ||||
|  | ||||
| async function getTree() { | ||||
|     const branches = await sql.getRows(` | ||||
|       SELECT  | ||||
|         branchId, | ||||
|         noteId, | ||||
|         parentNoteId, | ||||
|         notePosition, | ||||
|         prefix, | ||||
|         isExpanded | ||||
|       FROM | ||||
|         branches  | ||||
|       WHERE  | ||||
|         isDeleted = 0 | ||||
|       ORDER BY  | ||||
|         notePosition`); | ||||
|         WITH RECURSIVE | ||||
|             tree(branchId, noteId, isExpanded) AS ( | ||||
|             SELECT branchId, noteId, isExpanded FROM branches WHERE branchId = 'root'  | ||||
|             UNION ALL | ||||
|             SELECT branches.branchId, branches.noteId, branches.isExpanded FROM branches | ||||
|               JOIN tree ON branches.parentNoteId = tree.noteId | ||||
|               WHERE tree.isExpanded = 1 AND branches.isDeleted = 0 | ||||
|           ) | ||||
|         SELECT branches.* FROM tree JOIN branches USING(branchId);`); | ||||
|  | ||||
|     const notes = [{ | ||||
|         noteId: 'root', | ||||
|         title: 'root', | ||||
|         isProtected: false, | ||||
|         type: 'none', | ||||
|         mime: 'none' | ||||
|     }].concat(await sql.getRows(` | ||||
|       SELECT  | ||||
|         notes.noteId, | ||||
|         notes.title, | ||||
|         notes.isProtected, | ||||
|         notes.type, | ||||
|         notes.mime, | ||||
|         hideInAutocomplete.labelId AS 'hideInAutocomplete' | ||||
|       FROM | ||||
|         notes | ||||
|         LEFT JOIN labels AS hideInAutocomplete ON hideInAutocomplete.noteId = notes.noteId | ||||
|                              AND hideInAutocomplete.name = 'hideInAutocomplete' | ||||
|                              AND hideInAutocomplete.isDeleted = 0 | ||||
|       WHERE  | ||||
|         notes.isDeleted = 0`)); | ||||
|     const noteIds = branches.map(b => b.noteId); | ||||
|     const questionMarks = branches.map(() => "?").join(","); | ||||
|  | ||||
|     const notes = await sql.getRows(` | ||||
|       SELECT noteId, title, isProtected, type, mime | ||||
|       FROM notes WHERE isDeleted = 0 AND noteId IN (${questionMarks})`, noteIds); | ||||
|  | ||||
|     protectedSessionService.decryptNotes(notes); | ||||
|  | ||||
|     notes.forEach(note => { | ||||
|         note.hideInAutocomplete = !!note.hideInAutocomplete; | ||||
|         note.isProtected = !!note.isProtected; | ||||
|     }); | ||||
|     notes.forEach(note => note.isProtected = !!note.isProtected); | ||||
|  | ||||
|     const relationships = await sql.getRows(`SELECT noteId, parentNoteId FROM branches WHERE isDeleted = 0  | ||||
|          AND parentNoteId IN (${questionMarks})`, noteIds); | ||||
|  | ||||
|     const parentToChild = {}; | ||||
|  | ||||
|     for (const rel of relationships) { | ||||
|         parentToChild[rel.parentNoteId] = parentToChild[rel.parentNoteId] || []; | ||||
|         parentToChild[rel.parentNoteId].push(rel.noteId); | ||||
|     } | ||||
|  | ||||
|     return { | ||||
|         startNotePath: await optionService.getOption('startNotePath'), | ||||
|         branches: branches, | ||||
|         notes: notes | ||||
|         notes: notes, | ||||
|         parentToChild | ||||
|     }; | ||||
| } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user