From cc75df4a1560f2f485c42e88229c4464971dc6ea Mon Sep 17 00:00:00 2001 From: Thorsten Sommer Date: Fri, 19 Apr 2024 21:25:44 +0200 Subject: [PATCH] Added settings & settings manager --- .../Components/Layout/MainLayout.razor.cs | 1 + .../Components/Pages/Settings.razor | 46 +++++++++++++++++++ .../Components/Pages/Settings.razor.cs | 43 +++++++++++++++++ app/MindWork AI Studio/Settings/Data.cs | 8 ++++ app/MindWork AI Studio/Settings/Provider.cs | 5 ++ .../Settings/ProviderDialog.razor | 46 +++++++++++++++++++ .../Settings/ProviderDialog.razor.cs | 46 +++++++++++++++++++ app/MindWork AI Studio/Settings/Version.cs | 7 +++ 8 files changed, 202 insertions(+) create mode 100644 app/MindWork AI Studio/Components/Pages/Settings.razor create mode 100644 app/MindWork AI Studio/Components/Pages/Settings.razor.cs create mode 100644 app/MindWork AI Studio/Settings/Data.cs create mode 100644 app/MindWork AI Studio/Settings/Provider.cs create mode 100644 app/MindWork AI Studio/Settings/ProviderDialog.razor create mode 100644 app/MindWork AI Studio/Settings/ProviderDialog.razor.cs create mode 100644 app/MindWork AI Studio/Settings/Version.cs diff --git a/app/MindWork AI Studio/Components/Layout/MainLayout.razor.cs b/app/MindWork AI Studio/Components/Layout/MainLayout.razor.cs index e79913f..67050cc 100644 --- a/app/MindWork AI Studio/Components/Layout/MainLayout.razor.cs +++ b/app/MindWork AI Studio/Components/Layout/MainLayout.razor.cs @@ -1,3 +1,4 @@ +using AIStudio.Settings; using Microsoft.AspNetCore.Components; using Microsoft.JSInterop; diff --git a/app/MindWork AI Studio/Components/Pages/Settings.razor b/app/MindWork AI Studio/Components/Pages/Settings.razor new file mode 100644 index 0000000..a8801e3 --- /dev/null +++ b/app/MindWork AI Studio/Components/Pages/Settings.razor @@ -0,0 +1,46 @@ +@page "/settings" + +Settings + + + Configured Providers + + + + + + + + + # + Provider + Name + Actions + + + + @context.UsedProvider + @context.InstanceName + + + Edit + + + Delete + + + + + + @if(this.Providers.Count == 0) + { + No providers configured yet. + } + + + Add Provider + + \ No newline at end of file diff --git a/app/MindWork AI Studio/Components/Pages/Settings.razor.cs b/app/MindWork AI Studio/Components/Pages/Settings.razor.cs new file mode 100644 index 0000000..bea0b94 --- /dev/null +++ b/app/MindWork AI Studio/Components/Pages/Settings.razor.cs @@ -0,0 +1,43 @@ +using AIStudio.Settings; +using Microsoft.AspNetCore.Components; + +using MudBlazor; + +// ReSharper disable ClassNeverInstantiated.Global + +namespace AIStudio.Components.Pages; + +public partial class Settings : ComponentBase +{ + [Inject] + public SettingsManager SettingsManager { get; init; } = null!; + + [Inject] + public IDialogService DialogService { get; init; } = null!; + + private List Providers { get; set; } = new(); + + #region Overrides of ComponentBase + + protected override async Task OnInitializedAsync() + { + var settings = await this.SettingsManager.LoadSettings(); + this.Providers = settings.Providers; + + await base.OnInitializedAsync(); + } + + #endregion + + private async Task AddProvider() + { + var dialogOptions = new DialogOptions { CloseOnEscapeKey = true, FullWidth = true, MaxWidth = MaxWidth.Medium }; + var dialogReference = await this.DialogService.ShowAsync("Add Provider", dialogOptions); + var dialogResult = await dialogReference.Result; + if (dialogResult.Canceled) + return; + + var addedProvider = (AIStudio.Settings.Provider)dialogResult.Data; + this.Providers.Add(addedProvider); + } +} \ No newline at end of file diff --git a/app/MindWork AI Studio/Settings/Data.cs b/app/MindWork AI Studio/Settings/Data.cs new file mode 100644 index 0000000..16c1ffa --- /dev/null +++ b/app/MindWork AI Studio/Settings/Data.cs @@ -0,0 +1,8 @@ +namespace AIStudio.Settings; + +public sealed class Data +{ + public Version Version { get; init; } + + public List Providers { get; init; } = new(); +} \ No newline at end of file diff --git a/app/MindWork AI Studio/Settings/Provider.cs b/app/MindWork AI Studio/Settings/Provider.cs new file mode 100644 index 0000000..eb7fdc8 --- /dev/null +++ b/app/MindWork AI Studio/Settings/Provider.cs @@ -0,0 +1,5 @@ +using AIStudio.Provider; + +namespace AIStudio.Settings; + +public readonly record struct Provider(string Id, string InstanceName, Providers UsedProvider); \ No newline at end of file diff --git a/app/MindWork AI Studio/Settings/ProviderDialog.razor b/app/MindWork AI Studio/Settings/ProviderDialog.razor new file mode 100644 index 0000000..98ad4d1 --- /dev/null +++ b/app/MindWork AI Studio/Settings/ProviderDialog.razor @@ -0,0 +1,46 @@ +@using AIStudio.Provider +@using MudBlazor + + + + + + + @* ReSharper disable once CSharpWarnings::CS8974 *@ + + @foreach (Providers provider in Enum.GetValues(typeof(Providers))) + { + @provider + } + + + + @if (this.dataIssues.Any()) + { + + Issues + + @foreach (var issue in this.dataIssues) + { + + @issue + + } + + + } + + + Cancel + Add + + \ No newline at end of file diff --git a/app/MindWork AI Studio/Settings/ProviderDialog.razor.cs b/app/MindWork AI Studio/Settings/ProviderDialog.razor.cs new file mode 100644 index 0000000..319e85c --- /dev/null +++ b/app/MindWork AI Studio/Settings/ProviderDialog.razor.cs @@ -0,0 +1,46 @@ +using AIStudio.Provider; + +using Microsoft.AspNetCore.Components; + +using MudBlazor; + +namespace AIStudio.Settings; + +public partial class ProviderDialog : ComponentBase +{ + [CascadingParameter] + private MudDialogInstance MudDialog { get; set; } = null!; + + private bool dataIsValid; + private string[] dataIssues = []; + private string dataInstanceName = string.Empty; + private Providers dataProvider = Providers.NONE; + + private MudForm form = null!; + + private async Task Add() + { + await this.form.Validate(); + if (!this.dataIsValid) + return; + + var addedProvider = new Provider + { + Id = Guid.NewGuid().ToString(), + InstanceName = this.dataInstanceName, + UsedProvider = this.dataProvider, + }; + + this.MudDialog.Close(DialogResult.Ok(addedProvider)); + } + + private string? ValidatingProvider(Providers provider) + { + if (provider == Providers.NONE) + return "Please select a provider."; + + return null; + } + + private void Cancel() => this.MudDialog.Cancel(); +} \ No newline at end of file diff --git a/app/MindWork AI Studio/Settings/Version.cs b/app/MindWork AI Studio/Settings/Version.cs new file mode 100644 index 0000000..0ce7765 --- /dev/null +++ b/app/MindWork AI Studio/Settings/Version.cs @@ -0,0 +1,7 @@ +namespace AIStudio.Settings; + +public enum Version +{ + UNKNOWN, + V1, +} \ No newline at end of file