Updates from Fri Feb 27

- [react-packager] transformModulePath option is not actually required | Amjad Masad
- Implement TextInput.clearButtonMode added by D1875684 on OSS fork + example | Tadeu Zagallo
- [ReactNative] Use local CocoaPod config for ReactNative modules | Spencer Ahrens
- [ReactNative] Pull out some OSS modules into separate libs | Spencer Ahrens
- Enqueue events at 60fps + profiling helpers | Tadeu Zagallo
This commit is contained in:
Christopher Chedeau
2015-03-02 10:52:16 -08:00
parent 258c6b1b54
commit 0b09ed0667
218 changed files with 14048 additions and 278 deletions

View File

@@ -1,10 +0,0 @@
// Copyright 2004-present Facebook. All Rights Reserved.
#import <Foundation/Foundation.h>
#import "RCTBridgeModule.h"
@interface RCTDataManager : NSObject <RCTBridgeModule>
@end

View File

@@ -1,73 +0,0 @@
// Copyright 2004-present Facebook. All Rights Reserved.
#import "RCTDataManager.h"
#import "RCTAssert.h"
#import "RCTLog.h"
#import "RCTUtils.h"
@implementation RCTDataManager
/**
* Executes a network request.
* The responseSender block won't be called on same thread as called.
*/
- (void)executeQuery:(NSString *)queryType
query:(id)query
queryHash:(__unused NSString *)queryHash
responseSender:(RCTResponseSenderBlock)responseSender
{
RCT_EXPORT(queryData);
if ([queryType isEqualToString:@"http"]) {
// Parse query
NSDictionary *queryDict = query;
if ([query isKindOfClass:[NSString class]]) {
// TODO: it would be more efficient just to send a dictionary
queryDict = RCTJSONParse(query, NULL);
}
// Build request
NSURL *url = [NSURL URLWithString:queryDict[@"url"]];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
request.HTTPMethod = queryDict[@"method"] ?: @"GET";
request.allHTTPHeaderFields = queryDict[@"headers"];
if ([queryDict[@"data"] isKindOfClass:[NSString class]]) {
request.HTTPBody = [queryDict[@"data"] dataUsingEncoding:NSUTF8StringEncoding];
}
// Build data task
NSURLSessionDataTask *task = [[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *connectionError) {
// Build response
NSDictionary *responseJSON;
if (connectionError == nil) {
NSStringEncoding encoding;
if (response.textEncodingName) {
CFStringEncoding cfEncoding = CFStringConvertIANACharSetNameToEncoding((CFStringRef)response.textEncodingName);
encoding = CFStringConvertEncodingToNSStringEncoding(cfEncoding);
} else {
encoding = NSUTF8StringEncoding;
}
NSString *returnData = [[NSString alloc] initWithData:data encoding:encoding];
responseJSON = @{@"status": @200, @"responseText": returnData};
} else {
responseJSON = @{@"status": @0, @"responseText": [connectionError localizedDescription]};
}
// Send response (won't be sent on same thread as caller)
responseSender(@[RCTJSONStringify(responseJSON, NULL)]);
}];
[task resume];
} else {
RCTLogMustFix(@"unsupported query type %@", queryType);
return;
}
}
@end

View File

@@ -1293,6 +1293,14 @@ static void RCTSetShadowViewProps(NSDictionary *props, RCTShadowView *shadowView
@"None": @(UITextAutocapitalizationTypeNone),
},
},
@"UITextField": @{
@"clearButtonMode": @{
@"Never": @(UITextFieldViewModeNever),
@"WhileEditing": @(UITextFieldViewModeWhileEditing),
@"UnlessEditing": @(UITextFieldViewModeUnlessEditing),
@"Always": @(UITextFieldViewModeAlways),
},
},
@"UIView": @{
@"ContentMode": @{
@"ScaleToFill": @(UIViewContentModeScaleToFill),
@@ -1342,6 +1350,37 @@ static void RCTSetShadowViewProps(NSDictionary *props, RCTShadowView *shadowView
_nextLayoutAnimation = [[RCTLayoutAnimation alloc] initWithDictionary:config callback:callback];
}
- (void)startOrResetInteractionTiming
{
RCT_EXPORT();
NSSet *rootViewTags = [_rootViewTags copy];
[self addUIBlock:^(RCTUIManager *uiManager, RCTSparseArray *viewRegistry) {
for (NSNumber *reactTag in rootViewTags) {
RCTRootView *rootView = viewRegistry[reactTag];
[rootView startOrResetInteractionTiming];
}
}];
}
- (void)endAndResetInteractionTiming:(RCTResponseSenderBlock)onSuccess
onError:(RCTResponseSenderBlock)onError
{
RCT_EXPORT();
NSSet *rootViewTags = [_rootViewTags copy];
[self addUIBlock:^(RCTUIManager *uiManager, RCTSparseArray *viewRegistry) {
NSMutableDictionary *timingData = [[NSMutableDictionary alloc] init];
for (NSNumber *reactTag in rootViewTags) {
RCTRootView *rootView = viewRegistry[reactTag];
if (rootView) {
timingData[reactTag.stringValue] = [rootView endAndResetInteractionTiming];
}
}
onSuccess(@[ timingData ]);
}];
}
static UIView *_jsResponder;
+ (UIView *)JSResponder