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

Commit 96d0518

Browse files
authored
Merge branch 'master' into grokys/docs
2 parents 0295ffb + 38962c0 commit 96d0518

File tree

144 files changed

+3419
-823
lines changed

Some content is hidden

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

144 files changed

+3419
-823
lines changed

.gitmodules

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,3 @@
1616
[submodule "script"]
1717
path = script
1818
url = [email protected]:github/VisualStudioBuildScripts
19-
[submodule "submodules/GitHubVSAutomationIDs"]
20-
path = submodules/GitHubVSAutomationIDs
21-
url = https://github.com/editor-tools/GitHubVSAutomationIDs.git

GitHubVS.sln

Lines changed: 22 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -104,9 +104,7 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GitHub.VisualStudio.UI", "s
104104
EndProject
105105
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GitHub.StartPage", "src\GitHub.StartPage\GitHub.StartPage.csproj", "{50E277B8-8580-487A-8F8E-5C3B9FBF0F77}"
106106
EndProject
107-
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "GitHubVSAutomationIDs", "GitHubVSAutomationIDs", "{4405C20E-A72A-4807-9480-14E9BB558347}"
108-
EndProject
109-
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GithubVSTestAutomationIDs", "submodules\GitHubVSAutomationIDs\GithubVSAutomationIDs\GithubVSTestAutomationIDs.csproj", "{665078F4-5875-431D-A2CC-421849B43328}"
107+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GitHub.UI.UnitTests", "test\GitHub.UI.UnitTests\GitHub.UI.UnitTests.csproj", "{110B206F-8554-4B51-BF86-94DAA32F5E26}"
110108
EndProject
111109
Global
112110
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -161,8 +159,8 @@ Global
161159
{346384DD-2445-4A28-AF22-B45F3957BD89}.Release|Any CPU.Build.0 = Release|Any CPU
162160
{346384DD-2445-4A28-AF22-B45F3957BD89}.Release|x86.ActiveCfg = Release|Any CPU
163161
{346384DD-2445-4A28-AF22-B45F3957BD89}.Release|x86.Build.0 = Release|Any CPU
164-
{346384DD-2445-4A28-AF22-B45F3957BD89}.XamlDesign|Any CPU.ActiveCfg = Debug|Any CPU
165-
{346384DD-2445-4A28-AF22-B45F3957BD89}.XamlDesign|Any CPU.Build.0 = Debug|Any CPU
162+
{346384DD-2445-4A28-AF22-B45F3957BD89}.XamlDesign|Any CPU.ActiveCfg = XamlDesign|Any CPU
163+
{346384DD-2445-4A28-AF22-B45F3957BD89}.XamlDesign|Any CPU.Build.0 = XamlDesign|Any CPU
166164
{346384DD-2445-4A28-AF22-B45F3957BD89}.XamlDesign|x86.ActiveCfg = Debug|Any CPU
167165
{346384DD-2445-4A28-AF22-B45F3957BD89}.XamlDesign|x86.Build.0 = Debug|Any CPU
168166
{158B05E8-FDBC-4D71-B871-C96E28D5ADF5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
@@ -526,8 +524,8 @@ Global
526524
{D1DFBB0C-B570-4302-8F1E-2E3A19C41961}.Release|Any CPU.Build.0 = Release|Any CPU
527525
{D1DFBB0C-B570-4302-8F1E-2E3A19C41961}.Release|x86.ActiveCfg = Release|Any CPU
528526
{D1DFBB0C-B570-4302-8F1E-2E3A19C41961}.Release|x86.Build.0 = Release|Any CPU
529-
{D1DFBB0C-B570-4302-8F1E-2E3A19C41961}.XamlDesign|Any CPU.ActiveCfg = Debug|Any CPU
530-
{D1DFBB0C-B570-4302-8F1E-2E3A19C41961}.XamlDesign|Any CPU.Build.0 = Debug|Any CPU
527+
{D1DFBB0C-B570-4302-8F1E-2E3A19C41961}.XamlDesign|Any CPU.ActiveCfg = XamlDesign|Any CPU
528+
{D1DFBB0C-B570-4302-8F1E-2E3A19C41961}.XamlDesign|Any CPU.Build.0 = XamlDesign|Any CPU
531529
{D1DFBB0C-B570-4302-8F1E-2E3A19C41961}.XamlDesign|x86.ActiveCfg = Release|Any CPU
532530
{D1DFBB0C-B570-4302-8F1E-2E3A19C41961}.XamlDesign|x86.Build.0 = Release|Any CPU
533531
{50E277B8-8580-487A-8F8E-5C3B9FBF0F77}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
@@ -546,22 +544,22 @@ Global
546544
{50E277B8-8580-487A-8F8E-5C3B9FBF0F77}.XamlDesign|Any CPU.Build.0 = Release|Any CPU
547545
{50E277B8-8580-487A-8F8E-5C3B9FBF0F77}.XamlDesign|x86.ActiveCfg = Release|Any CPU
548546
{50E277B8-8580-487A-8F8E-5C3B9FBF0F77}.XamlDesign|x86.Build.0 = Release|Any CPU
549-
{665078F4-5875-431D-A2CC-421849B43328}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
550-
{665078F4-5875-431D-A2CC-421849B43328}.Debug|Any CPU.Build.0 = Debug|Any CPU
551-
{665078F4-5875-431D-A2CC-421849B43328}.Debug|x86.ActiveCfg = Debug|Any CPU
552-
{665078F4-5875-431D-A2CC-421849B43328}.Debug|x86.Build.0 = Debug|Any CPU
553-
{665078F4-5875-431D-A2CC-421849B43328}.Publish|Any CPU.ActiveCfg = Release|Any CPU
554-
{665078F4-5875-431D-A2CC-421849B43328}.Publish|Any CPU.Build.0 = Release|Any CPU
555-
{665078F4-5875-431D-A2CC-421849B43328}.Publish|x86.ActiveCfg = Release|Any CPU
556-
{665078F4-5875-431D-A2CC-421849B43328}.Publish|x86.Build.0 = Release|Any CPU
557-
{665078F4-5875-431D-A2CC-421849B43328}.Release|Any CPU.ActiveCfg = Release|Any CPU
558-
{665078F4-5875-431D-A2CC-421849B43328}.Release|Any CPU.Build.0 = Release|Any CPU
559-
{665078F4-5875-431D-A2CC-421849B43328}.Release|x86.ActiveCfg = Release|Any CPU
560-
{665078F4-5875-431D-A2CC-421849B43328}.Release|x86.Build.0 = Release|Any CPU
561-
{665078F4-5875-431D-A2CC-421849B43328}.XamlDesign|Any CPU.ActiveCfg = Release|Any CPU
562-
{665078F4-5875-431D-A2CC-421849B43328}.XamlDesign|Any CPU.Build.0 = Release|Any CPU
563-
{665078F4-5875-431D-A2CC-421849B43328}.XamlDesign|x86.ActiveCfg = Release|Any CPU
564-
{665078F4-5875-431D-A2CC-421849B43328}.XamlDesign|x86.Build.0 = Release|Any CPU
547+
{110B206F-8554-4B51-BF86-94DAA32F5E26}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
548+
{110B206F-8554-4B51-BF86-94DAA32F5E26}.Debug|Any CPU.Build.0 = Debug|Any CPU
549+
{110B206F-8554-4B51-BF86-94DAA32F5E26}.Debug|x86.ActiveCfg = Debug|Any CPU
550+
{110B206F-8554-4B51-BF86-94DAA32F5E26}.Debug|x86.Build.0 = Debug|Any CPU
551+
{110B206F-8554-4B51-BF86-94DAA32F5E26}.Publish|Any CPU.ActiveCfg = Release|Any CPU
552+
{110B206F-8554-4B51-BF86-94DAA32F5E26}.Publish|Any CPU.Build.0 = Release|Any CPU
553+
{110B206F-8554-4B51-BF86-94DAA32F5E26}.Publish|x86.ActiveCfg = Release|Any CPU
554+
{110B206F-8554-4B51-BF86-94DAA32F5E26}.Publish|x86.Build.0 = Release|Any CPU
555+
{110B206F-8554-4B51-BF86-94DAA32F5E26}.Release|Any CPU.ActiveCfg = Release|Any CPU
556+
{110B206F-8554-4B51-BF86-94DAA32F5E26}.Release|Any CPU.Build.0 = Release|Any CPU
557+
{110B206F-8554-4B51-BF86-94DAA32F5E26}.Release|x86.ActiveCfg = Release|Any CPU
558+
{110B206F-8554-4B51-BF86-94DAA32F5E26}.Release|x86.Build.0 = Release|Any CPU
559+
{110B206F-8554-4B51-BF86-94DAA32F5E26}.XamlDesign|Any CPU.ActiveCfg = Release|Any CPU
560+
{110B206F-8554-4B51-BF86-94DAA32F5E26}.XamlDesign|Any CPU.Build.0 = Release|Any CPU
561+
{110B206F-8554-4B51-BF86-94DAA32F5E26}.XamlDesign|x86.ActiveCfg = Release|Any CPU
562+
{110B206F-8554-4B51-BF86-94DAA32F5E26}.XamlDesign|x86.Build.0 = Release|Any CPU
565563
EndGlobalSection
566564
GlobalSection(SolutionProperties) = preSolution
567565
HideSolutionNode = FALSE
@@ -585,7 +583,6 @@ Global
585583
{0EC8DBA1-D745-4EE5-993A-6026440EC3BF} = {1E7F7253-A6AF-43C4-A955-37BEDDA01AF9}
586584
{DD99FD0F-82F6-4C30-930E-4A1D0DF01D65} = {1E7F7253-A6AF-43C4-A955-37BEDDA01AB9}
587585
{7B835A7D-CF94-45E8-B191-96F5A4FE26A8} = {8A7DA2E7-262B-4581-807A-1C45CE79CDFD}
588-
{4405C20E-A72A-4807-9480-14E9BB558347} = {1E7F7253-A6AF-43C4-A955-37BEDDA01AB8}
589-
{665078F4-5875-431D-A2CC-421849B43328} = {4405C20E-A72A-4807-9480-14E9BB558347}
586+
{110B206F-8554-4B51-BF86-94DAA32F5E26} = {8A7DA2E7-262B-4581-807A-1C45CE79CDFD}
590587
EndGlobalSection
591588
EndGlobal

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: 7 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,10 @@ public PullRequestListViewModelDesigner()
6666

6767
public ObservableCollection<IAccount> Assignees { get; set; }
6868
public IAccount SelectedAssignee { get; set; }
69+
public IObservable<ViewWithData> Navigate { get; }
70+
public bool IsBusy { get; }
71+
72+
public ReactiveCommand<object> OpenPullRequest { get; }
73+
public ReactiveCommand<object> CreatePullRequest { get; }
6974
}
7075
}

0 commit comments

Comments
 (0)