@sdcx/pull-to-refresh
Version:
A react-native PullToRefresh component.
50 lines (49 loc) • 1.62 kB
JavaScript
import React from 'react';
import { StyleSheet } from 'react-native';
import { DefaultPullToRefreshFooter } from '../Footer';
import { DefaultPullToRefreshHeader } from '../Header';
import { NativePullToRefresh } from './native';
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 } = this.props;
if (header) {
return header;
}
if (onRefresh) {
return <PullToRefresh.DefaultHeader onRefresh={onRefresh} refreshing={!!refreshing}/>;
}
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 (<NativePullToRefresh style={[styles.fill, style]}>
{this.renderHeader()}
{children}
{this.renderFooter()}
</NativePullToRefresh>);
}
}
export { PullToRefresh };
const styles = StyleSheet.create({
fill: {
flex: 1,
},
});