fc23036770
- test debounce preliminari - pag + componente
119 lines
2.8 KiB
C#
119 lines
2.8 KiB
C#
using Microsoft.AspNetCore.Components;
|
|
using SHERPA.BBM.UI.Data;
|
|
|
|
namespace SHERPA.BBM.UI.Components
|
|
{
|
|
/// <summary>
|
|
/// Pagina gestione ricerca con deounce basato su timer:
|
|
/// https://blog.jeremylikness.com/blog/an-easier-blazor-debounce/
|
|
/// </summary>
|
|
public partial class SearchMod : IDisposable
|
|
{
|
|
#region Public Properties
|
|
|
|
[Parameter]
|
|
public int DebounceTimer { get; set; } = 200;
|
|
|
|
[Parameter]
|
|
public string searchVal
|
|
{
|
|
get
|
|
{
|
|
return lastSearch;
|
|
}
|
|
|
|
set
|
|
{
|
|
lastSearch = value;
|
|
DisposeTimer();
|
|
aTimer = new System.Timers.Timer(DebounceTimer);
|
|
aTimer.Elapsed += TimerElapsed_TickAsync;
|
|
aTimer.Enabled = true;
|
|
aTimer.Start();
|
|
}
|
|
}
|
|
|
|
#endregion Public Properties
|
|
|
|
#region Public Methods
|
|
|
|
public void Dispose()
|
|
{
|
|
DisposeTimer();
|
|
MService.EA_SearchUpdated -= OnSeachUpdated;
|
|
MService.HeadChanged -= MService_HeadChanged;
|
|
}
|
|
|
|
public async void OnSeachUpdated()
|
|
{
|
|
await InvokeAsync(() =>
|
|
{
|
|
lastSearch = MService.SearchVal;
|
|
StateHasChanged();
|
|
});
|
|
}
|
|
|
|
#endregion Public Methods
|
|
|
|
#region Protected Properties
|
|
|
|
[Inject]
|
|
protected MessageService MService { get; set; } = null!;
|
|
|
|
#endregion Protected Properties
|
|
|
|
#region Protected Methods
|
|
|
|
protected override async Task OnInitializedAsync()
|
|
{
|
|
await Task.Delay(1);
|
|
MService.EA_SearchUpdated += OnSeachUpdated;
|
|
MService.HeadChanged += MService_HeadChanged;
|
|
}
|
|
|
|
#endregion Protected Methods
|
|
|
|
#region Private Fields
|
|
|
|
private static System.Timers.Timer? aTimer = null;
|
|
|
|
#endregion Private Fields
|
|
|
|
#region Private Properties
|
|
|
|
private string lastSearch { get; set; } = "";
|
|
|
|
#endregion Private Properties
|
|
|
|
#region Private Methods
|
|
|
|
private void DisposeTimer()
|
|
{
|
|
if (aTimer != null)
|
|
{
|
|
aTimer.Stop();
|
|
aTimer.Dispose();
|
|
}
|
|
}
|
|
|
|
private void MService_HeadChanged()
|
|
{
|
|
lastSearch = MService.SearchVal;
|
|
}
|
|
|
|
private void reset()
|
|
{
|
|
MService.SearchVal = "";
|
|
searchVal = "";
|
|
}
|
|
|
|
private async void TimerElapsed_TickAsync(object? sender, EventArgs e)
|
|
{
|
|
DisposeTimer();
|
|
await Task.Delay(1);
|
|
MService.SearchVal = lastSearch;
|
|
}
|
|
|
|
#endregion Private Methods
|
|
}
|
|
} |