public IssuesViewModel(ISessionService sessionService) : base(sessionService) { _sessionService = sessionService; Filter = new IssuesFilterModel(); Title = "Issues"; GoToNewIssueCommand = ReactiveCommand.Create(); GoToNewIssueCommand.Subscribe(_ => { var vm = this.CreateViewModel<IssueAddViewModel>(); vm.RepositoryOwner = RepositoryOwner; vm.RepositoryName = RepositoryName; vm.SaveCommand.Subscribe(x => LoadCommand.ExecuteIfCan()); NavigateTo(vm); }); this.WhenAnyValue(x => x.Filter).Skip(1).Subscribe(filter => { InternalItems.Clear(); LoadCommand.ExecuteIfCan(); //CustomFilterEnabled = !(filter == _closedFilter || filter == _openFilter); }); GoToFilterCommand = ReactiveCommand.Create(); GoToFilterCommand.Subscribe(_ => { var vm = this.CreateViewModel<RepositoryIssuesFilterViewModel>(); vm.Init(RepositoryOwner, RepositoryName, Filter); vm.SaveCommand.Subscribe(filter => { Filter = filter; FilterSelection = IssueFilterSelection.Custom; }); NavigateTo(vm); }); }
public RepositoryIssuesFilterViewModel(ISessionService sessionService, IActionMenuFactory actionMenu) { Title = "Filter"; State = IssueState.Open; SortType = CodeHub.Core.Filters.IssueSort.None; SaveCommand = ReactiveCommand.CreateAsyncTask(_ => { var model = new IssuesFilterModel(Assignee, Creator, Mentioned, Labels, Milestone, State, SortType, Ascending); return Task.FromResult(model); }); SaveCommand.Subscribe(_ => Dismiss()); DismissCommand = ReactiveCommand.Create().WithSubscription(_ => Dismiss()); _assigneesCache = new Lazy<Task<IReadOnlyList<User>>>(() => sessionService.GitHubClient.Issue.Assignee.GetAllForRepository(RepositoryOwner, RepositoryName)); _milestonesCache = new Lazy<Task<IReadOnlyList<Milestone>>>(() => sessionService.GitHubClient.Issue.Milestone.GetAllForRepository(RepositoryOwner, RepositoryName)); _labelsCache = new Lazy<Task<IReadOnlyList<Label>>>(() => sessionService.GitHubClient.Issue.Labels.GetAllForRepository(RepositoryOwner, RepositoryName)); this.WhenAnyValue(x => x.Milestone) .Select(x => x?.Title) .ToProperty(this, x => x.MilestoneString, out _milestoneString); this.WhenAnyValue(x => x.Assignee) .Select(x => x?.Login) .ToProperty(this, x => x.AssigneeString, out _assigneeString); this.WhenAnyValue(x => x.Labels) .Select(x => x ?? new List<Label>()) .Select(x => string.Join(", ", x.Select(y => y.Name))) .ToProperty(this, x => x.LabelsString, out _labelsString); SelectAssigneeCommand = ReactiveCommand.Create(); SelectMilestoneCommand = ReactiveCommand.Create(); SelectLabelsCommand = ReactiveCommand.Create(); SelectStateCommand = ReactiveCommand.CreateAsyncTask(async sender => { var options = Enum.GetValues(typeof(IssueState)).Cast<IssueState>().ToList(); var picker = actionMenu.CreatePicker(); foreach (var option in options) picker.Options.Add(option.Humanize()); picker.SelectedOption = options.IndexOf(State); var ret = await picker.Show(sender); State = options[ret]; }); SelectSortCommand = ReactiveCommand.CreateAsyncTask(async sender => { var options = Enum.GetValues(typeof(CodeHub.Core.Filters.IssueSort)).Cast<CodeHub.Core.Filters.IssueSort>().ToList(); var picker = actionMenu.CreatePicker(); foreach (var option in options) picker.Options.Add(option.Humanize()); picker.SelectedOption = options.IndexOf(SortType); var ret = await picker.Show(sender); SortType = options[ret]; }); }
public RepositoryIssuesFilterViewModel Init(string repositoryOwner, string repositoryName, IssuesFilterModel model) { RepositoryOwner = repositoryOwner; RepositoryName = repositoryName; Assignee = model.Assignee; Creator = model.Creator; Milestone = model.Milestone; Labels = model.Labels; Mentioned = model.Mentioned; SortType = model.SortType; State = model.IssueState; Ascending = model.Ascending; return this; }
private IssuesFilterModel CreateFilterModel() { var model = new IssuesFilterModel(); model.Open = _open.Value; model.Labels = _labels.Value; model.SortType = _sort.Value; model.Ascending = _asc.Value; model.Mentioned = _mentioned.Value; model.Creator = _creator.Value; model.Assignee = _assignee.Value; model.Milestone = _milestoneHolder; return model; }