diff --git a/RCTRefreshControl.ios.js b/RCTRefreshControl.ios.js index efd98be..796032a 100644 --- a/RCTRefreshControl.ios.js +++ b/RCTRefreshControl.ios.js @@ -9,7 +9,8 @@ var { DeviceEventEmitter, NativeModules: { RefreshControl, - } + }, + processColor } = React; /** @@ -30,8 +31,8 @@ var RCTRefreshControl = { configure: function(configs, callback) { var nodeHandle = React.findNodeHandle(configs.node); var options = { - tintColor: configs.tintColor, - activityIndicatorViewColor: configs.activityIndicatorViewColor + tintColor: processColor(configs.tintColor), + activityIndicatorViewColor: processColor(configs.activityIndicatorViewColor) }; RefreshControl.configure(nodeHandle, options, (error) => { diff --git a/RCTRefreshControl.m b/RCTRefreshControl.m index a03a3ba..35b943f 100644 --- a/RCTRefreshControl.m +++ b/RCTRefreshControl.m @@ -5,7 +5,6 @@ #import "RCTBridge.h" #import "RCTConvert.h" #import "RCTScrollView.h" -#import "RCTSparseArray.h" #import "RCTUIManager.h" #import "RCTEventDispatcher.h" @@ -18,92 +17,92 @@ @implementation RCTRefreshControl RCT_EXPORT_MODULE() - (dispatch_queue_t)methodQueue { - return self.bridge.uiManager.methodQueue; + return self.bridge.uiManager.methodQueue; } RCT_EXPORT_METHOD(configure:(nonnull NSNumber *)reactTag options:(NSDictionary *)options callback:(RCTResponseSenderBlock)callback) { - [self.bridge.uiManager addUIBlock:^(RCTUIManager *uiManager, RCTSparseArray *viewRegistry) { - - UIView *view = viewRegistry[reactTag]; - if (!view) { - RCTLogError(@"Cannot find view with tag #%@", reactTag); - return; - } - - UIScrollView *scrollView = ((RCTScrollView *)view).scrollView; - - ODRefreshControl *refreshControl = [[ODRefreshControl alloc] initInScrollView:scrollView]; - refreshControl.tag = [reactTag integerValue]; // Maybe something better - - UIColor *tintColor = options[@"tintColor"]; - // TODO: activityIndicatorViewStyle - UIColor *activityIndicatorViewColor = options[@"activityIndicatorViewColor"]; - - if (tintColor) refreshControl.tintColor = [RCTConvert UIColor:tintColor]; - if (activityIndicatorViewColor) refreshControl.activityIndicatorViewColor = [RCTConvert UIColor:activityIndicatorViewColor]; - - [refreshControl addTarget:self action:@selector(dropViewDidBeginRefreshing:) forControlEvents:UIControlEventValueChanged]; - - callback(@[[NSNull null], reactTag]); - }]; + [self.bridge.uiManager addUIBlock:^(RCTUIManager *uiManager, NSDictionary *viewRegistry) { + + UIView *view = viewRegistry[reactTag]; + if (!view) { + RCTLogError(@"Cannot find view with tag #%@", reactTag); + return; + } + + UIScrollView *scrollView = ((RCTScrollView *)view).scrollView; + + ODRefreshControl *refreshControl = [[ODRefreshControl alloc] initInScrollView:scrollView]; + refreshControl.tag = [reactTag integerValue]; // Maybe something better + + UIColor *tintColor = options[@"tintColor"]; + // TODO: activityIndicatorViewStyle + UIColor *activityIndicatorViewColor = options[@"activityIndicatorViewColor"]; + + if (tintColor) refreshControl.tintColor = [RCTConvert UIColor:tintColor]; + if (activityIndicatorViewColor) refreshControl.activityIndicatorViewColor = [RCTConvert UIColor:activityIndicatorViewColor]; + + [refreshControl addTarget:self action:@selector(dropViewDidBeginRefreshing:) forControlEvents:UIControlEventValueChanged]; + + callback(@[[NSNull null], reactTag]); + }]; } RCT_EXPORT_METHOD(beginRefreshing:(nonnull NSNumber *)reactTag) { - [self.bridge.uiManager addUIBlock:^(RCTUIManager *uiManager, RCTSparseArray *viewRegistry) { - - UIView *view = viewRegistry[reactTag]; - if (!view) { - RCTLogError(@"Cannot find view with tag #%@", reactTag); - return; - } - - UIScrollView *scrollView = ((RCTScrollView *)view).scrollView; - - ODRefreshControl *refreshControl = (ODRefreshControl *)[scrollView viewWithTag:[reactTag integerValue]]; - - dispatch_async(dispatch_get_main_queue(), ^{ - [refreshControl beginRefreshing]; - }); - }]; + [self.bridge.uiManager addUIBlock:^(RCTUIManager *uiManager, NSDictionary *viewRegistry) { + + UIView *view = viewRegistry[reactTag]; + if (!view) { + RCTLogError(@"Cannot find view with tag #%@", reactTag); + return; + } + + UIScrollView *scrollView = ((RCTScrollView *)view).scrollView; + + ODRefreshControl *refreshControl = (ODRefreshControl *)[scrollView viewWithTag:[reactTag integerValue]]; + + dispatch_async(dispatch_get_main_queue(), ^{ + [refreshControl beginRefreshing]; + }); + }]; } RCT_EXPORT_METHOD(endRefreshing:(nonnull NSNumber *)reactTag) { - [self.bridge.uiManager addUIBlock:^(RCTUIManager *uiManager, RCTSparseArray *viewRegistry) { - - UIView *view = viewRegistry[reactTag]; - if (!view) { - RCTLogError(@"Cannot find view with tag #%@", reactTag); - return; - } - - UIScrollView *scrollView = ((RCTScrollView *)view).scrollView; - - ODRefreshControl *refreshControl = (ODRefreshControl *)[scrollView viewWithTag:[reactTag integerValue]]; - - dispatch_async(dispatch_get_main_queue(), ^{ - [refreshControl endRefreshing]; - }); - }]; + [self.bridge.uiManager addUIBlock:^(RCTUIManager *uiManager, NSDictionary *viewRegistry) { + + UIView *view = viewRegistry[reactTag]; + if (!view) { + RCTLogError(@"Cannot find view with tag #%@", reactTag); + return; + } + + UIScrollView *scrollView = ((RCTScrollView *)view).scrollView; + + ODRefreshControl *refreshControl = (ODRefreshControl *)[scrollView viewWithTag:[reactTag integerValue]]; + + dispatch_async(dispatch_get_main_queue(), ^{ + [refreshControl endRefreshing]; + }); + }]; } - (NSDictionary *)constantsToExport { - return @{@"UIActivityIndicatorViewStyleWhiteLarge": @(UIActivityIndicatorViewStyleWhiteLarge), - @"UIActivityIndicatorViewStyleWhite": @(UIActivityIndicatorViewStyleWhite), - @"UIActivityIndicatorViewStyleGray": @(UIActivityIndicatorViewStyleGray)}; + return @{@"UIActivityIndicatorViewStyleWhiteLarge": @(UIActivityIndicatorViewStyleWhiteLarge), + @"UIActivityIndicatorViewStyleWhite": @(UIActivityIndicatorViewStyleWhite), + @"UIActivityIndicatorViewStyleGray": @(UIActivityIndicatorViewStyleGray)}; } - (void)dropViewDidBeginRefreshing:(ODRefreshControl *)refreshControl { - [self.bridge.eventDispatcher sendDeviceEventWithName:@"dropViewDidBeginRefreshing" - body:@(refreshControl.tag)]; - - /* - double delayInSeconds = 3.0; - dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC); - dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ - [refreshControl endRefreshing]; - }); */ + [self.bridge.eventDispatcher sendDeviceEventWithName:@"dropViewDidBeginRefreshing" + body:@(refreshControl.tag)]; + + /* + double delayInSeconds = 3.0; + dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC); + dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ + [refreshControl endRefreshing]; + }); */ } @end