Notes/src/public/app/widgets/note_list.js

96 lines
2.7 KiB
JavaScript
Raw Normal View History

import TabAwareWidget from "./tab_aware_widget.js";
import NoteListRenderer from "../services/note_list_renderer.js";
const TPL = `
<div class="note-list-widget">
2020-11-26 23:00:27 +01:00
<style>
.note-list-widget {
flex-grow: 100000;
flex-shrink: 100000;
min-height: 0;
2020-12-13 20:13:57 +01:00
overflow: auto;
2020-11-26 23:00:27 +01:00
}
2020-12-13 23:27:42 +01:00
.note-list-widget .note-list {
padding: 10px;
}
2020-11-26 23:00:27 +01:00
</style>
<div class="note-list-widget-content">
</div>
</div>`;
export default class NoteListWidget extends TabAwareWidget {
isEnabled() {
return super.isEnabled()
&& ['book', 'text', 'code'].includes(this.note.type)
&& this.note.mime !== 'text/x-sqlite;schema=trilium'
&& this.note.hasChildren()
&& !this.note.hasLabel('hideChildrenOverview');
}
doRender() {
this.$widget = $(TPL);
2020-11-26 23:00:27 +01:00
this.$content = this.$widget.find('.note-list-widget-content');
this.contentSized();
2020-12-27 22:19:27 +01:00
const observer = new IntersectionObserver(entries => {
this.isIntersecting = entries[0].isIntersecting;
this.checkRenderStatus();
}, {
rootMargin: '50px',
threshold: 0.1
});
observer.observe(this.$widget[0]);
}
checkRenderStatus() {
// console.log("this.isIntersecting", this.isIntersecting);
// console.log(`${this.noteIdRefreshed} === ${this.noteId}`, this.noteIdRefreshed === this.noteId);
// console.log("this.shownNoteId !== this.noteId", this.shownNoteId !== this.noteId);
2020-12-27 22:19:27 +01:00
if (this.isIntersecting
&& this.noteIdRefreshed === this.noteId
&& this.shownNoteId !== this.noteId) {
this.shownNoteId = this.noteId;
this.renderNoteList(this.note);
}
}
async renderNoteList(note) {
const noteListRenderer = new NoteListRenderer(this.$content, note, note.getChildNoteIds());
await noteListRenderer.renderList();
}
2021-02-05 23:19:43 +01:00
async refresh() {
this.$content.empty();
this.shownNoteId = null;
await super.refresh();
}
/**
* We have this event so that we evaluate intersection only after note detail is loaded.
* If it's evaluated before note detail then it's clearly intersected (visible) although after note detail load
* it is not intersected (visible) anymore.
*/
2021-05-22 12:26:45 +02:00
noteDetailRefreshedEvent({ntxId}) {
if (!this.isTab(ntxId)) {
2020-12-27 22:19:27 +01:00
return;
}
this.noteIdRefreshed = this.noteId;
2020-12-27 22:19:27 +01:00
setTimeout(() => this.checkRenderStatus(), 100);
}
2020-12-17 21:19:52 +01:00
notesReloadedEvent({noteIds}) {
if (noteIds.includes(this.noteId)) {
2020-11-26 23:00:27 +01:00
this.refresh();
}
}
}