import {Carousel, Constants, Text, View, Colors} from 'react-native-ui-lib'; import React, {Component} from 'react'; import {StyleSheet, Animated} from 'react-native'; import _ from 'lodash'; import {renderBooleanOption, renderSliderOption} from '../ExampleScreenPresenter'; interface State { numberOfPagesShown: number; autoplay: boolean; } const BACKGROUND_COLORS = [ Colors.red50, Colors.yellow20, Colors.purple50, Colors.green50, Colors.cyan50, Colors.purple20, Colors.blue60, Colors.red10, Colors.green20, Colors.purple60 ]; const pageHeight = Constants.windowHeight / 3; class CarouselVerticalScreen extends Component<{}, State> { carousel = React.createRef(); animatedScrollOffset = new Animated.ValueXY(); constructor(props: {}) { super(props); this.state = { numberOfPagesShown: 5, autoplay: false }; } renderAnimatedCounter = () => { const {numberOfPagesShown} = this.state; const animatedStyles = _.times(numberOfPagesShown, page => { return { opacity: this.animatedScrollOffset.y.interpolate({ inputRange: [pageHeight * page - 50, pageHeight * page, pageHeight * page + 50], outputRange: [0, 1, 0] }), transform: [ { translateX: this.animatedScrollOffset.y.interpolate({ inputRange: [pageHeight * page - 50, pageHeight * page, pageHeight * page + 50], outputRange: [-50, 0, 50] }) } ] }; }); return ( {_.times(numberOfPagesShown, page => ( {page} ))} ); }; render() { const {numberOfPagesShown, autoplay} = this.state; return ( {renderBooleanOption.call(this, 'autoplay', 'autoplay')} {renderSliderOption.call(this, 'Number of pages shown', 'numberOfPagesShown', { min: 3, max: 10, step: 1, initial: 5 })} {_.map([...Array(numberOfPagesShown)], (_, index) => ( {index} ))} {this.renderAnimatedCounter()} iOS Widgets Carousel ); } } // @ts-ignore const Page = ({children, style, ...others}) => { return ( {children} ); }; const styles = StyleSheet.create({ container: {}, page: { flex: 1, height: pageHeight, width: Constants.windowWidth }, pageText: { fontSize: 40, color: 'white' }, animatedPageCounter: { position: 'absolute', top: 20, left: 20 }, widgetsCarousel: { height: 150, width: 300, backgroundColor: Colors.grey60, borderRadius: 24, overflow: 'hidden' } }); export default CarouselVerticalScreen;