@page "/sync" @page "/sync/{DateFilter}" @using salesbook.Shared.Components.Layout.Spinner @using salesbook.Shared.Components.SingleElements @using salesbook.Shared.Core.Interface @inject ISyncDbService syncDb @inject IManageDataService manageData @code { [Parameter] public string? DateFilter { get; set; } private Dictionary Elements { get; set; } = new(); private bool _hasStarted = false; private int _completedCount = 0; protected override void OnInitialized() { Elements["Commesse"] = false; Elements["Impostazioni"] = false; } protected override async Task OnAfterRenderAsync(bool firstRender) { if (firstRender && !_hasStarted) { _hasStarted = true; if (DateFilter is null) { await manageData.ClearDb(); } await Task.WhenAll( RunAndTrack(SetCommesse), RunAndTrack(SetSettings) ); } } private async Task RunAndTrack(Func func) { await func(); _completedCount++; if (_completedCount == Elements.Count) { LocalStorage.Set("last-sync", DateTime.Now); var pathQuery = System.Web.HttpUtility.ParseQueryString(new UriBuilder(NavigationManager.Uri).Query); var originalPath = pathQuery["path"] ?? null; var path = originalPath ?? "/Calendar"; NavigationManager.NavigateTo(path, replace: true); } } private async Task SetCommesse() { await Task.Run(async () => { await syncDb.GetAndSaveCommesse(DateFilter); }); Elements["Commesse"] = true; StateHasChanged(); } private async Task SetSettings() { await Task.Run(async () => { await syncDb.GetAndSaveSettings(DateFilter); }); Elements["Impostazioni"] = true; StateHasChanged(); } }