From 428458e8214f0e80de4924cc351ef4c948542337 Mon Sep 17 00:00:00 2001 From: Mo Bitar Date: Tue, 3 Jul 2018 19:29:44 -0500 Subject: [PATCH] Predicate matching --- .../javascripts/app/services/authManager.js | 3 ++- .../app/services/nativeExtManager.js | 10 ++++++++-- .../app/services/singletonManager.js | 19 ++++++------------- 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/app/assets/javascripts/app/services/authManager.js b/app/assets/javascripts/app/services/authManager.js index f3d36dc0c..8d240eb41 100644 --- a/app/assets/javascripts/app/services/authManager.js +++ b/app/assets/javascripts/app/services/authManager.js @@ -149,7 +149,8 @@ class AuthManager extends SFAuthManager { configureUserPrefs() { let prefsContentType = "SN|UserPreferences"; - this.singletonManager.registerSingleton({content_type: prefsContentType}, (resolvedSingleton) => { + let contentTypePredicate = new SFPredicate("content_type", "=", prefsContentType); + this.singletonManager.registerSingleton([contentTypePredicate], (resolvedSingleton) => { this.userPreferences = resolvedSingleton; this.userPreferencesDidChange(); }, (valueCallback) => { diff --git a/app/assets/javascripts/app/services/nativeExtManager.js b/app/assets/javascripts/app/services/nativeExtManager.js index f0f6936cb..c44561488 100644 --- a/app/assets/javascripts/app/services/nativeExtManager.js +++ b/app/assets/javascripts/app/services/nativeExtManager.js @@ -21,7 +21,10 @@ class NativeExtManager { resolveExtensionsManager() { - this.singletonManager.registerSingleton({content_type: "SN|Component", package_info: {identifier: this.extensionsManagerIdentifier}}, (resolvedSingleton) => { + let contentTypePredicate = new SFPredicate("content_type", "=", "SN|Component"); + let packagePredicate = new SFPredicate("package_info.identifier", "=", this.extensionsManagerIdentifier); + + this.singletonManager.registerSingleton([contentTypePredicate, packagePredicate], (resolvedSingleton) => { // Resolved Singleton this.systemExtensions.push(resolvedSingleton.uuid); @@ -91,7 +94,10 @@ class NativeExtManager { resolveBatchManager() { - this.singletonManager.registerSingleton({content_type: "SN|Component", package_info: {identifier: this.batchManagerIdentifier}}, (resolvedSingleton) => { + let contentTypePredicate = new SFPredicate("content_type", "=", "SN|Component"); + let packagePredicate = new SFPredicate("package_info.identifier", "=", this.batchManagerIdentifier); + + this.singletonManager.registerSingleton([contentTypePredicate, packagePredicate], (resolvedSingleton) => { // Resolved Singleton this.systemExtensions.push(resolvedSingleton.uuid); diff --git a/app/assets/javascripts/app/services/singletonManager.js b/app/assets/javascripts/app/services/singletonManager.js index 0add89c00..dd1624072 100644 --- a/app/assets/javascripts/app/services/singletonManager.js +++ b/app/assets/javascripts/app/services/singletonManager.js @@ -40,14 +40,14 @@ class SingletonManager { }) } - registerSingleton(predicate, resolveCallback, createBlock) { + registerSingleton(predicates, resolveCallback, createBlock) { /* predicate: a key/value pair that specifies properties that should match in order for an item to be considered a predicate resolveCallback: called when one or more items are deleted and a new item becomes the reigning singleton createBlock: called when a sync is complete and no items are found. The createBlock should create the item and return it. */ this.singletonHandlers.push({ - predicate: predicate, + predicates: predicates, resolutionCallback: resolveCallback, createBlock: createBlock }); @@ -58,20 +58,20 @@ class SingletonManager { savedItems = savedItems || []; for(let singletonHandler of this.singletonHandlers) { - var predicate = singletonHandler.predicate; - let retrievedSingletonItems = this.filterItemsWithPredicate(retrievedItems, predicate); + var predicates = singletonHandler.predicates; + let retrievedSingletonItems = this.modelManager.filterItemsWithPredicates(retrievedItems, predicates); // We only want to consider saved items count to see if it's more than 0, and do nothing else with it. // This way we know there was some action and things need to be resolved. The saved items will come up // in filterItemsWithPredicate(this.modelManager.allItems) and be deleted anyway - let savedSingletonItemsCount = this.filterItemsWithPredicate(savedItems, predicate).length; + let savedSingletonItemsCount = this.modelManager.filterItemsWithPredicates(savedItems, predicates).length; if(retrievedSingletonItems.length > 0 || savedSingletonItemsCount > 0) { /* Check local inventory and make sure only 1 similar item exists. If more than 1, delete newest Note that this local inventory will also contain whatever is in retrievedItems. */ - var allExtantItemsMatchingPredicate = this.filterItemsWithPredicate(this.modelManager.allItems, predicate); + var allExtantItemsMatchingPredicate = this.modelManager.itemsMatchingPredicates(predicates); /* Delete all but the earliest created @@ -122,13 +122,6 @@ class SingletonManager { } } } - - filterItemsWithPredicate(items, predicate) { - return items.filter((candidate) => { - return candidate.satisfiesPredicate(predicate); - }) - } - } angular.module('app').service('singletonManager', SingletonManager);