public RepositoriesTrendingViewModel(ITrendingRepository trendingRepository = null) { _trendingRepository = trendingRepository ?? new TrendingRepository(); RepositoryItemSelected = ReactiveCommand.Create <RepositoryItemViewModel, RepositoryItemViewModel>(x => x); LoadCommand = ReactiveCommand.CreateFromTask(Load); SelectedLanguage = _defaultLanguage; this.WhenAnyValue(x => x.SelectedLanguage) .Skip(1) .Select(_ => Unit.Default) .Do(_ => Items = null) .InvokeCommand(LoadCommand); }
public RepositoriesTrendingViewModel( ITrendingRepository trendingRepository = null, IAlertDialogService dialogService = null) { _trendingRepository = trendingRepository ?? new TrendingRepository(); _dialogService = dialogService ?? Locator.Current.GetService <IAlertDialogService>(); RepositoryItemSelected = ReactiveCommand.Create <RepositoryItemViewModel, RepositoryItemViewModel>(x => x); LoadCommand = ReactiveCommand.CreateFromTask(Load); LoadCommand.ThrownExceptions.Subscribe(LoadingError); SelectedLanguage = _defaultLanguage; this.WhenAnyValue(x => x.SelectedLanguage) .Skip(1) .Select(_ => Unit.Default) .Do(_ => Items = null) .InvokeCommand(LoadCommand); }
public RepositoriesTrendingViewModel(ISessionService applicationService, ITrendingRepository trendingRepository) { ShowRepositoryDescription = applicationService.Account.ShowRepositoryDescriptionInList; Title = "Trending"; var defaultLanguage = LanguageRepository.DefaultLanguage; SelectedLanguage = new LanguageItemViewModel(defaultLanguage.Name, defaultLanguage.Slug); GoToLanguages = ReactiveCommand.Create().WithSubscription(_ => { var vm = this.CreateViewModel<LanguagesViewModel>(); vm.SelectedLanguage = SelectedLanguage; vm.WhenAnyValue(x => x.SelectedLanguage).Skip(1) .Subscribe(x => SelectedLanguage = x); NavigateTo(vm); }); LoadCommand = ReactiveCommand.CreateAsyncTask(async _ => { var requests = _times.Select(t => { var language = (SelectedLanguage != null && SelectedLanguage.Slug != null) ? SelectedLanguage.Slug : null; return new { Time = t, Query = trendingRepository.GetTrendingRepositories(t.Slug, language) }; }).ToArray(); await Task.WhenAll(requests.Select(x => x.Query)); Repositories = requests.Select(r => { var transformedRepos = r.Query.Result.Select(x => new RepositoryItemViewModel(x, true, GoToRepository)); return new GroupedCollection<RepositoryItemViewModel>(r.Time.Name, new ReactiveList<RepositoryItemViewModel>(transformedRepos)); }).ToList(); }); this.WhenAnyValue(x => x.SelectedLanguage).Skip(1).Subscribe(_ => { Repositories = null; LoadCommand.ExecuteIfCan(); }); }
public RepositoriesTrendingViewModel(ISessionService applicationService, ITrendingRepository trendingRepository) { ShowRepositoryDescription = applicationService.Account.ShowRepositoryDescriptionInList; Title = "Trending"; var defaultLanguage = LanguageRepository.DefaultLanguage; SelectedLanguage = new LanguageItemViewModel(defaultLanguage.Name, defaultLanguage.Slug); GoToLanguages = ReactiveCommand.Create().WithSubscription(_ => { var vm = this.CreateViewModel <LanguagesViewModel>(); vm.SelectedLanguage = SelectedLanguage; vm.WhenAnyValue(x => x.SelectedLanguage).Skip(1) .Subscribe(x => SelectedLanguage = x); NavigateTo(vm); }); LoadCommand = ReactiveCommand.CreateAsyncTask(async _ => { var requests = _times.Select(t => { var language = (SelectedLanguage != null && SelectedLanguage.Slug != null) ? SelectedLanguage.Slug : null; return(new { Time = t, Query = trendingRepository.GetTrendingRepositories(t.Slug, language) }); }).ToArray(); await Task.WhenAll(requests.Select(x => x.Query)); Repositories = requests.Select(r => { var transformedRepos = r.Query.Result.Select(x => new RepositoryItemViewModel(x, true, GoToRepository)); return(new GroupedCollection <RepositoryItemViewModel>(r.Time.Name, new ReactiveList <RepositoryItemViewModel>(transformedRepos))); }).ToList(); }); this.WhenAnyValue(x => x.SelectedLanguage).Skip(1).Subscribe(_ => { Repositories = null; LoadCommand.ExecuteIfCan(); }); }
public TrendingService(ITrendingRepository trendingRepository) { _trendingRepository = trendingRepository; }