public override void ViewDidLoad() { base.ViewDidLoad(); Title = "Pull Request #" + ViewModel.PullRequestId; HeaderView.SetImage(null, Images.Avatar); ViewModel.Bind(x => x.PullRequest).Subscribe(_ => Render()); ViewModel.BindCollection(x => x.Comments).Subscribe(_ => Render()); }
public PullRequestViewController(string user, string slug, ulong id) { Title = "Pull Request #".t() + id; ViewModel = new PullRequestViewModel(user, slug, id); Root.UnevenRows = true; _header = new HeaderView(View.Bounds.Width) { ShadowImage = false }; _split1 = new SplitElement(new SplitElement.Row { Image1 = Images.Cog, Image2 = Images.Merge }) { BackgroundColor = UIColor.White }; ViewModel.Bind(x => x.PullRequest, Render); ViewModel.BindCollection(x => x.Comments, e => Render()); }
public override void ViewDidLoad() { base.ViewDidLoad(); Title = "Pull Request #" + ViewModel.Id; HeaderView.SetImage(null, Images.Avatar); HeaderView.Text = Title; Appeared.Take(1) .Select(_ => Observable.Timer(TimeSpan.FromSeconds(0.2f))) .Switch() .ObserveOn(RxApp.MainThreadScheduler) .Select(_ => ViewModel.Bind(x => x.IsClosed, true).Where(x => x.HasValue).Select(x => x.Value)) .Switch() .Subscribe(x => { HeaderView.SubImageView.TintColor = x ? UIColor.FromRGB(0xbd, 0x2c, 0) : UIColor.FromRGB(0x6c, 0xc6, 0x44); HeaderView.SetSubImage((x ? Octicon.IssueClosed :Octicon.IssueOpened).ToImage()); }); _milestoneElement = new StringElement("Milestone", "No Milestone", UITableViewCellStyle.Value1) { Image = Octicon.Milestone.ToImage() }; _assigneeElement = new StringElement("Assigned", "Unassigned", UITableViewCellStyle.Value1) { Image = Octicon.Person.ToImage() }; _labelsElement = new StringElement("Labels", "None", UITableViewCellStyle.Value1) { Image = Octicon.Tag.ToImage() }; _addCommentElement = new StringElement("Add Comment") { Image = Octicon.Pencil.ToImage() }; ViewModel.Bind(x => x.PullRequest).Subscribe(x => { var merged = (x.Merged != null && x.Merged.Value); _split1.Button1.Text = x.State; _split1.Button2.Text = merged ? "Merged" : "Not Merged"; _split2.Button1.Text = x.User.Login; _split2.Button2.Text = x.CreatedAt.ToString("MM/dd/yy"); HeaderView.Text = x.Title ?? Title; HeaderView.SubText = "Updated " + x.UpdatedAt.Humanize(); HeaderView.SetImage(x.User?.AvatarUrl, Images.Avatar); RefreshHeaderView(); Render(); }); ViewModel.Bind(x => x.MarkdownDescription).Subscribe(description => { var model = new MarkdownModel(description, (int)UIFont.PreferredSubheadline.PointSize, true); var markdown = new MarkdownWebView { Model = model }; var html = markdown.GenerateString(); _descriptionElement.SetValue(string.IsNullOrEmpty(description) ? null : html); Render(); }); var actionButton = NavigationItem.RightBarButtonItem = new UIBarButtonItem(UIBarButtonSystemItem.Action) { Enabled = false }; ViewModel.Bind(x => x.IsLoading).Subscribe(x => { if (!x) { actionButton.Enabled = ViewModel.PullRequest != null; } }); ViewModel.Bind(x => x.ShouldShowPro).Subscribe(x => { if (x) { this.ShowPrivateView(); } }); ViewModel.Bind(x => x.CanPush).Subscribe(_ => Render()); ViewModel.GoToLabelsCommand.CanExecuteChanged += (sender, e) => { _labelsElement.Accessory = ViewModel.GoToLabelsCommand.CanExecute(null) ? UITableViewCellAccessory.DisclosureIndicator : UITableViewCellAccessory.None; }; ViewModel.GoToAssigneeCommand.CanExecuteChanged += (sender, e) => { _assigneeElement.Accessory = ViewModel.GoToAssigneeCommand.CanExecute(null) ? UITableViewCellAccessory.DisclosureIndicator : UITableViewCellAccessory.None; }; ViewModel.GoToMilestoneCommand.CanExecuteChanged += (sender, e) => { _milestoneElement.Accessory = ViewModel.GoToMilestoneCommand.CanExecute(null) ? UITableViewCellAccessory.DisclosureIndicator : UITableViewCellAccessory.None; }; ViewModel .Bind(x => x.Comments) .Select(_ => Unit.Default) .Merge(ViewModel.Bind(x => x.Events).Select(_ => Unit.Default)) .Subscribe(_ => RenderComments().ToBackground()); OnActivation(d => { d(_milestoneElement.Clicked.BindCommand(ViewModel.GoToMilestoneCommand)); d(_assigneeElement.Clicked.BindCommand(ViewModel.GoToAssigneeCommand)); d(_labelsElement.Clicked.BindCommand(ViewModel.GoToLabelsCommand)); d(_addCommentElement.Clicked.Subscribe(_ => AddCommentTapped())); d(_descriptionElement.UrlRequested.BindCommand(ViewModel.GoToUrlCommand)); d(_commentsElement.UrlRequested.BindCommand(ViewModel.GoToUrlCommand)); d(actionButton.GetClickedObservable().Subscribe(_ => ShowExtraMenu())); d(HeaderView.Clicked.BindCommand(ViewModel.GoToOwner)); d(ViewModel.Bind(x => x.IsModifying).SubscribeStatus("Loading...")); d(ViewModel.Bind(x => x.Issue, true).Where(x => x != null).Subscribe(x => { _assigneeElement.Value = x.Assignee != null ? x.Assignee.Login : "******"; _milestoneElement.Value = x.Milestone != null ? x.Milestone.Title : "No Milestone"; _labelsElement.Value = x.Labels.Count == 0 ? "None" : string.Join(", ", x.Labels.Select(i => i.Name)); Render(); })); }); }
public override void ViewDidLoad() { base.ViewDidLoad(); ViewModel.Bind(x => x.PullRequest, Render); ViewModel.BindCollection(x => x.Comments, e => Render()); }
public override void ViewDidLoad() { Root.UnevenRows = true; base.ViewDidLoad(); _header = new HeaderView(); _hud = this.CreateHud(); var content = System.IO.File.ReadAllText("WebCell/body.html", System.Text.Encoding.UTF8); _descriptionElement = new WebElement(content, "body", false); _descriptionElement.UrlRequested = ViewModel.GoToUrlCommand.Execute; var content2 = System.IO.File.ReadAllText("WebCell/comments.html", System.Text.Encoding.UTF8); _commentsElement = new WebElement(content2, "comments", true); _commentsElement.UrlRequested = ViewModel.GoToUrlCommand.Execute; _milestoneElement = new StyledStringElement("Milestone", "No Milestone", UITableViewCellStyle.Value1) { Image = Images.Milestone }; _milestoneElement.Tapped += () => ViewModel.GoToMilestoneCommand.Execute(null); _assigneeElement = new StyledStringElement("Assigned", "Unassigned".t(), UITableViewCellStyle.Value1) { Image = Images.Person }; _assigneeElement.Tapped += () => ViewModel.GoToAssigneeCommand.Execute(null); _labelsElement = new StyledStringElement("Labels", "None", UITableViewCellStyle.Value1) { Image = Images.Tag }; _labelsElement.Tapped += () => ViewModel.GoToLabelsCommand.Execute(null); _addCommentElement = new StyledStringElement("Add Comment") { Image = Images.Pencil }; _addCommentElement.Tapped += AddCommentTapped; _split1 = new SplitElement(new SplitElement.Row { Image1 = Images.Cog, Image2 = Images.Merge }); _split2 = new SplitElement(new SplitElement.Row { Image1 = Images.Person, Image2 = Images.Create }); ViewModel.Bind(x => x.PullRequest, x => { var merged = (x.Merged != null && x.Merged.Value); _split1.Value.Text1 = x.State; _split1.Value.Text2 = merged ? "Merged" : "Not Merged"; _split2.Value.Text1 = x.User.Login; _split2.Value.Text2 = x.CreatedAt.ToString("MM/dd/yy"); _descriptionElement.Value = ViewModel.MarkdownDescription; _header.Title = x.Title; _header.Subtitle = "Updated " + x.UpdatedAt.ToDaysAgo(); Render(); }); NavigationItem.RightBarButtonItem = new UIBarButtonItem(UIBarButtonSystemItem.Action, (s, e) => ShowExtraMenu()); NavigationItem.RightBarButtonItem.Enabled = false; ViewModel.Bind(x => x.IsLoading, x => { if (!x) { NavigationItem.RightBarButtonItem.Enabled = ViewModel.PullRequest != null; } }); ViewModel.Bind(x => x.IsModifying, x => { if (x) { _hud.Show("Loading..."); } else { _hud.Hide(); } }); ViewModel.Bind(x => x.Issue, x => { _assigneeElement.Value = x.Assignee != null ? x.Assignee.Login : "******".t(); _milestoneElement.Value = x.Milestone != null ? x.Milestone.Title : "No Milestone"; _labelsElement.Value = x.Labels.Count == 0 ? "None" : string.Join(", ", x.Labels.Select(i => i.Name)); Render(); }); ViewModel.GoToLabelsCommand.CanExecuteChanged += (sender, e) => { var before = _labelsElement.Accessory; _labelsElement.Accessory = ViewModel.GoToLabelsCommand.CanExecute(null) ? UITableViewCellAccessory.DisclosureIndicator : UITableViewCellAccessory.None; if (_labelsElement.Accessory != before && _labelsElement.GetImmediateRootElement() != null) { Root.Reload(_labelsElement, UITableViewRowAnimation.Fade); } }; ViewModel.GoToAssigneeCommand.CanExecuteChanged += (sender, e) => { var before = _assigneeElement.Accessory; _assigneeElement.Accessory = ViewModel.GoToAssigneeCommand.CanExecute(null) ? UITableViewCellAccessory.DisclosureIndicator : UITableViewCellAccessory.None; if (_assigneeElement.Accessory != before && _assigneeElement.GetImmediateRootElement() != null) { Root.Reload(_assigneeElement, UITableViewRowAnimation.Fade); } }; ViewModel.GoToMilestoneCommand.CanExecuteChanged += (sender, e) => { var before = _milestoneElement.Accessory; _milestoneElement.Accessory = ViewModel.GoToMilestoneCommand.CanExecute(null) ? UITableViewCellAccessory.DisclosureIndicator : UITableViewCellAccessory.None; if (_milestoneElement.Accessory != before && _milestoneElement.GetImmediateRootElement() != null) { Root.Reload(_milestoneElement, UITableViewRowAnimation.Fade); } }; ViewModel.BindCollection(x => x.Comments, e => RenderComments()); ViewModel.BindCollection(x => x.Events, e => RenderComments()); }