From 06d19f2735a455bdb8fbe2dedccc81f03792feb8 Mon Sep 17 00:00:00 2001 From: James Coxhead Date: Sun, 28 Oct 2018 19:04:00 +0000 Subject: [PATCH] Load relation type edit view --- .../common/resources/relationtype.resource.js | 2 +- .../views/relationtypes/edit.controller.js | 30 +++++++++++++ .../src/views/relationtypes/edit.html | 28 ++++++------ .../Editors/BackOfficeServerVariables.cs | 4 ++ .../Editors/RelationTypeController.cs | 8 ++-- .../Models/ContentEditing/RelationType.cs | 1 + .../ContentEditing/RelationTypeDisplay.cs | 44 +++++++++++++++++++ .../Models/Mapping/RelationMapperProfile.cs | 25 +++++++++++ .../Trees/RelationTypeTreeController.cs | 5 +-- src/Umbraco.Web/Umbraco.Web.csproj | 1 + 10 files changed, 124 insertions(+), 24 deletions(-) create mode 100644 src/Umbraco.Web.UI.Client/src/views/relationtypes/edit.controller.js create mode 100644 src/Umbraco.Web/Models/ContentEditing/RelationTypeDisplay.cs diff --git a/src/Umbraco.Web.UI.Client/src/common/resources/relationtype.resource.js b/src/Umbraco.Web.UI.Client/src/common/resources/relationtype.resource.js index 46df8e2608..81fdbdb838 100644 --- a/src/Umbraco.Web.UI.Client/src/common/resources/relationtype.resource.js +++ b/src/Umbraco.Web.UI.Client/src/common/resources/relationtype.resource.js @@ -17,7 +17,7 @@ function relationTypeResource($q, $http, umbRequestHelper) { return umbRequestHelper.resourcePromise( $http.get( umbRequestHelper.getApiUrl( - "relationTypeBaseUrl", + "relationTypeApiBaseUrl", "GetById", [{ id: id }] ) diff --git a/src/Umbraco.Web.UI.Client/src/views/relationtypes/edit.controller.js b/src/Umbraco.Web.UI.Client/src/views/relationtypes/edit.controller.js new file mode 100644 index 0000000000..37eb1ea6d9 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/views/relationtypes/edit.controller.js @@ -0,0 +1,30 @@ +function RelationTypeEditController($scope, $routeParams, relationTypeResource, editorState, navigationService) { + + var vm = this; + + vm.page = {}; + vm.page.loading = false; + vm.page.saveButtonState = "init"; + vm.page.menu = {} + + if($routeParams.create) { + alert("create"); + } else { + vm.page.loading = true; + + relationTypeResource.getById($routeParams.id) + .then(function(data) { + vm.relation = data; + + editorState.set(vm.relation); + + navigationService.syncTree({ tree: "relationTypes", path: data.path, forceReload: true }).then(function (syncArgs) { + vm.page.menu.currentNode = syncArgs.node; + }); + + vm.page.loading = false; + }); + } +} + +angular.module("umbraco").controller("Umbraco.Editors.RelationTypes.EditController", RelationTypeEditController); diff --git a/src/Umbraco.Web.UI.Client/src/views/relationtypes/edit.html b/src/Umbraco.Web.UI.Client/src/views/relationtypes/edit.html index 55c5ec2d88..3f88c914f4 100644 --- a/src/Umbraco.Web.UI.Client/src/views/relationtypes/edit.html +++ b/src/Umbraco.Web.UI.Client/src/views/relationtypes/edit.html @@ -1,15 +1,13 @@ -
- +
+
- + + name="vm.relation.name" + alias="vm.relation.alias" + hide-description="true" + hide-icon="true"> @@ -17,8 +15,8 @@ -
1234
- 0123-4567-8910-abcd +
{{vm.relation.id}}
+ {{vm.relation.key}}
@@ -26,12 +24,12 @@
@@ -39,12 +37,12 @@ -
Document
+
{{vm.relation.parentObjectTypeName}}
-
Document
+
{{vm.relation.childObjectTypeName}}
diff --git a/src/Umbraco.Web/Editors/BackOfficeServerVariables.cs b/src/Umbraco.Web/Editors/BackOfficeServerVariables.cs index 98114f0664..a05ac5338e 100644 --- a/src/Umbraco.Web/Editors/BackOfficeServerVariables.cs +++ b/src/Umbraco.Web/Editors/BackOfficeServerVariables.cs @@ -299,6 +299,10 @@ namespace Umbraco.Web.Editors { "languageApiBaseUrl", _urlHelper.GetUmbracoApiServiceBaseUrl( controller => controller.GetAllLanguages()) + }, + { + "relationTypeApiBaseUrl", _urlHelper.GetUmbracoApiServiceBaseUrl( + controller => controller.GetById(1)) } } }, diff --git a/src/Umbraco.Web/Editors/RelationTypeController.cs b/src/Umbraco.Web/Editors/RelationTypeController.cs index cfd6c2e56f..2b9242ef31 100644 --- a/src/Umbraco.Web/Editors/RelationTypeController.cs +++ b/src/Umbraco.Web/Editors/RelationTypeController.cs @@ -7,10 +7,10 @@ using System.Threading.Tasks; using System.Web.Http; using AutoMapper; using Umbraco.Core.Models; +using Umbraco.Web.Models.ContentEditing; using Umbraco.Web.Mvc; using Umbraco.Web.WebApi.Filters; using Constants = Umbraco.Core.Constants; -using RelationType = Umbraco.Web.Models.ContentEditing.RelationType; namespace Umbraco.Web.Editors { @@ -26,8 +26,8 @@ namespace Umbraco.Web.Editors /// Gets a relation type by ID. /// /// The relation type ID. - /// Returns the . - public RelationType GetById(int id) + /// Returns the . + public RelationTypeDisplay GetById(int id) { var relationType = Services.RelationService.GetRelationTypeById(id); @@ -36,7 +36,7 @@ namespace Umbraco.Web.Editors throw new HttpResponseException(HttpStatusCode.NotFound); } - return Mapper.Map(relationType); + return Mapper.Map(relationType); } public void PostSave() diff --git a/src/Umbraco.Web/Models/ContentEditing/RelationType.cs b/src/Umbraco.Web/Models/ContentEditing/RelationType.cs index 129376da5c..f52ac507ac 100644 --- a/src/Umbraco.Web/Models/ContentEditing/RelationType.cs +++ b/src/Umbraco.Web/Models/ContentEditing/RelationType.cs @@ -3,6 +3,7 @@ using System.Runtime.Serialization; namespace Umbraco.Web.Models.ContentEditing { + [Obsolete("Use Umbraco.Web.Models.ContentEditing.RelationTypeDisplay instead")] [DataContract(Name = "relationType", Namespace = "")] public class RelationType { diff --git a/src/Umbraco.Web/Models/ContentEditing/RelationTypeDisplay.cs b/src/Umbraco.Web/Models/ContentEditing/RelationTypeDisplay.cs new file mode 100644 index 0000000000..3861e0938d --- /dev/null +++ b/src/Umbraco.Web/Models/ContentEditing/RelationTypeDisplay.cs @@ -0,0 +1,44 @@ +using System; +using System.ComponentModel; +using System.Runtime.Serialization; + +namespace Umbraco.Web.Models.ContentEditing +{ + [DataContract(Name = "relationType", Namespace = "")] + public class RelationTypeDisplay : EntityBasic + { + /// + /// Gets or sets a boolean indicating whether the RelationType is Bidirectional (true) or Parent to Child (false) + /// + [DataMember(Name = "isBidirectional", IsRequired = true)] + public bool IsBidirectional { get; set; } + + /// + /// Gets or sets the Parents object type id + /// + /// Corresponds to the NodeObjectType in the umbracoNode table + [DataMember(Name = "parentObjectType", IsRequired = true)] + public Guid ParentObjectType { get; set; } + + /// + /// Gets or sets the Parent's object type name. + /// + [DataMember(Name = "parentObjectTypeName")] + [ReadOnly(true)] + public string ParentObjectTypeName { get; set; } + + /// + /// Gets or sets the Childs object type id + /// + /// Corresponds to the NodeObjectType in the umbracoNode table + [DataMember(Name = "childObjectType", IsRequired = true)] + public Guid ChildObjectType { get; set; } + + /// + /// Gets or sets the Child's object type name. + /// + [DataMember(Name = "childObjectTypeName")] + [ReadOnly(true)] + public string ChildObjectTypeName { get; set; } + } +} diff --git a/src/Umbraco.Web/Models/Mapping/RelationMapperProfile.cs b/src/Umbraco.Web/Models/Mapping/RelationMapperProfile.cs index 31acf4e5e1..95f4fab054 100644 --- a/src/Umbraco.Web/Models/Mapping/RelationMapperProfile.cs +++ b/src/Umbraco.Web/Models/Mapping/RelationMapperProfile.cs @@ -1,5 +1,7 @@ using AutoMapper; +using Umbraco.Core; using Umbraco.Core.Models; +using Umbraco.Web.Models.ContentEditing; using Relation = Umbraco.Web.Models.ContentEditing.Relation; using RelationType = Umbraco.Web.Models.ContentEditing.RelationType; @@ -9,6 +11,29 @@ namespace Umbraco.Web.Models.Mapping { public RelationMapperProfile() { + // FROM IRelationType to RelationTypeDisplay + CreateMap() + .ForMember(x => x.Icon, expression => expression.Ignore()) + .ForMember(x => x.Trashed, expression => expression.Ignore()) + .ForMember(x => x.Alias, expression => expression.Ignore()) + .ForMember(x => x.Path, expression => expression.Ignore()) + .ForMember(x => x.AdditionalData, expression => expression.Ignore()) + .ForMember(x => x.ChildObjectTypeName, expression => expression.Ignore()) + .ForMember(x => x.ParentObjectTypeName, expression => expression.Ignore()) + .ForMember( + x => x.Udi, + expression => expression.MapFrom( + content => Udi.Create(Constants.UdiEntityType.RelationType, content.Key))) + .AfterMap((src, dest) => + { + // Build up the path + dest.Path = "-1," + src.Id; + + // Set the "friendly" names for the parent and child object types + dest.ParentObjectTypeName = ObjectTypes.GetUmbracoObjectType(src.ParentObjectType).GetFriendlyName(); + dest.ChildObjectTypeName = ObjectTypes.GetUmbracoObjectType(src.ChildObjectType).GetFriendlyName(); + }); + //FROM IRelationType TO RelationType CreateMap(); diff --git a/src/Umbraco.Web/Trees/RelationTypeTreeController.cs b/src/Umbraco.Web/Trees/RelationTypeTreeController.cs index 4930b4dc5e..884b6c5f54 100644 --- a/src/Umbraco.Web/Trees/RelationTypeTreeController.cs +++ b/src/Umbraco.Web/Trees/RelationTypeTreeController.cs @@ -65,10 +65,7 @@ namespace Umbraco.Web.Trees queryStrings, rt.Name, "icon-trafic", - false, - //TODO: Rebuild the macro editor in angular, then we dont need to have this at all (which is just a path to the legacy editor) - "/" + queryStrings.GetValue("application") + "/framed/" + - Uri.EscapeDataString("/umbraco/developer/RelationTypes/EditRelationType.aspx?id=" + rt.Id) + false ))); } return nodes; diff --git a/src/Umbraco.Web/Umbraco.Web.csproj b/src/Umbraco.Web/Umbraco.Web.csproj index e3bdd95eb4..7e51974bc9 100644 --- a/src/Umbraco.Web/Umbraco.Web.csproj +++ b/src/Umbraco.Web/Umbraco.Web.csproj @@ -148,6 +148,7 @@ +