UNPKG

react-native-spring-scrollview-fork

Version:

A cross-platform (iOS & Android) spring ScrollView

71 lines (59 loc) 1.47 kB
/** * Author: Shi(bolan0000@icloud.com) * Date: 2019/1/18 * Copyright (c) 2018, AoTang, Inc. * * Description: */ import React from 'react'; import {Animated, Text} from 'react-native'; export class LoadingFooter extends React.Component<FooterPropType, FooterStateType> { static height = 80; static style = 'stickyContent'; constructor(props: FooterPropType) { super(props); this.state = {status: props.allLoaded ? 'allLoaded' : 'waiting'}; } static getDerivedStateFromProps(nextProps: FooterPropType) { if (nextProps.allLoaded) return {status: 'allLoaded'}; return {}; } changeToState(newStatus: FooterStatus) { !this.props.allLoaded && this.state.status !== newStatus && this.onStateChange(this.state.status, newStatus); } onStateChange(oldStatus: FooterStatus, newStatus: FooterStatus) { this.setState({status: newStatus}); } render() { return ( <Text style={{ flex: 1, alignSelf: 'center', lineHeight: this.props.maxHeight, textAlign: 'center', }}> {this.state.status} </Text> ); } } export type FooterStatus = | 'waiting' | 'dragging' | 'draggingEnough' | 'draggingCancel' | 'loading' | 'rebound' | 'allLoaded'; interface FooterPropType { offset?: Animated.Value; maxHeight?: number; allLoaded?: boolean; bottomOffset?: number; } interface FooterStateType { status?: FooterStatus; }