Update API client
This commit is contained in:
parent
3a2b7f40bc
commit
c07e561ad3
|
|
@ -0,0 +1,24 @@
|
|||
using System.Text.Json;
|
||||
using System.Text.Json.Serialization;
|
||||
using Elsa.Api.Client.Shared.Models;
|
||||
|
||||
namespace Elsa.Api.Client.Converters;
|
||||
|
||||
/// <summary>
|
||||
/// A JSON converter that serializes <see cref="VersionOptions"/>.
|
||||
/// </summary>
|
||||
public class VersionOptionsJsonConverter : JsonConverter<VersionOptions>
|
||||
{
|
||||
/// <inheritdoc />
|
||||
public override VersionOptions Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
|
||||
{
|
||||
var textValue = reader.GetString();
|
||||
return string.IsNullOrWhiteSpace(textValue) ? VersionOptions.Published : VersionOptions.FromString(textValue);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override void Write(Utf8JsonWriter writer, VersionOptions value, JsonSerializerOptions options)
|
||||
{
|
||||
writer.WriteStringValue(value.ToString());
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
using System.ComponentModel;
|
||||
using System.Globalization;
|
||||
using Elsa.Api.Client.Shared.Models;
|
||||
|
||||
namespace Elsa.Api.Client.Converters;
|
||||
|
||||
/// <summary>
|
||||
/// A type converter that converts <see cref="VersionOptions"/> to and from strings.
|
||||
/// </summary>
|
||||
public class VersionOptionsTypeConverter : TypeConverter
|
||||
{
|
||||
/// <inheritdoc />
|
||||
public override bool CanConvertFrom(ITypeDescriptorContext? context, Type sourceType) => sourceType == typeof(string) || base.CanConvertFrom(context, sourceType);
|
||||
|
||||
/// <inheritdoc />
|
||||
public override object ConvertFrom(ITypeDescriptorContext? context, CultureInfo? culture, object value) => value is string text ? VersionOptions.FromString(text) : base.ConvertFrom(context, culture, value)!;
|
||||
}
|
||||
|
|
@ -36,7 +36,8 @@ public static class DependencyInjectionExtensions
|
|||
/// <typeparam name="T">The API type.</typeparam>
|
||||
public static void AddElsaApiClient<T>(this IServiceCollection services, RefitSettings settings) where T : class
|
||||
{
|
||||
services.AddRefitClient<T>(settings).ConfigureHttpClient(ConfigureElsaApiHttpClient);
|
||||
services.AddRefitClient<T>(settings)
|
||||
.ConfigureHttpClient(ConfigureElsaApiHttpClient);
|
||||
}
|
||||
|
||||
private static void ConfigureElsaApiHttpClient(IServiceProvider serviceProvider, HttpClient httpClient)
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
using Elsa.Api.Client.Resources.WorkflowDefinitions.Models;
|
||||
using Elsa.Api.Client.Shared.Models;
|
||||
using Refit;
|
||||
|
||||
namespace Elsa.Api.Client.Resources.WorkflowDefinitions.Contracts;
|
||||
|
|
@ -12,10 +13,11 @@ public interface IWorkflowDefinitionsApi
|
|||
/// Lists workflow definitions.
|
||||
/// </summary>
|
||||
/// <param name="request">The request containing options for listing workflow definitions.</param>
|
||||
/// <param name="versionOptions">The version options.</param>
|
||||
/// <param name="cancellationToken">The cancellation token.</param>
|
||||
/// <returns>The response containing the workflow definitions.</returns>
|
||||
[Get("/workflow-definitions")]
|
||||
Task<ListWorkflowDefinitionsResponse> ListAsync(ListWorkflowDefinitionsRequest request, CancellationToken cancellationToken = default);
|
||||
[Get("/workflow-definitions?versionOptions={VersionOptions}")]
|
||||
Task<ListWorkflowDefinitionsResponse> ListAsync([Query]ListWorkflowDefinitionsRequest request, VersionOptions? versionOptions = default, CancellationToken cancellationToken = default);
|
||||
|
||||
/// <summary>
|
||||
/// Deletes a workflow definition.
|
||||
|
|
|
|||
|
|
@ -19,17 +19,19 @@ public class ListWorkflowDefinitionsRequest
|
|||
public int? PageSize { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// The version options.
|
||||
/// The IDs of the workflow definitions to filter by.
|
||||
/// </summary>
|
||||
public VersionOptions? Version { get; set; }
|
||||
|
||||
public ICollection<string>? DefinitionIds { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// The name of the workflow materializer to filter by.
|
||||
/// </summary>
|
||||
[AliasAs("materializer")] public string? MaterializerName { get; set; }
|
||||
|
||||
[AliasAs("materializer")]
|
||||
public string? MaterializerName { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// The labels to filter by.
|
||||
/// </summary>
|
||||
[AliasAs("label")] public string[]? Labels { get; set; }
|
||||
[AliasAs("label")]
|
||||
public string[]? Labels { get; set; }
|
||||
}
|
||||
|
|
@ -1,3 +1,6 @@
|
|||
using System.ComponentModel;
|
||||
using System.Text.Json.Serialization;
|
||||
using Elsa.Api.Client.Converters;
|
||||
using JetBrains.Annotations;
|
||||
|
||||
namespace Elsa.Api.Client.Shared.Models;
|
||||
|
|
@ -6,6 +9,8 @@ namespace Elsa.Api.Client.Shared.Models;
|
|||
/// Represents the version to get.
|
||||
/// </summary>
|
||||
[PublicAPI]
|
||||
[TypeConverter(typeof(VersionOptionsTypeConverter))]
|
||||
[JsonConverter(typeof(VersionOptionsJsonConverter))]
|
||||
public struct VersionOptions
|
||||
{
|
||||
/// <summary>
|
||||
|
|
@ -58,6 +63,12 @@ public struct VersionOptions
|
|||
_ => SpecificVersion(int.Parse(value))
|
||||
};
|
||||
|
||||
/// <summary>
|
||||
/// Tries to parse a string into a <see cref="VersionOptions"/>.
|
||||
/// </summary>
|
||||
/// <param name="value">The value to parse.</param>
|
||||
/// <param name="versionOptions">The parsed value.</param>
|
||||
/// <returns><c>true</c> if the value was parsed successfully, otherwise <c>false</c>.</returns>
|
||||
public static bool TryParse(string value, out VersionOptions versionOptions)
|
||||
{
|
||||
versionOptions = FromString(value);
|
||||
|
|
|
|||
|
|
@ -44,7 +44,7 @@ export class WorkflowDefinitionBrowser {
|
|||
@State() private selectAllChecked: boolean;
|
||||
|
||||
async componentWillLoad() {
|
||||
var persistedRequest = getRequest()
|
||||
const persistedRequest = getRequest();
|
||||
|
||||
if (persistedRequest) {
|
||||
this.currentPage = persistedRequest.page
|
||||
|
|
@ -83,7 +83,7 @@ export class WorkflowDefinitionBrowser {
|
|||
}
|
||||
|
||||
private onDeleteManyClick = async () => {
|
||||
if(this.selectedWorkflowDefinitionIds.length == 0)
|
||||
if(this.selectedWorkflowDefinitionIds.length == 0)
|
||||
return;
|
||||
|
||||
this.modalDialogService.show(
|
||||
|
|
@ -99,7 +99,7 @@ export class WorkflowDefinitionBrowser {
|
|||
};
|
||||
|
||||
private onPublishManyClick = async () => {
|
||||
if(this.selectedWorkflowDefinitionIds.length == 0)
|
||||
if(this.selectedWorkflowDefinitionIds.length == 0)
|
||||
return;
|
||||
|
||||
this.modalDialogService.show(
|
||||
|
|
@ -114,9 +114,9 @@ export class WorkflowDefinitionBrowser {
|
|||
};
|
||||
|
||||
private onUnpublishManyClick = async () => {
|
||||
if(this.selectedWorkflowDefinitionIds.length == 0)
|
||||
if(this.selectedWorkflowDefinitionIds.length == 0)
|
||||
return;
|
||||
|
||||
|
||||
this.modalDialogService.show(
|
||||
() => DefaultContents.Warning("Are you sure you want to unpublish selected workflow definitions?"),
|
||||
{
|
||||
|
|
@ -138,7 +138,7 @@ export class WorkflowDefinitionBrowser {
|
|||
// TODO: Load only json-based workflow definitions for now.
|
||||
// Later, also allow CLR-based workflows to be "edited" (publish / unpublish / position activities / set variables, etc.)
|
||||
const materializerName = 'Json';
|
||||
|
||||
|
||||
var request: ListWorkflowDefinitionsRequest = {
|
||||
materializerName,
|
||||
page: this.currentPage,
|
||||
|
|
|
|||
|
|
@ -45,15 +45,14 @@ internal class List : ElsaEndpoint<Request, Response>
|
|||
|
||||
private async Task<Page<WorkflowDefinitionSummary>> FindAsync(Request request, WorkflowDefinitionFilter filter, PageArgs pageArgs, CancellationToken cancellationToken)
|
||||
{
|
||||
request.OrderBy = request.OrderBy ?? OrderByWfDefinition.Created;
|
||||
request.OrderBy ??= OrderByWfDefinition.Created;
|
||||
|
||||
var direction = request.OrderBy == OrderByWfDefinition.Name ? (request.OrderDirection ?? OrderDirection.Ascending) : (request.OrderDirection ?? OrderDirection.Descending);
|
||||
|
||||
switch (request.OrderBy)
|
||||
{
|
||||
default:
|
||||
case OrderByWfDefinition.Created:
|
||||
{
|
||||
{
|
||||
var order = new WorkflowDefinitionOrder<DateTimeOffset>
|
||||
{
|
||||
KeySelector = p => p.CreatedAt,
|
||||
|
|
@ -66,7 +65,7 @@ internal class List : ElsaEndpoint<Request, Response>
|
|||
{
|
||||
var order = new WorkflowDefinitionOrder<string>
|
||||
{
|
||||
KeySelector = p => p.Name,
|
||||
KeySelector = p => p.Name ?? string.Empty,
|
||||
Direction = direction
|
||||
};
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue