@sdcx/pull-to-refresh
Version:
A react-native PullToRefresh component.
49 lines (48 loc) • 1.81 kB
JavaScript
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,
},
});