feat(ui): add starting state feedback to task list
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -14,6 +14,7 @@ public partial class TaskItemViewModel : ViewModelBase
|
|||||||
[ObservableProperty] private string _commitType;
|
[ObservableProperty] private string _commitType;
|
||||||
[ObservableProperty] private string? _description;
|
[ObservableProperty] private string? _description;
|
||||||
[ObservableProperty] private TaskStatus _status;
|
[ObservableProperty] private TaskStatus _status;
|
||||||
|
[ObservableProperty] private bool _isStarting;
|
||||||
|
|
||||||
public string Id { get; }
|
public string Id { get; }
|
||||||
public string ListId { get; }
|
public string ListId { get; }
|
||||||
@@ -66,6 +67,7 @@ public partial class TaskItemViewModel : ViewModelBase
|
|||||||
RunNowCommand.NotifyCanExecuteChanged();
|
RunNowCommand.NotifyCanExecuteChanged();
|
||||||
OnPropertyChanged(nameof(IsDone));
|
OnPropertyChanged(nameof(IsDone));
|
||||||
OnPropertyChanged(nameof(IsRunning));
|
OnPropertyChanged(nameof(IsRunning));
|
||||||
|
IsStarting = false;
|
||||||
OnPropertyChanged(nameof(CanToggleDone));
|
OnPropertyChanged(nameof(CanToggleDone));
|
||||||
OnPropertyChanged(nameof(TitleDecorations));
|
OnPropertyChanged(nameof(TitleDecorations));
|
||||||
OnPropertyChanged(nameof(TitleForeground));
|
OnPropertyChanged(nameof(TitleForeground));
|
||||||
@@ -73,6 +75,19 @@ public partial class TaskItemViewModel : ViewModelBase
|
|||||||
ToggleDoneCommand.NotifyCanExecuteChanged();
|
ToggleDoneCommand.NotifyCanExecuteChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void SetStarting()
|
||||||
|
{
|
||||||
|
IsStarting = true;
|
||||||
|
StatusText = "starting...";
|
||||||
|
RunNowCommand.NotifyCanExecuteChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ClearStarting()
|
||||||
|
{
|
||||||
|
IsStarting = false;
|
||||||
|
RunNowCommand.NotifyCanExecuteChanged();
|
||||||
|
}
|
||||||
|
|
||||||
[RelayCommand(CanExecute = nameof(CanRunNow))]
|
[RelayCommand(CanExecute = nameof(CanRunNow))]
|
||||||
private async Task RunNowAsync()
|
private async Task RunNowAsync()
|
||||||
{
|
{
|
||||||
@@ -81,7 +96,7 @@ public partial class TaskItemViewModel : ViewModelBase
|
|||||||
}
|
}
|
||||||
|
|
||||||
private bool CanRunNow() =>
|
private bool CanRunNow() =>
|
||||||
_canRunNow() && Status != TaskStatus.Running;
|
_canRunNow() && Status != TaskStatus.Running && !IsStarting;
|
||||||
|
|
||||||
[RelayCommand(CanExecute = nameof(CanToggleDone))]
|
[RelayCommand(CanExecute = nameof(CanToggleDone))]
|
||||||
private async Task ToggleDone()
|
private async Task ToggleDone()
|
||||||
|
|||||||
@@ -55,6 +55,18 @@ public partial class TaskListViewModel : ViewModelBase
|
|||||||
t.RunNowCommand.NotifyCanExecuteChanged();
|
t.RunNowCommand.NotifyCanExecuteChanged();
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
worker.RunNowRequestedEvent += taskId =>
|
||||||
|
{
|
||||||
|
var item = Tasks.FirstOrDefault(t => t.Id == taskId);
|
||||||
|
item?.SetStarting();
|
||||||
|
};
|
||||||
|
|
||||||
|
worker.TaskStartedEvent += (_, taskId, _) =>
|
||||||
|
{
|
||||||
|
var item = Tasks.FirstOrDefault(t => t.Id == taskId);
|
||||||
|
item?.ClearStarting();
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task LoadAsync(string? listId)
|
public async Task LoadAsync(string? listId)
|
||||||
|
|||||||
@@ -70,6 +70,10 @@
|
|||||||
Fill="{StaticResource StatusOrangeBrush}"
|
Fill="{StaticResource StatusOrangeBrush}"
|
||||||
IsVisible="{Binding IsRunning}"
|
IsVisible="{Binding IsRunning}"
|
||||||
HorizontalAlignment="Center" VerticalAlignment="Center"/>
|
HorizontalAlignment="Center" VerticalAlignment="Center"/>
|
||||||
|
<!-- Starting dot -->
|
||||||
|
<Ellipse Width="8" Height="8" Fill="#FFD700"
|
||||||
|
IsVisible="{Binding IsStarting}"
|
||||||
|
HorizontalAlignment="Center" VerticalAlignment="Center"/>
|
||||||
</Panel>
|
</Panel>
|
||||||
</Border>
|
</Border>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user