feat(ui): reveal a task by id from anywhere

This commit is contained in:
Mika Kuns
2026-06-26 16:11:50 +02:00
parent 42da840066
commit 5a21d673c1
7 changed files with 178 additions and 2 deletions
@@ -70,6 +70,8 @@ public sealed partial class TasksIslandViewModel : ViewModelBase, IDisposable
[ObservableProperty] private bool _showNotesRow;
[ObservableProperty] private bool _isMyDayList;
internal Task? LoadTask { get; private set; }
public Func<UnfinishedPlanningModalViewModel, Task>? ShowUnfinishedPlanningModal { get; set; }
private readonly EventHandler _langChangedHandler;
@@ -220,14 +222,14 @@ public sealed partial class TasksIslandViewModel : ViewModelBase, IDisposable
HasCompleted = false;
ShowOpenLabel = false;
ShowNotesRow = false;
if (list is null) return;
if (list is null) { 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";
_ = LoadForListAsync(list, ct);
LoadTask = LoadForListAsync(list, ct);
}
private async Task LoadForListAsync(ListNavItemViewModel list, CancellationToken ct)
@@ -778,6 +780,18 @@ public sealed partial class TasksIslandViewModel : ViewModelBase, IDisposable
[RelayCommand]
private void Select(TaskRowViewModel row) => SelectedTask = row;
public async System.Threading.Tasks.Task<bool> SelectByIdAsync(string taskId)
{
if (LoadTask is { } lt)
{
try { await lt; } catch { /* load cancelled/failed — fall through */ }
}
var row = Items.FirstOrDefault(r => r.Id == taskId);
if (row is null) return false;
SelectedTask = row;
return true;
}
[RelayCommand]
private void ToggleShowCompleted() => IsShowingCompleted = !IsShowingCompleted;