From 2a44b730564814e27940d032249c0c88d23892d2 Mon Sep 17 00:00:00 2001 From: Emil Wangaa Date: Tue, 28 Mar 2017 21:19:12 +0200 Subject: [PATCH] Adds support for loading uninitialized trees in the treepicker - is needed for CON-1296 to work --- .../common/directives/components/tree/umbtree.directive.js | 3 ++- .../src/common/resources/tree.resource.js | 7 ++++++- .../common/overlays/treepicker/treepicker.controller.js | 4 +++- .../src/views/common/overlays/treepicker/treepicker.html | 1 + src/Umbraco.Web/Editors/BackOfficeController.cs | 2 +- src/Umbraco.Web/Trees/ApplicationTreeController.cs | 5 +++-- 6 files changed, 16 insertions(+), 6 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/common/directives/components/tree/umbtree.directive.js b/src/Umbraco.Web.UI.Client/src/common/directives/components/tree/umbtree.directive.js index 18080dbc38..c95e1a7b7f 100644 --- a/src/Umbraco.Web.UI.Client/src/common/directives/components/tree/umbtree.directive.js +++ b/src/Umbraco.Web.UI.Client/src/common/directives/components/tree/umbtree.directive.js @@ -17,6 +17,7 @@ function umbTreeDirective($compile, $log, $q, $rootScope, treeService, notificat hideheader: '@', cachekey: '@', isdialog: '@', + onlyinitialized: '@', //Custom query string arguments to pass in to the tree as a string, example: "startnodeid=123&something=value" customtreeparams: '@', eventhandler: '=', @@ -252,7 +253,7 @@ function umbTreeDirective($compile, $log, $q, $rootScope, treeService, notificat deleteAnimations = false; //default args - var args = { section: scope.section, tree: scope.treealias, cacheKey: scope.cachekey, isDialog: scope.isdialog ? scope.isdialog : false }; + var args = { section: scope.section, tree: scope.treealias, cacheKey: scope.cachekey, isDialog: scope.isdialog ? scope.isdialog : false, onlyinitialized: scope.onlyinitialized }; //add the extra query string params if specified if (scope.customtreeparams) { diff --git a/src/Umbraco.Web.UI.Client/src/common/resources/tree.resource.js b/src/Umbraco.Web.UI.Client/src/common/resources/tree.resource.js index 73b6394b0a..dd25018191 100644 --- a/src/Umbraco.Web.UI.Client/src/common/resources/tree.resource.js +++ b/src/Umbraco.Web.UI.Client/src/common/resources/tree.resource.js @@ -51,10 +51,15 @@ function treeResource($q, $http, umbRequestHelper) { if (!options.isDialog) { options.isDialog = false; } - + //create the query string for the tree request, these are the mandatory options: var query = "application=" + options.section + "&tree=" + options.tree + "&isDialog=" + options.isDialog; + //if you need to load a not initialized tree set this value to false - default is true + if (options.onlyinitialized) { + query += "&onlyInitialized=" + options.onlyinitialized; + } + //the options can contain extra query string parameters if (options.queryString) { query += "&" + options.queryString; diff --git a/src/Umbraco.Web.UI.Client/src/views/common/overlays/treepicker/treepicker.controller.js b/src/Umbraco.Web.UI.Client/src/views/common/overlays/treepicker/treepicker.controller.js index b0da5f562d..fc0f4ed9e6 100644 --- a/src/Umbraco.Web.UI.Client/src/views/common/overlays/treepicker/treepicker.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/common/overlays/treepicker/treepicker.controller.js @@ -9,7 +9,9 @@ angular.module("umbraco").controller("Umbraco.Overlays.TreePickerController", $scope.section = dialogOptions.section; $scope.treeAlias = dialogOptions.treeAlias; $scope.multiPicker = dialogOptions.multiPicker; - $scope.hideHeader = true; + $scope.hideHeader = false; + // if you need to load a not initialized tree set this value to false - default is true + $scope.onlyInitialized = dialogOptions.onlyInitialized; $scope.searchInfo = { searchFromId: dialogOptions.startNodeId, searchFromName: null, diff --git a/src/Umbraco.Web.UI.Client/src/views/common/overlays/treepicker/treepicker.html b/src/Umbraco.Web.UI.Client/src/views/common/overlays/treepicker/treepicker.html index b88a859cb9..108dbdaa78 100644 --- a/src/Umbraco.Web.UI.Client/src/views/common/overlays/treepicker/treepicker.html +++ b/src/Umbraco.Web.UI.Client/src/views/common/overlays/treepicker/treepicker.html @@ -27,6 +27,7 @@ hideheader="{{hideHeader}}" hideoptions="true" isdialog="true" + onlyinitialized="{{onlyInitialized}}" customtreeparams="{{customTreeParams}}" eventhandler="dialogTreeEventHandler" enablelistviewsearch="true" diff --git a/src/Umbraco.Web/Editors/BackOfficeController.cs b/src/Umbraco.Web/Editors/BackOfficeController.cs index 376606ff5c..60a49d46ee 100644 --- a/src/Umbraco.Web/Editors/BackOfficeController.cs +++ b/src/Umbraco.Web/Editors/BackOfficeController.cs @@ -254,7 +254,7 @@ namespace Umbraco.Web.Editors }, { "treeApplicationApiBaseUrl", Url.GetUmbracoApiServiceBaseUrl( - controller => controller.GetApplicationTrees(null, null, null)) + controller => controller.GetApplicationTrees(null, null, null, true)) }, { "contentTypeApiBaseUrl", Url.GetUmbracoApiServiceBaseUrl( diff --git a/src/Umbraco.Web/Trees/ApplicationTreeController.cs b/src/Umbraco.Web/Trees/ApplicationTreeController.cs index 1b90ae0dd8..f6b5e82fc3 100644 --- a/src/Umbraco.Web/Trees/ApplicationTreeController.cs +++ b/src/Umbraco.Web/Trees/ApplicationTreeController.cs @@ -30,16 +30,17 @@ namespace Umbraco.Web.Trees /// The application to load tree for /// An optional single tree alias, if specified will only load the single tree for the request app /// + /// An optional bool (defaults to true), if set to false it will also load uninitialized trees /// [HttpQueryStringFilter("queryStrings")] - public async Task GetApplicationTrees(string application, string tree, FormDataCollection queryStrings) + public async Task GetApplicationTrees(string application, string tree, FormDataCollection queryStrings, bool onlyInitialized = true) { if (string.IsNullOrEmpty(application)) throw new HttpResponseException(HttpStatusCode.NotFound); var rootId = Constants.System.Root.ToString(CultureInfo.InvariantCulture); //find all tree definitions that have the current application alias - var appTrees = ApplicationContext.Current.Services.ApplicationTreeService.GetApplicationTrees(application, true).ToArray(); + var appTrees = ApplicationContext.Current.Services.ApplicationTreeService.GetApplicationTrees(application, onlyInitialized).ToArray(); if (appTrees.Count() == 1 || string.IsNullOrEmpty(tree) == false ) {