using System;
using System.Linq;
using Elsa.Attributes;
using Elsa.Design;
using Elsa.Services;
using Elsa.Services.Models;
namespace Elsa.Activities.UserTask.Activities
{
///
/// Stores a set of possible user actions and halts the workflow until one of the actions has been performed.
///
[ActivityDefinition(
Category = "User Tasks",
Description = "Triggers when a user action is received."
)]
public class UserTask : Activity
{
[ActivityProperty(
Type = ActivityPropertyTypes.List,
Hint = "Enter a comma-separated list of available actions"
)]
public string[] Actions
{
get => GetState(() => new string[0]);
set => SetState(value);
}
protected override bool OnCanExecute(ActivityExecutionContext context)
{
var userAction = GetUserAction(context);
return Actions.Contains(userAction, StringComparer.OrdinalIgnoreCase);
}
protected override IActivityExecutionResult OnExecute(ActivityExecutionContext context)
{
return Suspend(true);
}
protected override IActivityExecutionResult OnResume(ActivityExecutionContext context)
{
var userAction = GetUserAction(context);
return Outcome(userAction);
}
private string GetUserAction(ActivityExecutionContext context) => context.Input?.GetValue();
}
}