UNPKG

@sdcx/pull-to-refresh

Version:
49 lines (48 loc) 1.81 kB
import React from 'react'; import { StyleSheet } from 'react-native'; import DefaultPullToRefreshFooter from './DefaultPullToRefreshFooter'; import DefaultPullToRefreshHeader from './DefaultPullToRefreshHeader'; import PullToRefreshNativeComponent from './PullToRefreshNativeComponent'; export class PullToRefresh extends React.Component { static DefaultHeader = DefaultPullToRefreshHeader; static DefaultFooter = DefaultPullToRefreshFooter; static setDefaultHeader(Header) { PullToRefresh.DefaultHeader = Header ?? DefaultPullToRefreshHeader; } static setDefaultFooter(Footer) { PullToRefresh.DefaultFooter = Footer ?? DefaultPullToRefreshFooter; } renderHeader() { const { onRefresh, refreshing, header, progressViewOffset } = this.props; if (header) { return header; } if (onRefresh) { return (<PullToRefresh.DefaultHeader onRefresh={onRefresh} refreshing={!!refreshing} progressViewOffset={progressViewOffset}/>); } return null; } renderFooter() { const { onLoadMore, loadingMore, noMoreData, footer } = this.props; if (footer) { return footer; } if (onLoadMore) { return (<PullToRefresh.DefaultFooter onRefresh={onLoadMore} refreshing={!!loadingMore} noMoreData={noMoreData}/>); } return null; } render() { const { children, style } = this.props; return (<PullToRefreshNativeComponent style={[styles.fill, style]} requestDisallowInterceptTouchEvent={this.props.requestDisallowInterceptTouchEvent}> {this.renderHeader()} {children} {this.renderFooter()} </PullToRefreshNativeComponent>); } } const styles = StyleSheet.create({ fill: { flex: 1, }, });