mirror of
				https://github.com/zadam/trilium.git
				synced 2025-10-31 11:39:01 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			143 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			143 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| export default class LoadResults {
 | |
|     constructor(entityChanges) {
 | |
|         this.entities = {};
 | |
| 
 | |
|         for (const {entityId, entityName, entity} of entityChanges) {
 | |
|             if (entity) {
 | |
|                 this.entities[entityName] = this.entities[entityName] || [];
 | |
|                 this.entities[entityName][entityId] = entity;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         this.noteIdToComponentId = {};
 | |
|         this.componentIdToNoteIds = {};
 | |
| 
 | |
|         this.branches = [];
 | |
| 
 | |
|         this.attributes = [];
 | |
| 
 | |
|         this.noteReorderings = [];
 | |
| 
 | |
|         this.noteRevisions = [];
 | |
| 
 | |
|         this.contentNoteIdToComponentId = [];
 | |
| 
 | |
|         this.options = [];
 | |
|     }
 | |
| 
 | |
|     getEntity(entityName, entityId) {
 | |
|         return this.entities[entityName]?.[entityId];
 | |
|     }
 | |
| 
 | |
|     addNote(noteId, componentId) {
 | |
|         this.noteIdToComponentId[noteId] = this.noteIdToComponentId[noteId] || [];
 | |
| 
 | |
|         if (!this.noteIdToComponentId[noteId].includes(componentId)) {
 | |
|             this.noteIdToComponentId[noteId].push(componentId);
 | |
|         }
 | |
| 
 | |
|         this.componentIdToNoteIds[componentId] = this.componentIdToNoteIds[componentId] || [];
 | |
| 
 | |
|         if (!this.componentIdToNoteIds[componentId]) {
 | |
|             this.componentIdToNoteIds[componentId].push(noteId);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     addBranch(branchId, componentId) {
 | |
|         this.branches.push({branchId, componentId});
 | |
|     }
 | |
| 
 | |
|     getBranches() {
 | |
|         return this.branches
 | |
|             .map(row => this.getEntity("branches", row.branchId))
 | |
|             .filter(branch => !!branch);
 | |
|     }
 | |
| 
 | |
|     addNoteReordering(parentNoteId, componentId) {
 | |
|         this.noteReorderings.push(parentNoteId);
 | |
|     }
 | |
| 
 | |
|     getNoteReorderings() {
 | |
|         return this.noteReorderings;
 | |
|     }
 | |
| 
 | |
|     addAttribute(attributeId, componentId) {
 | |
|         this.attributes.push({attributeId, componentId});
 | |
|     }
 | |
| 
 | |
|     /** @returns {Attribute[]} */
 | |
|     getAttributes(componentId = 'none') {
 | |
|         return this.attributes
 | |
|             .filter(row => row.componentId !== componentId)
 | |
|             .map(row => this.getEntity("attributes", row.attributeId))
 | |
|             .filter(attr => !!attr);
 | |
|     }
 | |
| 
 | |
|     addNoteRevision(noteRevisionId, noteId, componentId) {
 | |
|         this.noteRevisions.push({noteRevisionId, noteId, componentId});
 | |
|     }
 | |
| 
 | |
|     hasNoteRevisionForNote(noteId) {
 | |
|         return !!this.noteRevisions.find(nr => nr.noteId === noteId);
 | |
|     }
 | |
| 
 | |
|     getNoteIds() {
 | |
|         return Object.keys(this.noteIdToComponentId);
 | |
|     }
 | |
| 
 | |
|     isNoteReloaded(noteId, componentId = null) {
 | |
|         if (!noteId) {
 | |
|             return false;
 | |
|         }
 | |
| 
 | |
|         const componentIds = this.noteIdToComponentId[noteId];
 | |
|         return componentIds && componentIds.find(sId => sId !== componentId) !== undefined;
 | |
|     }
 | |
| 
 | |
|     addNoteContent(noteId, componentId) {
 | |
|         this.contentNoteIdToComponentId.push({noteId, componentId});
 | |
|     }
 | |
| 
 | |
|     isNoteContentReloaded(noteId, componentId) {
 | |
|         if (!noteId) {
 | |
|             return false;
 | |
|         }
 | |
| 
 | |
|         return this.contentNoteIdToComponentId.find(l => l.noteId === noteId && l.componentId !== componentId);
 | |
|     }
 | |
| 
 | |
|     addOption(name) {
 | |
|         this.options.push(name);
 | |
|     }
 | |
| 
 | |
|     isOptionReloaded(name) {
 | |
|         return this.options.includes(name);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * @return {boolean} true if there are changes which could affect the attributes (including inherited ones)
 | |
|      *          notably changes in note itself should not have any effect on attributes
 | |
|      */
 | |
|     hasAttributeRelatedChanges() {
 | |
|         return this.branches.length > 0
 | |
|             || this.attributes.length > 0;
 | |
|     }
 | |
| 
 | |
|     isEmpty() {
 | |
|         return Object.keys(this.noteIdToComponentId).length === 0
 | |
|             && this.branches.length === 0
 | |
|             && this.attributes.length === 0
 | |
|             && this.noteReorderings.length === 0
 | |
|             && this.noteRevisions.length === 0
 | |
|             && this.contentNoteIdToComponentId.length === 0
 | |
|             && this.options.length === 0;
 | |
|     }
 | |
| 
 | |
|     isEmptyForTree() {
 | |
|         return Object.keys(this.noteIdToComponentId).length === 0
 | |
|             && this.branches.length === 0
 | |
|             && this.attributes.length === 0
 | |
|             && this.noteReorderings.length === 0;
 | |
|     }
 | |
| }
 | 
