1313#import " RCTConvert.h"
1414#import " RCTLog.h"
1515#import " RCTUtils.h"
16+ #import " RCTImageLoader.h"
1617
1718@implementation RCTDataManager
1819
@@ -34,8 +35,43 @@ @implementation RCTDataManager
3435 NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL: URL];
3536 request.HTTPMethod = [RCTConvert NSString: query[@" method" ]] ?: @" GET" ;
3637 request.allHTTPHeaderFields = [RCTConvert NSDictionary: query[@" headers" ]];
37- request.HTTPBody = [RCTConvert NSData: query[@" data" ]];
3838
39+ if (query[@" data" ] != [NSNull null ]) {
40+ NSDictionary *data = [RCTConvert NSDictionary: query[@" data" ]];
41+ NSData *body = [RCTConvert NSData: data[@" string" ]];
42+ if (body != nil ) {
43+ request.HTTPBody = body;
44+ [RCTDataManager sendRequest: request responseSender: responseSender];
45+ return ;
46+ }
47+ NSString *uri = [RCTConvert NSString: data[@" uri" ]];
48+ if (uri != nil ) {
49+ if ([RCTImageLoader isSystemImageURI: uri]) {
50+ [RCTImageLoader loadImageWithTag: (NSString *)uri callback: ^(NSError *error, UIImage *image) {
51+ if (error) {
52+ RCTLogError (@" Error loading image URI: %@ " , error);
53+ // We should really circle back to JS here and notify an error/abort on the request.
54+ return ;
55+ }
56+ NSData *imageData = UIImageJPEGRepresentation (image, 1.0 );
57+ request.HTTPBody = imageData;
58+ [RCTDataManager sendRequest: request responseSender: responseSender];
59+ }];
60+ } else {
61+ RCTLogError (@" Cannot resolve URI: %@ " , uri);
62+ }
63+ return ;
64+ }
65+ }
66+
67+ // There was no data payload, or we couldn't understand it.
68+ [RCTDataManager sendRequest: request responseSender: responseSender];
69+ } else {
70+ RCTLogError (@" unsupported query type %@ " , queryType);
71+ }
72+ }
73+
74+ + (void )sendRequest : (NSURLRequest *)request responseSender : (RCTResponseSenderBlock)responseSender {
3975 // Build data task
4076 NSURLSessionDataTask *task = [[NSURLSession sharedSession ] dataTaskWithRequest: request completionHandler: ^(NSData *data, NSURLResponse *response, NSError *connectionError) {
4177
@@ -71,11 +107,6 @@ @implementation RCTDataManager
71107 }];
72108
73109 [task resume ];
74-
75- } else {
76-
77- RCTLogError (@" unsupported query type %@ " , queryType);
78- }
79110}
80111
81112@end
0 commit comments