From 385c53936e4d17276d895615b949300bc997b07e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Asbj=C3=B8rn=20Riis-Knudsen?= Date: Thu, 28 Jul 2016 22:18:17 +0200 Subject: [PATCH 1/7] U4-8749: Initial implementation of the default sort order using the columns added instead of a fixed list --- .../listview/sortby.prevalues.controller.js | 93 ++++++++++++------- .../listview/sortby.prevalues.html | 2 +- 2 files changed, 61 insertions(+), 34 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/sortby.prevalues.controller.js b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/sortby.prevalues.controller.js index 4498e281dd..6d93139017 100644 --- a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/sortby.prevalues.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/sortby.prevalues.controller.js @@ -1,40 +1,67 @@ -function sortByPreValsController($rootScope, $scope, localizationService) { +function sortByPreValsController($rootScope, $scope, localizationService, editorState) { + var propsPreValue = _.findWhere(editorState.current.preValues, { key: "includeProperties" }); - $scope.sortByFields = [ - { value: "SortOrder", key: "general_sort" }, - { value: "Name", key: "general_name" }, - { value: "VersionDate", key: "content_updateDate" }, - { value: "Updater", key: "content_updatedBy" }, - { value: "CreateDate", key: "content_createDate" }, - { value: "Owner", key: "content_createBy" }, - { value: "ContentTypeAlias", key: "content_documentType" }, - { value: "Published", key: "content_isPublished" }, - { value: "Email", key: "general_email" }, - { value: "Username", key: "general_username" } - ]; - - //now we'll localize these strings, for some reason the directive doesn't work inside of the select group with an ng-model declared - _.each($scope.sortByFields, function (e, i) { - localizationService.localize(e.key).then(function (v) { - e.name = v; + if(propsPreValue != undefined){ + $scope.sortByFields = propsPreValue.value; + } + else { + $scope.sortByFields = []; + } - switch (e.value) { - case "Updater": - e.name += " (Content only)"; - break; - case "Published": - e.name += " (Content only)"; - break; - case "Email": - e.name += " (Members only)"; - break; - case "Username": - e.name += " (Members only)"; - break; - } - }); + var existingValue = _.find($scope.sortByFields, function (e) { + return e.alias.toLowerCase() === $scope.model.value; }); + if (existingValue === undefined) { + //Existing value not found + + //Set to first value + if($scope.sortByFields.length > 0){ + $scope.model.value = $scope.sortByFields[0].alias; + } + + } + else { + //Set the existing value + //The old implementation pre Umbraco 7.5 used PascalCase aliases, this uses camelCase, so this ensures that any previous value is set + $scope.model.value = existingValue.alias; + } + + //$scope.sortByFields = [ + // { value: "SortOrder", key: "general_sort" }, + // { value: "Name", key: "general_name" }, + // { value: "VersionDate", key: "content_updateDate" }, + // { value: "Updater", key: "content_updatedBy" }, + // { value: "CreateDate", key: "content_createDate" }, + // { value: "Owner", key: "content_createBy" }, + // { value: "ContentTypeAlias", key: "content_documentType" }, + // { value: "Published", key: "content_isPublished" }, + // { value: "Email", key: "general_email" }, + // { value: "Username", key: "general_username" } + //]; + + ////now we'll localize these strings, for some reason the directive doesn't work inside of the select group with an ng-model declared + //_.each($scope.sortByFields, function (e, i) { + // localizationService.localize(e.key).then(function (v) { + // e.name = v; + + // switch (e.value) { + // case "Updater": + // e.name += " (Content only)"; + // break; + // case "Published": + // e.name += " (Content only)"; + // break; + // case "Email": + // e.name += " (Members only)"; + // break; + // case "Username": + // e.name += " (Members only)"; + // break; + // } + // }); + //}); + } diff --git a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/sortby.prevalues.html b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/sortby.prevalues.html index 2b35aa2ca4..43a8a674f4 100644 --- a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/sortby.prevalues.html +++ b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/sortby.prevalues.html @@ -1,5 +1,5 @@  \ No newline at end of file From e53b81b627156cee325902e57ceab1f84516a747 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Asbj=C3=B8rn=20Riis-Knudsen?= Date: Thu, 28 Jul 2016 22:21:21 +0200 Subject: [PATCH 2/7] U4-8749: Remove commented out code --- .../listview/sortby.prevalues.controller.js | 36 ------------------- 1 file changed, 36 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/sortby.prevalues.controller.js b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/sortby.prevalues.controller.js index 6d93139017..ec22bca8f7 100644 --- a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/sortby.prevalues.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/sortby.prevalues.controller.js @@ -26,42 +26,6 @@ function sortByPreValsController($rootScope, $scope, localizationService, editor //The old implementation pre Umbraco 7.5 used PascalCase aliases, this uses camelCase, so this ensures that any previous value is set $scope.model.value = existingValue.alias; } - - //$scope.sortByFields = [ - // { value: "SortOrder", key: "general_sort" }, - // { value: "Name", key: "general_name" }, - // { value: "VersionDate", key: "content_updateDate" }, - // { value: "Updater", key: "content_updatedBy" }, - // { value: "CreateDate", key: "content_createDate" }, - // { value: "Owner", key: "content_createBy" }, - // { value: "ContentTypeAlias", key: "content_documentType" }, - // { value: "Published", key: "content_isPublished" }, - // { value: "Email", key: "general_email" }, - // { value: "Username", key: "general_username" } - //]; - - ////now we'll localize these strings, for some reason the directive doesn't work inside of the select group with an ng-model declared - //_.each($scope.sortByFields, function (e, i) { - // localizationService.localize(e.key).then(function (v) { - // e.name = v; - - // switch (e.value) { - // case "Updater": - // e.name += " (Content only)"; - // break; - // case "Published": - // e.name += " (Content only)"; - // break; - // case "Email": - // e.name += " (Members only)"; - // break; - // case "Username": - // e.name += " (Members only)"; - // break; - // } - // }); - //}); - } From b686fa74c9fcabe14a0f9359faae0678597a79b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Asbj=C3=B8rn=20Riis-Knudsen?= Date: Fri, 29 Jul 2016 23:42:59 +0200 Subject: [PATCH 3/7] U4-8749: Fixes by @AndyButland --- .../listview/listview.controller.js | 22 +++-- .../listview/sortby.prevalues.controller.js | 82 +++++++++++++++---- .../PropertyEditors/ListViewPropertyEditor.cs | 15 ++-- 3 files changed, 88 insertions(+), 31 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 594475a7d2..f556232543 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 @@ -151,7 +151,6 @@ function listViewController($rootScope, $scope, $routeParams, $injector, $cookie layouts: $scope.model.config.layouts, activeLayout: listViewHelper.getLayout($routeParams.id, $scope.model.config.layouts) }, - orderBySystemField: true, allowBulkPublish: $scope.entityType === 'content' && $scope.model.config.bulkActionPermissions.allowBulkPublish, allowBulkUnpublish: $scope.entityType === 'content' && $scope.model.config.bulkActionPermissions.allowBulkUnpublish, allowBulkCopy: $scope.entityType === 'content' && $scope.model.config.bulkActionPermissions.allowBulkCopy, @@ -159,6 +158,15 @@ function listViewController($rootScope, $scope, $routeParams, $injector, $cookie allowBulkDelete: $scope.model.config.bulkActionPermissions.allowBulkDelete }; + // Check if selected order by field is actually custom field + for (var j = 0; j < $scope.options.includeProperties.length; j++) { + var includedProperty = $scope.options.includeProperties[j]; + if (includedProperty.alias.toLowerCase() === $scope.options.orderBy.toLowerCase()) { + $scope.options.orderBySystemField = includedProperty.isSystem === 1; + break; + } + } + //update all of the system includeProperties to enable sorting _.each($scope.options.includeProperties, function (e, i) { @@ -180,12 +188,12 @@ function listViewController($rootScope, $scope, $routeParams, $injector, $cookie } if (e.isSystem) { - //localize the header - var key = getLocalizedKey(e.alias); - localizationService.localize(key).then(function (v) { - e.header = v; - }); - } + //localize the header + var key = getLocalizedKey(e.alias); + localizationService.localize(key).then(function (v) { + e.header = v; + }); + } }); $scope.selectLayout = function (selectedLayout) { diff --git a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/sortby.prevalues.controller.js b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/sortby.prevalues.controller.js index ec22bca8f7..97775b18bb 100644 --- a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/sortby.prevalues.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/sortby.prevalues.controller.js @@ -1,31 +1,77 @@ function sortByPreValsController($rootScope, $scope, localizationService, editorState) { + // Helper to find a particular value from the list of sort by options + function findFromSortByFields(value) { + return _.find($scope.sortByFields, function (e) { + return e.value.toLowerCase() === value.toLowerCase(); + }); + } + + // Get list of properties assigned as columns of the list view var propsPreValue = _.findWhere(editorState.current.preValues, { key: "includeProperties" }); - if(propsPreValue != undefined){ - $scope.sortByFields = propsPreValue.value; - } - else { - $scope.sortByFields = []; + // Populate list of options for the default sort (all the columns plus then node name) + $scope.sortByFields = []; + $scope.sortByFields.push({ value: "name", name: "Name", isSystem: 1 }); + if (propsPreValue != undefined) { + for (var i = 0; i < propsPreValue.value.length; i++) { + var value = propsPreValue.value[i]; + $scope.sortByFields.push({ + value: value.alias, + name: value.header, + isSystem: value.isSystem + }); + } } - var existingValue = _.find($scope.sortByFields, function (e) { - return e.alias.toLowerCase() === $scope.model.value; + // Localize the system fields, for some reason the directive doesn't work inside of the select group with an ng-model declared + var systemFields = [ + { value: "SortOrder", key: "general_sort" }, + { value: "Name", key: "general_name" }, + { value: "VersionDate", key: "content_updateDate" }, + { value: "Updater", key: "content_updatedBy" }, + { value: "CreateDate", key: "content_createDate" }, + { value: "Owner", key: "content_createBy" }, + { value: "ContentTypeAlias", key: "content_documentType" }, + { value: "Published", key: "content_isPublished" }, + { value: "Email", key: "general_email" }, + { value: "Username", key: "general_username" } + ]; + _.each(systemFields, function (e) { + localizationService.localize(e.key).then(function (v) { + + var sortByListValue = findFromSortByFields(e.value); + if (sortByListValue) { + sortByListValue.name = v; + switch (e.value) { + case "Updater": + e.name += " (Content only)"; + break; + case "Published": + e.name += " (Content only)"; + break; + case "Email": + e.name += " (Members only)"; + break; + case "Username": + e.name += " (Members only)"; + break; + } + } + }); }); - if (existingValue === undefined) { - //Existing value not found - - //Set to first value - if($scope.sortByFields.length > 0){ - $scope.model.value = $scope.sortByFields[0].alias; - } - + // Check existing model value is available in list and ensure a value is set + var existingValue = findFromSortByFields($scope.model.value); + if (existingValue) { + // Set the existing value + // The old implementation pre Umbraco 7.5 used PascalCase aliases, this uses camelCase, so this ensures that any previous value is set + $scope.model.value = existingValue.value; } else { - //Set the existing value - //The old implementation pre Umbraco 7.5 used PascalCase aliases, this uses camelCase, so this ensures that any previous value is set - $scope.model.value = existingValue.alias; + // Existing value not found, set to first value + $scope.model.value = $scope.sortByFields[0].value; } + } diff --git a/src/Umbraco.Web/PropertyEditors/ListViewPropertyEditor.cs b/src/Umbraco.Web/PropertyEditors/ListViewPropertyEditor.cs index 0e1a0abf2d..f744e4d807 100644 --- a/src/Umbraco.Web/PropertyEditors/ListViewPropertyEditor.cs +++ b/src/Umbraco.Web/PropertyEditors/ListViewPropertyEditor.cs @@ -53,9 +53,17 @@ namespace Umbraco.Web.PropertyEditors { [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; } + [PreValueField("layouts", "Layouts", "views/propertyeditors/listview/layouts.prevalues.html")] + public int Layouts { get; set; } + + [PreValueField("includeProperties", "Columns Displayed", "views/propertyeditors/listview/includeproperties.prevalues.html", + Description = "The properties that will be displayed for each column")] + public object IncludeProperties { get; set; } + [PreValueField("orderBy", "Order By", "views/propertyeditors/listview/sortby.prevalues.html", Description = "The default sort order for the list")] public int OrderBy { get; set; } @@ -63,15 +71,10 @@ namespace Umbraco.Web.PropertyEditors [PreValueField("orderDirection", "Order Direction", "views/propertyeditors/listview/orderdirection.prevalues.html")] public int OrderDirection { get; set; } - [PreValueField("layouts", "Layouts", "views/propertyeditors/listview/layouts.prevalues.html")] - public int Layouts { get; set; } - - [PreValueField("includeProperties", "Columns Displayed", "views/propertyeditors/listview/includeproperties.prevalues.html", - Description = "The properties that will be displayed for each column")] - public object IncludeProperties { get; set; } [PreValueField("bulkActionPermissions", "Bulk Action Permissions", "views/propertyeditors/listview/bulkactionpermissions.prevalues.html", Description = "The bulk actions that are allowed from the list view")] public BulkActionPermissionSettings BulkActionPermissions { get; set; } + internal class BulkActionPermissionSettings { public bool AllowBulkPublish { get; set; } From 6837dd2ce876daa0610006d818cf678103b78a9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Asbj=C3=B8rn=20Riis-Knudsen?= Date: Fri, 29 Jul 2016 23:55:20 +0200 Subject: [PATCH 4/7] U4-8749: One more fix by @AndyButland --- .../src/views/propertyeditors/listview/sortby.prevalues.html | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/sortby.prevalues.html b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/sortby.prevalues.html index 43a8a674f4..754afd9b60 100644 --- a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/sortby.prevalues.html +++ b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/sortby.prevalues.html @@ -1,5 +1,4 @@  \ No newline at end of file From 6adccb66dd83ed102b120c272c12d5d8449a969b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Asbj=C3=B8rn=20Riis-Knudsen?= Date: Sat, 30 Jul 2016 00:30:50 +0200 Subject: [PATCH 5/7] U4-8749: Use watch do dynamically refresh sort column list --- .../listview/sortby.prevalues.controller.js | 126 +++++++++--------- 1 file changed, 61 insertions(+), 65 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/sortby.prevalues.controller.js b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/sortby.prevalues.controller.js index 97775b18bb..a6e42c3d31 100644 --- a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/sortby.prevalues.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/sortby.prevalues.controller.js @@ -1,77 +1,73 @@ function sortByPreValsController($rootScope, $scope, localizationService, editorState) { - // Helper to find a particular value from the list of sort by options - function findFromSortByFields(value) { - return _.find($scope.sortByFields, function (e) { - return e.value.toLowerCase() === value.toLowerCase(); - }); - } + //Watch the prevalues + $scope.$watch(function () { + return _.findWhere(editorState.current.preValues, { key: "includeProperties" }).value; + }, function () { + populateFields(); + }, true); //Use deep watching, otherwise we won't pick up header changes - // Get list of properties assigned as columns of the list view - var propsPreValue = _.findWhere(editorState.current.preValues, { key: "includeProperties" }); - - // Populate list of options for the default sort (all the columns plus then node name) - $scope.sortByFields = []; - $scope.sortByFields.push({ value: "name", name: "Name", isSystem: 1 }); - if (propsPreValue != undefined) { - for (var i = 0; i < propsPreValue.value.length; i++) { - var value = propsPreValue.value[i]; - $scope.sortByFields.push({ - value: value.alias, - name: value.header, - isSystem: value.isSystem + function populateFields() { + // Helper to find a particular value from the list of sort by options + function findFromSortByFields(value) { + return _.find($scope.sortByFields, function (e) { + return e.value.toLowerCase() === value.toLowerCase(); }); } - } - // Localize the system fields, for some reason the directive doesn't work inside of the select group with an ng-model declared - var systemFields = [ - { value: "SortOrder", key: "general_sort" }, - { value: "Name", key: "general_name" }, - { value: "VersionDate", key: "content_updateDate" }, - { value: "Updater", key: "content_updatedBy" }, - { value: "CreateDate", key: "content_createDate" }, - { value: "Owner", key: "content_createBy" }, - { value: "ContentTypeAlias", key: "content_documentType" }, - { value: "Published", key: "content_isPublished" }, - { value: "Email", key: "general_email" }, - { value: "Username", key: "general_username" } - ]; - _.each(systemFields, function (e) { - localizationService.localize(e.key).then(function (v) { + // Get list of properties assigned as columns of the list view + var propsPreValue = _.findWhere(editorState.current.preValues, { key: "includeProperties" }); - var sortByListValue = findFromSortByFields(e.value); - if (sortByListValue) { - sortByListValue.name = v; - switch (e.value) { - case "Updater": - e.name += " (Content only)"; - break; - case "Published": - e.name += " (Content only)"; - break; - case "Email": - e.name += " (Members only)"; - break; - case "Username": - e.name += " (Members only)"; - break; - } + // Populate list of options for the default sort (all the columns plus then node name) + $scope.sortByFields = []; + $scope.sortByFields.push({ value: "name", name: "Name", isSystem: 1 }); + if (propsPreValue != undefined) { + for (var i = 0; i < propsPreValue.value.length; i++) { + var value = propsPreValue.value[i]; + $scope.sortByFields.push({ + value: value.alias, + name: value.header, + isSystem: value.isSystem + }); } + } + + // Localize the system fields, for some reason the directive doesn't work inside of the select group with an ng-model declared + var systemFields = [ + { value: "SortOrder", key: "general_sort" }, + { value: "Name", key: "general_name" }, + { value: "VersionDate", key: "content_updateDate" }, + { value: "Updater", key: "content_updatedBy" }, + { value: "CreateDate", key: "content_createDate" }, + { value: "Owner", key: "content_createBy" }, + { value: "ContentTypeAlias", key: "content_documentType" }, + { value: "Published", key: "content_isPublished" }, + { value: "Email", key: "general_email" }, + { value: "Username", key: "general_username" } + ]; + _.each(systemFields, function (e) { + localizationService.localize(e.key).then(function (v) { + + var sortByListValue = findFromSortByFields(e.value); + if (sortByListValue) { + sortByListValue.name = v; + switch (e.value) { + case "Updater": + e.name += " (Content only)"; + break; + case "Published": + e.name += " (Content only)"; + break; + case "Email": + e.name += " (Members only)"; + break; + case "Username": + e.name += " (Members only)"; + break; + } + } + }); }); - }); - - // Check existing model value is available in list and ensure a value is set - var existingValue = findFromSortByFields($scope.model.value); - if (existingValue) { - // Set the existing value - // The old implementation pre Umbraco 7.5 used PascalCase aliases, this uses camelCase, so this ensures that any previous value is set - $scope.model.value = existingValue.value; } - else { - // Existing value not found, set to first value - $scope.model.value = $scope.sortByFields[0].value; - } - } From 1f6caa0164d32c2992fa2d44881804a6a5ee7e9b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Asbj=C3=B8rn=20Riis-Knudsen?= Date: Sat, 30 Jul 2016 00:35:06 +0200 Subject: [PATCH 6/7] U4-8749: add back some acceidentally deleted code to deal with existing values --- .../listview/sortby.prevalues.controller.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/sortby.prevalues.controller.js b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/sortby.prevalues.controller.js index a6e42c3d31..480a78ee2d 100644 --- a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/sortby.prevalues.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/sortby.prevalues.controller.js @@ -67,6 +67,18 @@ function sortByPreValsController($rootScope, $scope, localizationService, editor } }); }); + + // Check existing model value is available in list and ensure a value is set + var existingValue = findFromSortByFields($scope.model.value); + if (existingValue) { + // Set the existing value + // The old implementation pre Umbraco 7.5 used PascalCase aliases, this uses camelCase, so this ensures that any previous value is set + $scope.model.value = existingValue.value; + } + else { + // Existing value not found, set to first value + $scope.model.value = $scope.sortByFields[0].value; + } } } From 2ddbca8861ff43fca859145be31917fef35f0020 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Asbj=C3=B8rn=20Riis-Knudsen?= Date: Wed, 3 Aug 2016 22:07:06 +0200 Subject: [PATCH 7/7] U4-8749: Add a service to allow acces to prevalues from inline listview editor --- .../umblistviewsettings.directive.js | 3 +- .../listviewprevaluehelper.service.js | 61 +++++++++++++++++++ .../listview/sortby.prevalues.controller.js | 16 ++++- 3 files changed, 76 insertions(+), 4 deletions(-) create mode 100644 src/Umbraco.Web.UI.Client/src/common/services/listviewprevaluehelper.service.js diff --git a/src/Umbraco.Web.UI.Client/src/common/directives/components/umblistviewsettings.directive.js b/src/Umbraco.Web.UI.Client/src/common/directives/components/umblistviewsettings.directive.js index ae9da02237..f21f7b8d3d 100644 --- a/src/Umbraco.Web.UI.Client/src/common/directives/components/umblistviewsettings.directive.js +++ b/src/Umbraco.Web.UI.Client/src/common/directives/components/umblistviewsettings.directive.js @@ -1,7 +1,7 @@ (function() { 'use strict'; - function ListViewSettingsDirective(contentTypeResource, dataTypeResource, dataTypeHelper) { + function ListViewSettingsDirective(contentTypeResource, dataTypeResource, dataTypeHelper, listViewPrevalueHelper) { function link(scope, el, attr, ctrl) { @@ -20,6 +20,7 @@ scope.dataType = dataType; + listViewPrevalueHelper.setPrevalues(dataType.preValues); scope.customListViewCreated = checkForCustomListView(); }); diff --git a/src/Umbraco.Web.UI.Client/src/common/services/listviewprevaluehelper.service.js b/src/Umbraco.Web.UI.Client/src/common/services/listviewprevaluehelper.service.js new file mode 100644 index 0000000000..70bba2d26a --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/common/services/listviewprevaluehelper.service.js @@ -0,0 +1,61 @@ +/** + @ngdoc service + * @name umbraco.services.listViewPrevalueHelper + * + * + * @description + * Service for accessing the prevalues of a list view being edited in the inline list view editor in the doctype editor + */ +(function () { + 'use strict'; + + function listViewPrevalueHelper() { + + var prevalues = []; + + /** + * @ngdoc method + * @name umbraco.services.listViewPrevalueHelper#getPrevalues + * @methodOf umbraco.services.listViewPrevalueHelper + * + * @description + * Set the collection of prevalues + */ + + function getPrevalues() { + return prevalues; + } + + /** + * @ngdoc method + * @name umbraco.services.listViewPrevalueHelper#setPrevalues + * @methodOf umbraco.services.listViewPrevalueHelper + * + * @description + * Changes the current layout used by the listview to the layout passed in. Stores selection in localstorage + * + * @param {Array} values Array of prevalues + */ + + function setPrevalues(values) { + prevalues = values; + } + + + + var service = { + + getPrevalues: getPrevalues, + setPrevalues: setPrevalues + + }; + + return service; + + } + + + angular.module('umbraco.services').factory('listViewPrevalueHelper', listViewPrevalueHelper); + + +})(); diff --git a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/sortby.prevalues.controller.js b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/sortby.prevalues.controller.js index 480a78ee2d..333b91f81f 100644 --- a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/sortby.prevalues.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/sortby.prevalues.controller.js @@ -1,7 +1,17 @@ -function sortByPreValsController($rootScope, $scope, localizationService, editorState) { +function sortByPreValsController($rootScope, $scope, localizationService, editorState, listViewPrevalueHelper) { + //Get the prevalue from the correct place + function getPrevalues() { + if (editorState.current.preValues) { + return editorState.current.preValues; + } + else { + return listViewPrevalueHelper.getPrevalues(); + } + } + //Watch the prevalues $scope.$watch(function () { - return _.findWhere(editorState.current.preValues, { key: "includeProperties" }).value; + return _.findWhere(getPrevalues(), { key: "includeProperties" }).value; }, function () { populateFields(); }, true); //Use deep watching, otherwise we won't pick up header changes @@ -15,7 +25,7 @@ function sortByPreValsController($rootScope, $scope, localizationService, editor } // Get list of properties assigned as columns of the list view - var propsPreValue = _.findWhere(editorState.current.preValues, { key: "includeProperties" }); + var propsPreValue = _.findWhere(getPrevalues(), { key: "includeProperties" }); // Populate list of options for the default sort (all the columns plus then node name) $scope.sortByFields = [];