From e1341bd0a1c2f827359658cd0b2a4c7776d95f3e Mon Sep 17 00:00:00 2001 From: Namu Date: Fri, 5 Dec 2025 23:23:56 +0100 Subject: [PATCH] Feat: Enable toogling homework states --- .../Components/Homework/HomeworkListing.razor | 20 +++++++++++++-- .../Homework/HomeworkToogling.razor | 25 +++++++++++++++++++ WorkManagementTool/Data/Entities/Homework.cs | 3 +-- .../Services/HomeworkService.cs | 12 +++++++++ 4 files changed, 56 insertions(+), 4 deletions(-) create mode 100644 WorkManagementTool/Components/Homework/HomeworkToogling.razor diff --git a/WorkManagementTool/Components/Homework/HomeworkListing.razor b/WorkManagementTool/Components/Homework/HomeworkListing.razor index 13bcefa..b9384c3 100644 --- a/WorkManagementTool/Components/Homework/HomeworkListing.razor +++ b/WorkManagementTool/Components/Homework/HomeworkListing.razor @@ -33,8 +33,13 @@ else @foreach (var homework in homeworks) {
  • - @homework.Title - Due: @homework.DueDate.ToShortDateString() - Completed: @(homework.IsCompleted ? "Yes" : "No") - +

    + @homework.Title - Due: @homework.DueDate.ToShortDateString() - Completed: @(homework.IsCompleted ? "Yes" : "No") +

    +
    + + +
  • } @@ -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(); diff --git a/WorkManagementTool/Components/Homework/HomeworkToogling.razor b/WorkManagementTool/Components/Homework/HomeworkToogling.razor new file mode 100644 index 0000000..3845a4f --- /dev/null +++ b/WorkManagementTool/Components/Homework/HomeworkToogling.razor @@ -0,0 +1,25 @@ +@rendermode InteractiveServer +@attribute [Authorize] + +@using Microsoft.AspNetCore.Authorization +@using WorkManagementTool.Services +@inject HomeworkService HomeworkService + + + +@code { + [Parameter] + public int IdHomework { get; set; } + + [Parameter] + public EventCallback 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); + } +} diff --git a/WorkManagementTool/Data/Entities/Homework.cs b/WorkManagementTool/Data/Entities/Homework.cs index 2fecf41..4d0b27f 100644 --- a/WorkManagementTool/Data/Entities/Homework.cs +++ b/WorkManagementTool/Data/Entities/Homework.cs @@ -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!; diff --git a/WorkManagementTool/Services/HomeworkService.cs b/WorkManagementTool/Services/HomeworkService.cs index 0219ebe..f25726b 100644 --- a/WorkManagementTool/Services/HomeworkService.cs +++ b/WorkManagementTool/Services/HomeworkService.cs @@ -65,5 +65,17 @@ namespace WorkManagementTool.Services await _context.SaveChangesAsync(); } } + + public async Task ToggleHomeworkStatusAsync(int id) + { + var homework = await _context.Homeworks.FindAsync(id); + if (homework != null) + { + homework.IsCompleted = !homework.IsCompleted; + await _context.SaveChangesAsync(); + return true; + } + return false; + } } }