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

Commit b4fb08e

Browse files
committed
Moved ICanLoad to view model.
1 parent 9162006 commit b4fb08e

File tree

9 files changed

+38
-36
lines changed

9 files changed

+38
-36
lines changed

src/GitHub.App/Controllers/NavigationController.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ 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 ICanLoad;
134134
if (action != null)
135135
{
136136
disposablesForCurrentView.Add(action?.Load.Subscribe(d =>

src/GitHub.App/SampleData/PullRequestListViewModelDesigner.cs

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

1314
namespace GitHub.SampleData
1415
{
@@ -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> Load { get; }
70+
71+
public ReactiveCommand<object> OpenPullRequest { get; }
72+
public ReactiveCommand<object> CreatePullRequest { get; }
6973
}
7074
}

src/GitHub.App/ViewModels/PullRequestListViewModel.cs

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using System.ComponentModel.Composition;
55
using System.Linq;
66
using System.Reactive.Linq;
7+
using System.Reactive.Subjects;
78
using System.Windows.Input;
89
using System.Windows.Media.Imaging;
910
using GitHub.App;
@@ -25,7 +26,6 @@ public class PullRequestListViewModel : PanePageViewModelBase, IPullRequestListV
2526
{
2627
static readonly Logger log = LogManager.GetCurrentClassLogger();
2728

28-
readonly ReactiveCommand<object> openPullRequestCommand;
2929
readonly IRepositoryHost repositoryHost;
3030
readonly ILocalRepositoryModel repository;
3131
readonly TrackingCollection<IAccount> trackingAuthors;
@@ -57,8 +57,6 @@ public PullRequestListViewModel(
5757
.GetOrCreateRepositoryState(repository.CloneUrl)
5858
.PullRequests;
5959

60-
openPullRequestCommand = ReactiveCommand.Create();
61-
6260
States = new List<PullRequestState> {
6361
new PullRequestState { IsOpen = true, Name = "Open" },
6462
new PullRequestState { IsOpen = false, Name = "Closed" },
@@ -92,6 +90,10 @@ public PullRequestListViewModel(
9290
.Subscribe(a => UpdateFilter(SelectedState, SelectedAssignee, a));
9391

9492
SelectedState = States.FirstOrDefault(x => x.Name == listSettings.SelectedState) ?? States[0];
93+
OpenPullRequest = ReactiveCommand.Create();
94+
OpenPullRequest.Subscribe(DoOpenPullRequest);
95+
CreatePullRequest = ReactiveCommand.Create();
96+
CreatePullRequest.Subscribe(_ => DoCreatePullRequest());
9597
}
9698

9799
public override void Initialize([AllowNull] ViewWithData data)
@@ -171,11 +173,6 @@ public IPullRequestModel SelectedPullRequest
171173
set { this.RaiseAndSetIfChanged(ref selectedPullRequest, value); }
172174
}
173175

174-
public ICommand OpenPullRequest
175-
{
176-
get { return openPullRequestCommand; }
177-
}
178-
179176
IReadOnlyList<PullRequestState> states;
180177
public IReadOnlyList<PullRequestState> States
181178
{
@@ -229,6 +226,12 @@ public IAccount EmptyUser
229226
get { return emptyUser; }
230227
}
231228

229+
readonly Subject<ViewWithData> load = new Subject<ViewWithData>();
230+
public IObservable<ViewWithData> Load => load;
231+
232+
public ReactiveCommand<object> OpenPullRequest { get; }
233+
public ReactiveCommand<object> CreatePullRequest { get; }
234+
232235
bool disposed;
233236
protected void Dispose(bool disposing)
234237
{
@@ -256,5 +259,17 @@ void SaveSettings()
256259
listSettings.SelectedAuthor = SelectedAuthor?.Login;
257260
settings.Save();
258261
}
262+
263+
void DoOpenPullRequest(object pullRequest)
264+
{
265+
var d = new ViewWithData(UIControllerFlow.PullRequestDetail) { Data = pullRequest };
266+
load.OnNext(d);
267+
}
268+
269+
void DoCreatePullRequest()
270+
{
271+
var d = new ViewWithData(UIControllerFlow.PullRequestCreation);
272+
load.OnNext(d);
273+
}
259274
}
260275
}

src/GitHub.Exports.Reactive/ViewModels/IPullRequestListViewModel.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,16 +27,17 @@ public override string ToString()
2727
}
2828
}
2929

