feat(ui): add 'Add repos as lists' Help-menu entry point
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -34,6 +34,7 @@ public sealed partial class IslandsShellViewModel : ViewModelBase
|
|||||||
private readonly IDbContextFactory<ClaudeDoDbContext>? _dbFactory;
|
private readonly IDbContextFactory<ClaudeDoDbContext>? _dbFactory;
|
||||||
private readonly Func<WorktreesOverviewModalViewModel> _worktreesOverviewVmFactory = () => null!;
|
private readonly Func<WorktreesOverviewModalViewModel> _worktreesOverviewVmFactory = () => null!;
|
||||||
private readonly Func<MergeModalViewModel> _mergeVmFactory = () => null!;
|
private readonly Func<MergeModalViewModel> _mergeVmFactory = () => null!;
|
||||||
|
private readonly Func<RepoImportModalViewModel>? _repoImportVmFactory;
|
||||||
|
|
||||||
public Func<MergeModalViewModel> ResolveMergeVm => _mergeVmFactory;
|
public Func<MergeModalViewModel> ResolveMergeVm => _mergeVmFactory;
|
||||||
|
|
||||||
@@ -43,6 +44,9 @@ public sealed partial class IslandsShellViewModel : ViewModelBase
|
|||||||
// Set by MainWindow to open the About dialog.
|
// Set by MainWindow to open the About dialog.
|
||||||
public Func<AboutModalViewModel, Task>? ShowAboutModal { get; set; }
|
public Func<AboutModalViewModel, Task>? ShowAboutModal { get; set; }
|
||||||
|
|
||||||
|
// Set by MainWindow to open the repo-import dialog.
|
||||||
|
public Func<RepoImportModalViewModel, Task>? ShowRepoImportModal { get; set; }
|
||||||
|
|
||||||
// Set by MainWindow to open the global worktrees overview dialog.
|
// Set by MainWindow to open the global worktrees overview dialog.
|
||||||
public Func<WorktreesOverviewModalViewModel, Task>? ShowWorktreesOverviewModal { get; set; }
|
public Func<WorktreesOverviewModalViewModel, Task>? ShowWorktreesOverviewModal { get; set; }
|
||||||
|
|
||||||
@@ -168,7 +172,8 @@ public sealed partial class IslandsShellViewModel : ViewModelBase
|
|||||||
InstallerLocator installerLocator,
|
InstallerLocator installerLocator,
|
||||||
IDbContextFactory<ClaudeDoDbContext> dbFactory,
|
IDbContextFactory<ClaudeDoDbContext> dbFactory,
|
||||||
Func<WorktreesOverviewModalViewModel> worktreesOverviewVmFactory,
|
Func<WorktreesOverviewModalViewModel> worktreesOverviewVmFactory,
|
||||||
Func<MergeModalViewModel> mergeVmFactory)
|
Func<MergeModalViewModel> mergeVmFactory,
|
||||||
|
Func<RepoImportModalViewModel> repoImportVmFactory)
|
||||||
{
|
{
|
||||||
Lists = lists; Tasks = tasks; Details = details; Worker = worker;
|
Lists = lists; Tasks = tasks; Details = details; Worker = worker;
|
||||||
_updateCheck = updateCheck;
|
_updateCheck = updateCheck;
|
||||||
@@ -176,6 +181,7 @@ public sealed partial class IslandsShellViewModel : ViewModelBase
|
|||||||
_dbFactory = dbFactory;
|
_dbFactory = dbFactory;
|
||||||
_worktreesOverviewVmFactory = worktreesOverviewVmFactory;
|
_worktreesOverviewVmFactory = worktreesOverviewVmFactory;
|
||||||
_mergeVmFactory = mergeVmFactory;
|
_mergeVmFactory = mergeVmFactory;
|
||||||
|
_repoImportVmFactory = repoImportVmFactory;
|
||||||
Lists.SelectionChanged += (_, _) => Tasks.LoadForList(Lists.SelectedList);
|
Lists.SelectionChanged += (_, _) => Tasks.LoadForList(Lists.SelectedList);
|
||||||
Tasks.SelectionChanged += (_, _) => Details.Bind(Tasks.SelectedTask);
|
Tasks.SelectionChanged += (_, _) => Details.Bind(Tasks.SelectedTask);
|
||||||
Tasks.TasksChanged += (_, _) => _ = Lists.RefreshCountsAsync();
|
Tasks.TasksChanged += (_, _) => _ = Lists.RefreshCountsAsync();
|
||||||
@@ -260,6 +266,16 @@ public sealed partial class IslandsShellViewModel : ViewModelBase
|
|||||||
if (ShowAboutModal is not null) await ShowAboutModal(vm);
|
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;
|
private bool _worktreesOverviewOpen;
|
||||||
|
|
||||||
[RelayCommand]
|
[RelayCommand]
|
||||||
|
|||||||
@@ -72,6 +72,7 @@
|
|||||||
<MenuItem Header="Worktrees…"
|
<MenuItem Header="Worktrees…"
|
||||||
Command="{Binding OpenWorktreesOverviewGlobalCommand}"/>
|
Command="{Binding OpenWorktreesOverviewGlobalCommand}"/>
|
||||||
<MenuItem Header="About…" Command="{Binding OpenAboutCommand}"/>
|
<MenuItem Header="About…" Command="{Binding OpenAboutCommand}"/>
|
||||||
|
<MenuItem Header="Add repos as lists…" Command="{Binding OpenRepoImportCommand}"/>
|
||||||
</MenuItem>
|
</MenuItem>
|
||||||
</Menu>
|
</Menu>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
|
|||||||
@@ -62,6 +62,12 @@ public partial class MainWindow : Window
|
|||||||
};
|
};
|
||||||
await dlg.ShowDialog(this);
|
await dlg.ShowDialog(this);
|
||||||
};
|
};
|
||||||
|
vm.ShowRepoImportModal = async (modal) =>
|
||||||
|
{
|
||||||
|
var dlg = new RepoImportModalView { DataContext = modal };
|
||||||
|
modal.CloseAction = () => dlg.Close();
|
||||||
|
await dlg.ShowDialog(this);
|
||||||
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user