@page "/beheer/versiehistorie" @attribute [Authorize] @inject BeheerService Beheerkant @inject VersiehistorieService Historie @rendermode InteractiveServer Versiehistorie - Beheer @* Het beheerscherm voor de versiehistorie: de lijst "wat is er nieuw" die op de website en in de app onder "Versiehistorie" staat. Eén tabel voor beide, dus hier een regel toevoegen is genoeg. Een regel is: een datum, eventueel een appversie, een vet kopje en een tekst. Gewone tekst, geen opmaak. Wat erin hoort: nieuwe of wezenlijk gewijzigde functies; geen bugfixes. Een regel verbergen haalt hem weg bij de lezers zonder hem kwijt te raken. Wie de app al heeft van vóór deze tabel (versiecode 3 of ouder) ziet de tekst die in die app is ingebakken. Zie docs/Versiehistorie.md. *@ @if (!Magdit) {

Niet gevonden

Deze pagina bestaat niet, of hij is niet voor jou.

} else {

Versiehistorie

Wat er nieuw is, nieuwste bovenaan. Een nieuwe regel staat meteen op de website en in de app, zonder dat er een nieuwe versie van de app nodig is.

‹ Terug naar beheer

@if (Melding is not null) {
@Melding
} @* ------------------------------------------------------------ nieuwe of bestaande regel *@

@(BewerkId is null ? "Nieuwe regel" : "Regel wijzigen")

Alleen invullen als dit bij een uitgebrachte versie van de app hoort.
@Formulier.Tekst.Length van @VersiehistorieService.MaxTekst tekens. Gewone tekst, geen opmaak.
@if (BewerkId is not null) { }
@* ------------------------------------------------------------ de lijst *@ @if (Lijst is null) {

Bezig met laden…

} else if (Lijst.Count == 0) {

Er staat nog niets in de versiehistorie.

} else {
@foreach (var r in Lijst) {
@Datums.Datum(r.Datum) @if (!string.IsNullOrWhiteSpace(r.Versie)) { · versie @r.Versie }
@r.Kop
@r.Tekst
@if (!r.Zichtbaar) {
Verborgen
}
@if (Weghalen == r.Id) { Echt verwijderen? } else { }
}
} } @code { [CascadingParameter] private Task? AuthState { get; set; } private long _gebruikerId; private bool Magdit, Bezig; private string? Melding, MeldingSoort; private IReadOnlyList? Lijst; private int? BewerkId; private int? Weghalen; private RegelFormulier Formulier = NieuwFormulier(); private sealed class RegelFormulier { public DateOnly Datum { get; set; } public string Versie { get; set; } = ""; public string Kop { get; set; } = ""; public string Tekst { get; set; } = ""; public bool Zichtbaar { get; set; } = true; } private static RegelFormulier NieuwFormulier() => new() { Datum = DateOnly.FromDateTime(DateTime.Today) }; protected override async Task OnInitializedAsync() { if (AuthState is null) return; _gebruikerId = (await AuthState).User.UserId() ?? 0; Magdit = await Beheerkant.IsBeheerderAsync(_gebruikerId); if (!Magdit) return; await Laden(); } private async Task Laden() { var resultaat = await Historie.OverzichtAsync(_gebruikerId); if (resultaat.Succeeded) Lijst = resultaat.Value; else Meld(resultaat.Error, false); } private void Meld(string? tekst, bool goed) { Melding = tekst; MeldingSoort = goed ? "goed" : "fout"; } private void Wijzigen(VersieRegelBeheerbeeld r) { BewerkId = r.Id; Weghalen = null; Melding = null; Formulier = new RegelFormulier { Datum = r.Datum, Versie = r.Versie ?? "", Kop = r.Kop, Tekst = r.Tekst, Zichtbaar = r.Zichtbaar }; } private void Annuleren() { BewerkId = null; Formulier = NieuwFormulier(); } private async Task Opslaan() { Bezig = true; try { var versie = string.IsNullOrWhiteSpace(Formulier.Versie) ? null : Formulier.Versie.Trim(); bool gelukt; string? fout; if (BewerkId is null) { var gemaakt = await Historie.MaakAsync(_gebruikerId, Formulier.Datum, versie, Formulier.Kop, Formulier.Tekst, Formulier.Zichtbaar); gelukt = gemaakt.Succeeded; fout = gemaakt.Error; } else { var gewijzigd = await Historie.WijzigAsync(_gebruikerId, BewerkId.Value, Formulier.Datum, versie, Formulier.Kop, Formulier.Tekst, Formulier.Zichtbaar); gelukt = gewijzigd.Succeeded; fout = gewijzigd.Error; } if (gelukt) { Meld(BewerkId is null ? "De regel is toegevoegd." : "De wijziging is opgeslagen.", true); BewerkId = null; Formulier = NieuwFormulier(); await Laden(); } else Meld(fout, false); } finally { Bezig = false; } } private async Task ZichtbaarOmzetten(VersieRegelBeheerbeeld r) { Bezig = true; try { var resultaat = await Historie.WijzigAsync(_gebruikerId, r.Id, r.Datum, r.Versie, r.Kop, r.Tekst, !r.Zichtbaar); if (resultaat.Succeeded) { Meld(r.Zichtbaar ? "De regel is verborgen." : "De regel is weer zichtbaar.", true); await Laden(); } else Meld(resultaat.Error, false); } finally { Bezig = false; } } private async Task Verwijderen(VersieRegelBeheerbeeld r) { Bezig = true; try { var resultaat = await Historie.VerwijderAsync(_gebruikerId, r.Id); if (resultaat.Succeeded) { Meld("De regel is verwijderd.", true); Weghalen = null; if (BewerkId == r.Id) Annuleren(); await Laden(); } else Meld(resultaat.Error, false); } finally { Bezig = false; } } }