@implements IDisposable
@inject DbService DbService
@code {
private bool Loading { get; set; } = false;
private string LoadingIndicatorMessage { get; set; } = "";
private bool DatabaseLoading { get; set; } = false;
///
/// Dispose method.
///
public void Dispose()
{
DbService.GetState().StateChanged -= OnDatabaseStateChanged;
}
///
protected override async Task OnInitializedAsync()
{
await base.OnInitializedAsync();
DbService.GetState().StateChanged += OnDatabaseStateChanged;
UpdateLoadingIndicatorMessage();
}
///
/// Refresh the database.
///
private async Task OnRefreshClick()
{
await DbService.InitializeDatabaseAsync();
}
private async void OnDatabaseStateChanged(object? sender, DbServiceState.DatabaseState newState)
{
await InvokeAsync(StateHasChanged);
UpdateLoadingIndicatorMessage();
if (newState.Status == DbServiceState.DatabaseStatus.SavingToServer)
{
// Show loading indicator for at least 0.5 seconds even if the save operation is faster.
await ShowLoadingIndicatorAsync();
}
}
private void UpdateLoadingIndicatorMessage()
{
var currentState = DbService.GetState().CurrentState;
var message = currentState.Status.ToString();
if (currentState.Message != string.Empty)
{
message = currentState.Message;
}
LoadingIndicatorMessage = "Vault status: " + message + " - " + currentState.LastUpdated;
StateHasChanged();
}
private async Task ShowLoadingIndicatorAsync()
{
Loading = true;
StateHasChanged();
await Task.Delay(800);
Loading = false;
StateHasChanged();
}
}