diff --git a/src/ClaudeDo.Ui/ViewModels/IslandsShellViewModel.cs b/src/ClaudeDo.Ui/ViewModels/IslandsShellViewModel.cs index 1048584..6516ddb 100644 --- a/src/ClaudeDo.Ui/ViewModels/IslandsShellViewModel.cs +++ b/src/ClaudeDo.Ui/ViewModels/IslandsShellViewModel.cs @@ -34,6 +34,7 @@ public sealed partial class IslandsShellViewModel : ViewModelBase private readonly IDbContextFactory? _dbFactory; private readonly Func _worktreesOverviewVmFactory = () => null!; private readonly Func _mergeVmFactory = () => null!; + private readonly Func? _repoImportVmFactory; public Func ResolveMergeVm => _mergeVmFactory; @@ -43,6 +44,9 @@ public sealed partial class IslandsShellViewModel : ViewModelBase // Set by MainWindow to open the About dialog. public Func? ShowAboutModal { get; set; } + // Set by MainWindow to open the repo-import dialog. + public Func? ShowRepoImportModal { get; set; } + // Set by MainWindow to open the global worktrees overview dialog. public Func? ShowWorktreesOverviewModal { get; set; } @@ -168,7 +172,8 @@ public sealed partial class IslandsShellViewModel : ViewModelBase InstallerLocator installerLocator, IDbContextFactory dbFactory, Func worktreesOverviewVmFactory, - Func mergeVmFactory) + Func mergeVmFactory, + Func repoImportVmFactory) { Lists = lists; Tasks = tasks; Details = details; Worker = worker; _updateCheck = updateCheck; @@ -176,6 +181,7 @@ public sealed partial class IslandsShellViewModel : ViewModelBase _dbFactory = dbFactory; _worktreesOverviewVmFactory = worktreesOverviewVmFactory; _mergeVmFactory = mergeVmFactory; + _repoImportVmFactory = repoImportVmFactory; Lists.SelectionChanged += (_, _) => Tasks.LoadForList(Lists.SelectedList); Tasks.SelectionChanged += (_, _) => Details.Bind(Tasks.SelectedTask); Tasks.TasksChanged += (_, _) => _ = Lists.RefreshCountsAsync(); @@ -260,6 +266,16 @@ public sealed partial class IslandsShellViewModel : ViewModelBase if (ShowAboutModal is not null) await ShowAboutModal(vm); } + [RelayCommand] + private async Task OpenRepoImport() + { + if (ShowRepoImportModal is null || _repoImportVmFactory is null) return; + var vm = _repoImportVmFactory(); + await vm.LoadAsync(); + await ShowRepoImportModal(vm); + if (Lists is not null) await Lists.LoadAsync(); + } + private bool _worktreesOverviewOpen; [RelayCommand] diff --git a/src/ClaudeDo.Ui/Views/MainWindow.axaml b/src/ClaudeDo.Ui/Views/MainWindow.axaml index b572008..629b777 100644 --- a/src/ClaudeDo.Ui/Views/MainWindow.axaml +++ b/src/ClaudeDo.Ui/Views/MainWindow.axaml @@ -72,6 +72,7 @@ + diff --git a/src/ClaudeDo.Ui/Views/MainWindow.axaml.cs b/src/ClaudeDo.Ui/Views/MainWindow.axaml.cs index d2697e3..c000c3b 100644 --- a/src/ClaudeDo.Ui/Views/MainWindow.axaml.cs +++ b/src/ClaudeDo.Ui/Views/MainWindow.axaml.cs @@ -62,6 +62,12 @@ public partial class MainWindow : Window }; await dlg.ShowDialog(this); }; + vm.ShowRepoImportModal = async (modal) => + { + var dlg = new RepoImportModalView { DataContext = modal }; + modal.CloseAction = () => dlg.Close(); + await dlg.ShowDialog(this); + }; } }