import { FlatList, ScrollView, StyleSheet, View } from 'react-native' import { Text, TouchableRipple, useTheme } from 'react-native-paper' import { range } from '../shared/utils' import { memo, useEffect, useRef } from 'react' import { sharedStyles } from '../shared/styles' import { defaultStartYear, defaultEndYear } from './dateUtils' 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 = useRef | null>(null) const years = range( isNaN(startYear) ? defaultStartYear : startYear, isNaN(endYear) ? defaultEndYear : endYear ) // scroll to selected year 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={sharedStyles.root} 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() const textFont = theme.fonts.bodyLarge return ( onPressYear(year)} accessibilityRole="button" accessibilityLabel={String(year)} style={styles.yearButton} > {year} ) } const styles = StyleSheet.create({ root: { flex: 1, top: 56, zIndex: 100, }, 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, }, }) const Year = memo(YearPure)