Have cor-checkable-menus reflect the filtered set of items

Fixes https://jira.coreos.com/browse/QUAY-837
This commit is contained in:
Joseph Schorr 2018-02-21 16:38:21 -05:00
parent 6220df4f88
commit e857c676db
4 changed files with 21 additions and 9 deletions

View file

@ -21,7 +21,7 @@
</div>
<div class="co-check-bar">
<span class="cor-checkable-menu" controller="checkedTags">
<span class="cor-checkable-menu" controller="checkedTags" filter="tags">
<div class="cor-checkable-menu-item" item-filter="allTagFilter(item)">
<i class="fa fa-check-square-o"></i>All Tags
</div>

View file

@ -15,7 +15,7 @@
<table class="co-table">
<thead>
<td class="checkbox-col checkbox-menu-col">
<span class="cor-checkable-menu" controller="checkedRepos">
<span class="cor-checkable-menu" controller="checkedRepos" filter="orderedRepositories.entries">
<div class="cor-checkable-menu-item" item-filter="allRepositoriesFilter(item)">
<i class="fa fa-check-square-o"></i>All Repositories
</div>

View file

@ -359,7 +359,8 @@ angular.module("core-ui", [])
transclude: true,
restrict: 'C',
scope: {
'controller': '=controller'
'controller': '=controller',
'filter': '=?filter'
},
controller: function($rootScope, $scope, $element) {
$scope.getClass = function(items, checked) {
@ -381,7 +382,7 @@ angular.module("core-ui", [])
$scope.toggleItems = function($event) {
$event.stopPropagation();
if ($scope.controller) {
$scope.controller.toggleItems();
$scope.controller.toggleItems($scope.filter);
}
};
@ -389,7 +390,7 @@ angular.module("core-ui", [])
if ($scope.controller) {
$scope.controller.checkByFilter(function(item) {
return filter({'item': item});
});
}, $scope.filter);
}
};
}

View file

@ -54,14 +54,18 @@ angular.module('quay').factory('UIService', ['$timeout', '$rootScope', '$locatio
}
};
CheckStateController.prototype.toggleItems = function() {
CheckStateController.prototype.toggleItems = function(opt_filter) {
this.lastChanged_= null;
this.updateMap_(this.checked, false);
if (this.checked.length) {
this.checked = [];
} else {
this.checked = this.items.slice();
if (opt_filter) {
this.checked = this.items.filter((item) => (opt_filter.indexOf(item) >= 0));
} else {
this.checked = this.items.slice();
}
}
this.updateMap_(this.checked, true);
@ -99,9 +103,16 @@ angular.module('quay').factory('UIService', ['$timeout', '$rootScope', '$locatio
});
};
CheckStateController.prototype.checkByFilter = function(filter) {
CheckStateController.prototype.checkByFilter = function(filter, opt_secondaryFilter) {
this.updateMap_(this.checked, false);
this.checked = $.grep(this.items, filter);
var filterFunc = filter;
if (opt_secondaryFilter) {
filterFunc = (item) => (opt_secondaryFilter.indexOf(item) >= 0 && filter(item));
}
this.checked = $.grep(this.items, filterFunc);
this.updateMap_(this.checked, true);
this.callListeners_();
};