Refactor receiver suggestions filtering logic
Introduced `ReceiverSuggestionFilterHandler` to refine the filtering of recent receiver suggestions based on name and email. Added `SuggestionLimit` constant to replace hardcoded limits and ensure consistency. Updated UI to use the new `FilteredRecentSuggestions` property, which leverages the `BuildFilteredRecentSuggestions` method for grouping, ordering, and limiting suggestions. Adjusted `OnDocumentSelectedAsync` to use the new constant. Added necessary `@using` directive for the filter handler.
This commit is contained in:
@@ -2,6 +2,7 @@
|
||||
@using EnvelopeGenerator.Application.Common.Dto.Receiver
|
||||
@using EnvelopeGenerator.Application.Resources
|
||||
@using EnvelopeGenerator.Domain.Resources
|
||||
@using EnvelopeGenerator.Server.Client.Components.Sender.ReceiverSuggestionFilter
|
||||
@using EnvelopeGenerator.Server.Client.Services
|
||||
@using Microsoft.AspNetCore.Components.Forms
|
||||
@using Microsoft.Extensions.Localization
|
||||
@@ -115,7 +116,7 @@
|
||||
else if (_recentReceiverSuggestions.Count > 0)
|
||||
{
|
||||
<div class="sender-create-wizard__suggestion-list" role="listbox" aria-label="Recent receivers">
|
||||
@foreach (var suggestion in _recentReceiverSuggestions)
|
||||
@foreach (var suggestion in FilteredRecentSuggestions)
|
||||
{
|
||||
<button type="button"
|
||||
class="sender-create-wizard__suggestion-item"
|
||||
@@ -323,6 +324,8 @@
|
||||
private bool _isLoadingRecentSuggestions;
|
||||
private bool _recentSuggestionsLoaded;
|
||||
|
||||
private const int SuggestionLimit = 20;
|
||||
|
||||
private byte[]? _documentBytes;
|
||||
private string? _documentFileName;
|
||||
private string _documentSizeText = string.Empty;
|
||||
@@ -338,6 +341,9 @@
|
||||
private bool IsLastStep => _currentStep >= TotalSteps - 1;
|
||||
private bool CanSkipCurrentStep => _currentStep == 1;
|
||||
|
||||
private IReadOnlyList<RecentReceiverSuggestionDto> FilteredRecentSuggestions =>
|
||||
BuildFilteredRecentSuggestions();
|
||||
|
||||
private string CurrentStepTitle => _currentStep switch
|
||||
{
|
||||
0 => L("SenderWizard_Step_Basics", "Grunddaten"),
|
||||
@@ -472,6 +478,23 @@
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
private IReadOnlyList<RecentReceiverSuggestionDto> BuildFilteredRecentSuggestions()
|
||||
{
|
||||
if (_recentReceiverSuggestions.Count == 0)
|
||||
return [];
|
||||
|
||||
var handler = new ReceiverSuggestionFilterHandler(_recentReceiverSuggestions);
|
||||
var filtered = handler.Filter(_receiverName, _receiverEmail);
|
||||
|
||||
return filtered
|
||||
.GroupBy(x => x.EmailAddress, StringComparer.OrdinalIgnoreCase)
|
||||
.Select(g => g.OrderByDescending(x => x.LastUsedAt).First())
|
||||
.OrderByDescending(x => x.LastUsedAt)
|
||||
.ThenBy(x => x.EmailAddress, StringComparer.OrdinalIgnoreCase)
|
||||
.Take(SuggestionLimit)
|
||||
.ToList();
|
||||
}
|
||||
|
||||
private async Task OnDocumentSelectedAsync(InputFileChangeEventArgs args)
|
||||
{
|
||||
if (IsActionLocked)
|
||||
@@ -658,7 +681,7 @@
|
||||
_isLoadingRecentSuggestions = true;
|
||||
try
|
||||
{
|
||||
var suggestions = await ReceiverService.GetRecentReceiverSuggestionsAsync(20);
|
||||
var suggestions = await ReceiverService.GetRecentReceiverSuggestionsAsync(SuggestionLimit);
|
||||
_recentReceiverSuggestions.Clear();
|
||||
_recentReceiverSuggestions.AddRange(suggestions);
|
||||
_recentSuggestionsLoaded = true;
|
||||
@@ -790,4 +813,5 @@
|
||||
var uiValue = UiLocalizer[key];
|
||||
return uiValue.ResourceNotFound ? fallback : uiValue.Value;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user