feat: add search bar to the proxy configs page
All checks were successful
Caddy Manager CI build / docker (push) Successful in 1m42s

This commit is contained in:
2025-07-05 09:09:37 +07:00
parent 6e9eea843d
commit f3eae5e649
2 changed files with 19 additions and 1 deletions

View File

@@ -18,6 +18,10 @@
{
<MudProgressCircular Color="Color.Primary" Indeterminate="true" Size="Size.Small"/>
}
<MudSpacer />
<MudTextField T="string" Placeholder="Search..." Adornment="Adornment.End" DebounceInterval="500"
OnDebounceIntervalElapsed="HandleIntervalElapsed" @bind-Value="_debouncedText"
AdornmentIcon="@Icons.Material.Filled.Search"/>
</MudContainer>
<MudList T="string" Style="padding-top: 16px;" SelectionMode="SelectionMode.MultiSelection"
@bind-SelectedValues="_selectedCaddyConfigurations">

View File

@@ -15,6 +15,7 @@ public partial class CaddyReverseProxiesPage : ComponentBase
private bool _isProcessing;
private List<string> _availableCaddyConfigurations = [];
private IReadOnlyCollection<string> _selectedCaddyConfigurations = [];
private string _debouncedText = string.Empty;
[Inject] private ICaddyService CaddyService { get; set; } = null!;
@@ -61,7 +62,10 @@ public partial class CaddyReverseProxiesPage : ComponentBase
/// </summary>
private void Refresh()
{
_availableCaddyConfigurations = CaddyService.GetExistingCaddyConfigurations();
var notSearching = string.IsNullOrWhiteSpace(_debouncedText);
_availableCaddyConfigurations = CaddyService.GetExistingCaddyConfigurations()
.Where(confName => notSearching || confName.Contains(_debouncedText, StringComparison.OrdinalIgnoreCase))
.ToList();
StateHasChanged();
}
@@ -130,4 +134,14 @@ public partial class CaddyReverseProxiesPage : ComponentBase
Snackbar.Add("Failed to restart the Caddy container", Severity.Error);
}
}
/// <summary>
/// Handle the interval elapsed event for debounced text input for search functionality.
/// </summary>
/// <param name="debouncedText"></param>
private void HandleIntervalElapsed(string debouncedText)
{
// Simply refresh the page with the new debounced text
Refresh();
}
}