Files
Caspian.Elsa.Studio/src/framework/Elsa.Studio.Shared/Components/FieldExtension.razor
T
2025-08-20 11:07:36 +03:30

79 lines
2.4 KiB
Plaintext

@using Elsa.Studio.Contracts
@using Elsa.Studio.Enums
@using Elsa.Studio.Models
<style>
.field-container {
transition: border 0.3s ease-in-out;
border-radius: 8px;
padding: 10px;
margin: -10px;
border: 1px solid transparent;
}
.field-container.hovered {
border-color: #ccc
}
.no-padding-stack {
padding-top: 0 !important;
padding-bottom: 0 !important;
}
</style>
@if (hasExtensions)
{
<MudStack Spacing="1" Class=@($"field-container {(isHovered && hasExtensions ? "hovered" : "")}") @onmouseenter="() => isHovered = true" @onmouseleave="() => isHovered = false">
@foreach (var extension in TopExtensions ?? Enumerable.Empty<IUIFieldExtensionHandler>())
{
@extension.DisplayExtension(EditorContext)
}
@ChildContent
@foreach (var extension in BottomExtensions ?? Enumerable.Empty<IUIFieldExtensionHandler>())
{
@extension.DisplayExtension(EditorContext)
}
</MudStack>
}
else
{
@ChildContent
}
@code
{
private bool isHovered = false;
private bool hasExtensions => AllExtensions?.Count != 0;
private List<IUIFieldExtensionHandler>? AllExtensions;
private List<IUIFieldExtensionHandler>? TopExtensions;
private List<IUIFieldExtensionHandler>? BottomExtensions;
/// <summary>
/// The UI Hint component type the extensions should be rendered for.
/// </summary>
[Parameter] public string UIHintComponent { get; set; } = default!;
/// <summary>
/// The editor context.
/// </summary>
[Parameter] public DisplayInputEditorContext EditorContext { get; set; } = default!;
/// <summary>
/// The content wrap with <see cref="IUIFieldExtensionHandler"/> extensions.
/// </summary>
[Parameter] public RenderFragment ChildContent { get; set; } = default!;
[Inject] private IUIFieldExtensionService FieldExtensionService { get; set; }
/// <inheritdoc />
protected override void OnInitialized()
{
AllExtensions = FieldExtensionService.TryGetHandlers(UIHintComponent, EditorContext);
if (AllExtensions is not null)
{
TopExtensions = AllExtensions.Where(p => p.Position == FieldExtensionPosition.Top).ToList();
BottomExtensions = AllExtensions.Where(p => p.Position == FieldExtensionPosition.Bottom).ToList();
}
}
}