Skip to content
This repository was archived by the owner on Jun 21, 2023. It is now read-only.

Commit a5fa9b5

Browse files
authored
Merge branch 'master' into build/917-fix-VS2017-F5
2 parents b17f1bc + cfc8f6c commit a5fa9b5

File tree

93 files changed

+770
-460
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

93 files changed

+770
-460
lines changed

src/GitHub.App/Controllers/NavigationController.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -130,10 +130,10 @@ void CreateOrReuseView(IConnection connection, ViewWithData data, Action<IView>
130130
{
131131
disposablesForCurrentView?.Clear();
132132

133-
var action = view as ICanLoad;
133+
var action = view.ViewModel as ICanNavigate;
134134
if (action != null)
135135
{
136-
disposablesForCurrentView.Add(action?.Load.Subscribe(d =>
136+
disposablesForCurrentView.Add(action?.Navigate.Subscribe(d =>
137137
{
138138
LoadView(connection, d, onViewLoad);
139139
}));

src/GitHub.App/Controllers/UIController.cs

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ just so we can call the corresponding state machine that handles the logic (defi
8282
*/
8383

8484
using App.Factories;
85+
using ViewModels;
8586
using StateMachineType = StateMachine<UIViewType, UIController.Trigger>;
8687

8788
public class UIController : IUIController
@@ -524,13 +525,15 @@ void RunView(UIViewType viewType, ViewWithData arg = null)
524525
if (!firstTime)
525526
return;
526527

527-
SetupView(viewType, view);
528+
SetupView(viewType, view.ViewModel);
528529
}
529530

530-
void SetupView(UIViewType viewType, IView view)
531+
void SetupView(UIViewType viewType, IViewModel viewModel)
531532
{
532533
var list = GetObjectsForFlow(activeFlow);
533534
var pair = list[viewType];
535+
var hasDone = viewModel as IHasDone;
536+
var hasCancel = viewModel as IHasCancel;
534537

535538
// 2FA is set up when login is set up, so nothing to do
536539
if (viewType == UIViewType.TwoFactor)
@@ -543,29 +546,35 @@ void SetupView(UIViewType viewType, IView view)
543546
if (viewType == UIViewType.Login)
544547
{
545548
var pair2fa = list[UIViewType.TwoFactor];
546-
pair2fa.AddHandler(pair2fa.ViewModel.WhenAny(x => x.IsShowing, x => x.Value)
549+
pair2fa.AddHandler(((IDialogViewModel)pair2fa.ViewModel).WhenAny(x => x.IsShowing, x => x.Value)
547550
.Where(x => x)
548551
.ObserveOn(RxApp.MainThreadScheduler)
549552
.Subscribe(_ => Fire(Trigger.Next)));
550553

551-
pair2fa.AddHandler(pair2fa.View.Cancel
554+
pair2fa.AddHandler(((IHasCancel)pair2fa.ViewModel).Cancel
552555
.ObserveOn(RxApp.MainThreadScheduler)
553556
.Subscribe(_ => Fire(uiStateMachine.CanFire(Trigger.Cancel) ? Trigger.Cancel : Trigger.Finish)));
554557

555-
pair.AddHandler(view.Done
556-
.ObserveOn(RxApp.MainThreadScheduler)
557-
.Subscribe(_ => Fire(Trigger.Finish)));
558+
if (hasDone != null)
559+
{
560+
pair.AddHandler(hasDone.Done
561+
.ObserveOn(RxApp.MainThreadScheduler)
562+
.Subscribe(_ => Fire(Trigger.Finish)));
563+
}
558564
}
559-
else
565+
else if (hasDone != null)
560566
{
561-
pair.AddHandler(view.Done
567+
pair.AddHandler(hasDone.Done
562568
.ObserveOn(RxApp.MainThreadScheduler)
563569
.Subscribe(_ => Fire(uiStateMachine.CanFire(Trigger.Next) ? Trigger.Next : Trigger.Finish)));
564570
}
565571

566-
pair.AddHandler(view.Cancel
567-
.ObserveOn(RxApp.MainThreadScheduler)
568-
.Subscribe(_ => Fire(uiStateMachine.CanFire(Trigger.Cancel) ? Trigger.Cancel : Trigger.Finish)));
572+
if (hasCancel != null)
573+
{
574+
pair.AddHandler(hasCancel.Cancel
575+
.ObserveOn(RxApp.MainThreadScheduler)
576+
.Subscribe(_ => Fire(uiStateMachine.CanFire(Trigger.Cancel) ? Trigger.Cancel : Trigger.Finish)));
577+
}
569578
}
570579

571580
/// <summary>

src/GitHub.App/GitHub.App.csproj

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,7 @@
132132
<Reference Include="WindowsBase" />
133133
</ItemGroup>
134134
<ItemGroup>
135+
<Compile Include="ViewModels\ViewModelBase.cs" />
135136
<None Include="..\..\script\Key.snk" Condition="$(Buildtype) == 'Internal'">
136137
<Link>Key.snk</Link>
137138
</None>
@@ -217,7 +218,8 @@
217218
<Compile Include="UserErrors\PublishRepositoryUserError.cs" />
218219
<Compile Include="UserErrors\PrivateRepositoryOnFreeAccountUserError.cs" />
219220
<Compile Include="UserErrors\PrivateRepositoryQuotaExceededUserError.cs" />
220-
<Compile Include="ViewModels\BaseViewModel.cs" />
221+
<Compile Include="ViewModels\PanePageViewModelBase.cs" />
222+
<Compile Include="ViewModels\DialogViewModelBase.cs" />
221223
<Compile Include="Models\ConnectionRepositoryHostMap.cs" />
222224
<Compile Include="ViewModels\GistCreationViewModel.cs" />
223225
<Compile Include="ViewModels\NotAGitRepositoryViewModel.cs" />

src/GitHub.App/SampleData/LocalRepositoryModelDesigner.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using GitHub.Primitives;
66
using GitHub.UI;
77
using NullGuard;
8+
using GitHub.Exports;
89

910
namespace GitHub.App.SampleData
1011
{
@@ -22,7 +23,7 @@ public class LocalRepositoryModelDesigner : ILocalRepositoryModel
2223
public event PropertyChangedEventHandler PropertyChanged;
2324
#pragma warning restore CS0067
2425

25-
public Task<UriString> GenerateUrl(string path = null, int startLine = -1, int endLine = -1)
26+
public Task<UriString> GenerateUrl(LinkType linkType, string path = null, int startLine = -1, int endLine = -1)
2627
{
2728
throw new NotImplementedException();
2829
}

src/GitHub.App/SampleData/LoggedOutViewModelDesigner.cs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,13 @@
11
using System;
22
using System.Diagnostics.CodeAnalysis;
3+
using System.Reactive;
34
using System.Reactive.Linq;
4-
using System.Windows.Input;
5-
using GitHub.Collections;
6-
using GitHub.Models;
75
using GitHub.ViewModels;
86

97
namespace GitHub.SampleData
108
{
119
[ExcludeFromCodeCoverage]
12-
public class LoggedOutViewModelDesigner : BaseViewModel, IViewModel
10+
public class LoggedOutViewModelDesigner : PanePageViewModelBase, IViewModel
1311
{
1412
public LoggedOutViewModelDesigner()
1513
{

src/GitHub.App/SampleData/PullRequestCreationViewModelDesigner.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,13 @@
44
using GitHub.Models;
55
using GitHub.Validation;
66
using ReactiveUI;
7+
using System;
8+
using System.Reactive;
79

810
namespace GitHub.SampleData
911
{
1012
[ExcludeFromCodeCoverage]
11-
public class PullRequestCreationViewModelDesigner : BaseViewModel, IPullRequestCreationViewModel
13+
public class PullRequestCreationViewModelDesigner : DialogViewModelBase, IPullRequestCreationViewModel
1214
{
1315
public PullRequestCreationViewModelDesigner()
1416
{
@@ -46,5 +48,6 @@ public PullRequestCreationViewModelDesigner()
4648

4749
public ReactivePropertyValidator BranchValidator { get; }
4850

51+
public override IObservable<Unit> Done { get; }
4952
}
5053
}

src/GitHub.App/SampleData/PullRequestDetailViewModelDesigner.cs

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System;
2+
using System.Collections.Generic;
23
using System.Diagnostics.CodeAnalysis;
34
using System.Reactive;
45
using System.Threading.Tasks;
@@ -25,8 +26,10 @@ public class PullRequestUpdateStateDesigner : IPullRequestUpdateState
2526
}
2627

2728
[ExcludeFromCodeCoverage]
28-
public class PullRequestDetailViewModelDesigner : BaseViewModel, IPullRequestDetailViewModel
29+
public class PullRequestDetailViewModelDesigner : PanePageViewModelBase, IPullRequestDetailViewModel
2930
{
31+
private List<IPullRequestChangeNode> changedFilesTree;
32+
3033
public PullRequestDetailViewModelDesigner()
3134
{
3235
var repoPath = @"C:\Repo";
@@ -63,17 +66,19 @@ public PullRequestDetailViewModelDesigner()
6366
modelsDir.Files.Add(oldBranchModel);
6467
gitHubDir.Directories.Add(modelsDir);
6568

66-
ChangedFilesTree = new ReactiveList<IPullRequestChangeNode>();
67-
ChangedFilesTree.Add(gitHubDir);
69+
changedFilesTree = new List<IPullRequestChangeNode>();
70+
changedFilesTree.Add(gitHubDir);
6871
}
6972

7073
public IPullRequestModel Model { get; }
7174
public string SourceBranchDisplayName { get; set; }
7275
public string TargetBranchDisplayName { get; set; }
76+
public bool IsLoading { get; }
77+
public bool IsBusy { get; }
7378
public bool IsCheckedOut { get; }
7479
public bool IsFromFork { get; }
7580
public string Body { get; }
76-
public IReactiveList<IPullRequestChangeNode> ChangedFilesTree { get; }
81+
public IReadOnlyList<IPullRequestChangeNode> ChangedFilesTree => changedFilesTree;
7782
public IPullRequestCheckoutState CheckoutState { get; set; }
7883
public IPullRequestUpdateState UpdateState { get; set; }
7984
public string OperationError { get; set; }

src/GitHub.App/SampleData/PullRequestListViewModelDesigner.cs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,12 @@
99
using ReactiveUI;
1010
using System.Collections.ObjectModel;
1111
using System.Linq;
12+
using GitHub.UI;
1213

1314
namespace GitHub.SampleData
1415
{
1516
[ExcludeFromCodeCoverage]
16-
public class PullRequestListViewModelDesigner : BaseViewModel, IPullRequestListViewModel
17+
public class PullRequestListViewModelDesigner : PanePageViewModelBase, IPullRequestListViewModel
1718
{
1819
public PullRequestListViewModelDesigner()
1920
{
@@ -56,7 +57,6 @@ public PullRequestListViewModelDesigner()
5657

5758
public ITrackingCollection<IPullRequestModel> PullRequests { get; set; }
5859
public IPullRequestModel SelectedPullRequest { get; set; }
59-
public ICommand OpenPullRequest { get; set; }
6060

6161
public IReadOnlyList<PullRequestState> States { get; set; }
6262
public PullRequestState SelectedState { get; set; }
@@ -66,5 +66,9 @@ public PullRequestListViewModelDesigner()
6666

6767
public ObservableCollection<IAccount> Assignees { get; set; }
6868
public IAccount SelectedAssignee { get; set; }
69+
public IObservable<ViewWithData> Navigate { get; }
70+
71+
public ReactiveCommand<object> OpenPullRequest { get; }
72+
public ReactiveCommand<object> CreatePullRequest { get; }
6973
}
7074
}

src/GitHub.App/SampleData/SampleViewModels.cs

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
namespace GitHub.SampleData
2424
{
2525
[ExcludeFromCodeCoverage]
26-
public class RepositoryCreationViewModelDesigner : BaseViewModel, IRepositoryCreationViewModel
26+
public class RepositoryCreationViewModelDesigner : DialogViewModelBase, IRepositoryCreationViewModel
2727
{
2828
public RepositoryCreationViewModelDesigner()
2929
{
@@ -186,6 +186,8 @@ public LicenseItem SelectedLicense
186186
get;
187187
set;
188188
}
189+
190+
public override IObservable<Unit> Done { get; }
189191
}
190192

191193
[ExcludeFromCodeCoverage]
@@ -230,12 +232,6 @@ public bool IsHostComboBoxVisible
230232
}
231233
}
232234

233-
public bool IsPublishing
234-
{
235-
get;
236-
private set;
237-
}
238-
239235
public IReactiveCommand<ProgressState> PublishRepository
240236
{
241237
get;
@@ -329,7 +325,7 @@ public static IRemoteRepositoryModel Create(string name = null, string owner = n
329325
}
330326
}
331327

332-
public class RepositoryCloneViewModelDesigner : BaseViewModel, IRepositoryCloneViewModel
328+
public class RepositoryCloneViewModelDesigner : DialogViewModelBase, IRepositoryCloneViewModel
333329
{
334330
public RepositoryCloneViewModelDesigner()
335331
{
@@ -378,11 +374,6 @@ public bool FilterTextIsEnabled
378374

379375
public new string Title { get { return "Clone a GitHub Repository"; } }
380376

381-
public bool IsLoading
382-
{
383-
get { return false; }
384-
}
385-
386377
public IReactiveCommand<IReadOnlyList<IRemoteRepositoryModel>> LoadRepositoriesCommand
387378
{
388379
get;
@@ -423,6 +414,8 @@ public ReactivePropertyValidator<string> BaseRepositoryPathValidator
423414
get;
424415
private set;
425416
}
417+
418+
public override IObservable<Unit> Done { get; }
426419
}
427420

428421
public class GitHubHomeSectionDesigner : IGitHubHomeSection

src/GitHub.App/SampleData/StartPageCloneViewModelDesigner.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,13 @@
88

99
namespace GitHub.SampleData
1010
{
11-
public class StartPageCloneViewModelDesigner : BaseViewModel, IBaseCloneViewModel
11+
public class StartPageCloneViewModelDesigner : DialogViewModelBase, IBaseCloneViewModel
1212
{
1313
public string BaseRepositoryPath { get; set; }
1414
public ReactivePropertyValidator<string> BaseRepositoryPathValidator { get; }
1515
public ICommand BrowseForDirectory { get; }
1616
public IReactiveCommand<object> CloneCommand { get; }
1717
public IRepositoryModel SelectedRepository { get; set; }
18+
public override IObservable<Unit> Done { get; }
1819
}
1920
}

0 commit comments

Comments
 (0)