@page "/tests/add" @page "/tests/{id:guid}" @using Microsoft.EntityFrameworkCore @using Microsoft.AspNetCore.Components @Title

@Title

@if (Test != null) {

Synonyms

@foreach (var synonym in Test.Synonyms) {
}
} else {

NOT FOUND

} @if (ShowDeleteModal) { } @code { [Inject] public NavigationManager NavigationManager { get; set; } = null!; [Inject] public IDbContextFactory DbContextFactory { get; set; } = null!; [Inject] public IJSRuntime Js { get; set; } = null!; [Parameter] public Guid? Id { get; set; } private Test? Test { get; set; } private string Title => Id == null ? "Add test" : "Edit test"; private string NewSynonym { get; set; } = ""; private List NewSynonyms { get; set; } = new(); private List RemovedSynonyms { get; set; } = new(); private bool ShowDeleteModal { get; set; } protected override void OnAfterRender(bool firstRender) { if (firstRender) { Js.InvokeVoidAsync("PreventEnterKey", "testNewSynonymInput"); } } protected override void OnInitialized() { base.OnInitialized(); using var ctx = DbContextFactory.CreateDbContext(); if (Id != null) { Test = ctx.Set() .Include(x => x.Synonyms) .First(x => x.Id == TestId.FromGuid(Id.Value)); } else { Test = new Test(); } } private void HandleValidSubmit() { using var ctx = DbContextFactory.CreateDbContext(); if (Id == null) { ctx.Add(Test!); } else { ctx.Update(Test!); } ctx.AddRange(NewSynonyms); ctx.RemoveRange(RemovedSynonyms); ctx.SaveChanges(); NavigationManager.NavigateTo("/tests"); } private void AddSynonym() { if (NewSynonym == "") return; var synonym = new TestSynonym { Name = NewSynonym }; Test!.Synonyms.Add(synonym); NewSynonyms.Add(synonym); NewSynonym = ""; } private void NewSynonymKeydown(KeyboardEventArgs e) { if (e.Code == "Enter") { AddSynonym(); } } private void NewSynonymBlur() { AddSynonym(); } private void DeleteSynonym(TestSynonym synonym) { Test!.Synonyms.Remove(synonym); RemovedSynonyms.Add(synonym); } private void DeleteTest() { using var ctx = DbContextFactory.CreateDbContext(); ctx.RemoveRange(Test!.TestOffers); ctx.Remove(Test!); ctx.SaveChanges(); NavigationManager.NavigateTo("/tests"); } }