diff --git a/app/MindWork AI Studio/Components/ConfigurationText.razor b/app/MindWork AI Studio/Components/ConfigurationText.razor index 73d07be2..fb76fe79 100644 --- a/app/MindWork AI Studio/Components/ConfigurationText.razor +++ b/app/MindWork AI Studio/Components/ConfigurationText.razor @@ -3,7 +3,7 @@ \ No newline at end of file diff --git a/app/MindWork AI Studio/Components/ConfigurationText.razor.cs b/app/MindWork AI Studio/Components/ConfigurationText.razor.cs index e6cd379e..4e6bb7f9 100644 --- a/app/MindWork AI Studio/Components/ConfigurationText.razor.cs +++ b/app/MindWork AI Studio/Components/ConfigurationText.razor.cs @@ -1,5 +1,7 @@ using Microsoft.AspNetCore.Components; +using Timer = System.Timers.Timer; + namespace AIStudio.Components; public partial class ConfigurationText : ConfigurationBase @@ -11,7 +13,7 @@ public partial class ConfigurationText : ConfigurationBase public Func Text { get; set; } = () => string.Empty; /// - /// An action which is called when the option is changed. + /// An action which is called when the text was changed. /// [Parameter] public Action TextUpdate { get; set; } = _ => { }; @@ -27,6 +29,55 @@ public partial class ConfigurationText : ConfigurationBase /// [Parameter] public Color IconColor { get; set; } = Color.Default; + + /// + /// How many lines should the textfield have? + /// + [Parameter] + public int NumLines { get; set; } = 1; + + /// + /// What is the maximum number of lines? + /// + [Parameter] + public int MaxLines { get; set; } = 12; + + private string internalText = string.Empty; + private Timer timer = new(TimeSpan.FromMilliseconds(500)) + { + AutoReset = false + }; + + #region Overrides of ConfigurationBase + + protected override async Task OnInitializedAsync() + { + this.timer.Elapsed += async (_, _) => await this.InvokeAsync(async () => await this.OptionChanged(this.internalText)); + await base.OnInitializedAsync(); + } + + #region Overrides of ComponentBase + + protected override async Task OnParametersSetAsync() + { + this.internalText = this.Text(); + await base.OnParametersSetAsync(); + } + + #endregion + + #endregion + + private bool AutoGrow => this.NumLines > 1; + + private int GetMaxLines => this.AutoGrow ? this.MaxLines : 1; + + private void InternalUpdate(string text) + { + this.timer.Stop(); + this.internalText = text; + this.timer.Start(); + } private async Task OptionChanged(string updatedText) { diff --git a/app/MindWork AI Studio/wwwroot/changelog/v0.9.12.md b/app/MindWork AI Studio/wwwroot/changelog/v0.9.12.md new file mode 100644 index 00000000..2837560d --- /dev/null +++ b/app/MindWork AI Studio/wwwroot/changelog/v0.9.12.md @@ -0,0 +1,3 @@ +# v0.9.12, build 187 (2024-09-xx xx:xx UTC) + +- Refactored the `ConfigurationText` component to debounce the input field to prevent unnecessary configuration updates. The component now also supports multiline text. \ No newline at end of file