|
1 | 1 | using System; |
2 | 2 | using System.ComponentModel.Composition; |
3 | 3 | using System.Threading.Tasks; |
| 4 | +using GitHub.Extensions; |
| 5 | +using GitHub.Factories; |
4 | 6 | using GitHub.Models; |
| 7 | +using GitHub.Services; |
| 8 | +using GitHub.ViewModels.GitHubPane; |
| 9 | +using ReactiveUI; |
5 | 10 |
|
6 | 11 | namespace GitHub.ViewModels.Documents |
7 | 12 | { |
8 | 13 | [Export(typeof(IIssueishPaneViewModel))] |
9 | 14 | [PartCreationPolicy(CreationPolicy.NonShared)] |
10 | 15 | public class IssueishPaneViewModel : ViewModelBase, IIssueishPaneViewModel |
11 | 16 | { |
| 17 | + readonly IViewViewModelFactory factory; |
| 18 | + readonly IPullRequestSessionManager sessionManager; |
| 19 | + IViewModel content; |
| 20 | + |
| 21 | + [ImportingConstructor] |
| 22 | + public IssueishPaneViewModel( |
| 23 | + IViewViewModelFactory factory, |
| 24 | + IPullRequestSessionManager sessionManager) |
| 25 | + { |
| 26 | + Guard.ArgumentNotNull(factory, nameof(factory)); |
| 27 | + Guard.ArgumentNotNull(sessionManager, nameof(sessionManager)); |
| 28 | + |
| 29 | + this.factory = factory; |
| 30 | + this.sessionManager = sessionManager; |
| 31 | + } |
| 32 | + |
| 33 | + public IViewModel Content |
| 34 | + { |
| 35 | + get => content; |
| 36 | + private set => this.RaiseAndSetIfChanged(ref content, value); |
| 37 | + } |
| 38 | + |
12 | 39 | public Task InitializeAsync(IServiceProvider paneServiceProvider) |
13 | 40 | { |
14 | 41 | return Task.CompletedTask; |
15 | 42 | } |
16 | 43 |
|
17 | | - public Task Load(IConnection connection, string owner, string name, int number) |
| 44 | + public async Task Load(IConnection connection, string owner, string name, int number) |
18 | 45 | { |
19 | | - return Task.CompletedTask; |
| 46 | + Content = new SpinnerViewModel(); |
| 47 | + |
| 48 | + // TODO: We will eventually support loading issues here as well. |
| 49 | + try |
| 50 | + { |
| 51 | + var session = await sessionManager.GetSession(owner, name, number).ConfigureAwait(true); |
| 52 | + var vm = factory.CreateViewModel<IPullRequestDetailViewModel>(); |
| 53 | + await vm.InitializeAsync( |
| 54 | + session.LocalRepository, |
| 55 | + connection, |
| 56 | + owner, |
| 57 | + name, |
| 58 | + number).ConfigureAwait(true); |
| 59 | + Content = vm; |
| 60 | + } |
| 61 | + catch (Exception ex) |
| 62 | + { |
| 63 | + // TODO: Show exception. |
| 64 | + } |
20 | 65 | } |
21 | 66 | } |
22 | 67 | } |
0 commit comments