Got searching working from a particular node id, got the UI nearly working

This commit is contained in:
Shannon
2014-10-08 19:03:45 +11:00
parent 13ea17c225
commit 8136b3ecb0
5 changed files with 50 additions and 37 deletions

View File

@@ -263,14 +263,14 @@ function entityResource($q, $http, umbRequestHelper) {
* @returns {Promise} resourcePromise object containing the entity array.
*
*/
search: function (query, type) {
search: function (query, type, startNodeId) {
return umbRequestHelper.resourcePromise(
$http.get(
umbRequestHelper.getApiUrl(
"entityApiBaseUrl",
"Search",
[{ query: query }, {type: type}])),
[{ query: query }, { type: type }, { startNodeId: startNodeId }])),
'Failed to retrieve entity data for query ' + query);
},

View File

@@ -30,6 +30,8 @@ angular.module("umbraco").controller("Umbraco.Dialogs.MemberPickerController",
}
}
//TODO: This needs debounce!
$scope.performSearch = function() {
if ($scope.term) {
if ($scope.oldTerm !== $scope.term) {

View File

@@ -7,12 +7,20 @@ angular.module("umbraco").controller("Umbraco.Dialogs.TreePickerController",
$scope.section = dialogOptions.section;
$scope.treeAlias = dialogOptions.treeAlias;
$scope.multiPicker = dialogOptions.multiPicker;
$scope.hideHeader = true;
$scope.startNodeId = dialogOptions.startNodeId ? dialogOptions.startNodeId : -1;
$scope.hideHeader = true;
localizationService.localize("general_typeToSearch").then(function (value) {
$scope.searchPlaceholderText = value;
});
$scope.selectedSearchResults = [];
$scope.searchInfo = {
selectedSearchResults: [],
searchStartNodeId: null,
searchStartNodeName: null,
showSearch: false,
term: null,
oldTerm: null,
results: []
}
//create the custom query string param for this tree
$scope.customTreeParams = dialogOptions.startNodeId ? "startNodeId=" + dialogOptions.startNodeId : "";
$scope.customTreeParams += dialogOptions.customTreeParams ? "&" + dialogOptions.customTreeParams : "";
@@ -59,8 +67,9 @@ angular.module("umbraco").controller("Umbraco.Dialogs.TreePickerController",
function nodeSearchHandler(ev, args) {
if (args.node.metaData.isContainer === true) {
$scope.showSearch = true;
$scope.searchSubHeader = args.node.name;
$scope.searchInfo.showSearch = true;
$scope.searchInfo.searchStartNodeName = args.node.name;
$scope.searchInfo.searchStartNodeId = args.node.id;
}
}
@@ -99,7 +108,7 @@ angular.module("umbraco").controller("Umbraco.Dialogs.TreePickerController",
if ($scope.multiPicker) {
$scope.select(id);
if (!$scope.searchSubHeader) {
if (!$scope.searchInfo.searchStartNodeId) {
$scope.hideSearch();
}
}
@@ -161,32 +170,34 @@ angular.module("umbraco").controller("Umbraco.Dialogs.TreePickerController",
};
$scope.hideSearch = function() {
$scope.showSearch = false;
$scope.searchSubHeader = null;
$scope.term = "";
$scope.oldTerm = "";
$scope.results = [];
$scope.searchInfo.showSearch = false;
$scope.searchInfo.searchStartNodeName = null;
$scope.searchInfo.searchStartNodeId = null;
$scope.searchInfo.term = null;
$scope.searchInfo.oldTerm = null;
$scope.searchInfo.results = [];
}
//handles the on key up for searching, but we don't want to over query so the result is debounced
$scope.performSearch = _.debounce(function () {
angularHelper.safeApply($scope, function() {
if ($scope.term) {
if ($scope.oldTerm !== $scope.term) {
$scope.results = [];
if ($scope.searchInfo.term) {
if ($scope.searchInfo.oldTerm !== $scope.searchInfo.term) {
$scope.searchInfo.results = [];
var searchArgs = {
term: $scope.term
term: $scope.searchInfo.term
};
if (dialogOptions.startNodeId) {
searchArgs["startNodeId"] = dialogOptions.startNodeId;
//append a start node id, whether it's a global one, or based on a selected list view
if ($scope.searchInfo.searchStartNodeId || dialogOptions.startNodeId) {
searchArgs["startNodeId"] = $scope.searchInfo.searchStartNodeId ? $scope.searchInfo.searchStartNodeId : dialogOptions.startNodeId;
}
searcher(searchArgs).then(function (data) {
$scope.results = data;
$scope.searchInfo.results = data;
});
$scope.showSearch = true;
$scope.oldTerm = $scope.term;
$scope.searchInfo.showSearch = true;
$scope.searchInfo.oldTerm = $scope.searchInfo.term;
}
}
else {

View File

@@ -2,25 +2,25 @@
<div class="umb-panel-header">
<div class="umb-el-wrap umb-panel-buttons">
<div class="form-search">
<i class="icon icon-search" ng-if="!showSearch"></i>
<a class="icon icon-delete" ng-if="showSearch" title="Cancel" ng-click="hideSearch()"></a>
<i class="icon icon-search" ng-if="!searchInfo.showSearch"></i>
<a class="icon icon-delete" ng-if="searchInfo.showSearch" title="Cancel" ng-click="hideSearch()"></a>
<input type="text"
ng-model="term"
ng-model="searchInfo.term"
class="umb-search-field search-query"
placeholder="{{searchPlaceholderText}}"
on-keyup="performSearch()"
focus-when="{{showSearch}}">
<h4 ng-if="showSearch && searchSubHeader">
focus-when="{{searchInfo.showSearch}}">
<h4 ng-if="searchInfo.showSearch && searchInfo.searchStartNodeName">
<small><localize key="general_search">Search</localize>:&nbsp;</small>
{{searchSubHeader}}
{{searchInfo.searchStartNodeName}}
</h4>
</div>
</div>
</div>
<div class="umb-panel-body with-footer">
<div class="tab-content umb-control-group" ng-if="showSearch && selectedSearchResults.length > 0">
<div ng-if="showSearch">
<div class="tab-content umb-control-group" ng-if="searchInfo.showSearch && selectedSearchResults.length > 0">
<div ng-if="searchInfo.showSearch">
<ul class="umb-tree">
<li class="root">
<ul class="umb-search-group">
@@ -42,11 +42,11 @@
<div class="tab-content umb-control-group">
<!-- Search results -->
<div ng-if="showSearch">
<div ng-if="searchInfo.showSearch">
<ul class="umb-tree">
<li class="root">
<ul class="umb-search-group">
<li ng-repeat="result in results">
<li ng-repeat="result in searchInfo.results">
<div style="padding-left: 20px">
<a ng-class="{first:$first}" ng-click="selectResult(result)">
<i class="icon umb-tree-icon sprTree {{result.icon}}"></i>
@@ -60,7 +60,7 @@
</ul>
</div>
<div ng-hide="showSearch">
<div ng-hide="searchInfo.showSearch">
<umb-tree section="{{section}}"
treealias="{{treeAlias}}"
hideheader="{{hideHeader}}"