mirror of
https://github.com/zhigang1992/react-native.git
synced 2026-04-28 12:15:37 +08:00
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:
@@ -1,10 +0,0 @@
|
||||
// Copyright 2004-present Facebook. All Rights Reserved.
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
#import "RCTBridgeModule.h"
|
||||
|
||||
@interface RCTDataManager : NSObject <RCTBridgeModule>
|
||||
|
||||
@end
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user