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

@Title

@if (Lab != null) {
@foreach (var country in Countries) { }
@foreach (var test in Tests) { var offer = Lab.TestOffers.FirstOrDefault(x => x.TestId == test.Id);
@if (offer == null) { } else { }
@test.Abbreviation
@test.Name
@if (offer != null) {
}
}
} else {

NOT FOUND

} @if (ShowDeleteModal) { } @code { [Inject] public NavigationManager NavigationManager { get; set; } = null!; [Inject] public IDbContextFactory DbContextFactory { get; set; } = null!; [Parameter] public Guid? Id { get; set; } private Lab? Lab { get; set; } private List Countries { get; set; } = new(); private List Tests { get; set; } = new(); private string Title => Id == null ? "Add lab" : "Edit lab"; private Guid SelectedCountryId { get => Lab?.CountryId.Value ?? Guid.Empty; set => Lab!.CountryId = CountryId.FromGuid(value); } private List NewOffers { get; set; } = new(); private List RemovedOffers { get; set; } = new(); private bool ShowDeleteModal { get; set; } protected override void OnInitialized() { base.OnInitialized(); using var ctx = DbContextFactory.CreateDbContext(); Countries = ctx.Set().ToList(); Tests = ctx.Set().ToList(); if (Id != null) { Lab = ctx.Set() .Include(x => x.TestOffers) .First(x => x.Id == LabId.FromGuid(Id.Value)); Lab.Country = null!; // this seems super hacky, wtf } else { Lab = new Lab { CountryId = Countries.First().Id }; } } private void HandleValidSubmit() { using var ctx = DbContextFactory.CreateDbContext(); if (Id == null) { ctx.Add(Lab!); } else { ctx.Update(Lab!); } ctx.AddRange(NewOffers); ctx.RemoveRange(RemovedOffers); ctx.SaveChanges(); NavigationManager.NavigateTo("/labs"); } private void AddOffer(Test test) { var offer = new TestOffer { TestId = test.Id }; Lab!.TestOffers.Add(offer); NewOffers.Add(offer); } private void RemoveOffer(TestOffer offer) { Lab!.TestOffers.Remove(offer); RemovedOffers.Add(offer); } private void DeleteLab() { using var ctx = DbContextFactory.CreateDbContext(); ctx.RemoveRange(Lab!.TestOffers); ctx.Remove(Lab!); ctx.SaveChanges(); NavigationManager.NavigateTo("/labs"); } }