From a05cc03254684d2baf55e56315432b9f4458ef2c Mon Sep 17 00:00:00 2001 From: AndyButland Date: Sun, 15 Nov 2015 21:18:21 +0100 Subject: [PATCH] Allows position of the list view child items tab to be positioned within the tab list --- .../listview/listview.controller.js | 1 + .../Mapping/TabsAndPropertiesResolver.cs | 39 +++++++++++++++---- .../PropertyEditors/ListViewPropertyEditor.cs | 12 ++---- 3 files changed, 36 insertions(+), 16 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/listview.controller.js b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/listview.controller.js index 0569c9faca..069fd04988 100644 --- a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/listview.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/listview.controller.js @@ -57,6 +57,7 @@ function listViewController($rootScope, $scope, $routeParams, $injector, notific }; $scope.options = { + displayAtTabNumber: $scope.model.config.displayAtTabNumber ? $scope.model.config.displayAtTabNumber : 1, pageSize: $scope.model.config.pageSize ? $scope.model.config.pageSize : 10, pageNumber: ($routeParams.page && Number($routeParams.page) != NaN && Number($routeParams.page) > 0) ? $routeParams.page : 1, filter: '', diff --git a/src/Umbraco.Web/Models/Mapping/TabsAndPropertiesResolver.cs b/src/Umbraco.Web/Models/Mapping/TabsAndPropertiesResolver.cs index ecf5e2da42..1856d4382e 100644 --- a/src/Umbraco.Web/Models/Mapping/TabsAndPropertiesResolver.cs +++ b/src/Umbraco.Web/Models/Mapping/TabsAndPropertiesResolver.cs @@ -119,9 +119,6 @@ namespace Umbraco.Web.Models.Mapping //re-assign genericProps.Properties = contentProps; - - - } /// @@ -191,12 +188,38 @@ namespace Umbraco.Web.Models.Mapping }); listViewTab.Properties = listViewProperties; - //Is there a better way? - var tabs = new List>(); - tabs.Add(listViewTab); - tabs.AddRange(display.Tabs); - display.Tabs = tabs; + SetChildItemsTabPosition(display, listViewConfig, listViewTab); + } + private static void SetChildItemsTabPosition(TabbedContentItem display, + IDictionary listViewConfig, + Tab listViewTab) + where TPersisted : IContentBase + { + // Find position of tab from config + var tabIndexForChildItems = 0; + if (listViewConfig["displayAtTabNumber"] != null && int.TryParse((string)listViewConfig["displayAtTabNumber"], out tabIndexForChildItems)) + { + // Tab position is recorded 1-based but we insert into collection 0-based + tabIndexForChildItems--; + + // Ensure within bounds + if (tabIndexForChildItems < 0) + { + tabIndexForChildItems = 0; + } + + if (tabIndexForChildItems > display.Tabs.Count()) + { + tabIndexForChildItems = display.Tabs.Count(); + } + } + + // Recreate tab list with child items tab at configured position + var tabs = new List>(); + tabs.AddRange(display.Tabs); + tabs.Insert(tabIndexForChildItems, listViewTab); + display.Tabs = tabs; } protected override IEnumerable> ResolveCore(IContentBase content) diff --git a/src/Umbraco.Web/PropertyEditors/ListViewPropertyEditor.cs b/src/Umbraco.Web/PropertyEditors/ListViewPropertyEditor.cs index 09dfacc94f..086004a501 100644 --- a/src/Umbraco.Web/PropertyEditors/ListViewPropertyEditor.cs +++ b/src/Umbraco.Web/PropertyEditors/ListViewPropertyEditor.cs @@ -1,10 +1,5 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +using System.Collections.Generic; using Umbraco.Core; -using Umbraco.Core.Models; using Umbraco.Core.PropertyEditors; namespace Umbraco.Web.PropertyEditors @@ -24,6 +19,7 @@ namespace Umbraco.Web.PropertyEditors return new Dictionary { {"pageSize", "10"}, + {"displayAtTabNumber", "1"}, {"orderBy", "SortOrder"}, {"orderDirection", "asc"}, { @@ -40,6 +36,8 @@ namespace Umbraco.Web.PropertyEditors internal class ListViewPreValueEditor : PreValueEditor { + [PreValueField("displayAtTabNumber", "Display At Tab Number", "number", Description = "Which tab position that the list of child items will be displayed")] + public int DisplayAtTabNumber { get; set; } [PreValueField("pageSize", "Page Size", "number", Description = "Number of items per page")] public int PageSize { get; set; } @@ -55,7 +53,5 @@ namespace Umbraco.Web.PropertyEditors Description = "The properties that will be displayed for each column")] public object IncludeProperties { get; set; } } - - } }