diff --git a/Wave/Components/Layout/NavMenu.razor b/Wave/Components/Layout/NavMenu.razor index 87309fe..2fefa6c 100644 --- a/Wave/Components/Layout/NavMenu.razor +++ b/Wave/Components/Layout/NavMenu.razor @@ -11,9 +11,15 @@
  • Home
  • -
  • New Article
  • +
  • New Article
  • +
  • Drafts
  • + + +
  • In Review
  • +
    +
  • Manage users
  • diff --git a/Wave/Components/Pages/ArticleEditor.razor b/Wave/Components/Pages/ArticleEditor.razor index efa7050..6c2c478 100644 --- a/Wave/Components/Pages/ArticleEditor.razor +++ b/Wave/Components/Pages/ArticleEditor.razor @@ -124,8 +124,7 @@ article = new Article { Title = Model.Title!, Body = Model.Body!, - Author = User, - Status = ArticleStatus.Published // TODO remove + Author = User }; await context.AddAsync(article); } diff --git a/Wave/Components/Pages/Drafts.razor b/Wave/Components/Pages/Drafts.razor new file mode 100644 index 0000000..d595db7 --- /dev/null +++ b/Wave/Components/Pages/Drafts.razor @@ -0,0 +1,37 @@ +@page "/drafts" +@using Microsoft.EntityFrameworkCore +@using Wave.Data +@using Microsoft.AspNetCore.Identity + +@attribute [Authorize(Policy = "ArticleEditPermissions")] +@inject IDbContextFactory ContextFactory +@inject UserManager UserManager +@inject IStringLocalizer Localizer + +
    + @foreach (var article in Articles) { + + } + @if (Articles.Count < 1) { +

    @Localizer["NoArticles"]

    + } +
    + +@code { + [CascadingParameter] + private HttpContext HttpContext { get; set; } = default!; + + private List
    Articles { get; } = []; + + protected override async Task OnInitializedAsync() { + await using var context = await ContextFactory.CreateDbContextAsync(); + string userId = UserManager.GetUserId(HttpContext.User)!; + + Articles.AddRange(await + context.Set
    () + .Include(a => a.Author) + .Where(a => a.Status == ArticleStatus.Draft && a.Author.Id == userId) + .OrderByDescending(a => a.PublishDate) + .ToListAsync()); + } +} diff --git a/Wave/Components/Pages/Review.razor b/Wave/Components/Pages/Review.razor new file mode 100644 index 0000000..3827aa0 --- /dev/null +++ b/Wave/Components/Pages/Review.razor @@ -0,0 +1,31 @@ +@page "/review" +@using Wave.Data +@using Microsoft.EntityFrameworkCore + +@attribute [Authorize(Policy = "ArticleReviewPermissions")] +@inject IDbContextFactory ContextFactory +@inject IStringLocalizer Localizer + +
    + @foreach (var article in Articles) { + + } + @if(Articles.Count < 1) { +

    @Localizer["NoArticles"]

    + } +
    + +@code { + private List
    Articles { get; } = []; + + protected override async Task OnInitializedAsync() { + await using var context = await ContextFactory.CreateDbContextAsync(); + + Articles.AddRange(await + context.Set
    () + .Include(a => a.Author) + .Where(a => a.Status == ArticleStatus.InReview) + .OrderByDescending(a => a.PublishDate) + .ToListAsync()); + } +} diff --git a/Wave/Components/_Imports.razor b/Wave/Components/_Imports.razor index 57ee0de..d9ee222 100644 --- a/Wave/Components/_Imports.razor +++ b/Wave/Components/_Imports.razor @@ -1,6 +1,7 @@ @using System.Net.Http @using System.Net.Http.Json @using Microsoft.AspNetCore.Components.Authorization +@using Microsoft.AspNetCore.Authorization @using Microsoft.AspNetCore.Components.Forms @using Microsoft.AspNetCore.Components.Routing @using Microsoft.AspNetCore.Components.Web