Files
notesnook/packages/core/models/topic.js

84 lines
2.0 KiB
JavaScript
Raw Normal View History

import { qclone } from "qclone";
2020-02-05 20:57:43 +05:00
export default class Topic {
/**
* @param {Object} topic
2020-04-16 02:14:53 +05:00
* @param {string} notebookId
* @param {import('../api').default} db
2020-02-05 20:57:43 +05:00
*/
2020-04-16 02:14:53 +05:00
constructor(topic, notebookId, db) {
this._topic = topic;
2020-04-16 02:14:53 +05:00
this._db = db;
this._notebookId = notebookId;
}
get totalNotes() {
return this._topic.totalNotes;
2020-02-05 20:57:43 +05:00
}
has(noteId) {
return this._topic.notes.findIndex((n) => n === noteId) > -1;
2020-02-05 20:57:43 +05:00
}
async add(...noteIds) {
const topic = qclone(this._topic);
2020-02-05 20:57:43 +05:00
for (let noteId of noteIds) {
2020-04-16 02:14:53 +05:00
let note = this._db.notes.note(noteId);
2020-03-23 13:22:28 +05:00
if (this.has(noteId) || !note || note.data.deleted) continue;
topic.notes.push(noteId);
const array = note.notebooks || [];
if (
array.some(
(item) => item.id === this._notebookId && item.topic === topic.id
2020-02-05 20:57:43 +05:00
)
)
return this;
array.push({ id: this._notebookId, topic: topic.id });
2020-04-16 02:14:53 +05:00
await this._db.notes.add({
2020-02-05 20:57:43 +05:00
id: noteId,
notebooks: array,
2020-02-05 20:57:43 +05:00
});
topic.totalNotes++;
2020-02-05 20:57:43 +05:00
}
return await this._save(topic);
2020-02-05 20:57:43 +05:00
}
async delete(...noteIds) {
const topic = qclone(this._topic);
2020-02-05 20:57:43 +05:00
for (let noteId of noteIds) {
let note = this._db.notes.note(noteId);
if (!this.has(noteId) || !note || note.data.deleted) return this;
let index = topic.notes.findIndex((n) => n === noteId);
topic.notes.splice(index, 1);
const array = note.notebooks || [];
index = array.findIndex(
(n) => n.id === this._notebookId && n.topic === topic.id
);
array.splice(index, 1);
2020-04-16 02:14:53 +05:00
await this._db.notes.add({
2020-02-05 20:57:43 +05:00
id: noteId,
notebooks: array,
2020-02-05 20:57:43 +05:00
});
topic.totalNotes--;
2020-02-05 20:57:43 +05:00
}
return await this._save(topic);
2020-02-05 20:57:43 +05:00
}
async _save(topic) {
2020-04-16 02:14:53 +05:00
await this._db.notebooks.notebook(this._notebookId).topics.add(topic);
2020-02-06 18:47:42 +05:00
return this;
2020-02-05 20:57:43 +05:00
}
get all() {
return this._topic.notes
.map((note) => {
2020-04-16 02:14:53 +05:00
let fullNote = this._db.notes.note(note);
if (fullNote) return fullNote.data;
})
.filter((v) => v);
2020-02-05 20:57:43 +05:00
}
}