Better node saving/history

This commit is contained in:
Magnus Åhall 2026-06-10 16:37:33 +02:00
parent 3e8d5b6d9a
commit 95a26e67d5
3 changed files with 32 additions and 31 deletions

View file

@ -115,31 +115,9 @@ export class N2PageNodeUI extends CustomHTMLElement {
if (!this.node.isModified())
return
/* The node history is a local store for node history.
* This could be provisioned from the server or cleared if
* deemed unnecessary.
*
* The send queue is what will be sent back to the server
* to have a recorded history of the notes.
*
* A setting to be implemented in the future could be to
* not save the history locally at all. */
// The node is still in its old state and will present
// the unmodified content to the node store.
const history = nodeStore.nodesHistory.add(this.node)
// Prepares the node object for saving.
// Sets Updated value to current date and time.
// node.save takes care of both "nodes" and "nodes_history" stores, also adds it to send queue.
// Sets "Updated" value to current date and time and generates a new history UUID.
await this.node.save()
// Updated node is added to the send queue to be stored on server.
const sendQueue = nodeStore.sendQueue.add(this.node)
// Updated node is saved to the primary node store.
const nodeStoreAdding = nodeStore.add([this.node])
await Promise.all([history, sendQueue, nodeStoreAdding])
}// }}}
contentChanged(event) {//{{{
@ -306,7 +284,7 @@ export class Node {
return 0
}//}}}
static create(name, parentUUID) {// {{{
return new Node({
const node = new Node({
UUID: uuidv7(),
Created: (new Date()).toISOString(),
Content: '',
@ -315,6 +293,12 @@ export class Node {
Markdown: false,
History: false,
})
// Newly created node (not constructed from existing data) is considered modified
// since node.save returns early if it isn't modified.
node._modified = true
return node
}// }}}
constructor(nodeData, level) {//{{{
@ -431,6 +415,28 @@ export class Node {
// the ancestry path could be interesting.
const ancestors = await nodeStore.getNodeAncestry(this)
this.data.Ancestors = ancestors.map(a => a.get('Name')).reverse()
/* The node history is a local store for node history.
* This could be provisioned from the server or cleared if
* deemed unnecessary.
*
* The send queue is what will be sent back to the server
* to have a recorded history of the notes.
*
* A setting to be implemented in the future could be to
* not save the history locally at all. */
// Current node is added to history. It will be duplicated with the "nodes" store
// for simplicity, to hopefully avoid bugs.
const history = nodeStore.nodesHistory.add(this)
// Updated node is added to the send queue to be stored on server.
const sendQueue = nodeStore.sendQueue.add(this)
// Updated node is saved to the primary node store.
const nodeStoreAdding = nodeStore.add([this])
return Promise.all([history, sendQueue, nodeStoreAdding])
}//}}}
}