From 6979268e66043fbc773e4aa872445e751066a5ee Mon Sep 17 00:00:00 2001 From: Sipke Schoorstra Date: Thu, 25 Nov 2021 01:14:35 +0100 Subject: [PATCH] Update Get.cs --- .../Designer/RuntimeSelectListItems/Get.cs | 27 ++++++++++++++----- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/src/server/Elsa.Server.Api/Endpoints/Designer/RuntimeSelectListItems/Get.cs b/src/server/Elsa.Server.Api/Endpoints/Designer/RuntimeSelectListItems/Get.cs index 452d3891b..2ea2211ad 100644 --- a/src/server/Elsa.Server.Api/Endpoints/Designer/RuntimeSelectListItems/Get.cs +++ b/src/server/Elsa.Server.Api/Endpoints/Designer/RuntimeSelectListItems/Get.cs @@ -35,23 +35,36 @@ namespace Elsa.Server.Api.Endpoints.Designer.RuntimeSelectListItems OperationId = "Designer.RuntimeSelectListItems.Get", Tags = new[] { "Designer.RuntimeSelectListItems" }) ] - public async Task Handle([FromBody]RuntimeSelectListItemsContextHolder model, CancellationToken cancellationToken = default) + public async Task Handle([FromBody] RuntimeSelectListContextHolder model, CancellationToken cancellationToken = default) { var type = Type.GetType(model.ProviderTypeName)!; - var provider = (IRuntimeSelectListItemsProvider) ActivatorUtilities.GetServiceOrCreateInstance(_serviceProvider, type); - var context = model?.Context; - var items = (await provider.GetItemsAsync(context, cancellationToken)).ToList(); + var provider = ActivatorUtilities.GetServiceOrCreateInstance(_serviceProvider, type); + var context = model.Context; var serializerSettings = _contentSerializer.GetSettings(); + var selectList = await GetSelectList(provider, context, cancellationToken); - return Json(items, serializerSettings); + return Json(selectList, serializerSettings); + } + + private async Task GetSelectList(object provider, object? context, CancellationToken cancellationToken) + { + if (provider is IRuntimeSelectListProvider newProvider) + return await newProvider.GetSelectListAsync(context, cancellationToken); + + var items = await ((IRuntimeSelectListItemsProvider)provider).GetItemsAsync(context, cancellationToken); + + return new SelectList + { + Items = items.ToList() + }; } } [JsonObject(ItemTypeNameHandling = TypeNameHandling.All)] - public record RuntimeSelectListItemsContextHolder + public class RuntimeSelectListContextHolder { public string ProviderTypeName { get; set; } = default!; - + public object? Context { get; set; } }; } \ No newline at end of file