refactor(ui): test planning detail pane via real ViewModel and restore merge-all IsEnabled binding
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2
src/ClaudeDo.Ui/AssemblyInfo.cs
Normal file
2
src/ClaudeDo.Ui/AssemblyInfo.cs
Normal file
@@ -0,0 +1,2 @@
|
||||
using System.Runtime.CompilerServices;
|
||||
[assembly: InternalsVisibleTo("ClaudeDo.Ui.Tests")]
|
||||
@@ -1,7 +1,14 @@
|
||||
using System.ComponentModel;
|
||||
using ClaudeDo.Data.Models;
|
||||
|
||||
namespace ClaudeDo.Ui.Services;
|
||||
|
||||
public interface IWorkerClient
|
||||
public interface IWorkerClient : INotifyPropertyChanged
|
||||
{
|
||||
bool IsConnected { get; }
|
||||
|
||||
event Action<string, string, DateTime>? TaskStartedEvent;
|
||||
event Action<string, string, string, DateTime>? TaskFinishedEvent;
|
||||
event Action<string>? TaskUpdatedEvent;
|
||||
event Action<string>? WorktreeUpdatedEvent;
|
||||
event Action<string, string>? TaskMessageEvent;
|
||||
@@ -13,6 +20,13 @@ public interface IWorkerClient
|
||||
event Action<string>? PlanningCompletedEvent;
|
||||
|
||||
Task WakeQueueAsync();
|
||||
Task RunNowAsync(string taskId);
|
||||
Task ContinueTaskAsync(string taskId, string followUpPrompt);
|
||||
Task ResetTaskAsync(string taskId);
|
||||
Task CancelTaskAsync(string taskId);
|
||||
Task<List<AgentInfo>> GetAgentsAsync();
|
||||
Task<ListConfigDto?> GetListConfigAsync(string listId);
|
||||
Task UpdateTaskAgentSettingsAsync(UpdateTaskAgentSettingsDto dto);
|
||||
Task StartPlanningSessionAsync(string taskId, CancellationToken ct = default);
|
||||
Task ResumePlanningSessionAsync(string taskId, CancellationToken ct = default);
|
||||
Task DiscardPlanningSessionAsync(string taskId, CancellationToken ct = default);
|
||||
|
||||
@@ -16,7 +16,7 @@ namespace ClaudeDo.Ui.ViewModels.Islands;
|
||||
public sealed partial class DetailsIslandViewModel : ViewModelBase
|
||||
{
|
||||
private readonly IDbContextFactory<ClaudeDoDbContext> _dbFactory;
|
||||
private readonly WorkerClient _worker;
|
||||
private readonly IWorkerClient _worker;
|
||||
private readonly IServiceProvider _services;
|
||||
|
||||
// Current task row (set by IslandsShellViewModel via Bind)
|
||||
@@ -151,7 +151,7 @@ public sealed partial class DetailsIslandViewModel : ViewModelBase
|
||||
// Set by the view so DeleteTaskCommand can show an error message
|
||||
public Func<string, System.Threading.Tasks.Task>? ShowErrorAsync { get; set; }
|
||||
|
||||
public DetailsIslandViewModel(IDbContextFactory<ClaudeDoDbContext> dbFactory, WorkerClient worker, IServiceProvider services)
|
||||
public DetailsIslandViewModel(IDbContextFactory<ClaudeDoDbContext> dbFactory, IWorkerClient worker, IServiceProvider services)
|
||||
{
|
||||
_dbFactory = dbFactory;
|
||||
_worker = worker;
|
||||
@@ -545,7 +545,7 @@ public sealed partial class DetailsIslandViewModel : ViewModelBase
|
||||
catch { /* best-effort */ }
|
||||
}
|
||||
|
||||
private void RecomputeCanMergeAll()
|
||||
internal void RecomputeCanMergeAll()
|
||||
{
|
||||
var notDone = Subtasks.Count(c => c.Status != ClaudeDo.Data.Models.TaskStatus.Done);
|
||||
if (notDone > 0)
|
||||
|
||||
@@ -157,6 +157,7 @@
|
||||
<Button Content="Review combined diff"
|
||||
Command="{Binding ReviewCombinedDiffCommand}"/>
|
||||
<Button Content="Merge all subtasks"
|
||||
IsEnabled="{Binding CanMergeAll}"
|
||||
Command="{Binding MergeAllCommand}"
|
||||
ToolTip.Tip="{Binding MergeAllDisabledReason}"/>
|
||||
</StackPanel>
|
||||
|
||||
Reference in New Issue
Block a user