Skip to content

Commit

Permalink
improve the flag editor warning viewmodel (#3532)
Browse files Browse the repository at this point in the history
* 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
  • Loading branch information
bluepilledgreat authored Oct 29, 2024
1 parent bd506ae commit 2c70430
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 16 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
d:DesignHeight="450" d:DesignWidth="800"
Scrollable="True"
Loaded="Page_Loaded"
Unloaded="Page_Unloaded"
Title="FastFlagEditorWarningPage">

<StackPanel VerticalAlignment="Center">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,25 +8,24 @@ namespace Bloxstrap.UI.Elements.Settings.Pages
/// </summary>
public partial class FastFlagEditorWarningPage
{
private bool _initialLoad = false;
private FastFlagEditorWarningViewModel _viewModel;

public FastFlagEditorWarningPage()
{
DataContext = new FastFlagEditorWarningViewModel(this);
_viewModel = new FastFlagEditorWarningViewModel(this);
DataContext = _viewModel;

InitializeComponent();
}

private void Page_Loaded(object sender, RoutedEventArgs e)
{
// refresh datacontext on page load to reset timer

if (!_initialLoad)
{
_initialLoad = true;
return;
}
_viewModel.StartCountdown();
}

DataContext = new FastFlagEditorWarningViewModel(this);
private void Page_Unloaded(object sender, RoutedEventArgs e)
{
_viewModel.StopCountdown();
}
}
}
37 changes: 31 additions & 6 deletions Bloxstrap/UI/ViewModels/Settings/FastFlagEditorWarningViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ internal class FastFlagEditorWarningViewModel : NotifyPropertyChangedViewModel
{
private Page _page;

private CancellationTokenSource? _cancellationTokenSource;

public string ContinueButtonText { get; set; } = "";

public bool CanContinue { get; set; } = false;
Expand All @@ -24,34 +26,57 @@ internal class FastFlagEditorWarningViewModel : NotifyPropertyChangedViewModel
public FastFlagEditorWarningViewModel(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--)
{
ContinueButtonText = $"({i}) {Strings.Menu_FastFlagEditor_Warning_Continue}";
OnPropertyChanged(nameof(ContinueButtonText));

await Task.Delay(1000);
try
{
await Task.Delay(1000, token);
}
catch (TaskCanceledException)
{
return;
}
}

ContinueButtonText = Strings.Menu_FastFlagEditor_Warning_Continue;
OnPropertyChanged(nameof(ContinueButtonText));

CanContinue = true;
OnPropertyChanged(nameof(CanContinue));

App.State.Prop.ShowFFlagEditorWarning = false;
App.State.Save();
}

private void Continue()
{
if (!CanContinue)
return;

App.State.Prop.ShowFFlagEditorWarning = false;
App.State.Save(); // should we be force saving here?

if (Window.GetWindow(_page) is INavigationWindow window)
window.Navigate(typeof(FastFlagEditorPage));
}
Expand Down

0 comments on commit 2c70430

Please sign in to comment.