51 lines
1.4 KiB
Text
51 lines
1.4 KiB
Text
|
@implements IDisposable
|
||
|
@inject IJSRuntime JS
|
||
|
@inject State State
|
||
|
|
||
|
@if (Editable) {
|
||
|
<EditPasteDialog @ref="Dialog" id="EditPasteModal"></EditPasteDialog>
|
||
|
}
|
||
|
|
||
|
@if (pastes != null) foreach (Paste paste in pastes) {
|
||
|
<PasteCard Paste="paste" Editable="Editable" Dialog="Dialog"></PasteCard>
|
||
|
}
|
||
|
|
||
|
<LoadingCard id="pastes-loading" icon="fa-solid fa-clipboard"></LoadingCard>
|
||
|
|
||
|
@code {
|
||
|
[Parameter]
|
||
|
public Func<bool, Task<List<Paste>?>>? PastesFunc { get; set; }
|
||
|
[Parameter]
|
||
|
public bool Editable { get; set; } = false;
|
||
|
|
||
|
public EditPasteDialog? Dialog { get; set; }
|
||
|
|
||
|
private List<Paste>? 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;
|
||
|
}
|
||
|
}
|