72 lines
2.3 KiB
C#
72 lines
2.3 KiB
C#
using CommunityToolkit.Mvvm.ComponentModel;
|
|
using CommunityToolkit.Mvvm.Input;
|
|
using ClaudeDo.Ui.Services;
|
|
using ClaudeDo.Ui.ViewModels.Islands;
|
|
|
|
namespace ClaudeDo.Ui.ViewModels;
|
|
|
|
public sealed partial class IslandsShellViewModel : ViewModelBase
|
|
{
|
|
public ListsIslandViewModel Lists { get; }
|
|
public TasksIslandViewModel Tasks { get; }
|
|
public DetailsIslandViewModel Details { get; }
|
|
public WorkerClient Worker { get; }
|
|
|
|
public string ConnectionText =>
|
|
Worker.IsConnected ? "Online"
|
|
: Worker.IsReconnecting ? "Connecting…"
|
|
: "Offline";
|
|
|
|
public bool IsOffline => !Worker.IsConnected && !Worker.IsReconnecting;
|
|
|
|
[ObservableProperty]
|
|
private double _windowWidth = 1280;
|
|
|
|
public bool ShowDetails => WindowWidth >= 1100;
|
|
public bool ShowLists => WindowWidth >= 780;
|
|
|
|
[RelayCommand]
|
|
private void FocusSearch() => Lists.RequestFocusSearch();
|
|
|
|
[RelayCommand]
|
|
private void FocusAddTask() => Tasks.RequestFocusAddTask();
|
|
|
|
public async Task ToggleSelectedDoneAsync()
|
|
{
|
|
if (Tasks.SelectedTask is { } row)
|
|
await Tasks.ToggleDoneCommand.ExecuteAsync(row);
|
|
}
|
|
|
|
partial void OnWindowWidthChanged(double value)
|
|
{
|
|
OnPropertyChanged(nameof(ShowDetails));
|
|
OnPropertyChanged(nameof(ShowLists));
|
|
}
|
|
|
|
public IslandsShellViewModel(
|
|
ListsIslandViewModel lists,
|
|
TasksIslandViewModel tasks,
|
|
DetailsIslandViewModel details,
|
|
WorkerClient worker)
|
|
{
|
|
Lists = lists; Tasks = tasks; Details = details; Worker = worker;
|
|
Lists.SelectionChanged += (_, _) => Tasks.LoadForList(Lists.SelectedList);
|
|
Tasks.SelectionChanged += (_, _) => Details.Bind(Tasks.SelectedTask);
|
|
Details.CloseDetail = () => Tasks.SelectedTask = null;
|
|
Details.DeleteFromList = _ =>
|
|
{
|
|
Tasks.LoadForList(Lists.SelectedList);
|
|
return System.Threading.Tasks.Task.CompletedTask;
|
|
};
|
|
Worker.PropertyChanged += (_, e) =>
|
|
{
|
|
if (e.PropertyName is nameof(WorkerClient.IsConnected) or nameof(WorkerClient.IsReconnecting))
|
|
{
|
|
OnPropertyChanged(nameof(ConnectionText));
|
|
OnPropertyChanged(nameof(IsOffline));
|
|
}
|
|
};
|
|
_ = Lists.LoadAsync();
|
|
}
|
|
}
|