示例#1
0
 public LoginToGitHubForEnterpriseViewModel(
     IConnectionManager connectionManager,
     IEnterpriseCapabilitiesService enterpriseCapabilities,
     IVisualStudioBrowser browser)
     : this(connectionManager, enterpriseCapabilities, browser, Scheduler.Default)
 {
 }
 static LoginToGitHubForEnterpriseViewModel CreateTarget(
     IScheduler scheduler = null,
     IEnterpriseCapabilitiesService capabilitiesService = null)
 {
     return(new LoginToGitHubForEnterpriseViewModel(
                Substitute.For <IConnectionManager>(),
                capabilitiesService ?? Substitute.For <IEnterpriseCapabilitiesService>(),
                Substitute.For <IVisualStudioBrowser>(),
                scheduler ?? Scheduler.Immediate));
 }
示例#3
0
        public LoginToGitHubForEnterpriseViewModel(
            IConnectionManager connectionManager,
            IEnterpriseCapabilitiesService enterpriseCapabilities,
            IVisualStudioBrowser browser,
            IScheduler scheduler)
            : base(connectionManager, browser)
        {
            Guard.ArgumentNotNull(connectionManager, nameof(connectionManager));
            Guard.ArgumentNotNull(enterpriseCapabilities, nameof(enterpriseCapabilities));
            Guard.ArgumentNotNull(browser, nameof(browser));

            this.enterpriseCapabilities = enterpriseCapabilities;

            EnterpriseUrlValidator = ReactivePropertyValidator.For(this, x => x.EnterpriseUrl)
                                     .IfNullOrEmpty(Resources.EnterpriseUrlValidatorEmpty)
                                     .IfNotUri(Resources.EnterpriseUrlValidatorInvalid)
                                     .IfGitHubDotComHost(Resources.EnterpriseUrlValidatorNotAGitHubHost);

            canLogin = this.WhenAnyValue(
                x => x.UsernameOrEmailValidator.ValidationResult.IsValid,
                x => x.PasswordValidator.ValidationResult.IsValid,
                x => x.SupportedLoginMethods,
                (x, y, z) => (x || (z & EnterpriseLoginMethods.Token) != 0) && y)
                       .ToProperty(this, x => x.CanLogin);

            canSsoLogin = this.WhenAnyValue(
                x => x.EnterpriseUrlValidator.ValidationResult.IsValid)
                          .ToProperty(this, x => x.CanLogin);

            this.WhenAnyValue(x => x.EnterpriseUrl, x => x.EnterpriseUrlValidator.ValidationResult)
            .Throttle(TimeSpan.FromMilliseconds(500), scheduler)
            .ObserveOn(RxApp.MainThreadScheduler)
            .Subscribe(x => EnterpriseUrlChanged(x.Item1, x.Item2?.IsValid ?? false));

            NavigateLearnMore = ReactiveCommand.CreateAsyncObservable(_ =>
            {
                browser.OpenUrl(GitHubUrls.LearnMore);
                return(Observable.Return(Unit.Default));
            });
        }