From e8d8a919379d78714b4141a559ce246fdc9e1f95 Mon Sep 17 00:00:00 2001 From: Mo Bitar Date: Sat, 1 Jun 2019 12:00:51 -0500 Subject: [PATCH] Improved dummy note handling, sfjs 0.3.61 --- .../javascripts/app/controllers/editor.js | 9 ++--- .../javascripts/app/controllers/home.js | 1 + .../javascripts/app/controllers/notes.js | 40 +++++++++++++------ .../app/services/actionsManager.js | 2 +- .../app/services/nativeExtManager.js | 4 +- package-lock.json | 12 +++--- package.json | 4 +- 7 files changed, 42 insertions(+), 30 deletions(-) diff --git a/app/assets/javascripts/app/controllers/editor.js b/app/assets/javascripts/app/controllers/editor.js index 69caa403b..7e86e81c4 100644 --- a/app/assets/javascripts/app/controllers/editor.js +++ b/app/assets/javascripts/app/controllers/editor.js @@ -14,7 +14,7 @@ angular.module('app') bindToController: true, link:function(scope, elem, attrs, ctrl) { - scope.$watch('ctrl.note', function(note, oldNote){ + scope.$watch('ctrl.note', (note, oldNote) => { if(note) { ctrl.noteDidChange(note, oldNote); } @@ -43,9 +43,7 @@ angular.module('app') } else if(eventName == "sync:completed") { - this.syncTakingTooLong = false; - if(this.note.dirty) { // if we're still dirty, don't change status, a sync is likely upcoming. } else { @@ -283,8 +281,6 @@ angular.module('app') return; } - modelManager.setItemDirty(note, true, updateClientModified); - this.showSavingStatus(); if(!dontUpdatePreviews) { @@ -292,11 +288,12 @@ angular.module('app') var text = note.text || ""; var truncate = text.length > limit; note.content.preview_plain = text.substring(0, limit) + (truncate ? "..." : ""); - // Clear dynamic previews if using plain editor note.content.preview_html = null; } + modelManager.setItemDirty(note, true, updateClientModified); + if(this.saveTimeout) { $timeout.cancel(this.saveTimeout); } diff --git a/app/assets/javascripts/app/controllers/home.js b/app/assets/javascripts/app/controllers/home.js index 9b70459e4..d73afbccd 100644 --- a/app/assets/javascripts/app/controllers/home.js +++ b/app/assets/javascripts/app/controllers/home.js @@ -238,6 +238,7 @@ angular.module('app') $scope.notesAddNew = function(note) { modelManager.addItem(note); + modelManager.setItemDirty(note); if(!$scope.selectedTag.isSmartTag()) { $scope.selectedTag.addItemAsRelationship(note); diff --git a/app/assets/javascripts/app/controllers/notes.js b/app/assets/javascripts/app/controllers/notes.js index 7b1d6b181..4879ab175 100644 --- a/app/assets/javascripts/app/controllers/notes.js +++ b/app/assets/javascripts/app/controllers/notes.js @@ -40,14 +40,28 @@ angular.module('app') modelManager.removeItemLocally(this.selectedNote); _.pull(this.notes, this.selectedNote); this.selectedNote = null; + this.selectNote(null); + + // We now want to see if the user will download any items from the server. + // If the next sync completes and our notes are still 0, we need to create a dummy. + this.createDummyOnSynCompletionIfNoNotes = true; } } }) syncManager.addEventHandler((syncEvent, data) => { if(syncEvent == "local-data-loaded") { - this.localDataLoaded = true; - this.needsHandleDataLoad = true; + if(this.notes.length == 0) { + this.createNewNote(); + } + } else if(syncEvent == "sync:completed") { + // Pad with a timeout just to be extra patient + $timeout(() => { + if(this.createDummyOnSynCompletionIfNoNotes && this.notes.length == 0) { + this.createDummyOnSynCompletionIfNoNotes = false; + this.createNewNote(); + } + }, 100) } }); @@ -55,13 +69,6 @@ angular.module('app') // reload our notes this.reloadNotes(); - if(this.needsHandleDataLoad) { - this.needsHandleDataLoad = false; - if(this.tag && this.notes.length == 0) { - this.createNewNote(); - } - } - // Note has changed values, reset its flags let notes = allItems.filter((item) => item.content_type == "Note"); for(let note of notes) { @@ -305,8 +312,8 @@ angular.module('app') this.showMenu = false; - if(this.selectedNote && this.selectedNote.dummy) { - if(oldTag) { + if(this.selectedNote) { + if(this.selectedNote.dummy && oldTag) { _.remove(oldTag.notes, this.selectedNote); } } @@ -320,8 +327,14 @@ angular.module('app') if(this.notes.length > 0) { this.notes.forEach((note) => { note.visible = true; }) this.selectFirstNote(); - } else if(this.localDataLoaded) { - this.createNewNote(); + } else if(syncManager.initialDataLoaded()) { + if(!tag.isSmartTag()) { + this.createNewNote(); + } else { + if(this.selectedNote && !this.notes.includes(this.selectedNote)) { + this.selectNote(null); + } + } } }) } @@ -360,6 +373,7 @@ angular.module('app') this.selectNote = async function(note, viaClick = false) { if(!note) { + this.selectionMade()(null); return; } diff --git a/app/assets/javascripts/app/services/actionsManager.js b/app/assets/javascripts/app/services/actionsManager.js index d3ca5636e..244cd8384 100644 --- a/app/assets/javascripts/app/services/actionsManager.js +++ b/app/assets/javascripts/app/services/actionsManager.js @@ -74,7 +74,7 @@ class ActionsManager { if(!item.errorDecrypting) { if(merge) { - var items = this.modelManager.mapResponseItemsToLocalModels([item], SFModelManager.MappingSourceRemoteActionRetrieved); + var items = await this.modelManager.mapResponseItemsToLocalModels([item], SFModelManager.MappingSourceRemoteActionRetrieved); for(var mappedItem of items) { this.modelManager.setItemDirty(mappedItem, true); } diff --git a/app/assets/javascripts/app/services/nativeExtManager.js b/app/assets/javascripts/app/services/nativeExtManager.js index f648c5a83..489936c82 100644 --- a/app/assets/javascripts/app/services/nativeExtManager.js +++ b/app/assets/javascripts/app/services/nativeExtManager.js @@ -55,7 +55,7 @@ class NativeExtManager { }, (valueCallback) => { // Safe to create. Create and return object. let url = window._extensions_manager_location; - console.log("Installing Extensions Manager from URL", url); + // console.log("Installing Extensions Manager from URL", url); if(!url) { console.error("window._extensions_manager_location must be set."); return; @@ -131,7 +131,7 @@ class NativeExtManager { }, (valueCallback) => { // Safe to create. Create and return object. let url = window._batch_manager_location; - console.log("Installing Batch Manager from URL", url); + // console.log("Installing Batch Manager from URL", url); if(!url) { console.error("window._batch_manager_location must be set."); return; diff --git a/package-lock.json b/package-lock.json index 1e2b54492..af39c440f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5724,9 +5724,9 @@ } }, "snjs": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/snjs/-/snjs-0.2.3.tgz", - "integrity": "sha512-b8CR7AvIO7IQgxps970NgfqsIk+YUgreesa6ViELAxDAa7Cyqrh15sLk2LrNiQDrPw/WHKu+qWCAIu2w9pIzkQ==", + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/snjs/-/snjs-0.2.4.tgz", + "integrity": "sha512-WYrDWZpLnJ9PnE5d93ONGgCaN+D3y/kBdtI8orDkmbYsfSL0v5OX/Fbj96z6xMEskOFvXTH6vYO//LmlPrk4WQ==", "dev": true }, "source-map": { @@ -5817,9 +5817,9 @@ "dev": true }, "standard-file-js": { - "version": "0.3.60", - "resolved": "https://registry.npmjs.org/standard-file-js/-/standard-file-js-0.3.60.tgz", - "integrity": "sha512-dd7VPsQUt/+ZpOZzO7G1sM0euqjctPWBHSAwhr7AFyHSVlRBughGvmQl820ZYVuZsQo7trOCWedlprJAnhH7iQ==", + "version": "0.3.61", + "resolved": "https://registry.npmjs.org/standard-file-js/-/standard-file-js-0.3.61.tgz", + "integrity": "sha512-KxjtvYmZQIY9HIIDpW9Ss2cdMBID805Hjilz4xu7Ea2lZkTY4gk7/mx9x8/usNWeBEdfWvywQGFJ69iW6LZo1w==", "dev": true }, "static-extend": { diff --git a/package.json b/package.json index 9d24bb129..599661312 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,7 @@ "mocha": "^5.2.0", "serve-static": "^1.13.2", "sn-stylekit": "2.0.15", - "snjs": "0.2.3", - "standard-file-js": "0.3.60" + "snjs": "0.2.4", + "standard-file-js": "0.3.61" } }