Feat: Enable toogling homework states
All checks were successful
SonarQube Scan / SonarQube Trigger (push) Successful in 35s

This commit is contained in:
Namu
2025-12-05 23:23:56 +01:00
parent b19203281d
commit e1341bd0a1
4 changed files with 56 additions and 4 deletions

View File

@@ -33,8 +33,13 @@ else
@foreach (var homework in homeworks)
{
<li>
<strong>@homework.Title</strong> - Due: @homework.DueDate.ToShortDateString() - Completed: @(homework.IsCompleted ? "Yes" : "No")
<HomeworkDeletion HomeworkId="@homework.Id" OnDeleted="HandleDeletion" />
<p>
<strong>@homework.Title</strong> - Due: @homework.DueDate.ToShortDateString() - Completed: @(homework.IsCompleted ? "Yes" : "No")
</p>
<div class="btn-group">
<HomeworkDeletion HomeworkId="@homework.Id" OnDeleted="HandleDeletion" />
<HomeworkToogling IdHomework="@homework.Id" OnToogle="LoadHomeworksAsync" />
</div>
</li>
}
</ul>
@@ -57,6 +62,17 @@ else
StateHasChanged();
}
private async Task HandleToogle(int toogleId)
{
var toogledHomework = homeworks?
.Where(w => w.Id == toogleId)
.FirstOrDefault();
toogledHomework?.IsCompleted = !toogledHomework.IsCompleted;
StateHasChanged();
}
private async Task LoadHomeworksAsync()
{
homeworks = new();

View File

@@ -0,0 +1,25 @@
@rendermode InteractiveServer
@attribute [Authorize]
@using Microsoft.AspNetCore.Authorization
@using WorkManagementTool.Services
@inject HomeworkService HomeworkService
<button class="btn btn-primary" @onclick="ToggleHomeworkStatus">Toogle done/undone</button>
@code {
[Parameter]
public int IdHomework { get; set; }
[Parameter]
public EventCallback<int> OnToogle { get; set; }
private bool? Worked { get; set; } = null;
public async Task ToggleHomeworkStatus(MouseEventArgs e)
{
Worked = await HomeworkService.ToggleHomeworkStatusAsync(IdHomework);
if (Worked.HasValue && Worked.Value)
await OnToogle.InvokeAsync(IdHomework);
}
}

View File

@@ -10,12 +10,11 @@ namespace WorkManagementTool.Data.Entities
[MinLength(3, ErrorMessage = "Title must be at least 3 caracters")]
public required string Title { get; set; } = null!;
[MaxLength(1000, ErrorMessage = "Description must be less than 1000 caracters")]
[MinLength(3, ErrorMessage = "Description must be at least 3 caracters")]
public string? Description { get; set; }
[Required]
[DataType(DataType.Date)]
public required DateTime DueDate { get; set; }
public required bool IsCompleted { get; set; }
public bool IsCompleted { get; set; } = false;
public SchoolSubject SchoolSubject { get; set; } = null!;
public string? DeliveryMethod { get; set; }
public ApplicationUser CreatedBy { get; set; } = null!;

View File

@@ -65,5 +65,17 @@ namespace WorkManagementTool.Services
await _context.SaveChangesAsync();
}
}
public async Task<bool> ToggleHomeworkStatusAsync(int id)
{
var homework = await _context.Homeworks.FindAsync(id);
if (homework != null)
{
homework.IsCompleted = !homework.IsCompleted;
await _context.SaveChangesAsync();
return true;
}
return false;
}
}
}