diff --git a/src/ClaudeDo.Ui/ViewModels/Islands/TaskRowViewModel.cs b/src/ClaudeDo.Ui/ViewModels/Islands/TaskRowViewModel.cs index 4c07520..1b9ddee 100644 --- a/src/ClaudeDo.Ui/ViewModels/Islands/TaskRowViewModel.cs +++ b/src/ClaudeDo.Ui/ViewModels/Islands/TaskRowViewModel.cs @@ -1,4 +1,7 @@ +using System.Collections.ObjectModel; using CommunityToolkit.Mvvm.ComponentModel; +using ClaudeDo.Data.Models; +using TaskStatus = ClaudeDo.Data.Models.TaskStatus; namespace ClaudeDo.Ui.ViewModels.Islands; @@ -6,5 +9,37 @@ public sealed partial class TaskRowViewModel : ViewModelBase { public required string Id { get; init; } [ObservableProperty] private string _title = ""; + [ObservableProperty] private string _listName = ""; [ObservableProperty] private bool _done; + [ObservableProperty] private bool _isStarred; + [ObservableProperty] private bool _isMyDay; + [ObservableProperty] private bool _isSelected; + [ObservableProperty] private TaskStatus _status; + [ObservableProperty] private string? _branch; + [ObservableProperty] private string? _diffStat; + [ObservableProperty] private string? _liveTail; + + public string StatusChipClass => Status switch + { + TaskStatus.Running => "running", + TaskStatus.Failed => "error", + TaskStatus.Done => "review", + TaskStatus.Queued => "queued", + _ => "idle", + }; + + partial void OnStatusChanged(TaskStatus value) => OnPropertyChanged(nameof(StatusChipClass)); + + public static TaskRowViewModel FromEntity(TaskEntity t) => new() + { + Id = t.Id, + Title = t.Title, + ListName = t.List?.Name ?? "", + Done = t.Status == TaskStatus.Done, + IsStarred = t.IsStarred, + IsMyDay = t.IsMyDay, + Status = t.Status, + Branch = t.Worktree?.BranchName, + DiffStat = t.Worktree?.DiffStat, + }; } diff --git a/tests/ClaudeDo.Worker.Tests/ClaudeDo.Worker.Tests.csproj b/tests/ClaudeDo.Worker.Tests/ClaudeDo.Worker.Tests.csproj index 71102ba..bfa4f50 100644 --- a/tests/ClaudeDo.Worker.Tests/ClaudeDo.Worker.Tests.csproj +++ b/tests/ClaudeDo.Worker.Tests/ClaudeDo.Worker.Tests.csproj @@ -24,6 +24,7 @@ + diff --git a/tests/ClaudeDo.Worker.Tests/UiVm/TaskRowViewModelTests.cs b/tests/ClaudeDo.Worker.Tests/UiVm/TaskRowViewModelTests.cs new file mode 100644 index 0000000..67e1e61 --- /dev/null +++ b/tests/ClaudeDo.Worker.Tests/UiVm/TaskRowViewModelTests.cs @@ -0,0 +1,22 @@ +using ClaudeDo.Data.Models; +using ClaudeDo.Ui.ViewModels.Islands; +using Xunit; +using TaskStatus = ClaudeDo.Data.Models.TaskStatus; + +namespace ClaudeDo.Worker.Tests.UiVm; + +public class TaskRowViewModelTests +{ + [Theory] + [InlineData(TaskStatus.Running, "running")] + [InlineData(TaskStatus.Failed, "error")] + [InlineData(TaskStatus.Done, "review")] + [InlineData(TaskStatus.Queued, "queued")] + [InlineData(TaskStatus.Manual, "idle")] + public void StatusChipClass_Maps_Correctly(TaskStatus s, string expected) + { + var vm = new TaskRowViewModel { Id = "t" }; + vm.Status = s; + Assert.Equal(expected, vm.StatusChipClass); + } +}