@page "/artikelen/nieuw" @attribute [Authorize(Policy = "Editor")] @using System.ComponentModel.DataAnnotations @inject ArticleService Artikelen @inject SeasonService Seizoenen @inject UserService Gebruikers @inject UploadService Uploads Nieuw artikel — ProostenKrant

Nieuw artikel

Artikel voor de redactie aanmaken en eventueel direct publiceren.

@if (_fout is not null) {

@_fout

}
@foreach (var gebruiker in _gebruikers) { }
@foreach (var seizoen in _seizoenen) { }
@foreach (var gebruiker in _gebruikers) { }
@if (_participantsFout is not null) { @_participantsFout }
JPG, PNG, GIF of WEBP, maximaal 25 MB. @if (_afbeeldingFout is not null) { @_afbeeldingFout }
Annuleren
@code { [CascadingParameter] private HttpContext HttpContext { get; set; } = default!; [SupplyParameterFromForm(FormName = "artikel-nieuw")] private ArtikelInput Input { get; set; } = new(); private List _gebruikers = new(); private List _seizoenen = new(); private List _geselecteerd = new(); private string? _fout; private string? _participantsFout; private string? _afbeeldingFout; protected override async Task OnInitializedAsync() { Input ??= new(); _gebruikers = await Gebruikers.GetAllAsync(); _seizoenen = await Seizoenen.GetAllAsync(); var huidig = await Seizoenen.GetCurrentAsync(); Input.SeasonId ??= huidig?.Id ?? (_seizoenen.FirstOrDefault()?.Id ?? 0); Input.EventDate ??= DateTime.Today; Input.Status ??= "published"; } private async Task Opslaan() { Input ??= new(); var form = HttpContext.Request.Form; _geselecteerd = form["Participants"].SelectMany(v => (v ?? "").Split(',')) .Select(s => int.TryParse(s, out var id) ? id : 0).Where(id => id > 0).ToList(); if (Input.WriterId <= 0) { _fout = "Kies een schrijver."; return; } if (!_geselecteerd.Contains(Input.WriterId)) { _geselecteerd.Insert(0, Input.WriterId); } if (_geselecteerd.Count == 0) { _participantsFout = "Selecteer minstens één deelnemer."; return; } var (webPad, fout) = await Uploads.SaveArticleImageAsync(HttpContext.Request.Form.Files["Afbeelding"]); if (fout is not null) { _afbeeldingFout = fout; return; } var artikel = new Article { Title = Input.Title, Content = Input.Content, AuthorId = Input.WriterId, Participants = string.Join(",", _geselecteerd), EventDate = Input.EventDate, SeasonId = Input.SeasonId, ArticleImage = webPad, Status = Input.Status == "published" ? "published" : "draft", }; await Artikelen.CreateAsync(artikel); Nav.NavigateTo("/artikelen?melding=" + Uri.EscapeDataString("Artikel succesvol opgeslagen."), forceLoad: true); } private sealed class ArtikelInput { [Required(ErrorMessage = "Geef het artikel een titel (minstens 5 tekens).")] [MinLength(5, ErrorMessage = "De titel moet minstens 5 tekens bevatten.")] [MaxLength(255)] public string Title { get; set; } = ""; [Required(ErrorMessage = "Schrijf de tekst van het artikel (minstens 10 tekens).")] [MinLength(10, ErrorMessage = "De tekst moet minstens 10 tekens bevatten.")] public string Content { get; set; } = ""; public int WriterId { get; set; } public DateTime? EventDate { get; set; } public int? SeasonId { get; set; } public string? Status { get; set; } } }