Fixes: U4-5694 When searching in a picker, the filtering rules are ignored

This commit is contained in:
Shannon
2014-10-28 15:23:05 +10:00
parent 67b9fcd295
commit cc8f07c0d8
4 changed files with 51 additions and 12 deletions

View File

@@ -26,7 +26,7 @@ angular.module('umbraco.services')
function configureMemberResult(member) {
member.menuUrl = umbRequestHelper.getApiUrl("memberTreeBaseUrl", "GetMenu", [{ id: member.id }, { application: 'member' }]);
member.editorPath = "member/member/edit/" + (member.key ? member.key : member.id);
member.metaData = { treeAlias: "member" };
angular.extend(member.metaData, { treeAlias: "member" });
member.subTitle = member.metaData.Email;
}
@@ -34,13 +34,13 @@ angular.module('umbraco.services')
{
media.menuUrl = umbRequestHelper.getApiUrl("mediaTreeBaseUrl", "GetMenu", [{ id: media.id }, { application: 'media' }]);
media.editorPath = "media/media/edit/" + media.id;
media.metaData = { treeAlias: "media" };
angular.extend(media.metaData, { treeAlias: "media" });
}
function configureContentResult(content) {
content.menuUrl = umbRequestHelper.getApiUrl("contentTreeBaseUrl", "GetMenu", [{ id: content.id }, { application: 'content' }]);
content.editorPath = "content/content/edit/" + content.id;
content.metaData = { treeAlias: "content" };
angular.extend(content.metaData, { treeAlias: "content" });
content.subTitle = content.metaData.Url;
}
@@ -165,8 +165,10 @@ angular.module('umbraco.services')
},
//TODO: This doesn't do anything!
setCurrent: function(sectionAlias) {
currentSection = sectionAlias;
var currentSection = sectionAlias;
}
};
});

View File

@@ -132,9 +132,7 @@ angular.module("umbraco").controller("Umbraco.Dialogs.TreePickerController",
});
//check filter
if (dialogOptions.filter) {
performFiltering(args.children);
}
performFiltering(args.children);
}
}
@@ -233,6 +231,10 @@ angular.module("umbraco").controller("Umbraco.Dialogs.TreePickerController",
function performFiltering(nodes) {
if (!dialogOptions.filter) {
return;
}
//remove any list view search nodes from being filtered since these are special nodes that always must
// be allowed to be clicked on
nodes = _.filter(nodes, function(n) {
@@ -249,19 +251,25 @@ angular.module("umbraco").controller("Umbraco.Dialogs.TreePickerController",
angular.forEach(filtered, function (value, key) {
value.filtered = true;
if (dialogOptions.filterCssClass) {
if (!value.cssClasses) {
value.cssClasses = [];
}
value.cssClasses.push(dialogOptions.filterCssClass);
}
});
} else {
var a = dialogOptions.filter.split(',');
var a = dialogOptions.filter.toLowerCase().split(',');
angular.forEach(nodes, function (value, key) {
var found = a.indexOf(value.metaData.contentType) >= 0;
var found = a.indexOf(value.metaData.contentType.toLowerCase()) >= 0;
if (!dialogOptions.filterExclude && !found || dialogOptions.filterExclude && found) {
value.filtered = true;
if (dialogOptions.filterCssClass) {
if (!value.cssClasses) {
value.cssClasses = [];
}
value.cssClasses.push(dialogOptions.filterCssClass);
}
}
@@ -277,6 +285,11 @@ angular.module("umbraco").controller("Umbraco.Dialogs.TreePickerController",
/** method to select a search result */
$scope.selectResult = function (evt, result) {
if (result.filtered) {
return;
}
result.selected = result.selected === true ? false : true;
//since result = an entity, we'll pass it in so we don't have to go back to the server
@@ -381,15 +394,25 @@ angular.module("umbraco").controller("Umbraco.Dialogs.TreePickerController",
}
$scope.onSearchResults = function(results) {
//filter all items - this will mark an item as filtered
performFiltering(results);
//now actually remove all filtered items so they are not even displayed
results = _.filter(results, function(item) {
return !item.filtered;
});
$scope.searchInfo.results = results;
//sync with the curr selected results
_.each($scope.searchInfo.results, function (result) {
var exists = _.find($scope.dialogData.selection, function (selectedId) {
return result.id == selectedId;
});
if (exists) {
result.selected = true;
}
}
});
$scope.searchInfo.showSearch = true;

View File

@@ -459,7 +459,12 @@ namespace Umbraco.Web.Editors
//add additional data
foreach (var m in mapped)
{
m.Icon = "icon-user";
//if no icon could be mapped, it will be set to document, so change it to picture
if (m.Icon == "icon-document")
{
m.Icon = "icon-user";
}
var searchResult = results.First(x => x.Id.ToInvariantString() == m.Id.ToString());
if (searchResult.Fields.ContainsKey("email") && searchResult.Fields["email"] != null)
{
@@ -488,7 +493,11 @@ namespace Umbraco.Web.Editors
//add additional data
foreach (var m in mapped)
{
m.Icon = "icon-picture";
//if no icon could be mapped, it will be set to document, so change it to picture
if (m.Icon == "icon-document")
{
m.Icon = "icon-picture";
}
}
return mapped;
}

View File

@@ -85,6 +85,11 @@ namespace Umbraco.Web.Models.Mapping
}
}
basic.Path = result.Fields.ContainsKey("__Path") ? result.Fields["__Path"] : "";
if (result.Fields.ContainsKey(UmbracoContentIndexer.NodeTypeAliasFieldName))
{
basic.AdditionalData.Add("contentType", result.Fields[UmbracoContentIndexer.NodeTypeAliasFieldName]);
}
});
config.CreateMap<ISearchResults, IEnumerable<EntityBasic>>()