From 095a0b29b9d24b6100c279a110453725fac1bb5c Mon Sep 17 00:00:00 2001 From: Mo Bitar Date: Mon, 1 Jan 2018 10:17:09 -0600 Subject: [PATCH] Updates --- app/assets/javascripts/app/app.frontend.js | 4 +++ .../app/services/componentManager.js | 26 ++++++++++++++++--- .../directives/views/permissionsModal.js | 3 ++- .../app/services/singletonManager.js | 5 ++++ app/views/application/frontend.html.erb | 2 +- 5 files changed, 35 insertions(+), 5 deletions(-) diff --git a/app/assets/javascripts/app/app.frontend.js b/app/assets/javascripts/app/app.frontend.js index 6affad2d1..0bdfe017b 100644 --- a/app/assets/javascripts/app/app.frontend.js +++ b/app/assets/javascripts/app/app.frontend.js @@ -40,3 +40,7 @@ function isDesktopApplication() { function isMacApplication() { return window && window.process && window.process.type && window.process.platform == "darwin"; } + +Array.prototype.containsSubset = function(array) { + return !array.some(val => this.indexOf(val) === -1); +} diff --git a/app/assets/javascripts/app/services/componentManager.js b/app/assets/javascripts/app/services/componentManager.js index 8fc753043..c0dbc2df0 100644 --- a/app/assets/javascripts/app/services/componentManager.js +++ b/app/assets/javascripts/app/services/componentManager.js @@ -431,7 +431,7 @@ class ComponentManager { var requiredPermissions = [ { name: "stream-items", - content_types: component.content_type + content_types: [component.content_type] } ]; @@ -450,9 +450,28 @@ class ComponentManager { for(var required of requiredPermissions) { var matching = _.find(requestedPermissions, required); + var matching = requestedPermissions.filter((p) => { + var matchesContentTypes = true; + if(p.content_types) { + matchesContentTypes = JSON.stringify(p.content_types.sort()) == JSON.stringify(required.content_types.sort()); + } + return p.name == required.name && matchesContentTypes; + })[0]; + console.log("required", required, "requested", requestedPermissions, "matching", matching); if(!matching) { - requestedMatchesRequired = false; - break; + /* Required permissions can be 1 content type, and requestedPermisisons may send an array of content types. + In the case of an array, we can just check to make sure that requiredPermissions content type is found in the array + */ + matching = requestedPermissions.filter((requested) => { + return Array.isArray(requested.content_types) && requested.content_types.containsSubset(required.content_types); + }); + + console.log("Matching 2nd chance", matching); + + if(!matching) { + requestedMatchesRequired = false; + break; + } } } @@ -462,6 +481,7 @@ class ComponentManager { return false; } + if(!component.permissions) { component.permissions = []; } diff --git a/app/assets/javascripts/app/services/directives/views/permissionsModal.js b/app/assets/javascripts/app/services/directives/views/permissionsModal.js index 3007f362f..51604dcb1 100644 --- a/app/assets/javascripts/app/services/directives/views/permissionsModal.js +++ b/app/assets/javascripts/app/services/directives/views/permissionsModal.js @@ -29,6 +29,7 @@ class PermissionsModal { } controller($scope, modelManager) { + console.log("permissions", $scope.permissions); $scope.formattedPermissions = $scope.permissions.map(function(permission){ if(permission.name === "stream-items") { var title = "Access to "; @@ -51,7 +52,7 @@ class PermissionsModal { } else if(i == types.length - 1) { // last element if(types.length > 2) { - typesString += separator + "and " + typesString; + typesString += separator + "and " + type; } else if(types.length == 2) { typesString = typesString + " and " + type; } diff --git a/app/assets/javascripts/app/services/singletonManager.js b/app/assets/javascripts/app/services/singletonManager.js index 70f92fd96..29836eca0 100644 --- a/app/assets/javascripts/app/services/singletonManager.js +++ b/app/assets/javascripts/app/services/singletonManager.js @@ -126,6 +126,11 @@ class SingletonManager { var candidateValue = candidate[key]; if(typeof predicateValue == 'object') { // Check nested properties + if(!candidateValue) { + // predicateValue is 'object' but candidateValue is null + return false; + } + if(!this.itemSatisfiesPredicate(candidateValue, predicateValue)) { return false; } diff --git a/app/views/application/frontend.html.erb b/app/views/application/frontend.html.erb index 28d3fb2c9..471176b47 100644 --- a/app/views/application/frontend.html.erb +++ b/app/views/application/frontend.html.erb @@ -30,7 +30,7 @@ <% if Rails.env.development? %>