From 0e13678f7c7ac11f4011e5aea6df3503c0376886 Mon Sep 17 00:00:00 2001 From: zadam Date: Sat, 1 Feb 2020 18:29:18 +0100 Subject: [PATCH] note complement is now loaded through tree cache --- src/public/javascripts/services/app_context.js | 1 + src/public/javascripts/services/note_detail.js | 13 ------------- src/public/javascripts/services/note_tooltip.js | 2 +- src/public/javascripts/services/tab_context.js | 6 +----- src/public/javascripts/services/tree_cache.js | 14 ++++++++++++++ src/public/javascripts/widgets/note_detail.js | 15 ++++----------- src/public/javascripts/widgets/note_info.js | 7 ------- src/public/javascripts/widgets/note_title.js | 8 +------- 8 files changed, 22 insertions(+), 44 deletions(-) diff --git a/src/public/javascripts/services/app_context.js b/src/public/javascripts/services/app_context.js index bd5c6e0cb..00ff91600 100644 --- a/src/public/javascripts/services/app_context.js +++ b/src/public/javascripts/services/app_context.js @@ -345,6 +345,7 @@ class AppContext { this.openTabsChangedListener(); } + // FIXME non existent event noteChangesSavedListener() { const activeTabContext = this.getActiveTabContext(); diff --git a/src/public/javascripts/services/note_detail.js b/src/public/javascripts/services/note_detail.js index bb77a8639..08330aec9 100644 --- a/src/public/javascripts/services/note_detail.js +++ b/src/public/javascripts/services/note_detail.js @@ -1,5 +1,3 @@ -import server from './server.js'; -import NoteComplement from "../entities/note_complement.js"; import appContext from "./app_context.js"; function getActiveEditor() { @@ -13,16 +11,6 @@ function getActiveEditor() { } } -async function loadNoteComplement(noteId) { - if (!noteId) { - return null; - } - - const row = await server.get('notes/' + noteId); - - return new NoteComplement(row); -} - function focusOnTitle() { appContext.trigger('focusOnTitle'); } @@ -47,7 +35,6 @@ $(window).on('beforeunload', () => { }); export default { - loadNoteComplement, focusOnTitle, focusAndSelectTitle, getActiveEditor, diff --git a/src/public/javascripts/services/note_tooltip.js b/src/public/javascripts/services/note_tooltip.js index 48b698e1a..82727b83f 100644 --- a/src/public/javascripts/services/note_tooltip.js +++ b/src/public/javascripts/services/note_tooltip.js @@ -44,7 +44,7 @@ async function mouseEnterHandler() { const noteId = treeService.getNoteIdFromNotePath(notePath); const note = await treeCache.getNote(noteId); - const noteComplement = await noteDetailService.loadNoteComplement(noteId); + const noteComplement = await treeCache.getNoteComplement(noteId); const html = await renderTooltip(note, noteComplement); diff --git a/src/public/javascripts/services/tab_context.js b/src/public/javascripts/services/tab_context.js index 5caeb5949..579fe478f 100644 --- a/src/public/javascripts/services/tab_context.js +++ b/src/public/javascripts/services/tab_context.js @@ -85,11 +85,7 @@ class TabContext extends Component { return null; } - if (!this.noteComplementPromise) { - this.noteComplementPromise = noteDetailService.loadNoteComplement(this.noteId); - } - - return await this.noteComplementPromise; + return await treeCache.getNoteComplement(this.noteId); } async remove() { diff --git a/src/public/javascripts/services/tree_cache.js b/src/public/javascripts/services/tree_cache.js index b550f3732..6c7dfc390 100644 --- a/src/public/javascripts/services/tree_cache.js +++ b/src/public/javascripts/services/tree_cache.js @@ -3,6 +3,7 @@ import NoteShort from "../entities/note_short.js"; import Attribute from "../entities/attribute.js"; import server from "./server.js"; import {LoadResults} from "./load_results.js"; +import NoteComplement from "../entities/note_complement.js"; /** * TreeCache keeps a read only cache of note tree structure in frontend's memory. @@ -26,6 +27,9 @@ class TreeCache { /** @type {Object.} */ this.attributes = {}; + + /** @type {Object.>} */ + this.noteComplementPromises = {}; } load(noteRows, branchRows, attributeRows) { @@ -216,6 +220,14 @@ class TreeCache { return child.parentToBranch[parentNoteId]; } + async getNoteComplement(noteId) { + if (!this.noteComplementPromises[noteId]) { + this.noteComplementPromises[noteId] = server.get('notes/' + noteId).then(row => new NoteComplement(row)); + } + + return await this.noteComplementPromises[noteId]; + } + // FIXME does not actually belong here async processSyncRows(syncRows) { const loadResults = new LoadResults(this); @@ -329,6 +341,8 @@ class TreeCache { }); syncRows.filter(sync => sync.entityName === 'note_contents').forEach(sync => { + delete this.noteComplementPromises[sync.entityId]; + loadResults.addNoteContent(sync.entityId, sync.sourceId); }); diff --git a/src/public/javascripts/widgets/note_detail.js b/src/public/javascripts/widgets/note_detail.js index d9a9959d3..0fce2d2b0 100644 --- a/src/public/javascripts/widgets/note_detail.js +++ b/src/public/javascripts/widgets/note_detail.js @@ -39,18 +39,11 @@ export default class NoteDetailWidget extends TabAwareWidget { this.spacedUpdate = new SpacedUpdate(async () => { const {note} = this.tabContext; const {noteId} = note; - const noteComplement = await this.tabContext.getNoteComplement(); - // FIXME hack const dto = note.dto; - dto.content = noteComplement.content = this.getTypeWidget().getContent(); + dto.content = this.getTypeWidget().getContent(); - const resp = await server.put('notes/' + noteId, dto, this.componentId); - - noteComplement.dateModified = resp.dateModified; - noteComplement.utcDateModified = resp.utcDateModified; - - this.trigger('noteChangesSaved', {noteId}) + await server.put('notes/' + noteId, dto, this.componentId); }); } @@ -226,9 +219,9 @@ export default class NoteDetailWidget extends TabAwareWidget { } async entitiesReloadedListener({loadResults}) { - if (loadResults.isNoteContentReloaded(this.noteId, this.componentId)) { - this.tabContext.noteComplement = await noteDetailService.loadNoteComplement(this.noteId); + // we should test what happens when the loaded note is deleted + if (loadResults.isNoteContentReloaded(this.noteId, this.componentId)) { this.refreshWithNote(this.note, this.notePath); } } diff --git a/src/public/javascripts/widgets/note_info.js b/src/public/javascripts/widgets/note_info.js index 591f1d54a..7edee6064 100644 --- a/src/public/javascripts/widgets/note_info.js +++ b/src/public/javascripts/widgets/note_info.js @@ -67,13 +67,6 @@ class NoteInfoWidget extends StandardWidget { .attr("title", note.mime); } - // this is interesting for this widget since dateModified had to change after update - noteChangesSavedListener({noteId}) { - if (this.isNote(noteId)) { - this.refreshWithNote(this.note, this.notePath); - } - } - syncDataListener({data}) { if (data.find(sd => sd.entityName === 'notes' && this.isNote(sd.entityId))) { this.refresh(); diff --git a/src/public/javascripts/widgets/note_title.js b/src/public/javascripts/widgets/note_title.js index 29c26cc5a..e90e9bf09 100644 --- a/src/public/javascripts/widgets/note_title.js +++ b/src/public/javascripts/widgets/note_title.js @@ -34,13 +34,7 @@ export default class NoteTitleWidget extends TabAwareWidget { const noteId = this.tabContext.note.noteId; const title = this.$noteTitle.val(); - const resp = await server.put(`notes/${noteId}/change-title`, {title}); - - // FIXME: minor - does not propagate to other tab contexts with this note though - this.tabContext.note.dateModified = resp.dateModified; - this.tabContext.note.utcDateModified = resp.utcDateModified; - - this.trigger('noteChangesSaved', {noteId}) + await server.put(`notes/${noteId}/change-title`, {title}); }); }