improve the flag editor warning viewmodel (#3532)

* improve the flag editor warning viewmodel

- no longer creates a new viewmodel every page reload
- fixes an oversight

* stop countdown on unload

* move the viewmodel to a variable

makes everything look cleaner

* remove initialload check
This commit is contained in:
Matt 2024-10-29 21:55:34 +00:00 committed by GitHub
parent bd506ae545
commit 2c70430dfa
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 41 additions and 16 deletions

View File

@ -10,6 +10,7 @@
d:DesignHeight="450" d:DesignWidth="800" d:DesignHeight="450" d:DesignWidth="800"
Scrollable="True" Scrollable="True"
Loaded="Page_Loaded" Loaded="Page_Loaded"
Unloaded="Page_Unloaded"
Title="FastFlagEditorWarningPage"> Title="FastFlagEditorWarningPage">
<StackPanel VerticalAlignment="Center"> <StackPanel VerticalAlignment="Center">

View File

@ -8,25 +8,24 @@ namespace Bloxstrap.UI.Elements.Settings.Pages
/// </summary> /// </summary>
public partial class FastFlagEditorWarningPage public partial class FastFlagEditorWarningPage
{ {
private bool _initialLoad = false; private FastFlagEditorWarningViewModel _viewModel;
public FastFlagEditorWarningPage() public FastFlagEditorWarningPage()
{ {
DataContext = new FastFlagEditorWarningViewModel(this); _viewModel = new FastFlagEditorWarningViewModel(this);
DataContext = _viewModel;
InitializeComponent(); InitializeComponent();
} }
private void Page_Loaded(object sender, RoutedEventArgs e) private void Page_Loaded(object sender, RoutedEventArgs e)
{ {
// refresh datacontext on page load to reset timer _viewModel.StartCountdown();
}
if (!_initialLoad) private void Page_Unloaded(object sender, RoutedEventArgs e)
{ {
_initialLoad = true; _viewModel.StopCountdown();
return;
}
DataContext = new FastFlagEditorWarningViewModel(this);
} }
} }
} }

View File

@ -13,6 +13,8 @@ namespace Bloxstrap.UI.ViewModels.Settings
{ {
private Page _page; private Page _page;
private CancellationTokenSource? _cancellationTokenSource;
public string ContinueButtonText { get; set; } = ""; public string ContinueButtonText { get; set; } = "";
public bool CanContinue { get; set; } = false; public bool CanContinue { get; set; } = false;
@ -24,17 +26,40 @@ namespace Bloxstrap.UI.ViewModels.Settings
public FastFlagEditorWarningViewModel(Page page) public FastFlagEditorWarningViewModel(Page page)
{ {
_page = page; _page = page;
DoCountdown();
} }
private async void DoCountdown() public void StopCountdown()
{ {
_cancellationTokenSource?.Cancel();
_cancellationTokenSource = null;
}
public void StartCountdown()
{
StopCountdown();
_cancellationTokenSource = new CancellationTokenSource();
DoCountdown(_cancellationTokenSource.Token);
}
private async void DoCountdown(CancellationToken token)
{
CanContinue = false;
OnPropertyChanged(nameof(CanContinue));
for (int i = 10; i > 0; i--) for (int i = 10; i > 0; i--)
{ {
ContinueButtonText = $"({i}) {Strings.Menu_FastFlagEditor_Warning_Continue}"; ContinueButtonText = $"({i}) {Strings.Menu_FastFlagEditor_Warning_Continue}";
OnPropertyChanged(nameof(ContinueButtonText)); OnPropertyChanged(nameof(ContinueButtonText));
await Task.Delay(1000); try
{
await Task.Delay(1000, token);
}
catch (TaskCanceledException)
{
return;
}
} }
ContinueButtonText = Strings.Menu_FastFlagEditor_Warning_Continue; ContinueButtonText = Strings.Menu_FastFlagEditor_Warning_Continue;
@ -42,9 +67,6 @@ namespace Bloxstrap.UI.ViewModels.Settings
CanContinue = true; CanContinue = true;
OnPropertyChanged(nameof(CanContinue)); OnPropertyChanged(nameof(CanContinue));
App.State.Prop.ShowFFlagEditorWarning = false;
App.State.Save();
} }
private void Continue() private void Continue()
@ -52,6 +74,9 @@ namespace Bloxstrap.UI.ViewModels.Settings
if (!CanContinue) if (!CanContinue)
return; return;
App.State.Prop.ShowFFlagEditorWarning = false;
App.State.Save(); // should we be force saving here?
if (Window.GetWindow(_page) is INavigationWindow window) if (Window.GetWindow(_page) is INavigationWindow window)
window.Navigate(typeof(FastFlagEditorPage)); window.Navigate(typeof(FastFlagEditorPage));
} }