address PR comments

Project: http://git-wip-us.apache.org/repos/asf/brooklyn-ui/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-ui/commit/0af5dc4a
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-ui/tree/0af5dc4a
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-ui/diff/0af5dc4a

Branch: refs/heads/master
Commit: 0af5dc4a08fdab95819a214cf1b5ba17b8abc938
Parents: 9a22b64
Author: Alex Heneveld <alex.henev...@cloudsoftcorp.com>
Authored: Tue Oct 30 14:20:30 2018 +0000
Committer: Alex Heneveld <alex.henev...@cloudsoftcorp.com>
Committed: Tue Oct 30 14:20:30 2018 +0000

----------------------------------------------------------------------
 .../catalog-selector.directive.js               | 82 ++++++++++++--------
 .../catalog-selector.template.html              |  2 +-
 .../providers/recently-used-service.provider.js |  1 +
 ui-modules/blueprint-composer/app/index.js      |  2 +
 4 files changed, 52 insertions(+), 35 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-ui/blob/0af5dc4a/ui-modules/blueprint-composer/app/components/catalog-selector/catalog-selector.directive.js
----------------------------------------------------------------------
diff --git 
a/ui-modules/blueprint-composer/app/components/catalog-selector/catalog-selector.directive.js
 
b/ui-modules/blueprint-composer/app/components/catalog-selector/catalog-selector.directive.js
index 109bf45..2959103 100644
--- 
a/ui-modules/blueprint-composer/app/components/catalog-selector/catalog-selector.directive.js
+++ 
b/ui-modules/blueprint-composer/app/components/catalog-selector/catalog-selector.directive.js
@@ -110,6 +110,38 @@ export function catalogSelectorSearchFilter() {
     }
 }
 
+export function catalogSelectorFiltersFilter() {
+    // compute counts and apply active filters;     
+    // this is called by the view after filtering based on search,
+    // so filters can adjust based on number of search results
+    return function (items, $scope) {
+      $scope.itemsBeforeActiveFilters = items;
+      $scope.skippingFilters = false; 
+      let filters = $scope.filters.filter(f => f.enabled);
+      let filtersWithFn = filters.filter(f => f.filterFn);
+      if (!filters.length) {
+        $scope.itemsAfterActiveFilters = items;
+        return items;
+      }
+      filters.forEach(filter => { if (filter.filterInit) items = 
filter.filterInit(items); });
+      if (filtersWithFn.length) {
+        items = items.filter( item => filtersWithFn.some(filter => 
filter.filterFn(item)) );
+      }
+      if (!items || !items.length) {
+        // if search matches nothing then disable filters
+        items = $scope.itemsAfterActiveFilters = 
$scope.itemsBeforeActiveFilters;
+        $scope.skippingFilters = true;
+      } else {
+        if (filters.find(filter => filter.limitToOnePage)) {
+            items = items.splice(0, $scope.pagination.itemsPerPage);
+        }  
+        $scope.itemsAfterActiveFilters = items;
+      }
+      return items; 
+
+    }
+}
+
 function controller($scope, $element, $timeout, $q, $uibModal, $log, 
$templateCache, paletteApi, paletteDragAndDropService, iconGenerator, 
composerOverrides, recentlyUsedService) {
     this.$timeout = $timeout;
 
@@ -177,9 +209,18 @@ function controller($scope, $element, $timeout, $q, 
$uibModal, $log, $templateCa
             $scope.isLoading = false;
         });
     };
