fixes to note loading. Sidebar flickers way less after note change

This commit is contained in:
zadam 2019-09-04 22:45:12 +02:00
parent a17b8a053e
commit 135102d2b5
4 changed files with 34 additions and 20 deletions

View File

@ -268,6 +268,10 @@ class Attributes {
} }
eventReceived(name, data) { eventReceived(name, data) {
if (!this.ctx.note) {
return;
}
if (name === 'syncData') { if (name === 'syncData') {
if (data.find(sd => sd.entityName === 'attributes' && sd.noteId === this.ctx.note.noteId)) { if (data.find(sd => sd.entityName === 'attributes' && sd.noteId === this.ctx.note.noteId)) {
this.reloadAttributes(); this.reloadAttributes();

View File

@ -374,20 +374,11 @@ tabRow.addListener('activeTabChange', async ({ detail }) => {
tabRow.addListener('tabRemove', async ({ detail }) => { tabRow.addListener('tabRemove', async ({ detail }) => {
const tabId = detail.tabEl.getAttribute('data-tab-id'); const tabId = detail.tabEl.getAttribute('data-tab-id');
const tabContextToDelete = tabContexts.find(nc => nc.tabId === tabId); tabContexts.filter(nc => nc.tabId === tabId)
.forEach(tc => tc.remove());
if (tabContextToDelete) {
// sometimes there are orphan autocompletes after closing the tab
tabContextToDelete.closeAutocomplete();
await tabContextToDelete.saveNoteIfChanged();
tabContextToDelete.$tabContent.remove();
}
tabContexts = tabContexts.filter(nc => nc.tabId !== tabId); tabContexts = tabContexts.filter(nc => nc.tabId !== tabId);
console.log(`Removed tab ${tabId}`);
if (tabContexts.length === 0) { if (tabContexts.length === 0) {
openEmptyTab(); openEmptyTab();
} }

View File

@ -59,7 +59,6 @@ class Sidebar {
} }
this.widgets = []; this.widgets = [];
this.$widgetContainer.empty();
const widgetClasses = (await Promise.all([ const widgetClasses = (await Promise.all([
import("../widgets/note_info.js"), import("../widgets/note_info.js"),
@ -95,15 +94,19 @@ class Sidebar {
this.widgets.sort((a, b) => a.getPosition() < b.getPosition() ? -1 : 1); this.widgets.sort((a, b) => a.getPosition() < b.getPosition() ? -1 : 1);
const widgetsToAppend = [];
for (const widget of this.widgets) { for (const widget of this.widgets) {
try { try {
const $el = await widget.render(); const $el = await widget.render();
this.$widgetContainer.append($el); widgetsToAppend.push($el);
} }
catch (e) { catch (e) {
ws.logError(`Error while rendering widget ${widget.widgetName}: ${e.message}`); ws.logError(`Error while rendering widget ${widget.widgetName}: ${e.message}`);
} }
} }
this.$widgetContainer.empty().append(...widgetsToAppend);
} }
eventReceived(name, data) { eventReceived(name, data) {

View File

@ -112,6 +112,10 @@ class TabContext {
this.$unprotectButton = this.$tabContent.find(".unprotect-button"); this.$unprotectButton = this.$tabContent.find(".unprotect-button");
this.$unprotectButton.click(protectedSessionService.unprotectNoteAndSendToServer); this.$unprotectButton.click(protectedSessionService.unprotectNoteAndSendToServer);
await this.initComponent();
}
async initComponent() {
const type = this.getComponentType(); const type = this.getComponentType();
if (!(type in this.components)) { if (!(type in this.components)) {
@ -122,19 +126,15 @@ class TabContext {
} }
async setNote(note, notePath) { async setNote(note, notePath) {
this.noteId = note.noteId;
this.notePath = notePath;
/** @property {NoteFull} */ /** @property {NoteFull} */
this.note = note; this.note = note;
this.tabRow.updateTab(this.$tab[0], {title: note.title}); this.notePath = notePath;
this.tabRow.updateTab(this.$tab[0], {title: this.note.title});
if (!this.initialized) { if (!this.initialized) {
return; return;
} }
// after loading new note make sure editor is scrolled to the top
this.getComponent().scrollToTop();
this.setupClasses(); this.setupClasses();
this.setCurrentNotePathToHash(); this.setCurrentNotePathToHash();
@ -149,6 +149,9 @@ class TabContext {
this.noteChangeDisabled = false; this.noteChangeDisabled = false;
} }
// after loading new note make sure editor is scrolled to the top
this.getComponent().scrollToTop();
this.setTitleBar(); this.setTitleBar();
this.closeAutocomplete(); // esp. on windows autocomplete is not getting closed automatically this.closeAutocomplete(); // esp. on windows autocomplete is not getting closed automatically
@ -157,7 +160,7 @@ class TabContext {
// we include the note into recent list only if the user stayed on the note at least 5 seconds // we include the note into recent list only if the user stayed on the note at least 5 seconds
if (notePath && notePath === this.notePath) { if (notePath && notePath === this.notePath) {
await server.post('recent-notes', { await server.post('recent-notes', {
noteId: this.noteId, noteId: this.note.noteId,
notePath: this.notePath notePath: this.notePath
}); });
} }
@ -192,6 +195,9 @@ class TabContext {
if (this.note) { if (this.note) {
await this.setNote(this.note, this.notePath); await this.setNote(this.note, this.notePath);
} }
else {
await this.renderComponent(); // render empty page
}
} }
this.$tabContent.show(); this.$tabContent.show();
@ -201,6 +207,8 @@ class TabContext {
} }
async renderComponent() { async renderComponent() {
await this.initComponent()
for (const componentType in this.components) { for (const componentType in this.components) {
if (componentType !== this.getComponentType()) { if (componentType !== this.getComponentType()) {
this.components[componentType].cleanup(); this.components[componentType].cleanup();
@ -426,6 +434,14 @@ class TabContext {
} }
} }
async remove() {
// sometimes there are orphan autocompletes after closing the tab
this.closeAutocomplete();
await this.saveNoteIfChanged();
this.$tabContent.remove();
}
closeAutocomplete() { closeAutocomplete() {
if (utils.isDesktop()) { if (utils.isDesktop()) {
this.$tabContent.find('.aa-input').autocomplete('close'); this.$tabContent.find('.aa-input').autocomplete('close');