Files
WebNovelPortal/WebNovelPortal/Pages/NovelDetails.razor

75 lines
2.0 KiB
Plaintext

@page "/novel/{NovelId}"
@using WebNovelPortal.AccessLayers
@if (Novel == null)
{
<h3>Loading...</h3>
}
else
{
<h3><a href="@Novel.Novel.Url">@(Novel.Novel.Title)</a></h3>
<h4>Author: <a href="@Novel.Novel.Author?.Url">@(Novel.Novel.Author?.Name ?? "Anonymous")</a></h4>
<h4>Date Posted: @Novel.Novel.DatePosted</h4>
<h4>Date Updated: @Novel.Novel.LastUpdated</h4>
<h4>Tags</h4>
<ul>
@foreach (var tag in Novel.Novel.Tags)
{
<li>@tag.TagValue</li>
}
</ul>
<h4>Chapters (Read <input @bind="currentLastChapter" /> / @Novel.Novel.Chapters.Count())</h4>
@if (currentLastChapter != originalLastChapter)
{
<button disabled="@awaitingRequest" @onclick="@UpdateLastReadChapter">Save</button>
}
<ol>
@foreach (var chapter in Novel.Novel.Chapters.OrderBy(i => i.ChapterNumber))
{
<li><a href="@chapter.Url">@chapter.Name</a></li>
}
</ol>
}
@code {
[Parameter]
public string? NovelId { get; set; }
[Inject]
public WebApiAccessLayer api { get; set; }
UserNovel? Novel { get; set; }
int originalLastChapter;
int currentLastChapter;
bool awaitingRequest;
protected override async Task OnAfterRenderAsync(bool firstRender)
{
if (firstRender)
{
await UpdateNovelDetails();
}
await base.OnAfterRenderAsync(firstRender);
}
private async Task UpdateNovelDetails()
{
Novel = await api.GetNovel(NovelId);
originalLastChapter = Novel.LastChapterRead;
currentLastChapter = originalLastChapter;
StateHasChanged();
}
private async Task UpdateLastReadChapter()
{
SetAwaitingRequest(true);
await api.UpdateLastChapterRead(Novel.Novel, currentLastChapter);
await UpdateNovelDetails();
SetAwaitingRequest(false);
}
private void SetAwaitingRequest(bool enabled)
{
awaitingRequest = enabled;
StateHasChanged();
}
}