feat(ui): add batch-merge row state to worktrees cockpit VM
This commit is contained in:
@@ -12,6 +12,8 @@ using TaskStatus = ClaudeDo.Data.Models.TaskStatus;
|
|||||||
|
|
||||||
namespace ClaudeDo.Ui.ViewModels.Modals;
|
namespace ClaudeDo.Ui.ViewModels.Modals;
|
||||||
|
|
||||||
|
public enum BatchMergeOutcome { None, Merging, Merged, Conflict, Blocked, Failed }
|
||||||
|
|
||||||
public sealed partial class WorktreeOverviewRowViewModel : ViewModelBase
|
public sealed partial class WorktreeOverviewRowViewModel : ViewModelBase
|
||||||
{
|
{
|
||||||
[ObservableProperty] private string _taskId = "";
|
[ObservableProperty] private string _taskId = "";
|
||||||
@@ -27,6 +29,14 @@ public sealed partial class WorktreeOverviewRowViewModel : ViewModelBase
|
|||||||
[ObservableProperty][NotifyPropertyChangedFor(nameof(AgeText))] private DateTime _createdAt;
|
[ObservableProperty][NotifyPropertyChangedFor(nameof(AgeText))] private DateTime _createdAt;
|
||||||
[ObservableProperty] private bool _pathExistsOnDisk;
|
[ObservableProperty] private bool _pathExistsOnDisk;
|
||||||
[ObservableProperty] private bool _isSelected;
|
[ObservableProperty] private bool _isSelected;
|
||||||
|
[ObservableProperty] private bool _isChecked;
|
||||||
|
[ObservableProperty]
|
||||||
|
[NotifyPropertyChangedFor(nameof(IsConflict))]
|
||||||
|
[NotifyPropertyChangedFor(nameof(HasOutcome))]
|
||||||
|
private BatchMergeOutcome _mergeOutcome;
|
||||||
|
|
||||||
|
public bool IsConflict => MergeOutcome == BatchMergeOutcome.Conflict;
|
||||||
|
public bool HasOutcome => MergeOutcome != BatchMergeOutcome.None;
|
||||||
|
|
||||||
public string AgeText => FormatAge(DateTime.UtcNow - CreatedAt);
|
public string AgeText => FormatAge(DateTime.UtcNow - CreatedAt);
|
||||||
public bool IsActive => State == WorktreeState.Active;
|
public bool IsActive => State == WorktreeState.Active;
|
||||||
|
|||||||
@@ -0,0 +1,31 @@
|
|||||||
|
using ClaudeDo.Data.Models;
|
||||||
|
using ClaudeDo.Ui.ViewModels.Modals;
|
||||||
|
using TaskStatus = ClaudeDo.Data.Models.TaskStatus;
|
||||||
|
using Xunit;
|
||||||
|
|
||||||
|
namespace ClaudeDo.Ui.Tests.ViewModels;
|
||||||
|
|
||||||
|
public class WorktreesOverviewBatchMergeTests
|
||||||
|
{
|
||||||
|
private static WorktreeOverviewRowViewModel ActiveRow(string id) => new()
|
||||||
|
{
|
||||||
|
TaskId = id,
|
||||||
|
TaskTitle = $"Task {id}",
|
||||||
|
TaskStatus = TaskStatus.WaitingForReview,
|
||||||
|
State = WorktreeState.Active,
|
||||||
|
};
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void Row_outcome_helpers_reflect_state()
|
||||||
|
{
|
||||||
|
var row = ActiveRow("a");
|
||||||
|
Assert.Equal(BatchMergeOutcome.None, row.MergeOutcome);
|
||||||
|
Assert.False(row.IsConflict);
|
||||||
|
|
||||||
|
row.MergeOutcome = BatchMergeOutcome.Conflict;
|
||||||
|
Assert.True(row.IsConflict);
|
||||||
|
|
||||||
|
row.MergeOutcome = BatchMergeOutcome.Merged;
|
||||||
|
Assert.False(row.IsConflict);
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user