Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 4 additions & 3 deletions RCTRefreshControl.ios.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@ var {
DeviceEventEmitter,
NativeModules: {
RefreshControl,
}
},
processColor
} = React;

/**
Expand All @@ -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) => {
Expand Down
139 changes: 69 additions & 70 deletions RCTRefreshControl.m
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
#import "RCTBridge.h"
#import "RCTConvert.h"
#import "RCTScrollView.h"
#import "RCTSparseArray.h"
#import "RCTUIManager.h"
#import "RCTEventDispatcher.h"

Expand All @@ -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