diff --git a/src/Umbraco.Core/DependencyInjection/UmbracoBuilder.Collections.cs b/src/Umbraco.Core/DependencyInjection/UmbracoBuilder.Collections.cs index 18375410c913..7663b7c81c1d 100644 --- a/src/Umbraco.Core/DependencyInjection/UmbracoBuilder.Collections.cs +++ b/src/Umbraco.Core/DependencyInjection/UmbracoBuilder.Collections.cs @@ -54,6 +54,7 @@ internal static void AddAllCoreCollectionBuilders(this IUmbracoBuilder builder) builder.DynamicRootOriginFinders() .Append() .Append() + .Append() .Append() .Append() .Append(); diff --git a/src/Umbraco.Core/DynamicRoot/Origin/ParentOrSelfDynamicRootOriginFinder.cs b/src/Umbraco.Core/DynamicRoot/Origin/ParentOrSelfDynamicRootOriginFinder.cs new file mode 100644 index 000000000000..02371f5a0783 --- /dev/null +++ b/src/Umbraco.Core/DynamicRoot/Origin/ParentOrSelfDynamicRootOriginFinder.cs @@ -0,0 +1,23 @@ +using Umbraco.Cms.Core.Services; + +namespace Umbraco.Cms.Core.DynamicRoot.Origin; + +public class ParentOrSelfDynamicRootOriginFinder : ParentDynamicRootOriginFinder +{ + public ParentOrSelfDynamicRootOriginFinder(IEntityService entityService) : base(entityService) + { + } + + protected override string SupportedOriginType { get; set; } = "ParentOrSelf"; + + public override Guid? FindOriginKey(DynamicRootNodeQuery query) + { + var baseResult = base.FindOriginKey(query); + if(baseResult is not null || query.Context.CurrentKey is null) + { + return baseResult; + } + query.OriginKey = query.Context.CurrentKey; + return base.FindOriginKey(query); + } +} diff --git a/src/Umbraco.Core/DynamicRoot/Origin/RootDynamicRootOriginFinder.cs b/src/Umbraco.Core/DynamicRoot/Origin/RootDynamicRootOriginFinder.cs index 44766fb2dc3f..9017b93ebca5 100644 --- a/src/Umbraco.Core/DynamicRoot/Origin/RootDynamicRootOriginFinder.cs +++ b/src/Umbraco.Core/DynamicRoot/Origin/RootDynamicRootOriginFinder.cs @@ -28,6 +28,10 @@ public RootDynamicRootOriginFinder(IEntityService entityService) } var entity = _entityService.Get(query.Context.ParentKey); + if (entity is null && query.Context.CurrentKey.HasValue) + { + entity = _entityService.Get(query.Context.CurrentKey.Value); + } if (entity is null || _allowedObjectTypes.Contains(entity.NodeObjectType) is false) { diff --git a/src/Umbraco.Core/DynamicRoot/Origin/SiteDynamicRootOriginFinder.cs b/src/Umbraco.Core/DynamicRoot/Origin/SiteDynamicRootOriginFinder.cs index d1e515de5921..ee1ac6832b10 100644 --- a/src/Umbraco.Core/DynamicRoot/Origin/SiteDynamicRootOriginFinder.cs +++ b/src/Umbraco.Core/DynamicRoot/Origin/SiteDynamicRootOriginFinder.cs @@ -20,12 +20,12 @@ public SiteDynamicRootOriginFinder(IEntityService entityService, IDomainService public override Guid? FindOriginKey(DynamicRootNodeQuery query) { - if (query.OriginAlias != SupportedOriginType || query.Context.CurrentKey.HasValue is false) + if (query.OriginAlias != SupportedOriginType) { return null; } - IEntitySlim? entity = _entityService.Get(query.Context.CurrentKey.Value); + IEntitySlim? entity = query.Context.CurrentKey.HasValue is false ? _entityService.Get(query.Context.ParentKey) : _entityService.Get(query.Context.CurrentKey.Value); if (entity is null || entity.NodeObjectType != Constants.ObjectTypes.Document) { return null;