style(ui): task section dividers overdue/tasks/completed
Expose OverdueItems / OpenItems / CompletedItems as separate observable collections recomputed in LoadForList (and after add / toggle-done). - OverdueItems: ScheduledFor.Date < Today && !Done - OpenItems: remaining !Done - CompletedItems: Done View renders three sections with eyebrow-style headers: - OVERDUE (blood accent, only when non-empty) - TASKS (shown only when overdue is also visible, matching the mock) - COMPLETED · N (hidden when IsShowingCompleted is false) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -33,7 +33,9 @@ public sealed partial class TasksIslandViewModel : ViewModelBase
|
|||||||
[ObservableProperty] private bool _hasStatusPill;
|
[ObservableProperty] private bool _hasStatusPill;
|
||||||
[ObservableProperty] private bool _isShowingCompleted = true;
|
[ObservableProperty] private bool _isShowingCompleted = true;
|
||||||
[ObservableProperty] private bool _hasOverdue;
|
[ObservableProperty] private bool _hasOverdue;
|
||||||
|
[ObservableProperty] private bool _hasOpen;
|
||||||
[ObservableProperty] private bool _hasCompleted;
|
[ObservableProperty] private bool _hasCompleted;
|
||||||
|
[ObservableProperty] private bool _showOpenLabel;
|
||||||
[ObservableProperty] private string _completedHeader = "COMPLETED";
|
[ObservableProperty] private string _completedHeader = "COMPLETED";
|
||||||
|
|
||||||
public TasksIslandViewModel(IDbContextFactory<ClaudeDoDbContext> dbFactory)
|
public TasksIslandViewModel(IDbContextFactory<ClaudeDoDbContext> dbFactory)
|
||||||
@@ -53,8 +55,10 @@ public sealed partial class TasksIslandViewModel : ViewModelBase
|
|||||||
OverdueItems.Clear();
|
OverdueItems.Clear();
|
||||||
OpenItems.Clear();
|
OpenItems.Clear();
|
||||||
CompletedItems.Clear();
|
CompletedItems.Clear();
|
||||||
HasOverdue = false;
|
HasOverdue = false;
|
||||||
HasCompleted = false;
|
HasOpen = false;
|
||||||
|
HasCompleted = false;
|
||||||
|
ShowOpenLabel = false;
|
||||||
if (list is null) return;
|
if (list is null) return;
|
||||||
|
|
||||||
HeaderTitle = list.Name;
|
HeaderTitle = list.Name;
|
||||||
@@ -112,8 +116,10 @@ public sealed partial class TasksIslandViewModel : ViewModelBase
|
|||||||
OpenItems.Add(r);
|
OpenItems.Add(r);
|
||||||
}
|
}
|
||||||
|
|
||||||
HasOverdue = OverdueItems.Count > 0;
|
HasOverdue = OverdueItems.Count > 0;
|
||||||
HasCompleted = CompletedItems.Count > 0;
|
HasOpen = OpenItems.Count > 0;
|
||||||
|
HasCompleted = CompletedItems.Count > 0;
|
||||||
|
ShowOpenLabel = HasOpen && HasOverdue;
|
||||||
CompletedHeader = $"COMPLETED · {CompletedItems.Count}";
|
CompletedHeader = $"COMPLETED · {CompletedItems.Count}";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -89,10 +89,10 @@
|
|||||||
</StackPanel>
|
</StackPanel>
|
||||||
|
|
||||||
<!-- TASKS -->
|
<!-- TASKS -->
|
||||||
<StackPanel>
|
<StackPanel IsVisible="{Binding HasOpen}">
|
||||||
<TextBlock Classes="eyebrow section-label"
|
<TextBlock Classes="eyebrow section-label"
|
||||||
Text="TASKS" Margin="14,14,14,6"
|
Text="TASKS" Margin="14,14,14,6"
|
||||||
IsVisible="{Binding HasOverdue}"/>
|
IsVisible="{Binding ShowOpenLabel}"/>
|
||||||
<ItemsControl ItemsSource="{Binding OpenItems}">
|
<ItemsControl ItemsSource="{Binding OpenItems}">
|
||||||
<ItemsControl.ItemTemplate>
|
<ItemsControl.ItemTemplate>
|
||||||
<DataTemplate DataType="vm:TaskRowViewModel">
|
<DataTemplate DataType="vm:TaskRowViewModel">
|
||||||
|
|||||||
Reference in New Issue
Block a user