+    function tryMarkUsed(item) {
+        try {
+            recentlyUsedService.markUsed(item);
+        } catch (e) {
+            // session storage can get full; usually the culprit is icons not 
this,
+            // but we may wish to clear out old items to ensure we don't bleed 
here
+            $log.warn("Could not mark item as used: "+item, e);
+        }
+    }
     $scope.onSelectItem = function (item) {
         if (angular.isFunction($scope.onSelect)) {
-            recentlyUsedService.markUsed(item);
+            tryMarkUsed(item);
             $scope.onSelect({item: item});
         }
         $scope.search = '';
@@ -204,7 +245,7 @@ function controller($scope, $element, $timeout, $q, 
$uibModal, $log, $templateCa
     };
     $scope.onDragEnd = function (item, event) {
         paletteDragAndDropService.dragEnd();
-        recentlyUsedService.markUsed(item);
+        tryMarkUsed(item);
     };
     $scope.sortBy = function (order) {
         let newOrder = [].concat($scope.state.currentOrder);
@@ -277,50 +318,23 @@ function controller($scope, $element, $timeout, $q, 
$uibModal, $log, $templateCa
     $scope.filters = [
         { label: 'Recent', icon: 'clock-o', title: "Recently used and standard 
favorites", limitToOnePage: true,
             filterInit: items => {
-                $scope.recentItems = items.filter( i => i.lastUsed && 
i.lastUsed > 0 );
+                $scope.recentItems = items.filter( i => i.lastUsed && 
i.lastUsed>0 );
                 $scope.recentItems.sort( (a,b) => b.lastUsed - a.lastUsed );
                 return $scope.recentItems; 
             }, enabled: false },
     ];
     $scope.disableFilters = (showFilters) => {
         $scope.filters.forEach( f => f.enabled = false );
-        if (showFilters !== false) $scope.showPaletteControls = true;
+        if (showFilters !== false) {
+            $scope.showPaletteControls = true;
+        }
     }
     
     // this can be overridden for palette sections/modes which show a subset 
of the types returned by the server;
     // this is applied when the data is received from the server.
-    // it is used by filterPaletteItemsWithActiveFilters; 
+    // it is used by catalogSelectorFiltersFilter; 
     $scope.filterPaletteItemsForMode = (items) => items;
 
-    // compute counts and apply active filters;     
-    // this is called by the view after filtering based on search,
-    // so filters can adjust based on number of search results
-    $scope.filterPaletteItemsWithActiveFilters = (items) => {
-      $scope.itemsBeforeActiveFilters = items;
-      $scope.skippingFilters = false; 
-      let filters = $scope.filters.filter(f => f.enabled);
-      let filtersWithFn = filters.filter(f => f.filterFn);
-      if (!filters.length) {
-        $scope.itemsAfterActiveFilters = items;
-        return items;
-      }
-      filters.forEach(filter => { if (filter.filterInit) items = 
filter.filterInit(items); });
-      if (filtersWithFn.length) {
-        items = items.filter( item => filtersWithFn.some(filter => 
filter.filterFn(item)) );
-      }
-      if (!items || !items.length) {
-        // if search matches nothing then disable filters
-        items = $scope.itemsAfterActiveFilters = 
$scope.itemsBeforeActiveFilters;
-        $scope.skippingFilters = true;
-      } else {
-        if (filters.find(filter => filter.limitToOnePage)) {
-            items = items.splice(0, $scope.pagination.itemsPerPage);
-        }  
-        $scope.itemsAfterActiveFilters = items;
-      }
-      return items; 
-    };
-
     // downstream can override this to insert lines below the header
     $scope.customSubHeadTemplateName = 'composer-palette-empty-sub-head';
     $templateCache.put($scope.customSubHeadTemplateName, '');

http://git-wip-us.apache.org/repos/asf/brooklyn-ui/blob/0af5dc4a/ui-modules/blueprint-composer/app/components/catalog-selector/catalog-selector.template.html
----------------------------------------------------------------------
diff --git 
a/ui-modules/blueprint-composer/app/components/catalog-selector/catalog-selector.template.html
 
b/ui-modules/blueprint-composer/app/components/catalog-selector/catalog-selector.template.html
index eefd21a..870600c 100644
--- 
a/ui-modules/blueprint-composer/app/components/catalog-selector/catalog-selector.template.html
+++ 
b/ui-modules/blueprint-composer/app/components/catalog-selector/catalog-selector.template.html
@@ -100,7 +100,7 @@
             <!-- here and below, col-xs-3 or -4 or -2 all work giving 
different densities;
                  this could be configurable ("compressed"=xs-2 w no labels, 
"normal"=xs-3, "big"=xs-4) -->
             <div class="catalog-palette-item" ng-class="state.viewMode.classes"
-                    ng-repeat="item in searchedItems = 
filterPaletteItemsWithActiveFilters(items | catalogSelectorSearch:search) | 
orderBy:state.currentOrder | 
limitTo:pagination.itemsPerPage:(pagination.page-1)*pagination.itemsPerPage 
track by (item.containingBundle + ':' + item.symbolicName + ':' + item.version)"
+                    ng-repeat="item in searchedItems = (items | 
catalogSelectorSearch:search | catalogSelectorFilters:this) | 
orderBy:state.currentOrder | 
limitTo:pagination.itemsPerPage:(pagination.page-1)*pagination.itemsPerPage 
track by (item.containingBundle + ':' + item.symbolicName + ':' + item.version)"
                     ng-click="onSelectItem(item)">
                 <div class="item" draggable="true" 
ng-dragstart="onDragItem(item, $event)" ng-dragend="onDragEnd(item, $event)">
                     <div class="item-logo">

http://git-wip-us.apache.org/repos/asf/brooklyn-ui/blob/0af5dc4a/ui-modules/blueprint-composer/app/components/providers/recently-used-service.provider.js
----------------------------------------------------------------------
diff --git 
a/ui-modules/blueprint-composer/app/components/providers/recently-used-service.provider.js
 
b/ui-modules/blueprint-composer/app/components/providers/recently-used-service.provider.js
index 01a9a35..cc48ab5 100644
--- 
a/ui-modules/blueprint-composer/app/components/providers/recently-used-service.provider.js
+++ 
b/ui-modules/blueprint-composer/app/components/providers/recently-used-service.provider.js
@@ -43,6 +43,7 @@ function RecentlyUsedService($log) {
             when = Date.now();
         }
         sessionStorage.setItem(PREFIX+id, when);
+        // update the item if it is embellished
         if (item.lastUsed) item.lastUsed = when;
     };
     service.getLastUsed = (item) => {

http://git-wip-us.apache.org/repos/asf/brooklyn-ui/blob/0af5dc4a/ui-modules/blueprint-composer/app/index.js
----------------------------------------------------------------------
diff --git a/ui-modules/blueprint-composer/app/index.js 
b/ui-modules/blueprint-composer/app/index.js
index dba74ce..199d8c5 100755
--- a/ui-modules/blueprint-composer/app/index.js
+++ b/ui-modules/blueprint-composer/app/index.js
@@ -46,6 +46,7 @@ import {designerDirective} from 
"./components/designer/designer.directive";
 import {
     catalogSelectorDirective,
     catalogSelectorSearchFilter,
+    catalogSelectorFiltersFilter,
 } from "./components/catalog-selector/catalog-selector.directive";
 import customActionDirective from 
"./components/custom-action/custom-action.directive";
 import customConfigSuggestionDropdown from 
"./components/custom-config-widget/suggestion-dropdown";
@@ -95,6 +96,7 @@ angular.module('app', [ngAnimate, ngResource, ngCookies, 
ngClipboard, uiRouter,
     .filter('entityTypes', entityTypesFilter)
     .filter('locations', locationsFilter)
     .filter('catalogSelectorSearch', catalogSelectorSearchFilter)
+    .filter('catalogSelectorFilters', catalogSelectorFiltersFilter)
     .filter('dslParamLabel', ['$filter', dslParamLabelFilter])
     .config(['$urlRouterProvider', '$stateProvider', '$logProvider', 
applicationConfig])
     .config(['actionServiceProvider', actionConfig])

Reply via email to