import * as React from 'react' import { FlatList, StyleSheet, View, ScrollView } from 'react-native' import { MD2Theme, Text, TouchableRipple, useTheme } from 'react-native-paper' import { range } from '../utils' const ITEM_HEIGHT = 62 export default function YearPicker({ selectedYear, selectingYear, onPressYear, startYear, endYear, }: { selectedYear: number | undefined selectingYear: boolean onPressYear: (year: number) => any startYear: number endYear: number }) { const theme = useTheme() const flatList = React.useRef | null>(null) const years = range( isNaN(startYear) ? 1800 : startYear, isNaN(endYear) ? 2200 : endYear ) // scroll to selected year React.useEffect(() => { if (flatList.current && selectedYear) { const indexToGo = selectedYear - startYear flatList.current.scrollToOffset({ offset: (indexToGo / 3) * ITEM_HEIGHT - ITEM_HEIGHT, animated: false, }) } }, [flatList, selectedYear, startYear]) return ( ref={flatList} style={styles.list} data={years} renderScrollComponent={(sProps) => { return }} renderItem={({ item }) => ( )} keyExtractor={(item) => `${item}`} numColumns={3} /> ) } function YearPure({ year, selected, onPressYear, }: { year: number selected: boolean onPressYear: (newYear: number) => any }) { const theme = useTheme() let textFont = theme?.isV3 ? theme.fonts.bodyLarge : (theme as any as MD2Theme).fonts.medium return ( onPressYear(year)} accessibilityRole="button" accessibilityLabel={String(year)} style={styles.yearButton} > {year} ) } const Year = React.memo(YearPure) const styles = StyleSheet.create({ root: { flex: 1, top: 56, zIndex: 100, }, list: { flex: 1, }, year: { flex: 1, marginLeft: 16, marginRight: 16, height: ITEM_HEIGHT, justifyContent: 'center', }, yearButton: { borderRadius: 46 / 2, overflow: 'hidden', }, yearInner: { borderRadius: 46 / 2, height: 46, alignItems: 'center', justifyContent: 'center', }, yearLabel: { fontSize: 16, }, opacity0: { opacity: 0, }, opacity1: { opacity: 1, }, })