feat(ui): notes mode in the Details island
Add IsNotesMode/Notes to DetailsIslandViewModel; ShowNotes() loads today's notes and switches the island body to NotesEditorView via IsVisible toggling. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -126,7 +126,8 @@ sealed class Program
|
|||||||
new DetailsIslandViewModel(
|
new DetailsIslandViewModel(
|
||||||
sp.GetRequiredService<IDbContextFactory<ClaudeDoDbContext>>(),
|
sp.GetRequiredService<IDbContextFactory<ClaudeDoDbContext>>(),
|
||||||
sp.GetRequiredService<WorkerClient>(),
|
sp.GetRequiredService<WorkerClient>(),
|
||||||
sp));
|
sp,
|
||||||
|
sp.GetRequiredService<INotesApi>()));
|
||||||
sc.AddSingleton<IslandsShellViewModel>();
|
sc.AddSingleton<IslandsShellViewModel>();
|
||||||
|
|
||||||
return sc.BuildServiceProvider();
|
return sc.BuildServiceProvider();
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ using ClaudeDo.Data.Models;
|
|||||||
using ClaudeDo.Data.Repositories;
|
using ClaudeDo.Data.Repositories;
|
||||||
using ClaudeDo.Ui.Helpers;
|
using ClaudeDo.Ui.Helpers;
|
||||||
using ClaudeDo.Ui.Services;
|
using ClaudeDo.Ui.Services;
|
||||||
|
using ClaudeDo.Ui.Services.Interfaces;
|
||||||
using ClaudeDo.Ui.ViewModels.Modals;
|
using ClaudeDo.Ui.ViewModels.Modals;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
@@ -49,6 +50,10 @@ public sealed partial class DetailsIslandViewModel : ViewModelBase
|
|||||||
private readonly IDbContextFactory<ClaudeDoDbContext> _dbFactory;
|
private readonly IDbContextFactory<ClaudeDoDbContext> _dbFactory;
|
||||||
private readonly IWorkerClient _worker;
|
private readonly IWorkerClient _worker;
|
||||||
private readonly IServiceProvider _services;
|
private readonly IServiceProvider _services;
|
||||||
|
private readonly INotesApi _notesApi;
|
||||||
|
|
||||||
|
[ObservableProperty] private bool _isNotesMode;
|
||||||
|
public NotesEditorViewModel Notes { get; private set; } = null!;
|
||||||
|
|
||||||
// Current task row (set by IslandsShellViewModel via Bind)
|
// Current task row (set by IslandsShellViewModel via Bind)
|
||||||
[ObservableProperty]
|
[ObservableProperty]
|
||||||
@@ -233,11 +238,13 @@ public sealed partial class DetailsIslandViewModel : ViewModelBase
|
|||||||
catch { }
|
catch { }
|
||||||
}
|
}
|
||||||
|
|
||||||
public DetailsIslandViewModel(IDbContextFactory<ClaudeDoDbContext> dbFactory, IWorkerClient worker, IServiceProvider services)
|
public DetailsIslandViewModel(IDbContextFactory<ClaudeDoDbContext> dbFactory, IWorkerClient worker, IServiceProvider services, INotesApi notesApi)
|
||||||
{
|
{
|
||||||
_dbFactory = dbFactory;
|
_dbFactory = dbFactory;
|
||||||
_worker = worker;
|
_worker = worker;
|
||||||
_services = services;
|
_services = services;
|
||||||
|
_notesApi = notesApi;
|
||||||
|
Notes = new NotesEditorViewModel(_notesApi);
|
||||||
|
|
||||||
// Subscribe once; filter by current task id inside the handler
|
// Subscribe once; filter by current task id inside the handler
|
||||||
_worker.TaskMessageEvent += OnTaskMessage;
|
_worker.TaskMessageEvent += OnTaskMessage;
|
||||||
@@ -431,8 +438,16 @@ public sealed partial class DetailsIslandViewModel : ViewModelBase
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void ShowNotes()
|
||||||
|
{
|
||||||
|
Bind(null);
|
||||||
|
IsNotesMode = true;
|
||||||
|
_ = Notes.LoadDayAsync(DateOnly.FromDateTime(DateTime.Today));
|
||||||
|
}
|
||||||
|
|
||||||
public void Bind(TaskRowViewModel? row)
|
public void Bind(TaskRowViewModel? row)
|
||||||
{
|
{
|
||||||
|
IsNotesMode = false;
|
||||||
_loadCts?.Cancel();
|
_loadCts?.Cancel();
|
||||||
_loadCts?.Dispose();
|
_loadCts?.Dispose();
|
||||||
_loadCts = new CancellationTokenSource();
|
_loadCts = new CancellationTokenSource();
|
||||||
|
|||||||
@@ -126,8 +126,10 @@
|
|||||||
<!-- ── Agent status strip (sticky, above metadata footer) ── -->
|
<!-- ── Agent status strip (sticky, above metadata footer) ── -->
|
||||||
<islands:AgentStripView DockPanel.Dock="Bottom"/>
|
<islands:AgentStripView DockPanel.Dock="Bottom"/>
|
||||||
|
|
||||||
<!-- ── Scrollable body: steps + terminal ── -->
|
<!-- ── Body: task details (normal) or notes editor (notes mode) ── -->
|
||||||
<ScrollViewer VerticalScrollBarVisibility="Auto">
|
<Grid>
|
||||||
|
<ScrollViewer VerticalScrollBarVisibility="Auto"
|
||||||
|
IsVisible="{Binding !IsNotesMode}">
|
||||||
<StackPanel Spacing="0">
|
<StackPanel Spacing="0">
|
||||||
|
|
||||||
<!-- Planning merge section — visible only for planning parent tasks -->
|
<!-- Planning merge section — visible only for planning parent tasks -->
|
||||||
@@ -293,6 +295,10 @@
|
|||||||
|
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</ScrollViewer>
|
</ScrollViewer>
|
||||||
|
<Panel IsVisible="{Binding IsNotesMode}">
|
||||||
|
<islands:NotesEditorView DataContext="{Binding Notes}"/>
|
||||||
|
</Panel>
|
||||||
|
</Grid>
|
||||||
|
|
||||||
</DockPanel>
|
</DockPanel>
|
||||||
</UserControl>
|
</UserControl>
|
||||||
|
|||||||
Reference in New Issue
Block a user