Notes/src/becca/entities/branch.js

139 lines
4.0 KiB
JavaScript
Raw Normal View History

2020-05-17 09:48:24 +02:00
"use strict";
2020-08-27 23:54:02 +02:00
const Note = require('./note.js');
const AbstractEntity = require("./abstract_entity.js");
2021-05-17 22:10:00 +02:00
const sql = require("../../services/sql.js");
const dateUtils = require("../../services/date_utils.js");
class Branch extends AbstractEntity {
static get entityName() { return "branches"; }
static get primaryKeyName() { return "branchId"; }
// notePosition is not part of hash because it would produce a lot of updates in case of reordering
static get hashedProperties() { return ["branchId", "noteId", "parentNoteId", "prefix"]; }
2021-04-30 22:13:13 +02:00
constructor(row) {
super();
if (!row) {
return;
}
this.update([
row.branchId,
row.noteId,
row.parentNoteId,
row.prefix,
row.notePosition,
row.isExpanded,
row.utcDateModified
]);
this.init();
}
update([branchId, noteId, parentNoteId, prefix, notePosition, isExpanded, utcDateModified]) {
2020-05-16 23:12:29 +02:00
/** @param {string} */
this.branchId = branchId;
2020-05-16 23:12:29 +02:00
/** @param {string} */
this.noteId = noteId;
2020-05-16 23:12:29 +02:00
/** @param {string} */
this.parentNoteId = parentNoteId;
2020-05-16 23:12:29 +02:00
/** @param {string} */
this.prefix = prefix;
2020-12-11 22:06:12 +01:00
/** @param {int} */
this.notePosition = notePosition;
2020-12-11 22:06:12 +01:00
/** @param {boolean} */
this.isExpanded = !!isExpanded;
/** @param {string} */
this.utcDateModified = utcDateModified;
return this;
}
2020-05-16 23:12:29 +02:00
init() {
2020-05-16 23:12:29 +02:00
if (this.branchId === 'root') {
return;
}
const childNote = this.childNote;
2020-05-16 23:12:29 +02:00
const parentNote = this.parentNote;
childNote.parents.push(parentNote);
childNote.parentBranches.push(this);
parentNote.children.push(childNote);
2021-04-16 23:00:08 +02:00
this.becca.branches[this.branchId] = this;
this.becca.childParentToBranch[`${this.noteId}-${this.parentNoteId}`] = this;
2020-05-16 23:12:29 +02:00
}
/** @return {Note} */
get childNote() {
2021-04-16 23:00:08 +02:00
if (!(this.noteId in this.becca.notes)) {
// entities can come out of order in sync, create skeleton which will be filled later
2021-05-02 21:34:57 +02:00
this.becca.notes[this.noteId] = new Note({noteId: this.noteId});
}
2021-04-16 23:00:08 +02:00
return this.becca.notes[this.noteId];
}
2020-05-16 23:12:29 +02:00
2021-04-25 22:02:32 +02:00
getNote() {
return this.childNote;
}
/** @return {Note} */
get parentNote() {
2021-04-16 23:00:08 +02:00
if (!(this.parentNoteId in this.becca.notes)) {
// entities can come out of order in sync, create skeleton which will be filled later
2021-05-02 21:34:57 +02:00
this.becca.notes[this.parentNoteId] = new Note({noteId: this.parentNoteId});
2020-05-16 23:12:29 +02:00
}
2021-04-16 23:00:08 +02:00
return this.becca.notes[this.parentNoteId];
2020-05-16 23:12:29 +02:00
}
2021-05-08 21:10:58 +02:00
beforeSaving() {
if (this.notePosition === undefined || this.notePosition === null) {
// TODO finding new position can be refactored into becca
const maxNotePos = sql.getValue('SELECT MAX(notePosition) FROM branches WHERE parentNoteId = ? AND isDeleted = 0', [this.parentNoteId]);
this.notePosition = maxNotePos === null ? 0 : maxNotePos + 10;
}
if (!this.isExpanded) {
this.isExpanded = false;
}
this.utcDateModified = dateUtils.utcNowDateTime();
super.beforeSaving();
2021-05-09 20:46:32 +02:00
this.becca.branches[this.branchId] = this;
2021-05-08 21:10:58 +02:00
}
2021-04-25 21:19:18 +02:00
getPojo() {
2021-05-08 21:10:58 +02:00
return {
branchId: this.branchId,
noteId: this.noteId,
parentNoteId: this.parentNoteId,
prefix: this.prefix,
notePosition: this.notePosition,
2021-04-25 21:19:18 +02:00
isExpanded: this.isExpanded,
2021-05-09 11:12:53 +02:00
isDeleted: false,
2021-05-08 21:10:58 +02:00
utcDateModified: this.utcDateModified,
// not used for anything, will be later dropped
utcDateCreated: dateUtils.utcNowDateTime()
};
}
createClone(parentNoteId, notePosition) {
return new Branch({
noteId: this.noteId,
parentNoteId: parentNoteId,
notePosition: notePosition,
prefix: this.prefix,
isExpanded: this.isExpanded
});
}
2020-05-16 23:12:29 +02:00
}
2020-05-17 09:48:24 +02:00
module.exports = Branch;