diff --git a/src/core/Elsa.Abstractions/Metadata/ActivityDescriberExtensions.cs b/src/core/Elsa.Abstractions/Metadata/ActivityDescriberExtensions.cs index 538cab79f..15144e7cb 100644 --- a/src/core/Elsa.Abstractions/Metadata/ActivityDescriberExtensions.cs +++ b/src/core/Elsa.Abstractions/Metadata/ActivityDescriberExtensions.cs @@ -4,6 +4,6 @@ namespace Elsa.Metadata { public static class ActivityDescriberExtensions { - public static ActivityDescriptor Describe(this IActivityDescriber describer) where T : IActivity => describer.Describe(typeof(T)); + public static ActivityDescriptor? Describe(this IActivityDescriber describer) where T : IActivity => describer.Describe(typeof(T)); } } \ No newline at end of file diff --git a/src/core/Elsa.Abstractions/Metadata/IActivityDescriber.cs b/src/core/Elsa.Abstractions/Metadata/IActivityDescriber.cs index 3e1b78ff9..472371dc2 100644 --- a/src/core/Elsa.Abstractions/Metadata/IActivityDescriber.cs +++ b/src/core/Elsa.Abstractions/Metadata/IActivityDescriber.cs @@ -4,6 +4,6 @@ namespace Elsa.Metadata { public interface IActivityDescriber { - ActivityDescriptor Describe(Type activityType); + ActivityDescriptor? Describe(Type activityType); } } \ No newline at end of file diff --git a/src/core/Elsa.Core/Activities/Primitives/Inline.cs b/src/core/Elsa.Core/Activities/Primitives/Inline.cs index eb7892368..5b2faf97d 100644 --- a/src/core/Elsa.Core/Activities/Primitives/Inline.cs +++ b/src/core/Elsa.Core/Activities/Primitives/Inline.cs @@ -1,4 +1,5 @@ using System; +using System.ComponentModel; using System.Threading; using System.Threading.Tasks; using Elsa.ActivityResults; @@ -11,6 +12,7 @@ namespace Elsa.Activities.Primitives /// /// Run arbitrary .NET code from coded workflows. /// + [Browsable(false)] public class Inline : Activity { public Inline() => Function = context => new ValueTask(Done()); diff --git a/src/core/Elsa.Core/Metadata/ActivityDescriber.cs b/src/core/Elsa.Core/Metadata/ActivityDescriber.cs index 1a8267f65..a19cc546b 100644 --- a/src/core/Elsa.Core/Metadata/ActivityDescriber.cs +++ b/src/core/Elsa.Core/Metadata/ActivityDescriber.cs @@ -1,6 +1,7 @@ using System; using System.Collections; using System.Collections.Generic; +using System.ComponentModel; using System.Linq; using System.Reflection; using Elsa.Attributes; @@ -19,9 +20,16 @@ namespace Elsa.Metadata _optionsProviders = optionsProviders; } - public ActivityDescriptor Describe(Type activityType) + public ActivityDescriptor? Describe(Type activityType) { + var browsableAttribute = activityType.GetCustomAttribute(); + var isBrowsable = browsableAttribute == null || browsableAttribute.Browsable; + + if (!isBrowsable) + return null; + var activityAttribute = activityType.GetCustomAttribute(); + var typeName = activityAttribute?.Type ?? activityType.Name; var displayName = diff --git a/src/server/Elsa.Server.Api/Endpoints/Activities/List.cs b/src/server/Elsa.Server.Api/Endpoints/Activities/List.cs index bd2a050c2..f8c3fc7c3 100644 --- a/src/server/Elsa.Server.Api/Endpoints/Activities/List.cs +++ b/src/server/Elsa.Server.Api/Endpoints/Activities/List.cs @@ -33,11 +33,11 @@ namespace Elsa.Server.Api.Endpoints.Activities ] public IActionResult Handle() { - var descriptors = _activities.Select(DescribeActivity).ToList(); + var descriptors = _activities.Select(DescribeActivity).Where(x => x != null).Select(x => x!).ToList(); var model = new Models.List(descriptors); return Ok(model); } - private ActivityDescriptor DescribeActivity(IActivity activity) => _activityDescriber.Describe(activity.GetType()); + private ActivityDescriptor? DescribeActivity(IActivity activity) => _activityDescriber.Describe(activity.GetType()); } } \ No newline at end of file