zkteco-react-native-spring-scrollview
Version:
An cross-platform (iOS & Android) spring ScrollView
76 lines (64 loc) • 1.61 kB
JavaScript
/**
* 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) {
// console.log("newStatus", newStatus);
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
}