8
8
TouchableHighlight,
9
9
View,
10
10
Text,
11
- PullToRefreshViewAndroid
11
+ RefreshControl ,
12
12
} = React ;
13
13
14
14
@@ -39,8 +39,12 @@ var GiftedListView = React.createClass({
39
39
firstLoader : true ,
40
40
pagination : true ,
41
41
refreshable : true ,
42
- refreshableViewHeight : 50 ,
43
- refreshableDistance : 40 ,
42
+ refreshableColors : undefined ,
43
+ refreshableProgressBackgroundColor : undefined ,
44
+ refreshableSize : undefined ,
45
+ refreshableTitle : undefined ,
46
+ refreshableTintColor : undefined ,
47
+ renderRefreshControl : null ,
44
48
headerView : null ,
45
49
sectionHeaderView : null ,
46
50
withSections : false ,
@@ -49,15 +53,8 @@ var GiftedListView = React.createClass({
49
53
paginationFetchingView : null ,
50
54
paginationAllLoadedView : null ,
51
55
paginationWaitingView : null ,
52
- refreshableFetchingView : null ,
53
- refreshableWillRefreshView : null ,
54
- refreshableWaitingView : null ,
55
56
emptyView : null ,
56
57
renderSeparator : null ,
57
- PullToRefreshViewAndroidProps : {
58
- colors : [ '#000000' ] ,
59
- progressBackgroundColor : '#c8c7cc' ,
60
- } ,
61
58
} ;
62
59
} ,
63
60
@@ -67,8 +64,12 @@ var GiftedListView = React.createClass({
67
64
firstLoader : React . PropTypes . bool ,
68
65
pagination : React . PropTypes . bool ,
69
66
refreshable : React . PropTypes . bool ,
70
- refreshableViewHeight : React . PropTypes . number ,
71
- refreshableDistance : React . PropTypes . number ,
67
+ refreshableColors : React . PropTypes . array ,
68
+ refreshableProgressBackgroundColor : React . PropTypes . string ,
69
+ refreshableSize : React . PropTypes . string ,
70
+ refreshableTitle : React . PropTypes . string ,
71
+ refreshableTintColor : React . PropTypes . string ,
72
+ renderRefreshControl : React . PropTypes . func ,
72
73
headerView : React . PropTypes . func ,
73
74
sectionHeaderView : React . PropTypes . func ,
74
75
withSections : React . PropTypes . bool ,
@@ -77,16 +78,10 @@ var GiftedListView = React.createClass({
77
78
paginationFetchingView : React . PropTypes . func ,
78
79
paginationAllLoadedView : React . PropTypes . func ,
79
80
paginationWaitingView : React . PropTypes . func ,
80
- refreshableFetchingView : React . PropTypes . func ,
81
- refreshableWillRefreshView : React . PropTypes . func ,
82
- refreshableWaitingView : React . PropTypes . func ,
83
81
emptyView : React . PropTypes . func ,
84
82
renderSeparator : React . PropTypes . func ,
85
- PullToRefreshViewAndroidProps : React . PropTypes . object ,
86
83
} ,
87
84
88
- _setY ( y ) { this . _y = y ; } ,
89
- _getY ( y ) { return this . _y ; } ,
90
85
_setPage ( page ) { this . _page = page ; } ,
91
86
_getPage ( ) { return this . _page ; } ,
92
87
_setRows ( rows ) { this . _rows = rows ; } ,
@@ -140,51 +135,6 @@ var GiftedListView = React.createClass({
140
135
}
141
136
return this . props . headerView ( ) ;
142
137
} ,
143
- refreshableFetchingView ( ) {
144
- if ( this . props . refreshableFetchingView ) {
145
- return this . props . refreshableFetchingView ( ) ;
146
- }
147
- return (
148
- < View >
149
- < View style = { [ this . defaultStyles . refreshableView , this . props . customStyles . refreshableView ] } >
150
- < GiftedSpinner />
151
- </ View >
152
- { this . headerView ( ) }
153
- </ View >
154
- ) ;
155
- } ,
156
- refreshableWillRefreshView ( ) {
157
- if ( this . props . refreshableWillRefreshView ) {
158
- return this . props . refreshableWillRefreshView ( ) ;
159
- }
160
-
161
- return (
162
- < View >
163
- < View style = { [ this . defaultStyles . refreshableView , this . props . customStyles . refreshableView ] } >
164
- < Text style = { [ this . defaultStyles . actionsLabel , this . props . customStyles . actionsLabel ] } >
165
- ↻
166
- </ Text >
167
- </ View >
168
- { this . headerView ( ) }
169
- </ View >
170
- ) ;
171
- } ,
172
- refreshableWaitingView ( refreshCallback ) {
173
- if ( this . props . refreshableWaitingView ) {
174
- return this . props . refreshableWaitingView ( refreshCallback ) ;
175
- }
176
-
177
- return (
178
- < View >
179
- < View style = { [ this . defaultStyles . refreshableView , this . props . customStyles . refreshableView ] } >
180
- < Text style = { [ this . defaultStyles . actionsLabel , this . props . customStyles . actionsLabel ] } >
181
- ↓
182
- </ Text >
183
- </ View >
184
- { this . headerView ( ) }
185
- </ View >
186
- ) ;
187
- } ,
188
138
emptyView ( refreshCallback ) {
189
139
if ( this . props . emptyView ) {
190
140
return this . props . emptyView ( refreshCallback ) ;
@@ -218,13 +168,6 @@ var GiftedListView = React.createClass({
218
168
} ,
219
169
220
170
getInitialState ( ) {
221
-
222
- if ( this . props . refreshable === true && Platform . OS !== 'android' ) {
223
- this . _setY ( this . props . refreshableViewHeight ) ;
224
- } else {
225
- this . _setY ( 0 ) ;
226
- }
227
-
228
171
this . _setPage ( 1 ) ;
229
172
this . _setRows ( [ ] ) ;
230
173
@@ -236,7 +179,6 @@ var GiftedListView = React.createClass({
236
179
} ) ;
237
180
return {
238
181
dataSource : ds . cloneWithRowsAndSections ( this . _getRows ( ) ) ,
239
- refreshStatus : 'waiting' ,
240
182
isRefreshing : false ,
241
183
paginationStatus : 'firstLoad' ,
242
184
} ;
@@ -246,15 +188,13 @@ var GiftedListView = React.createClass({
246
188
} ) ;
247
189
return {
248
190
dataSource : ds . cloneWithRows ( this . _getRows ( ) ) ,
249
- refreshStatus : 'waiting' ,
250
191
isRefreshing : false ,
251
192
paginationStatus : 'firstLoad' ,
252
193
} ;
253
194
}
254
195
} ,
255
196
256
197
componentDidMount ( ) {
257
- this . _scrollResponder = this . refs . listview . getScrollResponder ( ) ;
258
198
this . props . onFetch ( this . _getPage ( ) , this . _postRefresh , { firstLoad : true } ) ;
259
199
} ,
260
200
@@ -268,24 +208,17 @@ var GiftedListView = React.createClass({
268
208
269
209
_onRefresh ( options = { } ) {
270
210
if ( this . isMounted ( ) ) {
271
- this . _scrollResponder . scrollTo ( { y : 0 } ) ;
272
211
this . setState ( {
273
- refreshStatus : 'fetching' ,
274
212
isRefreshing : true ,
275
213
} ) ;
276
214
this . _setPage ( 1 ) ;
277
- this . props . onFetch ( this . _getPage ( ) , this . _postRefresh , options ) ;
215
+ this . props . onFetch ( this . _getPage ( ) , this . _postRefresh , options ) ;
278
216
}
279
217
} ,
280
218
281
219
_postRefresh ( rows = [ ] , options = { } ) {
282
220
if ( this . isMounted ( ) ) {
283
221
this . _updateRows ( rows , options ) ;
284
- if ( this . props . refreshable === true && Platform . OS !== 'android' ) {
285
- // @issue
286
- // if a scrolling is already in progress, this scroll will not be executed
287
- this . _scrollResponder . scrollTo ( { y : this . props . refreshableViewHeight } ) ;
288
- }
289
222
}
290
223
} ,
291
224
@@ -313,64 +246,21 @@ var GiftedListView = React.createClass({
313
246
if ( this . props . withSections === true ) {
314
247
this . setState ( {
315
248
dataSource : this . state . dataSource . cloneWithRowsAndSections ( rows ) ,
316
- refreshStatus : 'waiting' ,
317
249
isRefreshing : false ,
318
250
paginationStatus : ( options . allLoaded === true ? 'allLoaded' : 'waiting' ) ,
319
251
} ) ;
320
252
} else {
321
253
this . setState ( {
322
254
dataSource : this . state . dataSource . cloneWithRows ( rows ) ,
323
- refreshStatus : 'waiting' ,
324
255
isRefreshing : false ,
325
256
paginationStatus : ( options . allLoaded === true ? 'allLoaded' : 'waiting' ) ,
326
- } ) ;
327
- }
257
+ } ) ;
258
+ }
328
259
} else {
329
260
this . setState ( {
330
- refreshStatus : 'waiting' ,
331
261
isRefreshing : false ,
332
262
paginationStatus : ( options . allLoaded === true ? 'allLoaded' : 'waiting' ) ,
333
- } ) ;
334
- }
335
- } ,
336
-
337
- _onResponderRelease ( ) {
338
- if ( this . props . refreshable === true ) {
339
- if ( Platform . OS !== 'android' ) {
340
- if ( this . state . refreshStatus === 'willRefresh' ) {
341
- this . _onRefresh ( ) ;
342
- }
343
- }
344
- }
345
- } ,
346
-
347
- _onScroll ( e ) {
348
- this . _setY ( e . nativeEvent . contentOffset . y ) ;
349
- if ( this . props . refreshable === true ) {
350
- if ( Platform . OS !== 'android' ) {
351
- if ( this . _getY ( ) < this . props . refreshableViewHeight - this . props . refreshableDistance
352
- && this . state . refreshStatus === 'waiting'
353
- && this . _scrollResponder . scrollResponderHandleScrollShouldSetResponder ( ) === true
354
- ) {
355
- this . setState ( {
356
- refreshStatus : 'willRefresh' ,
357
- isRefreshing : false ,
358
- } ) ;
359
- }
360
- }
361
- }
362
- } ,
363
-
364
- _renderRefreshView ( ) {
365
- switch ( this . state . refreshStatus ) {
366
- case 'fetching' :
367
- return this . refreshableFetchingView ( ) ;
368
- break ;
369
- case 'willRefresh' :
370
- return this . refreshableWillRefreshView ( ) ;
371
- break ;
372
- default :
373
- return this . refreshableWaitingView ( this . _onRefresh ) ;
263
+ } ) ;
374
264
}
375
265
} ,
376
266
@@ -388,85 +278,50 @@ var GiftedListView = React.createClass({
388
278
}
389
279
} ,
390
280
391
- _calculateContentInset ( ) {
392
- if ( this . props . refreshable === true && Platform . OS !== 'android' ) {
393
- return { top : - 1 * this . props . refreshableViewHeight , bottom : 0 , left : 0 , right : 0 } ;
394
- } else {
395
- return { top : 0 , bottom : 0 , left : 0 , right : 0 } ;
396
- }
397
- } ,
398
-
399
- _calculateContentOffset ( ) {
400
- if ( this . props . refreshable === true && Platform . OS !== 'android' ) {
401
- return { x : 0 , y : this . props . refreshableViewHeight } ;
402
- } else {
403
- return { x : 0 , y : 0 } ;
281
+ renderRefreshControl ( ) {
282
+ if ( this . props . renderRefreshControl ) {
283
+ return this . props . renderRefreshControl ( { onRefresh : this . _onRefresh } ) ;
404
284
}
285
+ return (
286
+ < RefreshControl
287
+ onRefresh = { this . _onRefresh }
288
+ refreshing = { this . state . isRefreshing }
289
+ colors = { this . props . refreshableColors }
290
+ progressBackgroundColor = { this . props . refreshableProgressBackgroundColor }
291
+ size = { this . props . refreshableSize }
292
+ tintColor = { this . props . refreshableTintColor }
293
+ title = { this . props . refreshableTitle }
294
+ />
295
+ ) ;
405
296
} ,
406
297
407
-
408
- renderListView ( style = { } ) {
298
+ render ( ) {
409
299
return (
410
300
< ListView
411
301
ref = "listview"
412
302
dataSource = { this . state . dataSource }
413
303
renderRow = { this . props . rowView }
414
304
renderSectionHeader = { this . props . sectionHeaderView }
415
-
416
- renderHeader = { this . props . refreshable === true && Platform . OS !== 'android' ? this . _renderRefreshView : this . headerView }
417
305
renderFooter = { this . _renderPaginationView }
418
-
419
- onScroll = { this . props . refreshable === true && Platform . OS !== 'android' ? this . _onScroll : null }
420
- onResponderRelease = { this . props . refreshable === true && Platform . OS !== 'android' ? this . _onResponderRelease : null }
421
-
422
- scrollEventThrottle = { 200 }
423
-
424
- contentInset = { this . _calculateContentInset ( ) }
425
- contentOffset = { this . _calculateContentOffset ( ) }
306
+ renderSeparator = { this . renderSeparator }
426
307
427
308
automaticallyAdjustContentInsets = { false }
428
309
scrollEnabled = { true }
429
310
canCancelContentTouches = { true }
430
-
431
- renderSeparator = { this . renderSeparator }
311
+ refreshControl = { this . props . refreshable === true ? this . renderRefreshControl ( ) : null }
432
312
433
313
{ ...this . props }
434
314
435
- style = { [ this . props . style , style ] }
315
+ style = { this . props . style }
436
316
/>
437
317
) ;
438
318
} ,
439
319
440
- render ( ) {
441
- if ( Platform . OS === 'android' && this . props . refreshable === true ) {
442
- return (
443
- < PullToRefreshViewAndroid
444
- refreshing = { this . state . isRefreshing }
445
- onRefresh = { this . _onRefresh }
446
-
447
- { ...this . props . PullToRefreshViewAndroidProps }
448
-
449
- style = { [ this . props . PullToRefreshViewAndroidProps . style , { flex : 1 } ] }
450
- >
451
- { this . renderListView ( { flex : 1 } ) }
452
- </ PullToRefreshViewAndroid >
453
- ) ;
454
- } else {
455
- return this . renderListView ( ) ;
456
- }
457
- } ,
458
-
459
320
defaultStyles : {
460
321
separator : {
461
322
height : 1 ,
462
323
backgroundColor : '#CCC'
463
324
} ,
464
- refreshableView : {
465
- height : 50 ,
466
- backgroundColor : '#DDD' ,
467
- justifyContent : 'center' ,
468
- alignItems : 'center' ,
469
- } ,
470
325
actionsLabel : {
471
326
fontSize : 20 ,
472
327
} ,
0 commit comments