@implements IDisposable @inject IJSRuntime JS @inject State State @if (Editable) { } @if (pastes != null) foreach (Paste paste in pastes) { } @code { [Parameter] public Func?>>? PastesFunc { get; set; } [Parameter] public bool Editable { get; set; } = false; public EditPasteDialog? Dialog { get; set; } private List? pastes; protected override async Task OnInitializedAsync() { await base.OnInitializedAsync(); if (PastesFunc == null) return; if (pastes == null || pastes.Count == 0) pastes = await PastesFunc(false); State.PropertyChanged += StateChanged; State.CanRefresh = true; await InvokeAsync(StateHasChanged); await JS.InvokeVoidAsync("removeElementById", "pastes-loading"); } private async void StateChanged(object? sender, PropertyChangedEventArgs e) { if (PastesFunc == null) return; if (e.PropertyName == nameof(State.IsRefreshing) && State.IsRefreshing) { using (State.GetRefreshToken()) { pastes = await PastesFunc(true); await InvokeAsync(StateHasChanged); } } } public void Dispose() { State.PropertyChanged -= StateChanged; State.CanRefresh = false; } }