mirror of
https://github.com/MindWorkAI/AI-Studio.git
synced 2026-09-29 02:23:38 +00:00
108 lines
3.3 KiB
C#
108 lines
3.3 KiB
C#
using AIStudio.Dialogs.Settings;
|
|
using AIStudio.Settings;
|
|
using AIStudio.Tools.PluginSystem;
|
|
using Microsoft.AspNetCore.Components;
|
|
|
|
using DialogOptions = AIStudio.Dialogs.DialogOptions;
|
|
|
|
namespace AIStudio.Components;
|
|
|
|
public partial class ProfileSelection : MSGComponentBase
|
|
{
|
|
private static string TB(string fallbackEN) => I18N.I.T(fallbackEN, typeof(ProfileSelection).Namespace, nameof(ProfileSelection));
|
|
|
|
[Parameter]
|
|
public HashSet<string> SelectedProfileIds { get; set; } = [];
|
|
|
|
[Parameter]
|
|
public EventCallback<HashSet<string>> SelectedProfileIdsChanged { get; set; }
|
|
|
|
[Parameter]
|
|
public string MarginLeft { get; set; } = "ml-3";
|
|
|
|
[Parameter]
|
|
public string MarginRight { get; set; } = string.Empty;
|
|
|
|
[Parameter]
|
|
public bool Disabled { get; set; }
|
|
|
|
[Parameter]
|
|
public string DisabledText { get; set; } = string.Empty;
|
|
|
|
[Inject]
|
|
private IDialogService DialogService { get; init; } = null!;
|
|
|
|
private readonly string defaultToolTipText = TB("You can select your profiles here");
|
|
|
|
private IReadOnlyList<Profile> SelectedProfiles => this.SettingsManager.ResolveProfiles(this.SelectedProfileIds);
|
|
|
|
private string SelectionLabel => this.SelectedProfiles.Count switch
|
|
{
|
|
0 => string.Empty,
|
|
1 => this.SelectedProfiles[0].GetSafeName(),
|
|
_ => string.Format(TB("{0} profiles"), this.SelectedProfiles.Count),
|
|
};
|
|
|
|
private string ToolTipText => this.Disabled
|
|
? this.DisabledText
|
|
: this.SelectedProfiles.Count > 1
|
|
? string.Join(", ", this.SelectedProfiles.Select(profile => profile.GetSafeName()))
|
|
: this.defaultToolTipText;
|
|
|
|
private string MarginClass => $"{this.MarginLeft} {this.MarginRight}";
|
|
|
|
#region Overrides of ComponentBase
|
|
|
|
protected override async Task OnInitializedAsync()
|
|
{
|
|
this.ApplyFilters([], [ Event.CONFIGURATION_CHANGED ]);
|
|
await base.OnInitializedAsync();
|
|
}
|
|
|
|
#endregion
|
|
|
|
private string ProfileIcon(Profile profile)
|
|
{
|
|
if (profile.IsEnterpriseConfiguration)
|
|
return Icons.Material.Filled.Business;
|
|
|
|
return Icons.Material.Filled.Person4;
|
|
}
|
|
|
|
private async Task SelectionChanged(Profile profile, bool selected)
|
|
{
|
|
var updatedSelection = new HashSet<string>(this.SelectedProfileIds, StringComparer.OrdinalIgnoreCase);
|
|
if (selected)
|
|
updatedSelection.Add(profile.Id);
|
|
else
|
|
updatedSelection.Remove(profile.Id);
|
|
|
|
this.SelectedProfileIds = updatedSelection;
|
|
await this.SelectedProfileIdsChanged.InvokeAsync(updatedSelection);
|
|
}
|
|
|
|
private async Task ClearSelection()
|
|
{
|
|
this.SelectedProfileIds = [];
|
|
await this.SelectedProfileIdsChanged.InvokeAsync([]);
|
|
}
|
|
|
|
private async Task OpenSettingsDialog()
|
|
{
|
|
var dialogParameters = new DialogParameters();
|
|
await this.DialogService.ShowAsync<SettingsDialogProfiles>(T("Open Profile Options"), dialogParameters, DialogOptions.FULLSCREEN);
|
|
}
|
|
|
|
#region Overrides of MSGComponentBase
|
|
|
|
protected override Task ProcessIncomingMessage<T>(ComponentBase? sendingComponent, Event triggeredEvent, T? data) where T : default
|
|
{
|
|
if (triggeredEvent is Event.CONFIGURATION_CHANGED or Event.PLUGINS_RELOADED)
|
|
this.StateHasChanged();
|
|
|
|
return Task.CompletedTask;
|
|
}
|
|
|
|
#endregion
|
|
}
|