From 82c479434eaa2a7116a51225b129f359b9c5a806 Mon Sep 17 00:00:00 2001 From: Paul Schneider Date: Sun, 6 Sep 2026 17:19:21 +0100 Subject: [PATCH] postit: debounce rdv reverse geocoding --- .../PostIt/ViewModels/Commands/RdvViewModel.cs | 16 ++++++++++++++++ .../PostIt/Views/Commands/RdvPage.axaml.cs | 12 +++++++++++- 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/src/PostIt/PostIt/ViewModels/Commands/RdvViewModel.cs b/src/PostIt/PostIt/ViewModels/Commands/RdvViewModel.cs index 8a4ae6cfb..9de2c0989 100644 --- a/src/PostIt/PostIt/ViewModels/Commands/RdvViewModel.cs +++ b/src/PostIt/PostIt/ViewModels/Commands/RdvViewModel.cs @@ -133,6 +133,22 @@ public partial class RdvViewModel : BillingCommandPageViewModel this.SetInfoStatus("Position sélectionnée sur la carte."); } + public void NotifyReverseGeocodingStarted() + { + this.SetInfoStatus(string.IsNullOrWhiteSpace(Address) + ? "Recherche de l'adresse depuis la carte..." + : "Recherche d'une adresse suggérée..." + ); + } + + public void NotifyReverseGeocodingUnavailable() + { + if (HasSuggestedAddress || !string.IsNullOrWhiteSpace(Address)) + return; + + this.SetInfoStatus("Position sélectionnée sur la carte. Complétez l'adresse puis envoyez la commande."); + } + public void ApplyResolvedAddress(string address) { if (string.IsNullOrWhiteSpace(address)) diff --git a/src/PostIt/PostIt/Views/Commands/RdvPage.axaml.cs b/src/PostIt/PostIt/Views/Commands/RdvPage.axaml.cs index 7952d7dc4..2a99c1158 100644 --- a/src/PostIt/PostIt/Views/Commands/RdvPage.axaml.cs +++ b/src/PostIt/PostIt/Views/Commands/RdvPage.axaml.cs @@ -22,6 +22,7 @@ public partial class RdvPage : ContentPage private const double DefaultLongitude = 2.3522; private const int DefaultZoomLevel = 4; private const int SelectedZoomLevel = 13; + private static readonly TimeSpan ReverseGeocodingDebounce = TimeSpan.FromMilliseconds(350); private MapControl? _locationMap; private MemoryLayer? _selectionLayer; @@ -182,15 +183,24 @@ public partial class RdvPage : ContentPage _reverseGeocodeCts?.Cancel(); _reverseGeocodeCts?.Dispose(); _reverseGeocodeCts = new CancellationTokenSource(); + var cancellationToken = _reverseGeocodeCts.Token; try { + vm.NotifyReverseGeocodingStarted(); + await Task.Delay(ReverseGeocodingDebounce, cancellationToken).ConfigureAwait(true); + var resolved = await _reverseGeocodingService - .TryResolveAddressAsync(latitude, longitude, _reverseGeocodeCts.Token) + .TryResolveAddressAsync(latitude, longitude, cancellationToken) .ConfigureAwait(true); if (!string.IsNullOrWhiteSpace(resolved)) + { vm.ApplyResolvedAddress(resolved); + return; + } + + vm.NotifyReverseGeocodingUnavailable(); } catch (OperationCanceledException) {