UNPKG

react-native-big-list-fixed

Version:

A big and fast list implementation for react-native with a recycler API focused on performance and ram usage while processing thousand items on the list.

81 lines (76 loc) 2.07 kB
import React, { memo } from "react"; import PropTypes from "prop-types"; import { Animated } from "react-native"; import { mergeViewStyle } from "./utils"; /** * List section. * @param {object|array} style * @param {number} position * @param {number} height * @param {number} nextSectionPosition * @param {Animated.Value} scrollTopValue * @param {React.node} children * @returns {JSX.Element} * @constructor */ const BigListSection = ({ style = undefined, position = undefined, height = undefined, nextSectionPosition = undefined, scrollTopValue = undefined, children = undefined, }) => { const inputRange = [-1, 0]; const outputRange = [0, 0]; inputRange.push(position); outputRange.push(0); const collisionPoint = (nextSectionPosition || 0) - height; if (collisionPoint >= position) { inputRange.push(collisionPoint, collisionPoint + 1); outputRange.push(collisionPoint - position, collisionPoint - position); } else { inputRange.push(position + 1); outputRange.push(1); } const translateY = scrollTopValue.interpolate({ inputRange, outputRange, }); const child = React.Children.only(children); const fillChildren = React.isValidElement(child) && React.cloneElement( child, mergeViewStyle(style, { style: { flex: 1 }, }), ); const viewStyle = [ { elevation: 10, }, React.isValidElement(child) && child.props.style ? child.props.style : style, { zIndex: 10, height: height, width: "100%", transform: [{ translateY }], }, ]; return <Animated.View style={viewStyle}>{fillChildren}</Animated.View>; }; BigListSection.propTypes = { children: PropTypes.oneOfType([ PropTypes.arrayOf(PropTypes.node), PropTypes.node, ]), height: PropTypes.number, nextSectionPosition: PropTypes.number, position: PropTypes.number, scrollTopValue: PropTypes.instanceOf(Animated.Value), style: PropTypes.oneOfType([PropTypes.object, PropTypes.array]), }; export default memo(BigListSection);