fix(ui): wire details-island buttons and drop dead handlers

- Bind star button to ToggleStarCommand; wrap header and subtask
  done-check ellipses in buttons (ToggleDone / ToggleSubtaskDone).
- Wire AgentStrip copy-path button to clipboard handler.
- Remove dead Notes/PromptInput/ApproveMerge/ShowWorktreeModal code
  with no UI bindings.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
mika kuns
2026-05-20 11:24:51 +02:00
parent 0b19ea739c
commit e55367af67
5 changed files with 80 additions and 79 deletions

View File

@@ -81,6 +81,7 @@
<Button Grid.Column="2"
Classes="icon-btn"
ToolTip.Tip="Copy path"
Click="OnCopyWorktreePathClick"
VerticalAlignment="Center">
<PathIcon Data="{StaticResource Icon.Copy}" Width="11" Height="11"/>
</Button>

View File

@@ -1,8 +1,19 @@
using Avalonia.Controls;
using Avalonia.Input.Platform;
using Avalonia.Interactivity;
using ClaudeDo.Ui.ViewModels.Islands;
namespace ClaudeDo.Ui.Views.Islands;
public partial class AgentStripView : UserControl
{
public AgentStripView() { InitializeComponent(); }
private async void OnCopyWorktreePathClick(object? sender, RoutedEventArgs e)
{
if (DataContext is not DetailsIslandViewModel vm) return;
var clipboard = TopLevel.GetTopLevel(this)?.Clipboard;
if (clipboard is null || string.IsNullOrEmpty(vm.WorktreePath)) return;
await clipboard.SetTextAsync(vm.WorktreePath);
}
}

View File

@@ -38,13 +38,16 @@
<!-- ── Header (sticky top): check · eyebrow · title · status · star · gear ── -->
<Border DockPanel.Dock="Top" Classes="island-header">
<Grid ColumnDefinitions="Auto,*,Auto,Auto">
<Ellipse Grid.Column="0"
Classes="task-check"
Classes.done="{Binding Task.Done}"
Width="18" Height="18"
VerticalAlignment="Top"
Margin="0,2,10,0"
Cursor="Hand"/>
<Button Grid.Column="0" Classes="flat"
Command="{Binding ToggleDoneCommand}"
Padding="0"
VerticalAlignment="Top"
Margin="0,2,10,0">
<Ellipse Classes="task-check"
Classes.done="{Binding Task.Done}"
Width="18" Height="18"
Cursor="Hand"/>
</Button>
<StackPanel Grid.Column="1" Spacing="0">
<TextBlock Text="{Binding TaskIdBadge}"
FontFamily="{DynamicResource MonoFont}" FontSize="10"
@@ -62,6 +65,8 @@
<Button Grid.Column="2"
Classes="icon-btn star-btn"
Classes.on="{Binding Task.IsStarred}"
Command="{Binding ToggleStarCommand}"
ToolTip.Tip="Star"
VerticalAlignment="Top"
Margin="6,0,0,0">
<PathIcon Data="{StaticResource Icon.Star}" Width="14" Height="14"/>
@@ -176,13 +181,17 @@
<Border Classes="subtask-row"
Classes.done="{Binding Done}">
<Grid ColumnDefinitions="Auto,*">
<Ellipse Grid.Column="0"
Classes="task-check"
Classes.done="{Binding Done}"
Width="16" Height="16"
VerticalAlignment="Center"
Cursor="Hand"
Margin="0,0,8,0"/>
<Button Grid.Column="0" Classes="flat"
Padding="0"
Margin="0,0,8,0"
VerticalAlignment="Center"
Command="{Binding $parent[ItemsControl].((vm:DetailsIslandViewModel)DataContext).ToggleSubtaskDoneCommand}"
CommandParameter="{Binding}">
<Ellipse Classes="task-check"
Classes.done="{Binding Done}"
Width="16" Height="16"
Cursor="Hand"/>
</Button>
<TextBlock Grid.Column="1"
Classes="subtask-title"
Text="{Binding Title}"

View File

@@ -30,14 +30,6 @@ public partial class DetailsIslandView : UserControl
await modal.ShowDialog(owner);
};
vm.ShowWorktreeModal = async (worktreeVm) =>
{
var owner = TopLevel.GetTopLevel(this) as Window;
if (owner == null) return;
var modal = new WorktreeModalView { DataContext = worktreeVm };
await modal.ShowDialog(owner);
};
vm.ShowMergeModal = async (mergeVm) =>
{
var owner = TopLevel.GetTopLevel(this) as Window;
@@ -143,12 +135,6 @@ public partial class DetailsIslandView : UserControl
return await tcs.Task;
}
private void NotesLostFocus(object? sender, RoutedEventArgs e)
{
if (DataContext is DetailsIslandViewModel vm)
vm.SaveNotesCommand.Execute(null);
}
private async void OnCopyDescriptionClick(object? sender, RoutedEventArgs e)
{
if (DataContext is not DetailsIslandViewModel vm) return;