30-
public interface IPullRequestListViewModel : IViewModel
30+
public interface IPullRequestListViewModel : IViewModel, ICanLoad
3131
{
3232
ITrackingCollection<IPullRequestModel> PullRequests { get; }
3333
IPullRequestModel SelectedPullRequest { get; }
34-
ICommand OpenPullRequest { get; }
3534
IReadOnlyList<PullRequestState> States { get; set; }
3635
PullRequestState SelectedState { get; set; }
3736
ObservableCollection<IAccount> Authors { get; }
3837
IAccount SelectedAuthor { get; set; }
3938
ObservableCollection<IAccount> Assignees { get; }
4039
IAccount SelectedAssignee { get; set; }
40+
ReactiveCommand<object> OpenPullRequest { get; }
41+
ReactiveCommand<object> CreatePullRequest { get; }
4142
}
4243
}

src/GitHub.Exports/GitHub.Exports.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,7 @@
216216
<Compile Include="ViewModels\IHasBusy.cs" />
217217
<Compile Include="ViewModels\IInfoPanel.cs" />
218218
<Compile Include="ViewModels\IServiceProviderAware.cs" />
219-
<Compile Include="UI\ICanLoad.cs" />
219+
<Compile Include="ViewModels\ICanLoad.cs" />
220220
<Compile Include="UI\Octicon.cs" />
221221
<Compile Include="ViewModels\IGitHubConnectSection.cs" />
222222
<Compile Include="ViewModels\IGitHubInvitationSection.cs" />
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System;
2+
using GitHub.UI;
23

3-
namespace GitHub.UI
4+
namespace GitHub.ViewModels
45
{
56
public interface ICanLoad
67
{

src/GitHub.VisualStudio/UI/Views/Controls/PullRequestListItem.xaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@
5959
Margin="0,-3,5,0"
6060
Content="{Binding Title}"
6161
ToolTip="{Binding Title}"
62-
Command="{Binding OpenPR, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:PullRequestListView}}}"
62+
Command="{Binding DataContext.OpenPullRequest, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:PullRequestListView}}}"
6363
CommandParameter="{Binding Number}"/>
6464

6565
<ui:OcticonImage x:Name="comment_icon"

src/GitHub.VisualStudio/UI/Views/PullRequestListView.xaml

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -139,9 +139,7 @@
139139

140140
<ui:GitHubActionLink Grid.Column="1"
141141
HorizontalAlignment="Right"
142-
Command="{Binding CreatePR,
143-
RelativeSource={RelativeSource FindAncestor,
144-
AncestorType={x:Type local:PullRequestListView}}}"
142+
Command="{Binding CreatePullRequest}"
145143
Content="Create New"
146144
AutomationProperties.AutomationId="{x:Static automation:AutomationIDs.CreateNewHyperlink}" />
147145
</Grid>

src/GitHub.VisualStudio/UI/Views/PullRequestListView.xaml.cs

Lines changed: 1 addition & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,10 @@ public class GenericPullRequestListView : SimpleViewUserControl<IPullRequestList
2121

2222
[ExportView(ViewType = UIViewType.PRList)]
2323
[PartCreationPolicy(CreationPolicy.NonShared)]
24-
public partial class PullRequestListView : GenericPullRequestListView, IDisposable, ICanLoad
24+
public partial class PullRequestListView : GenericPullRequestListView, IDisposable
2525
{
2626
readonly Subject<int> open = new Subject<int>();
2727
readonly Subject<object> create = new Subject<object>();
28-
readonly Subject<ViewWithData> load = new Subject<ViewWithData>();
2928

3029
public PullRequestListView()
3130
{
@@ -37,18 +36,6 @@ public PullRequestListView(IGitHubServiceProvider serviceProvider)
3736
{
3837
InitializeComponent();
3938

40-
OpenPR = new RelayCommand(x =>
41-
{
42-
var d = new ViewWithData(UIControllerFlow.PullRequestDetail) { Data = x };
43-
load.OnNext(d);
44-
});
45-
46-
CreatePR = new RelayCommand(x =>
47-
{
48-
var d = new ViewWithData(UIControllerFlow.PullRequestCreation);
49-
load.OnNext(d);
50-
});
51-
5239
OpenPROnGitHub = new RelayCommand(x =>
5340
{
5441
var repo = serviceProvider.TryGetService<ITeamExplorerServiceHolder>()?.ActiveRepo;
@@ -69,10 +56,6 @@ public PullRequestListView(IGitHubServiceProvider serviceProvider)
6956
}
7057

7158
public ICommand OpenPROnGitHub { get; set; }
72-
public ICommand OpenPR { get; set; }
73-
public ICommand CreatePR { get; set; }
74-
75-
public IObservable<ViewWithData> Load => load;
7659

7760
bool disposed;
7861
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA1816:CallGCSuppressFinalizeCorrectly")]

0 commit comments

Comments
 (0)