@page "/" @inherits Fluxor.Blazor.Web.Components.FluxorComponent @using System.Linq @using Start.Client.Components @using Start.Client.Store.State @using Start.Client.Store.Features.ContainersList @using Start.Client.Store.Features.CurrentContainer @using Start.Client.Store.Features.CreateContainer @using Start.Client.Store.Features.DeleteContainer @using Fluxor @* Distinguish from Refit.Authorize *@ @attribute [Microsoft.AspNetCore.Authorization.Authorize] @inject Blazored.LocalStorage.ILocalStorageService localStorage @inject IState state @inject IDispatcher dispatch @if (this.state.Value.ContainerListState.ErrorMessage != null) { Error @this.state.Value.ContainerListState.ErrorMessage } @if (this.state.Value.ContainerListState.IsLoadingContainersList) {

Loading Containers

} else { } @code { protected override async Task OnInitializedAsync() { this.dispatch.Dispatch(new LoadContainerListAction()); this.dispatch.Dispatch(new LoadCurrentContainerAction(await this.GetSelectedContainerId())); } protected void OnContainerSelected(int bookmarkContainerId) { dispatch.Dispatch(new LoadCurrentContainerAction(bookmarkContainerId)); } protected void OnDeleteContainerClicked(int bookmarkContainerId) { BookmarkContainerDto? bookmarkContainerToDelete = this.state.Value.ContainerListState .Containers ?.FirstOrDefault(bc => bc.BookmarkContainerId == bookmarkContainerId); if (bookmarkContainerToDelete == null) return; this.dispatch.Dispatch(new ShowDeleteContainerFormAction( bookmarkContainerToDelete.BookmarkContainerId, bookmarkContainerToDelete.Title)); } protected void OnCreateContainerClicked() { dispatch.Dispatch(new ShowCreateContainerFormAction()); } // Save the currently selected container in LocalStorage so that the same container remains // selected between new tabs protected async Task GetSelectedContainerId() { bool hasValue = await localStorage.ContainKeyAsync("SelectedContainer"); if (hasValue) return await localStorage.GetItemAsync("SelectedContainer"); // Default to the first container int firstContainer = this.state.Value.ContainerListState.Containers .First().BookmarkContainerId; await this.SetSelectedContainer(firstContainer); return firstContainer; } protected async Task SetSelectedContainer(int selectedContainerId) { await localStorage.SetItemAsync("SelectedContainer", selectedContainerId); } }