-
-
Save colinta/5cfa588fed7b929193ae to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
- (void)viewDidLoad { | |
[super viewDidLoad]; | |
@weakify(self); | |
RAC(self.loginButton, enabled) = [RACSignal | |
combineLatest:@[ | |
self.usernameTextField.rac_textSignal, | |
self.passwordTextField.rac_textSignal, | |
RACAbleWithStart(LoginManager.sharedManager, loggingIn), | |
RACAbleWithStart(self.loggedIn) | |
] reduce:^(NSString *username, NSString *password, NSNumber *loggingIn, NSNumber *loggedIn) { | |
return @(username.length > 0 && password.length > 0 && !loggingIn.boolValue && !loggedIn.boolValue); | |
}]; | |
[[self.loginButton rac_signalForControlEvents:UIControlEventTouchUpInside] subscribeNext:^(UIButton *sender) { | |
@strongify(self); | |
RACSignal *loginSignal = [[LoginManager sharedManager] | |
logInWithUsername:self.usernameTextField.text | |
password:self.passwordTextField.text]; | |
[loginSignal subscribeError:^(NSError *error) { | |
@strongify(self); | |
[self presentError:error]; | |
} completed:{ | |
@strongify(self); | |
self.loggedIn = YES; | |
}]; | |
}]; | |
} | |
[RACAble(self.name) subscribeNext:^(NSString *newName){ | |
NSLog(@"Name changed to %@",newName); | |
}]; | |
NSCharacterSet *charSet = [NSCharacterSet characterSetWithCharactersInString:@" "]; | |
RACSignal *nameFieldValid = [RACSignal combineLatest:@[ self.usernameField.rac_textSignal, self.passwordField.rac_textSignal ] | |
reduce:^(NSString *username, NSString *password) { | |
return @((username.length > 0) && (password.length > 0) && | |
([username rangeOfCharacterFromSet:charSet].location == NSNotFound)); | |
}]; | |
RAC(self.loginButton.enabled) = nameFieldValid; | |
RAC(self.textField.text) = RACAble(self.viewModel.title); | |
[[RACAble(self.scoreStepper.value) take:self.viewModel.maxPointUpdates] subscribeNext:^(id newPoints) { | |
bself.viewModel.points = [newPoints doubleValue]; | |
}]; | |
[[[[self.uploadButton rac_signalForControlEvents:UIControlEventTouchUpInside] | |
skip:(kMaxUploads - 1)] take:1] subscribeNext:^(id x) { | |
bself.nameField.enabled = NO; | |
bself.scoreStepper.hidden = YES; | |
bself.uploadButton.hidden = YES; | |
}]; | |
[[RACSignal | |
combineLatest:@[ RACAble(self.password), RACAble(self.passwordConfirmation) ] | |
reduce:^(NSString *currentPassword, NSString *currentConfirmPassword) { | |
return [NSNumber numberWithBool:[currentConfirmPassword isEqualToString:currentPassword]]; | |
}] | |
subscribeNext:^(NSNumber *passwordsMatch) { | |
self.createEnabled = [passwordsMatch boolValue]; | |
}]; | |
[self | |
rac_bind:@keypath(self.helpLabel.text) | |
to:[[RACAble(self.help) | |
filter:^(NSString *newHelp) { | |
return newHelp != nil; | |
}] | |
map:^(NSString *newHelp) { | |
return [newHelp uppercaseString]; | |
}]]; | |
[[RACSignal | |
merge:@[ [client fetchUserRepos], [client fetchOrgRepos] ]] | |
subscribeCompleted:^{ | |
NSLog(@"They're both done!"); | |
}]; | |
[[[[client | |
loginUser] | |
flattenMap:^(id _) { | |
return [client loadCachedMessages]; | |
}] | |
flattenMap:^(id _) { | |
return [client fetchMessages]; | |
}] | |
subscribeCompleted:^{ | |
NSLog(@"Fetched all messages."); | |
}]; | |
[[[[[client | |
fetchUserWithUsername:@"joshaber"] | |
deliverOn:[RACScheduler scheduler]] | |
map:^(User *user) { | |
// this is on a background queue | |
return [[NSImage alloc] initWithContentsOfURL:user.avatarURL]; | |
}] | |
deliverOn:RACScheduler.mainThreadScheduler] | |
subscribeNext:^(NSImage *image) { | |
// now we're back on the main queue | |
self.imageView.image = image; | |
}]; | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment