@implements IDisposable; @inject IAgileService AgileService; @layout PageLayout @page "/agile" @if (!AgileService.IsLoaded()) { } else { Agile @foreach (var sprint in AgileService.AgileSprintModels!.OrderBy(e => e.EndDate).Reverse()) { @sprint.Name @if (sprint.StartDate != null) { Start: @sprint.StartDate.Value.ToString("dd/MM/yyyy") } @if (sprint.EndDate != null) { End: @sprint.EndDate.Value.ToString("dd/MM/yyyy") } } Backlog What is Agile? Agile is a work methodology for determing task assignment and release deadlines. My agile practice will be creating tasks in a backlog. Assigning them to weekly sprints. And completing all tasks in the allotted time frame. Any unfinished tasks are moved into the next sprint, or the sprint will be extended by a week. } @code { #if NO_SQL #else [Inject] DatabaseContext Database { get; set; } [Parameter] public DbSet Tasks { get; set; } [Parameter] public DbSet Sprints { get; set; } #endif private readonly List backlog = new(); protected override void OnInitialized() { AgileService.Subscribe(HasChanged); } void IDisposable.Dispose() { AgileService.Unsubscribe(HasChanged); } void HasChanged() { backlog.Clear(); foreach (var task in AgileService.AgileTaskModels!) { if (task.AgileSprintModelId == null) { backlog.Add(task); } } StateHasChanged(); } protected override async Task OnInitializedAsync() { #if NO_SQL await AgileService.Load(); #else await AgileService.Load(Database); #endif } }