Grid View Magic Search

This change makes magic search work with the grid view widget.

Change-Id: Id7ace5593ac311b8bad9f76cc2f26c1bb7ad7cc1
This commit is contained in:
Kevin Fox 2015-09-04 11:32:39 -07:00
parent e9713076f5
commit d1bf789001
2 changed files with 87 additions and 9 deletions

View File

@ -101,6 +101,8 @@
};
var muranoAPI;
$scope.has_murano = false;
$scope.selected_facets = [];
$scope.selected_text = "";
if ($injector.has('horizon.app.core.openstack-service-api.murano')) {
muranoAPI = $injector.get('horizon.app.core.openstack-service-api.murano');
$scope.has_murano = true;
@ -116,16 +118,52 @@
$scope.update_assets_filtered();
});
this.update_assets_filtered = function(){
//FIXME this is not ideal...
var text_searchable_fields = [
['name'],
['provided_by', 'name'],
['provided_by', 'company'],
['supported_by', 'name'],
['description'],
['license'],
['service', 'type'],
['service', 'container_format'],
['service', 'disk_format'],
['service', 'package_name'],
['service', 'murano_package_name'],
];
$scope.assets_filtered.length = 0;
angular.forEach($scope.assets, function(asset){
if($scope.service_filters_selections[asset.service.type] == true || asset.service.type == 'bundle'){
var filtered_dep = false;
var filtered_out = false;
angular.forEach(asset.depends, function(dep){
if($scope.service_filters_selections[dep.asset.service.type] == false){
filtered_dep = true;
filtered_out = true;
}
});
if(!filtered_dep) {
if($scope.selected_facets.length != 0) {
angular.forEach($scope.selected_facets, function(filter){
var val = filter[0].split('.').reduce(function(obj,i){return obj[i]}, asset);
if(val.toLowerCase().indexOf(filter[1].toLowerCase()) == -1){
filtered_out = true;
}
});
}
if($scope.selected_text != '') {
var found = false;
angular.forEach(text_searchable_fields, function(field){
try {
var val = field.reduce(function(obj,i){return obj[i]}, asset);
if(val.toLowerCase().indexOf($scope.selected_text.toLowerCase()) != -1){
found = true;
}
} catch(e) {}
});
if(!found) {
filtered_out = true;
}
}
if(!filtered_out) {
$scope.assets_filtered.push(asset);
}
}
@ -241,6 +279,19 @@
update_found_assets($scope);
});
};
this.update_selected_facets = function(selected_facets) {
$scope.selected_facets.length = 0;
if(selected_facets != undefined) {
for(var i in selected_facets) {
$scope.selected_facets.push(selected_facets[i]);
}
}
$scope.update_assets_filtered();
}
this.update_selected_text = function(selected_text) {
$scope.selected_text = selected_text;
$scope.update_assets_filtered();
}
this.asset_filter_strings = {
cancel: gettext('Cancel'),
prompt: gettext('Search'),
@ -298,6 +349,23 @@
appCatalogModel.register_callback('error', error);
appCatalogModel.register_callback('deprecated', deprecated);
appCatalogModel.register_callback('retired', retired);
//FIXME probably belongs in its own directive...
var textSearchWatcher = $scope.$on('textSearch', function(event, text) {
appCatalogModel.update_selected_text(text);
});
var textSearchWatcher2 = $scope.$on('searchUpdated', function(event, query) {
var selected_facets = undefined;
if(query != '') {
selected_facets = query.split('&');
for(var i = 0; i < selected_facets.length; i++){
var s = selected_facets[i];
var idx = s.indexOf('=');
selected_facets[i] = [s.slice(0, idx), s.slice(idx + 1)];
}
}
appCatalogModel.update_selected_facets(selected_facets);
});
}
function appCatalogTableCtrl($scope, $http, $timeout, $modal, toast, appCatalogModel) {
@ -311,10 +379,6 @@
}
}
};
//FIXME remove. probably belongs in its own directive...
// var textSearchWatcher = $scope.$on('textSearch', function(event, text) {
// console.log(text);
// });
appCatalogModel.register_callback('update', update);
common_init($scope, $modal, toast, appCatalogModel);
$scope.switcher = {pannel: 'app', active: 'grid'};

View File

@ -19,8 +19,20 @@
</div>
<div ng-switch="switcher.active">
<!-- <hz-magic-search-bar filter-facets="asset_filter_facets" filter-strings="asset_filter_strings">
</hz-magic-search-bar>-->
<div class="form-group has-feedback hz-magic-search-bar">
<div class="magic-search-bar">
<div class="input-group input-group-sm">
<span class="input-group-addon">
<span class="fa fa-search"></span>
</span>
<magic-search
template="/static/framework/widgets/magic-search/magic-search.html"
strings="asset_filter_strings"
facets="{$ asset_filter_facets $}">
</magic-search>
</div>
</div>
</div>
<div ng-switch-when="grid" style="
background-color:#f9f9f9;
overflow: auto;
@ -111,6 +123,7 @@
<table hz-table ng-cloak st-table="dispassets" st-safe-src="assets"
class="table-striped table-rsp table-detail modern">
<thead>
<!--
<tr>
<th colspan="4">
<st-magic-search>
@ -119,6 +132,7 @@
</st-magic-search>
</th>
</tr>
-->
<tr>
<th class="expander"></th>
<th st-sort="name" st-sort-default="true" class="rsp-p1">Name</th>