Got searching working from a particular node id, got the UI nearly working
This commit is contained in:
@@ -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);
|
||||
},
|
||||
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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>: </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}}"
|
||||
|
||||
Reference in New Issue
Block a user