section widgets are updated lazily

This commit is contained in:
zadam 2021-05-29 14:13:22 +02:00
parent aa901b67ed
commit ef4bc13dd1
2 changed files with 32 additions and 20 deletions

View File

@ -20,8 +20,6 @@ const TPL = `
}
.section-title {
padding-right: 10px;
padding-left: 10px;
color: var(--muted-text-color);
border-bottom: 1px solid var(--main-border-color);
}
@ -45,10 +43,15 @@ const TPL = `
color: var(--main-text-color);
}
.section-title-empty {
flex-basis: 20px;
.section-title:first-of-type {
padding-left: 10px;
}
.section-title-empty {
flex-basis: 35px;
flex-shrink: 1;
}
.section-title-empty:last-of-type {
flex-shrink: 1;
flex-grow: 1;
@ -152,6 +155,12 @@ export default class CollapsibleSectionContainer extends NoteContextAwareWidget
this.lastActiveComponentId = sectionComponentId;
const activeChild = this.getActiveChild();
if (activeChild) {
activeChild.handleEvent('noteSwitched', {noteContext: this.noteContext, notePath: this.notePath});
}
this.$titleContainer.find(`.section-title-real[data-section-component-id="${sectionComponentId}"]`).addClass("active");
this.$bodyContainer.find(`.section-body[data-section-component-id="${sectionComponentId}"]`).addClass("active");
}
@ -211,6 +220,21 @@ export default class CollapsibleSectionContainer extends NoteContextAwareWidget
this.refreshWithNote(this.note, true);
}
async handleEventInChildren(name, data) {
if (['activeContextChanged', 'setNoteContext'].includes(name)) {
// won't trigger .refresh();
await super.handleEventInChildren('setNoteContext', data);
}
else {
const activeChild = this.getActiveChild();
// forward events only to active section, inactive ones don't need to be updated
if (activeChild) {
await activeChild.handleEvent(name, data);
}
}
}
entitiesReloadedEvent({loadResults}) {
if (loadResults.isNoteReloaded(this.noteId) && this.lastNoteType !== this.note.type) {
// note type influences the list of available sections the most
@ -220,4 +244,8 @@ export default class CollapsibleSectionContainer extends NoteContextAwareWidget
this.refresh();
}
}
getActiveChild() {
return this.children.find(ch => ch.componentId === this.lastActiveComponentId)
}
}

View File

@ -43,22 +43,6 @@ export default class LinkMapWidget extends NoteContextAwareWidget {
}
async refreshWithNote(note) {
let shown = false;
const observer = new IntersectionObserver(entries => {
if (!shown && entries[0].isIntersecting) {
shown = true;
this.displayLinkMap(note);
}
}, {
rootMargin: '0px',
threshold: 0.1
});
observer.observe(this.$widget[0]);
}
async displayLinkMap(note) {
this.$widget.find(".link-map-container").empty();
const $linkMapContainer = this.$widget.find('.link-map-container');