From b33cdea814fa1a4f0783204ed750583c2863d042 Mon Sep 17 00:00:00 2001 From: Mo Bitar Date: Wed, 4 Jul 2018 09:46:21 -0500 Subject: [PATCH] Tag predicate matching --- .../javascripts/app/controllers/home.js | 7 +----- .../javascripts/app/controllers/tags.js | 22 +++++++++++++------ .../app/services/componentManager.js | 8 +++---- .../javascripts/app/services/modelManager.js | 5 +++++ app/assets/templates/home.html.haml | 2 +- 5 files changed, 26 insertions(+), 18 deletions(-) diff --git a/app/assets/javascripts/app/controllers/home.js b/app/assets/javascripts/app/controllers/home.js index e8bd8836c..786bc772f 100644 --- a/app/assets/javascripts/app/controllers/home.js +++ b/app/assets/javascripts/app/controllers/home.js @@ -156,11 +156,6 @@ angular.module('app') Tags Ctrl Callbacks */ - - $scope.tagsWillMakeSelection = function(tag) { - - } - $scope.tagsSelectionMade = function(tag) { if($scope.selectedNote && $scope.selectedNote.dummy) { modelManager.removeItemLocally($scope.selectedNote); @@ -205,7 +200,7 @@ angular.module('app') $scope.notesAddNew = function(note) { modelManager.addItem(note); - if(!$scope.selectedTag.all && !$scope.selectedTag.archiveTag) { + if(!$scope.selectedTag.all && !$scope.selectedTag.archiveTag && !$scope.selectedTag.isSmartTag()) { $scope.selectedTag.addItemAsRelationship(note); $scope.selectedTag.setDirty(true); } diff --git a/app/assets/javascripts/app/controllers/tags.js b/app/assets/javascripts/app/controllers/tags.js index 21a430b45..168cbc365 100644 --- a/app/assets/javascripts/app/controllers/tags.js +++ b/app/assets/javascripts/app/controllers/tags.js @@ -5,7 +5,6 @@ angular.module('app') scope: { addNew: "&", selectionMade: "&", - willSelect: "&", save: "&", tags: "=", allTag: "=", @@ -66,13 +65,23 @@ angular.module('app') return null; }.bind(this), actionHandler: function(component, action, data){ if(action === "select-item") { - var tag = modelManager.findItem(data.item.uuid); - if(tag) { + if(data.item.content_type == "Tag") { + var tag = modelManager.findItem(data.item.uuid); + if(tag) { + this.selectTag(tag); + } + } else if(data.item.content_type == "SN|SmartTag") { + var params = data.item.content.predicate; + var predicate = new SFPredicate(params.keypath, params.operator, params.value); + var tag = new Tag(data.item); + Object.defineProperty(tag, "notes", { + get: () => { + return modelManager.notesMatchingPredicate(predicate); + } + }); this.selectTag(tag); } - } - - else if(action === "clear-selection") { + } else if(action === "clear-selection") { this.selectTag(this.allTag); } }.bind(this)}); @@ -93,7 +102,6 @@ angular.module('app') } this.selectTag = function(tag) { - this.willSelect()(tag); this.selectedTag = tag; tag.conflict_of = null; // clear conflict this.selectionMade()(tag); diff --git a/app/assets/javascripts/app/services/componentManager.js b/app/assets/javascripts/app/services/componentManager.js index 2f4819640..48531eb32 100644 --- a/app/assets/javascripts/app/services/componentManager.js +++ b/app/assets/javascripts/app/services/componentManager.js @@ -757,7 +757,7 @@ class ComponentManager { component.active = true; for(var handler of this.handlers) { if(handler.areas.includes(component.area) || handler.areas.includes("*")) { - handler.activationHandler(component); + handler.activationHandler && handler.activationHandler(component); } } @@ -782,7 +782,7 @@ class ComponentManager { for(var handler of this.handlers) { if(handler.areas.includes(component.area) || handler.areas.includes("*")) { - handler.activationHandler(component); + handler.activationHandler && handler.activationHandler(component); } } @@ -814,7 +814,7 @@ class ComponentManager { for(var handler of this.handlers) { if(handler.areas.includes(component.area) || handler.areas.includes("*")) { - handler.activationHandler(component); + handler.activationHandler && handler.activationHandler(component); } } @@ -838,7 +838,7 @@ class ComponentManager { component.active = true; for(var handler of this.handlers) { if(handler.areas.includes(component.area) || handler.areas.includes("*")) { - handler.activationHandler(component); + handler.activationHandler && handler.activationHandler(component); } } diff --git a/app/assets/javascripts/app/services/modelManager.js b/app/assets/javascripts/app/services/modelManager.js index b66884eab..4668198d4 100644 --- a/app/assets/javascripts/app/services/modelManager.js +++ b/app/assets/javascripts/app/services/modelManager.js @@ -104,6 +104,11 @@ class ModelManager extends SFModelManager { } } + notesMatchingPredicate(predicate) { + let contentTypePredicate = new SFPredicate("content_type", "=", "Note"); + return this.itemsMatchingPredicates([contentTypePredicate, predicate]); + } + /* Misc */ diff --git a/app/assets/templates/home.html.haml b/app/assets/templates/home.html.haml index 41c1945cd..54b834bd0 100644 --- a/app/assets/templates/home.html.haml +++ b/app/assets/templates/home.html.haml @@ -1,7 +1,7 @@ .main-ui-view{"ng-class" => "platform"} %lock-screen{"ng-if" => "needsUnlock", "on-success" => "onSuccessfulUnlock"} .app#app{"ng-if" => "!needsUnlock"} - %tags-section{"save" => "tagsSave", "add-new" => "tagsAddNew", "will-select" => "tagsWillMakeSelection", "selection-made" => "tagsSelectionMade", + %tags-section{"save" => "tagsSave", "add-new" => "tagsAddNew", "selection-made" => "tagsSelectionMade", "all-tag" => "allTag", "archive-tag" => "archiveTag", "tags" => "tags", "remove-tag" => "removeTag"} %notes-section{"add-new" => "notesAddNew", "selection-made" => "notesSelectionMade", "tag" => "selectedTag"}