@implements IDisposable @inject DbService DbService
@if (!Loading) { }
@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(); } }