From 62e16f28970a2576a6ab73de0f71b20040f027a8 Mon Sep 17 00:00:00 2001 From: Thorsten Sommer Date: Fri, 19 Apr 2024 23:27:38 +0200 Subject: [PATCH] Added instance name validation --- .../Components/Pages/Settings.razor.cs | 7 ++++- .../Settings/ProviderDialog.razor | 4 ++- .../Settings/ProviderDialog.razor.cs | 30 +++++++++++++++++++ 3 files changed, 39 insertions(+), 2 deletions(-) diff --git a/app/MindWork AI Studio/Components/Pages/Settings.razor.cs b/app/MindWork AI Studio/Components/Pages/Settings.razor.cs index bea0b94..3cc59e1 100644 --- a/app/MindWork AI Studio/Components/Pages/Settings.razor.cs +++ b/app/MindWork AI Studio/Components/Pages/Settings.razor.cs @@ -31,8 +31,13 @@ public partial class Settings : ComponentBase private async Task AddProvider() { + var dialogParameters = new DialogParameters + { + { x => x.UsedInstanceNames, this.Providers.Select(x => x.InstanceName.ToLowerInvariant()).ToList() }, + }; + var dialogOptions = new DialogOptions { CloseOnEscapeKey = true, FullWidth = true, MaxWidth = MaxWidth.Medium }; - var dialogReference = await this.DialogService.ShowAsync("Add Provider", dialogOptions); + var dialogReference = await this.DialogService.ShowAsync("Add Provider", dialogParameters, dialogOptions); var dialogResult = await dialogReference.Result; if (dialogResult.Canceled) return; diff --git a/app/MindWork AI Studio/Settings/ProviderDialog.razor b/app/MindWork AI Studio/Settings/ProviderDialog.razor index 98ad4d1..2cdf817 100644 --- a/app/MindWork AI Studio/Settings/ProviderDialog.razor +++ b/app/MindWork AI Studio/Settings/ProviderDialog.razor @@ -4,6 +4,7 @@ + @* ReSharper disable once CSharpWarnings::CS8974 *@ @* ReSharper disable once CSharpWarnings::CS8974 *@ diff --git a/app/MindWork AI Studio/Settings/ProviderDialog.razor.cs b/app/MindWork AI Studio/Settings/ProviderDialog.razor.cs index 319e85c..45912c8 100644 --- a/app/MindWork AI Studio/Settings/ProviderDialog.razor.cs +++ b/app/MindWork AI Studio/Settings/ProviderDialog.razor.cs @@ -1,3 +1,5 @@ +using System.Text.RegularExpressions; + using AIStudio.Provider; using Microsoft.AspNetCore.Components; @@ -10,6 +12,9 @@ public partial class ProviderDialog : ComponentBase { [CascadingParameter] private MudDialogInstance MudDialog { get; set; } = null!; + + [Parameter] + public IList UsedInstanceNames { get; set; } = new List(); private bool dataIsValid; private string[] dataIssues = []; @@ -41,6 +46,31 @@ public partial class ProviderDialog : ComponentBase return null; } + + private string? ValidatingInstanceName(string instanceName) + { + if(instanceName.StartsWith(' ')) + return "The instance name must not start with a space."; + + if(instanceName.EndsWith(' ')) + return "The instance name must not end with a space."; + + // The instance name must only contain letters, numbers, and spaces: + if (!InstanceNameRegex().IsMatch(instanceName)) + return "The instance name must only contain letters, numbers, and spaces."; + + if(instanceName.Contains(" ")) + return "The instance name must not contain consecutive spaces."; + + // The instance name must be unique: + if (this.UsedInstanceNames.Contains(instanceName.ToLowerInvariant())) + return "The instance name must be unique; the chosen name is already in use."; + + return null; + } private void Cancel() => this.MudDialog.Cancel(); + + [GeneratedRegex("^[a-zA-Z0-9 ]+$")] + private static partial Regex InstanceNameRegex(); } \ No newline at end of file