@using Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage; @inject ProtectedLocalStorage BrowserStorage @foreach (var column in ColumnVisibility.Keys) { @column } @code { [Parameter] public string Key { get; set; } [Parameter] public bool Visible { get; set; } [Parameter] public EventCallback VisibleChanged { get; set; } Dictionary ColumnVisibility = new Dictionary(); protected override async Task OnAfterRenderAsync(bool firstRender) { if (firstRender) { try { var storedColumnVisibility = await BrowserStorage.GetAsync>($"Views.{Key}.ColumnPicker"); if (storedColumnVisibility.Success && storedColumnVisibility.Value != null) ColumnVisibility = storedColumnVisibility.Value; StateHasChanged(); } catch { ColumnVisibility = new Dictionary(); await BrowserStorage.SetAsync($"Views.{Key}.FieldPicker", ColumnVisibility); } } } public bool IsColumnHidden(string columnName, bool isDefault = true) { if (!ColumnVisibility.ContainsKey(columnName)) ColumnVisibility[columnName] = isDefault; return !ColumnVisibility[columnName]; } protected override void OnParametersSet() { base.OnParametersSet(); if (ColumnVisibility == null) ColumnVisibility = new Dictionary(); } async Task ChangeColumnVisibility(string column, bool state) { ColumnVisibility[column] = state; await InvokeAsync(StateHasChanged); } async Task Close() { Visible = false; await VisibleChanged.InvokeAsync(); } }