-
-
-
- @featured.Title
-
- @featured.Title
- @featured.PublishDate.ToString("g")
-
- - @featured.Body[..Math.Min(400, featured.Body.Length)] -
-
-
+} else {
+ @if (Articles.FirstOrDefault() is {} featured) {
+
+
+
-
-
-}
-
-
+
-
+
+
+ @featured.Title
+
+ @featured.Title
+ @featured.PublishDate.ToString("g")
+
+ + @featured.Body[..Math.Min(400, featured.Body.Length)] +
+
+
+
- @foreach (var article in Articles.Skip(1)) {
-
+
+
}
-
+
+
+ @foreach (var article in Articles.Skip(1)) {
+
+ }
+
+}
@if (HasMore) {
@@ -59,36 +61,45 @@
private List Articles { get; } = [];
private bool HasMore { get; set; }
+ private bool Busy { get; set; } = true;
protected override async Task OnAfterRenderAsync(bool firstRender) {
if (firstRender) {
+ try {
+ await using var context = await ContextFactory.CreateDbContextAsync();
+
+ var now = DateTimeOffset.UtcNow;
+ var query = context.Set()
+ .Include(a => a.Author)
+ .Where(a => a.Status >= ArticleStatus.Published && a.PublishDate <= now)
+ .OrderByDescending(a => a.PublishDate);
+ var articles = await query.Take(11).ToListAsync();
+ HasMore = (await query.CountAsync()) > 11;
+ Articles.AddRange(articles);
+ } finally {
+ Busy = false;
+ await InvokeAsync(StateHasChanged);
+ }
+ }
+ }
+
+ private async Task More() {
+ try {
+ Busy = HasMore = true;
await using var context = await ContextFactory.CreateDbContextAsync();
var now = DateTimeOffset.UtcNow;
var query = context.Set()
.Include(a => a.Author)
.Where(a => a.Status >= ArticleStatus.Published && a.PublishDate <= now)
- .OrderByDescending(a => a.PublishDate);
- var articles = await query.Take(11).ToListAsync();
- HasMore = (await query.CountAsync()) > 11;
+ .OrderByDescending(a => a.PublishDate)
+ .Skip(Articles.Count);
+ var articles = await query.Take(10).ToListAsync();
Articles.AddRange(articles);
- await InvokeAsync(StateHasChanged);
+ HasMore = (await query.CountAsync()) > 10;
+ } finally {
+ Busy = false;
}
}
- private async Task More() {
- HasMore = false;
- await using var context = await ContextFactory.CreateDbContextAsync();
-
- var now = DateTimeOffset.UtcNow;
- var query = context.Set()
- .Include(a => a.Author)
- .Where(a => a.Status >= ArticleStatus.Published && a.PublishDate <= now)
- .OrderByDescending(a => a.PublishDate)
- .Skip(Articles.Count);
- var articles = await query.Take(10).ToListAsync();
- Articles.AddRange(articles);
- HasMore = (await query.CountAsync()) > 10;
- }
-
}
\ No newline at end of file