Move provider capability icon setup out of Razor markup

This commit is contained in:
Thorsten Sommer 2026-07-04 15:55:15 +02:00
parent 3cd4df39bd
commit 4286663454
Signed by untrusted user who does not match committer: tsommer
GPG Key ID: 371BBA77A02C0108
2 changed files with 15 additions and 10 deletions

View File

@ -1,18 +1,15 @@
@using AIStudio.Settings @using AIStudio.Settings
@inherits MSGComponentBase @inherits MSGComponentBase
<MudSelect T="Provider" Value="@this.ProviderSettings" ValueChanged="@this.SelectionChanged" Validation="@this.ValidateProvider" Adornment="Adornment.Start" AdornmentIcon="@Icons.Material.Filled.Apps" Margin="Margin.Dense" Label="@T("Provider")" Class="mb-3 rounded-lg" OuterClass="flex-grow-0" Variant="Variant.Outlined" Disabled="@this.Disabled"> <MudSelect T="Provider" Value="@this.ProviderSettings" ValueChanged="@this.SelectionChanged" Validation="@this.ValidateProvider" Adornment="Adornment.Start" AdornmentIcon="@Icons.Material.Filled.Apps" Margin="Margin.Dense" Label="@T("Provider")" Class="mb-3 rounded-lg" OuterClass="flex-grow-0" Variant="Variant.Outlined" Disabled="@this.Disabled">
@foreach (var provider in this.GetAvailableProviders()) @foreach (var providerItem in this.GetAvailableProviderSelectionItems())
{ {
<MudSelectItem Value="@provider"> <MudSelectItem Value="@providerItem.Provider">
<MudStack Row="true" AlignItems="AlignItems.Center" Justify="Justify.SpaceBetween" Class="w-100" Wrap="Wrap.NoWrap"> <MudStack Row="true" AlignItems="AlignItems.Center" Justify="Justify.SpaceBetween" Class="w-100" Wrap="Wrap.NoWrap">
<MudText Class="me-2">@provider</MudText> <MudText Class="me-2">@providerItem.Provider</MudText>
@{ @if (providerItem.CapabilityIcons.Count > 0)
var capabilityIcons = this.GetCapabilityIcons(provider);
}
@if (capabilityIcons.Count > 0)
{ {
<MudStack Row="true" AlignItems="AlignItems.Center" Spacing="1" Wrap="Wrap.NoWrap" Class="flex-grow-0"> <MudStack Row="true" AlignItems="AlignItems.Center" Spacing="1" Wrap="Wrap.NoWrap" Class="flex-grow-0">
@foreach (var capabilityIcon in capabilityIcons) @foreach (var capabilityIcon in providerItem.CapabilityIcons)
{ {
<MudTooltip Text="@capabilityIcon.Tooltip"> <MudTooltip Text="@capabilityIcon.Tooltip">
<MudIcon Icon="@capabilityIcon.Icon" Size="Size.Small" Color="Color.Default" /> <MudIcon Icon="@capabilityIcon.Icon" Size="Size.Small" Color="Color.Default" />
@ -23,4 +20,4 @@
</MudStack> </MudStack>
</MudSelectItem> </MudSelectItem>
} }
</MudSelect> </MudSelect>

View File

@ -49,6 +49,12 @@ public partial class ProviderSelection : MSGComponentBase
await this.ProviderSettingsChanged.InvokeAsync(provider); await this.ProviderSettingsChanged.InvokeAsync(provider);
} }
private IEnumerable<ProviderSelectionItem> GetAvailableProviderSelectionItems()
{
foreach (var provider in this.GetAvailableProviders())
yield return new(provider, this.GetCapabilityIcons(provider));
}
private IReadOnlyList<CapabilityIcon> GetCapabilityIcons(AIStudio.Settings.Provider provider) private IReadOnlyList<CapabilityIcon> GetCapabilityIcons(AIStudio.Settings.Provider provider)
{ {
var capabilities = provider.GetModelCapabilities(); var capabilities = provider.GetModelCapabilities();
@ -113,4 +119,6 @@ public partial class ProviderSelection : MSGComponentBase
#endregion #endregion
private readonly record struct CapabilityIcon(string Icon, string Tooltip); private readonly record struct CapabilityIcon(string Icon, string Tooltip);
}
private readonly record struct ProviderSelectionItem(AIStudio.Settings.Provider Provider, IReadOnlyList<CapabilityIcon> CapabilityIcons);
}