コード例 #1
0
 public static Task <Response <Answer> > QuestionAnswersWithDetail(
     this INetworkApi api,
     string questionIds,
     string site,
     string order = "desc",
     string sort  = "votes",
     int page     = 1,
     int pagesize = 10) =>
 api.QuestionAnswers(questionIds, site, order, sort, page, pagesize, filter: Filters.AnswerDetail);
コード例 #2
0
        public SearchViewModel(IApplicationViewModel application = null, INetworkApi networkApi = null) : base(application)
        {
            this.NetworkApi        = networkApi ?? Service <INetworkApi>() ?? Api <INetworkApi>();
            LoadSites              = ReactiveCommand.CreateFromTask(LoadSitesImpl);
            LoadAssociatedAccounts = ReactiveCommand.CreateFromTask(LoadAssociatedAccountsImpl);
            DisplayQuestion        = ReactiveCommand.CreateFromTask <QuestionItemViewModel>(DisplayQuestionImpl);
            var canSearch = this.WhenAnyValue(vm => vm.Query).Select(q => !string.IsNullOrWhiteSpace(q));

            Search             = ReactiveCommand.CreateFromTask(SearchImpl, canSearch, outputScheduler: RxApp.MainThreadScheduler);
            suggestedQuestions = Search.ToProperty(this, vm => vm.SuggestedQuestions, initialValue: new ReactiveList <QuestionItemViewModel>());
            SetQueryAndFocus   = ReactiveCommand.CreateFromTask <string>(SetQueryAndFocusImpl);

            this.WhenActivated(d =>
            {
                d(this.WhenAnyValue(vm => vm.Query)
                  .Throttle(TimeSpan.FromMilliseconds(500), RxApp.TaskpoolScheduler)
                  .Select(q => Unit.Default)
                  .InvokeCommand(this, vm => vm.Search));
            });
        }
コード例 #3
0
 public static Task <Response <Question> > QuestionWithDetail(
     this INetworkApi api,
     string ids,
     string site) =>
 api.Question(ids, site, filter: Filters.QuestionDetail);
コード例 #4
0
        public QuestionPageViewModel(int questionId, IApplicationViewModel application = null, INetworkApi networkApi = null)
            : base(application)
        {
            NetworkApi    = networkApi ?? Api <INetworkApi>();
            LoadAnswers   = ReactiveCommand.CreateFromTask(LoadAnswersImpl, outputScheduler: RxApp.MainThreadScheduler);
            LoadQuestions = ReactiveCommand.CreateFromTask(LoadQuestionsImpl, outputScheduler: RxApp.MainThreadScheduler);
            Load          = ReactiveCommand.CreateCombined(new[] { LoadQuestions, LoadAnswers });

            Question = new QuestionDetailViewModel(questionId);
        }
コード例 #5
0
        public QuestionsViewModel(IApplicationViewModel application = null, ISearchViewModel search = null, INetworkApi networkApi = null)
            : base(application)
        {
            NetworkApi    = networkApi ?? Api <INetworkApi>();
            Search        = Service(search);
            LoadQuestions = ReactiveCommand.CreateFromTask(LoadQuestionsImpl);
            Clear         = ReactiveCommand.Create(() =>
            {
                Questions.Clear();
            });
            Refresh = ReactiveCommand.CreateFromTask(async() =>
            {
                await Clear.Execute();
                await LoadQuestions.Execute();
            }, canExecute: Clear.CanExecute.CombineLatest(LoadQuestions.CanExecute, (canClearExecute, canLoadExecute) => canClearExecute && canLoadExecute));
            DisplayQuestion = ReactiveCommand.CreateFromTask(async(QuestionItemViewModel question) =>
            {
                await Application.Navigate.Handle(new NavigationParams(typeof(QuestionPage), question.Question));
            });

            this.WhenActivated(d =>
            {
                SelectedQuestion = null;

                d(Search.WhenAnyValue(s => s.SelectedSite)
                  .Skip(1)
                  .Select(svm => Unit.Default)
                  .InvokeCommand(this, vm => vm.Refresh));

                d(this.WhenAnyValue(s => s.SelectedQuestion)
                  .Skip(1)
                  .Where(question => question != null)
                  .InvokeCommand(this, vm => vm.DisplayQuestion));
            });
        }