From a8943a9f7aee63ce3048f9769df51e900bb4d7b4 Mon Sep 17 00:00:00 2001 From: mika kuns Date: Wed, 3 Jun 2026 10:08:30 +0200 Subject: [PATCH] feat(ui): pinned Notes row in My Day opens the notes editor Add ShowNotesRow/OpenNotesCommand to TasksIslandViewModel; wire NotesRequested event to Details.ShowNotes() in the shell; show a Notes button above the task list when the My Day smart list is active. Co-Authored-By: Claude Sonnet 4.6 --- .../ViewModels/Islands/TasksIslandViewModel.cs | 11 +++++++++++ src/ClaudeDo.Ui/ViewModels/IslandsShellViewModel.cs | 1 + src/ClaudeDo.Ui/Views/Islands/TasksIslandView.axaml | 8 ++++++++ 3 files changed, 20 insertions(+) diff --git a/src/ClaudeDo.Ui/ViewModels/Islands/TasksIslandViewModel.cs b/src/ClaudeDo.Ui/ViewModels/Islands/TasksIslandViewModel.cs index d989c91..c613298 100644 --- a/src/ClaudeDo.Ui/ViewModels/Islands/TasksIslandViewModel.cs +++ b/src/ClaudeDo.Ui/ViewModels/Islands/TasksIslandViewModel.cs @@ -25,8 +25,16 @@ public sealed partial class TasksIslandViewModel : ViewModelBase public event EventHandler? SelectionChanged; public event EventHandler? FocusAddTaskRequested; public event EventHandler? TasksChanged; + public event Action? NotesRequested; public void RequestFocusAddTask() => FocusAddTaskRequested?.Invoke(this, EventArgs.Empty); + [RelayCommand] + private void OpenNotes() + { + SelectedTask = null; + NotesRequested?.Invoke(); + } + public ObservableCollection Items { get; } = new(); public ObservableCollection OverdueItems { get; } = new(); public ObservableCollection OpenItems { get; } = new(); @@ -45,6 +53,7 @@ public sealed partial class TasksIslandViewModel : ViewModelBase [ObservableProperty] private bool _hasCompleted; [ObservableProperty] private bool _showOpenLabel; [ObservableProperty] private string _completedHeader = "COMPLETED"; + [ObservableProperty] private bool _showNotesRow; public Func? ShowUnfinishedPlanningModal { get; set; } @@ -176,10 +185,12 @@ public sealed partial class TasksIslandViewModel : ViewModelBase HasOpen = false; HasCompleted = false; ShowOpenLabel = false; + ShowNotesRow = false; if (list is null) return; HeaderTitle = list.Name; HeaderEyebrow = DateTime.Now.ToString("dddd ยท MMM dd", CultureInfo.InvariantCulture).ToUpperInvariant(); + ShowNotesRow = list.Id == "smart:my-day"; _ = LoadForListAsync(list, ct); } diff --git a/src/ClaudeDo.Ui/ViewModels/IslandsShellViewModel.cs b/src/ClaudeDo.Ui/ViewModels/IslandsShellViewModel.cs index 2f2875a..ffc68c6 100644 --- a/src/ClaudeDo.Ui/ViewModels/IslandsShellViewModel.cs +++ b/src/ClaudeDo.Ui/ViewModels/IslandsShellViewModel.cs @@ -197,6 +197,7 @@ public sealed partial class IslandsShellViewModel : ViewModelBase _repoImportVmFactory = repoImportVmFactory; Lists.SelectionChanged += (_, _) => Tasks.LoadForList(Lists.SelectedList); Tasks.SelectionChanged += (_, _) => Details.Bind(Tasks.SelectedTask); + Tasks.NotesRequested += () => Details.ShowNotes(); Tasks.TasksChanged += (_, _) => _ = Lists.RefreshCountsAsync(); Tasks.OpenListSettingsRequested += (_, _) => { diff --git a/src/ClaudeDo.Ui/Views/Islands/TasksIslandView.axaml b/src/ClaudeDo.Ui/Views/Islands/TasksIslandView.axaml index f9e43fa..c19f1f0 100644 --- a/src/ClaudeDo.Ui/Views/Islands/TasksIslandView.axaml +++ b/src/ClaudeDo.Ui/Views/Islands/TasksIslandView.axaml @@ -65,6 +65,14 @@ + +