From ceb2860883374c6569e5f90b3c45bb3af6a2b518 Mon Sep 17 00:00:00 2001 From: TekH Date: Mon, 9 Nov 2026 13:14:31 +0100 Subject: [PATCH] Add filter for recent receiver suggestions Introduced a filter input box in `CreateEnvelopeWizardPopup.razor` to allow users to search recent receiver suggestions dynamically. Added `_receiverSuggestionFilterText` property and `OnReceiverSuggestionFilterChanged` method to handle filtering logic. Refactored `ReceiverSuggestionFilterHandler` to simplify its API. Updated the `Filter` method to accept a single query string and removed redundant overloads. Improved filtering logic to match `FullName` or `EmailAddress` using case-sensitive comparison. These changes enhance usability by enabling quick filtering of receiver suggestions. --- .../Sender/CreateEnvelopeWizardPopup.razor | 24 ++++++++++++++++--- .../ReceiverSuggestionFilterHandler.cs | 18 ++++++-------- 2 files changed, 28 insertions(+), 14 deletions(-) diff --git a/EnvelopeGenerator.Server/EnvelopeGenerator.Server.Client/Components/Sender/CreateEnvelopeWizardPopup.razor b/EnvelopeGenerator.Server/EnvelopeGenerator.Server.Client/Components/Sender/CreateEnvelopeWizardPopup.razor index 56b20575..aaddde27 100644 --- a/EnvelopeGenerator.Server/EnvelopeGenerator.Server.Client/Components/Sender/CreateEnvelopeWizardPopup.razor +++ b/EnvelopeGenerator.Server/EnvelopeGenerator.Server.Client/Components/Sender/CreateEnvelopeWizardPopup.razor @@ -252,8 +252,14 @@ } else if (_currentStep == 1) { -
-
@L("SenderWizard_RecentReceivers", "Zuletzt verwendete Empfänger")
+
+
@L("SenderWizard_RecentReceivers", "Zuletzt verwendete Empfänger")
+ + @if (_isLoadingRecentSuggestions) { @@ -512,6 +518,7 @@ private string _receiverName = string.Empty; private string _receiverEmail = string.Empty; + private string _receiverSuggestionFilterText = string.Empty; private readonly List _receivers = []; private IEnumerable _receiverTags = []; private readonly List _recentReceiverSuggestions = []; @@ -611,6 +618,13 @@ return Task.CompletedTask; } + private Task OnReceiverSuggestionFilterChanged(string? value) + { + _receiverSuggestionFilterText = value ?? string.Empty; + _validationMessage = null; + return Task.CompletedTask; + } + private Task OnEnvelopeTypeChanged(ChangeEventArgs args) { _validationMessage = null; @@ -696,7 +710,10 @@ return []; var handler = new ReceiverSuggestionFilterHandler(_recentReceiverSuggestions); - var filtered = handler.Filter(_receiverName, _receiverEmail); + var filterText = _receiverSuggestionFilterText.Trim(); + var filtered = string.IsNullOrWhiteSpace(filterText) + ? _recentReceiverSuggestions + : handler.Filter(filterText); return filtered .GroupBy(x => x.EmailAddress, StringComparer.OrdinalIgnoreCase) @@ -1213,6 +1230,7 @@ _receiverName = string.Empty; _receiverEmail = string.Empty; + _receiverSuggestionFilterText = string.Empty; _receivers.Clear(); _receiverTags = []; _recentReceiverSuggestions.Clear(); diff --git a/EnvelopeGenerator.Server/EnvelopeGenerator.Server.Client/Components/Sender/ReceiverSuggestionFilter/ReceiverSuggestionFilterHandler.cs b/EnvelopeGenerator.Server/EnvelopeGenerator.Server.Client/Components/Sender/ReceiverSuggestionFilter/ReceiverSuggestionFilterHandler.cs index 6f76e554..b8962631 100644 --- a/EnvelopeGenerator.Server/EnvelopeGenerator.Server.Client/Components/Sender/ReceiverSuggestionFilter/ReceiverSuggestionFilterHandler.cs +++ b/EnvelopeGenerator.Server/EnvelopeGenerator.Server.Client/Components/Sender/ReceiverSuggestionFilter/ReceiverSuggestionFilterHandler.cs @@ -4,23 +4,19 @@ namespace EnvelopeGenerator.Server.Client.Components.Sender.ReceiverSuggestionFi public class ReceiverSuggestionFilterHandler(IEnumerable suggestions) { - private readonly IReadOnlyList _entries = suggestions + private readonly IReadOnlyList _entries = [.. suggestions .Where(x => !string.IsNullOrWhiteSpace(x.FullName) && !string.IsNullOrWhiteSpace(x.EmailAddress)) - .Select(x => new Entry(new ReceiverFilterCriteria(x.FullName, x.EmailAddress), x)) - .ToList(); + .Select(x => new Entry(new ReceiverFilterCriteria(x.FullName, x.EmailAddress), x))]; private readonly record struct Entry(ReceiverFilterCriteria Criteria, RecentReceiverSuggestionDto Suggestion); - public IEnumerable Filter(ReceiverFilterCriteria criteria) + public IEnumerable Filter(string query) { + var normalizedQuery = new ReceiverFilterCriteria(query, query); return _entries - .Where(x => x.Criteria.Matches(criteria)) + .Where(x => + x.Criteria.FullName.Contains(normalizedQuery.FullName, StringComparison.Ordinal) + || x.Criteria.EmailAddress.Contains(normalizedQuery.EmailAddress, StringComparison.Ordinal)) .Select(x => x.Suggestion); } - - public IEnumerable Filter(string fullName, string emailAddress) - { - var criteria = new ReceiverFilterCriteria(fullName, emailAddress); - return Filter(criteria); - } }