diff --git a/src/ClaudeDo.Localization/locales/de.json b/src/ClaudeDo.Localization/locales/de.json index 309f4fcc..0b90e257 100644 --- a/src/ClaudeDo.Localization/locales/de.json +++ b/src/ClaudeDo.Localization/locales/de.json @@ -117,6 +117,7 @@ }, "tasks": { "showCompletedTip": "Abgeschlossene anzeigen", + "letClaudeTip": "Claude machen lassen", "listSettingsTip": "Listeneinstellungen", "addPlaceholder": "Aufgabe hinzufügen…", "enterKey": "ENTER", diff --git a/src/ClaudeDo.Localization/locales/en.json b/src/ClaudeDo.Localization/locales/en.json index 06001fb6..dc8cb0f9 100644 --- a/src/ClaudeDo.Localization/locales/en.json +++ b/src/ClaudeDo.Localization/locales/en.json @@ -117,6 +117,7 @@ }, "tasks": { "showCompletedTip": "Show completed", + "letClaudeTip": "Let Claude handle it", "listSettingsTip": "List settings", "addPlaceholder": "Add a task…", "enterKey": "ENTER", diff --git a/src/ClaudeDo.Ui/ViewModels/Islands/TasksIslandViewModel.cs b/src/ClaudeDo.Ui/ViewModels/Islands/TasksIslandViewModel.cs index c11597d8..2331fd98 100644 --- a/src/ClaudeDo.Ui/ViewModels/Islands/TasksIslandViewModel.cs +++ b/src/ClaudeDo.Ui/ViewModels/Islands/TasksIslandViewModel.cs @@ -72,6 +72,12 @@ public sealed partial class TasksIslandViewModel : ViewModelBase, IDisposable [ObservableProperty] private string _completedHeader = ""; [ObservableProperty] private bool _showNotesRow; [ObservableProperty] private bool _isMyDayList; + [ObservableProperty] private bool _isLetClaudeVisible; + + public event EventHandler? LetClaudeHandleRequested; + + [RelayCommand] + private void LetClaudeHandle() => LetClaudeHandleRequested?.Invoke(this, EventArgs.Empty); internal Task? LoadTask { get; private set; } @@ -211,8 +217,11 @@ public sealed partial class TasksIslandViewModel : ViewModelBase, IDisposable private void OnCurrentListPropertyChanged(object? sender, System.ComponentModel.PropertyChangedEventArgs e) { - if (e.PropertyName == nameof(ListNavItemViewModel.Name) && sender is ListNavItemViewModel vm) + if (sender is not ListNavItemViewModel vm) return; + if (e.PropertyName == nameof(ListNavItemViewModel.Name)) HeaderTitle = vm.Name; + else if (e.PropertyName == nameof(ListNavItemViewModel.WorkingDir)) + IsLetClaudeVisible = vm.Kind == ListKind.User && !string.IsNullOrWhiteSpace(vm.WorkingDir); } public void LoadForList(ListNavItemViewModel? list) @@ -237,12 +246,13 @@ public sealed partial class TasksIslandViewModel : ViewModelBase, IDisposable HasCompleted = false; ShowOpenLabel = false; ShowNotesRow = false; - if (list is null) { LoadTask = Task.CompletedTask; return; } + if (list is null) { IsLetClaudeVisible = false; LoadTask = Task.CompletedTask; return; } HeaderTitle = list.Name; HeaderEyebrow = DateTime.Now.ToString("dddd · MMM dd", CultureInfo.InvariantCulture).ToUpperInvariant(); ShowNotesRow = list.Id == "smart:my-day"; IsMyDayList = list.Id == "smart:my-day"; + IsLetClaudeVisible = list.Kind == ListKind.User && !string.IsNullOrWhiteSpace(list.WorkingDir); LoadTask = LoadForListAsync(list, ct); } diff --git a/src/ClaudeDo.Ui/ViewModels/IslandsShellViewModel.cs b/src/ClaudeDo.Ui/ViewModels/IslandsShellViewModel.cs index 86ebf9a3..eb0ec9de 100644 --- a/src/ClaudeDo.Ui/ViewModels/IslandsShellViewModel.cs +++ b/src/ClaudeDo.Ui/ViewModels/IslandsShellViewModel.cs @@ -251,6 +251,11 @@ public sealed partial class IslandsShellViewModel : ViewModelBase, IDisposable if (Lists.SelectedList is { } row) Lists.OpenListSettingsCommand.Execute(row); }; + Tasks.LetClaudeHandleRequested += (_, _) => + { + if (Lists.SelectedList is { } row) + Lists.LetClaudeHandleListCommand.Execute(row); + }; Details.CloseDetail = () => Tasks.SelectedTask = null; Details.DeleteFromList = row => { diff --git a/src/ClaudeDo.Ui/Views/Islands/TasksIslandView.axaml b/src/ClaudeDo.Ui/Views/Islands/TasksIslandView.axaml index 54a4bd1d..d3c64411 100644 --- a/src/ClaudeDo.Ui/Views/Islands/TasksIslandView.axaml +++ b/src/ClaudeDo.Ui/Views/Islands/TasksIslandView.axaml @@ -33,6 +33,10 @@ ToolTip.Tip="{loc:Tr tasks.showCompletedTip}"> +