Fixes: U4-5694 When searching in a picker, the filtering rules are ignored
This commit is contained in:
@@ -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;
|
||||
}
|
||||
};
|
||||
});
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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>>()
|
||||
|
||||
Reference in New Issue
Block a user