handle local deletion relationships

This commit is contained in:
Mo Bitar
2017-01-28 23:16:22 -06:00
parent 46e9e91f46
commit aa6388d8b0
6 changed files with 25 additions and 17 deletions

View File

@@ -107,6 +107,10 @@ class Item {
// must override
}
isBeingRemovedLocally() {
}
removeAllRelationships() {
// must override
this.setDirty(true);

View File

@@ -56,6 +56,13 @@ class Note extends Item {
this.tags = [];
}
isBeingRemovedLocally() {
this.tags.forEach(function(tag){
_.pull(tag.notes, this);
}.bind(this))
super.isBeingRemovedLocally();
}
static filterDummyNotes(notes) {
var filtered = notes.filter(function(note){return note.dummy == false || note.dummy == null});
return filtered;

View File

@@ -55,6 +55,13 @@ class Tag extends Item {
this.notes = [];
}
isBeingRemovedLocally() {
this.notes.forEach(function(note){
_.pull(note.tags, this);
}.bind(this))
super.isBeingRemovedLocally();
}
get content_type() {
return "Tag";
}

View File

@@ -76,7 +76,6 @@ class ModelManager {
this.notifySyncObserversOfModels(models);
// this.sortItems();
return models;
}
@@ -133,7 +132,9 @@ class ModelManager {
}
} else if(item.content_type == "Note") {
if(!_.find(this.notes, {uuid: item.uuid})) {
this.notes.unshift(item);
this.notes.splice(_.sortedLastIndexBy(this.notes, item, function(item){
return -item.created_at;
}), 0, item);
}
} else if(item.content_type == "Extension") {
if(!_.find(this._extensions, {uuid: item.uuid})) {
@@ -170,14 +171,6 @@ class ModelManager {
}
}
sortItems() {
Item.sortItemsByDate(this.notes);
this.tags.forEach(function(tag){
Item.sortItemsByDate(tag.notes);
})
}
addItemSyncObserver(id, type, callback) {
this.itemSyncObservers.push({id: id, type: type, callback: callback});
}
@@ -223,10 +216,13 @@ class ModelManager {
removeItemLocally(item) {
_.pull(this.items, item);
item.isBeingRemovedLocally();
if(item.content_type == "Tag") {
_.pull(this.tags, item);
} else if(item.content_type == "Note") {
_.pull(this.notes, item);
} else if(item.content_type == "Extension") {
_.pull(this._extensions, item);
}

View File

@@ -107,8 +107,6 @@ class SyncManager {
var allDirtyItems = this.modelManager.getDirtyItems();
console.log("Syncing dirty items", allDirtyItems);
// we want to write all dirty items to disk only if the user is offline, or if the sync op fails
// if the sync op succeeds, these items will be written to disk by handling the "saved_items" response from the server
if(this.authManager.offline()) {
@@ -147,11 +145,7 @@ class SyncManager {
request.sync_token = this.syncToken;
request.cursor_token = this.cursorToken;
console.log("Syncing with token", request.sync_token, request.cursor_token);
request.post().then(function(response) {
console.log("Sync completion", response.plain());
this.modelManager.clearDirtyItems(subItems);
this.syncStatus.error = null;

View File

@@ -20,7 +20,7 @@
%div{"infinite-scroll" => "ctrl.paginate()", "can-load" => "true", "threshold" => "200"}
.note{"ng-repeat" => "note in ctrl.tag.notes | limitTo:ctrl.notesToDisplay | filter: ctrl.filterNotes",
"ng-click" => "ctrl.selectNote(note)"}
"ng-click" => "ctrl.selectNote(note)", "ng-class" => "{'selected' : ctrl.selectedNote == note}"}
.name{"ng-if" => "note.title"}
{{note.title}}
.note-preview