< Summary

Information
Class: Pomodoro.Web.Components.TaskListBase
Assembly: Pomodoro.Web
File(s): /home/runner/work/Pomodoro/Pomodoro/src/Pomodoro.Web/Components/TaskList.razor.cs
Line coverage
100%
Covered lines: 48
Uncovered lines: 0
Coverable lines: 48
Total lines: 131
Line coverage: 100%
Branch coverage
100%
Covered branches: 8
Total branches: 8
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
get_Tasks()100%11100%
get_CurrentTaskId()100%11100%
get_OnTaskAdd()100%11100%
get_OnTaskSelect()100%11100%
get_OnTaskComplete()100%11100%
get_OnTaskDelete()100%11100%
get_OnTaskUncomplete()100%11100%
get_IsAddingTask()100%11100%
get_NewTaskName()100%11100%
get_IsAddDisabled()100%11100%
StartAddTask()100%11100%
CancelAddTask()100%11100%
HandleAddTask()100%22100%
HandleKeyPress()100%66100%
HandleTaskSelect()100%11100%
HandleTaskComplete()100%11100%
HandleTaskDelete()100%11100%
HandleTaskUncomplete()100%11100%

File(s)

/home/runner/work/Pomodoro/Pomodoro/src/Pomodoro.Web/Components/TaskList.razor.cs

#LineLine coverage
 1using Microsoft.AspNetCore.Components;
 2using Microsoft.AspNetCore.Components.Web;
 3using Pomodoro.Web.Models;
 4
 5namespace Pomodoro.Web.Components;
 6
 7/// <summary>
 8/// Code-behind for TaskList component
 9/// Separates business logic from view
 10/// </summary>
 11public class TaskListBase : ComponentBase
 12{
 13    #region Parameters (Model)
 14
 15    [Parameter]
 136016    public List<TaskItem> Tasks { get; set; } = new();
 17
 18    [Parameter]
 37119    public Guid? CurrentTaskId { get; set; }
 20
 21    [Parameter]
 33322    public EventCallback<string> OnTaskAdd { get; set; }
 23
 24    [Parameter]
 32625    public EventCallback<Guid> OnTaskSelect { get; set; }
 26
 27    [Parameter]
 32728    public EventCallback<Guid> OnTaskComplete { get; set; }
 29
 30    [Parameter]
 32731    public EventCallback<Guid> OnTaskDelete { get; set; }
 32
 33    [Parameter]
 32734    public EventCallback<Guid> OnTaskUncomplete { get; set; }
 35
 36    #endregion
 37
 38    #region State
 39
 38540    protected bool IsAddingTask { get; set; }
 34041    protected string NewTaskName { get; set; } = string.Empty;
 42
 43    /// <summary>
 44    /// Determines if the Add button should be disabled
 45    /// </summary>
 1446    protected bool IsAddDisabled => string.IsNullOrWhiteSpace(NewTaskName);
 47
 48    #endregion
 49
 50    #region Business Logic Methods
 51
 52    /// <summary>
 53    /// Starts the add task form
 54    /// </summary>
 55    protected void StartAddTask()
 1056    {
 1057        IsAddingTask = true;
 1058        NewTaskName = string.Empty;
 1059    }
 60
 61    /// <summary>
 62    /// Cancels adding a new task
 63    /// </summary>
 64    protected void CancelAddTask()
 265    {
 266        IsAddingTask = false;
 267        NewTaskName = string.Empty;
 268    }
 69
 70    /// <summary>
 71    /// Handles adding a new task
 72    /// </summary>
 73    protected async Task HandleAddTask()
 474    {
 475        if (!string.IsNullOrWhiteSpace(NewTaskName))
 476        {
 477            await OnTaskAdd.InvokeAsync(NewTaskName.Trim());
 478            NewTaskName = string.Empty;
 479            IsAddingTask = false;
 480        }
 481    }
 82
 83    /// <summary>
 84    /// Handles keyboard events in the add task input
 85    /// </summary>
 86    protected async Task HandleKeyPress(KeyboardEventArgs e)
 287    {
 288        if (e.Key == Constants.Keys.Enter && !string.IsNullOrWhiteSpace(NewTaskName))
 189        {
 190            await HandleAddTask();
 191        }
 192        else if (e.Key == Constants.Keys.Escape)
 193        {
 194            CancelAddTask();
 195        }
 296    }
 97
 98    /// <summary>
 99    /// Handles task selection
 100    /// </summary>
 101    protected async Task HandleTaskSelect(Guid taskId)
 1102    {
 1103        await OnTaskSelect.InvokeAsync(taskId);
 1104    }
 105
 106    /// <summary>
 107    /// Handles task completion
 108    /// </summary>
 109    protected async Task HandleTaskComplete(Guid taskId)
 1110    {
 1111        await OnTaskComplete.InvokeAsync(taskId);
 1112    }
 113
 114    /// <summary>
 115    /// Handles task deletion
 116    /// </summary>
 117    protected async Task HandleTaskDelete(Guid taskId)
 1118    {
 1119        await OnTaskDelete.InvokeAsync(taskId);
 1120    }
 121
 122    /// <summary>
 123    /// Handles task uncomplete (undo completion)
 124    /// </summary>
 125    protected async Task HandleTaskUncomplete(Guid taskId)
 1126    {
 1127        await OnTaskUncomplete.InvokeAsync(taskId);
 1128    }
 129
 130    #endregion
 131}