Copy dialog with search is basically working, just needs a few tweaks.

This commit is contained in:
Shannon
2014-10-13 18:31:35 +11:00
parent f42b7adc0e
commit 7804e8aa44
3 changed files with 106 additions and 17 deletions

View File

@@ -11,7 +11,7 @@ angular.module("umbraco").controller("Umbraco.Dialogs.LinkPickerController",
$scope.dialogTreeEventHandler = $({});
$scope.target = {};
$scope.searchInfo = {
searchFromId: dialogOptions.startNodeId,
searchFromId: null,
searchFromName: null,
showSearch: false,
results: [],
@@ -119,7 +119,7 @@ angular.module("umbraco").controller("Umbraco.Dialogs.LinkPickerController",
$scope.hideSearch = function () {
$scope.searchInfo.showSearch = false;
$scope.searchInfo.searchFromId = dialogOptions.startNodeId;
$scope.searchInfo.searchFromId = null;
$scope.searchInfo.searchFromName = null;
$scope.searchInfo.results = [];
}

View File

@@ -1,32 +1,100 @@
angular.module("umbraco")
.controller("Umbraco.Editors.Content.CopyController",
function ($scope, eventsService, contentResource, navigationService, appState, treeService) {
function ($scope, eventsService, contentResource, navigationService, appState, treeService, localizationService) {
var dialogOptions = $scope.dialogOptions;
var searchText = "Search...";
localizationService.localize("general_search").then(function (value) {
searchText = value + "...";
});
$scope.relateToOriginal = false;
$scope.dialogTreeEventHandler = $({});
$scope.searchInfo = {
searchFromId: null,
searchFromName: null,
showSearch: false,
results: [],
selectedSearchResults: []
}
var node = dialogOptions.currentNode;
function nodeSelectHandler(ev, args) {
args.event.preventDefault();
args.event.stopPropagation();
eventsService.emit("editors.content.copyController.select", args);
if (args.node.metaData.listViewNode) {
//check if list view 'search' node was selected
if ($scope.target) {
//un-select if there's a current one selected
$scope.target.selected = false;
$scope.searchInfo.showSearch = true;
$scope.searchInfo.searchFromId = args.node.metaData.listViewNode.id;
$scope.searchInfo.searchFromName = args.node.metaData.listViewNode.name;
}
else {
eventsService.emit("editors.content.copyController.select", args);
$scope.target = args.node;
$scope.target.selected = true;
if ($scope.target) {
//un-select if there's a current one selected
$scope.target.selected = false;
}
$scope.target = args.node;
$scope.target.selected = true;
}
}
$scope.dialogTreeEventHandler.bind("treeNodeSelect", nodeSelectHandler);
function nodeExpandedHandler(ev, args) {
if (angular.isArray(args.children)) {
//iterate children
_.each(args.children, function (child) {
//check if any of the items are list views, if so we need to add a custom
// child: A node to activate the search
if (child.metaData.isContainer) {
child.hasChildren = true;
child.children = [
{
level: child.level + 1,
hasChildren: false,
name: searchText,
metaData: {
listViewNode: child,
},
cssClass: "icon umb-tree-icon sprTree icon-search",
cssClasses: ["not-published"]
}
];
}
});
}
}
$scope.hideSearch = function () {
$scope.searchInfo.showSearch = false;
$scope.searchInfo.searchFromId = null;
$scope.searchInfo.searchFromName = null;
$scope.searchInfo.results = [];
}
// method to select a search result
$scope.selectResult = function (evt, result) {
result.selected = result.selected === true ? false : true;
nodeSelectHandler(evt, { event: evt, node: result });
};
//callback when there are search results
$scope.onSearchResults = function (results) {
$scope.searchInfo.results = results;
$scope.searchInfo.showSearch = true;
};
$scope.copy = function () {
$scope.hideSearch();
contentResource.copy({ parentId: $scope.target.id, id: node.id, relateToOriginal: $scope.relateToOriginal })
.then(function (path) {
$scope.error = false;
@@ -52,7 +120,11 @@ angular.module("umbraco")
});
};
$scope.dialogTreeEventHandler.bind("treeNodeSelect", nodeSelectHandler);
$scope.dialogTreeEventHandler.bind("treeNodeExpanded", nodeExpandedHandler);
$scope.$on('$destroy', function () {
$scope.dialogTreeEventHandler.unbind("treeNodeSelect", nodeSelectHandler);
$scope.dialogTreeEventHandler.unbind("treeNodeExpanded", nodeExpandedHandler);
});
});

View File

@@ -22,14 +22,31 @@
</div>
<div ng-hide="success">
<umb-tree section="content"
hideheader="false"
hideoptions="true"
isdialog="true"
eventhandler="dialogTreeEventHandler"
enablecheckboxes="true">
</umb-tree>
<umb-tree-search-box hide-search-callback="hideSearch"
search-callback="onSearchResults"
search-from-id="{{searchInfo.searchFromId}}"
search-from-name="{{searchInfo.searchFromName}}"
show-search="{{searchInfo.showSearch}}"
section="{{section}}">
</umb-tree-search-box>
<br />
<umb-tree-search-results ng-if="searchInfo.showSearch"
results="searchInfo.results"
select-result-callback="selectResult">
</umb-tree-search-results>
<div ng-hide="searchInfo.showSearch">
<umb-tree section="content"
hideheader="false"
hideoptions="true"
isdialog="true"
eventhandler="dialogTreeEventHandler"
enablecheckboxes="true">
</umb-tree>
</div>
<umb-pane>
<umb-control-group label="Relate to original">