Add support for (non-)browsable activities

This commit is contained in:
Sipke Schoorstra 2020-11-14 22:07:34 +01:00
parent 6bddf50d77
commit da2a395d49
5 changed files with 15 additions and 5 deletions

View file

@ -4,6 +4,6 @@ namespace Elsa.Metadata
{
public static class ActivityDescriberExtensions
{
public static ActivityDescriptor Describe<T>(this IActivityDescriber describer) where T : IActivity => describer.Describe(typeof(T));
public static ActivityDescriptor? Describe<T>(this IActivityDescriber describer) where T : IActivity => describer.Describe(typeof(T));
}
}

View file

@ -4,6 +4,6 @@ namespace Elsa.Metadata
{
public interface IActivityDescriber
{
ActivityDescriptor Describe(Type activityType);
ActivityDescriptor? Describe(Type activityType);
}
}

View file

@ -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
/// <summary>
/// Run arbitrary .NET code from coded workflows.
/// </summary>
[Browsable(false)]
public class Inline : Activity
{
public Inline() => Function = context => new ValueTask<IActivityExecutionResult>(Done());

View file

@ -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<BrowsableAttribute>();
var isBrowsable = browsableAttribute == null || browsableAttribute.Browsable;
if (!isBrowsable)
return null;
var activityAttribute = activityType.GetCustomAttribute<ActivityAttribute>();
var typeName = activityAttribute?.Type ?? activityType.Name;
var displayName =

View file

@ -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<ActivityDescriptor>(descriptors);
return Ok(model);
}
private ActivityDescriptor DescribeActivity(IActivity activity) => _activityDescriber.Describe(activity.GetType());
private ActivityDescriptor? DescribeActivity(IActivity activity) => _activityDescriber.Describe(activity.GetType());
}
}