mirror of
https://github.com/zadam/trilium.git
synced 2025-11-05 21:05:55 +01:00
basic saving of attributes in the widget
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
"use strict";
|
||||
|
||||
const sql = require('../../services/sql');
|
||||
const log = require('../../services/log');
|
||||
const attributeService = require('../../services/attributes');
|
||||
const repository = require('../../services/repository');
|
||||
const Attribute = require('../../entities/attribute');
|
||||
@@ -82,6 +83,72 @@ async function deleteNoteAttribute(req) {
|
||||
}
|
||||
}
|
||||
|
||||
async function updateNoteAttributes2(req) {
|
||||
const noteId = req.params.noteId;
|
||||
const incomingAttributes = req.body;
|
||||
|
||||
const note = await repository.getNote(noteId);
|
||||
|
||||
let existingAttrs = await note.getAttributes();
|
||||
|
||||
let position = 0;
|
||||
|
||||
for (const incAttr of incomingAttributes) {
|
||||
position += 10;
|
||||
|
||||
const perfectMatchAttr = existingAttrs.find(attr =>
|
||||
attr.type === incAttr.type &&
|
||||
attr.name === incAttr.name &&
|
||||
attr.isInheritable === incAttr.isInheritable &&
|
||||
attr.value === incAttr.value);
|
||||
|
||||
if (perfectMatchAttr) {
|
||||
existingAttrs = existingAttrs.filter(attr => attr.attributeId !== perfectMatchAttr.attributeId);
|
||||
|
||||
if (perfectMatchAttr.position !== position) {
|
||||
perfectMatchAttr.position = position;
|
||||
await perfectMatchAttr.save();
|
||||
}
|
||||
|
||||
continue; // nothing to update
|
||||
}
|
||||
|
||||
if (incAttr.type === 'relation') {
|
||||
const targetNote = await repository.getNote(incAttr.value);
|
||||
|
||||
if (!targetNote || targetNote.isDeleted) {
|
||||
log.error(`Target note of relation ${JSON.stringify(incAttr)} does not exist or is deleted`);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
const matchedAttr = existingAttrs.find(attr =>
|
||||
attr.type === incAttr.type &&
|
||||
attr.name === incAttr.name &&
|
||||
attr.isInheritable === incAttr.isInheritable);
|
||||
|
||||
if (matchedAttr) {
|
||||
matchedAttr.value = incAttr.value;
|
||||
matchedAttr.position = position;
|
||||
await matchedAttr.save();
|
||||
|
||||
existingAttrs = existingAttrs.filter(attr => attr.attributeId !== matchedAttr.attributeId);
|
||||
continue;
|
||||
}
|
||||
|
||||
// no existing attribute has been matched so we need to create a new one
|
||||
// type, name and isInheritable are immutable so even if there is an attribute with matching type & name, we need to create a new one and delete the former one
|
||||
|
||||
await note.addAttribute(incAttr.type, incAttr.name, incAttr.value, incAttr.isInheritable, position);
|
||||
}
|
||||
|
||||
// all the remaining existing attributes are not defined anymore and should be deleted
|
||||
for (const toDeleteAttr of existingAttrs) {
|
||||
toDeleteAttr.isDeleted = true;
|
||||
await toDeleteAttr.save();
|
||||
}
|
||||
}
|
||||
|
||||
async function updateNoteAttributes(req) {
|
||||
const noteId = req.params.noteId;
|
||||
const attributes = req.body;
|
||||
@@ -193,6 +260,7 @@ async function deleteRelation(req) {
|
||||
|
||||
module.exports = {
|
||||
updateNoteAttributes,
|
||||
updateNoteAttributes2,
|
||||
updateNoteAttribute,
|
||||
deleteNoteAttribute,
|
||||
getAttributeNames,
|
||||
|
||||
Reference in New Issue
Block a user