mirror of
https://github.com/zadam/trilium.git
synced 2025-03-01 14:22:32 +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;
|
|
}
|
|
}
|