import {NavigationProp, useNavigation} from '@react-navigation/native' import {useCallback, useState} from 'react' import {GestureResponderEvent, Image} from 'react-native' import {Divider, List, Menu, Text} from 'react-native-paper' import {setRepo} from './db' import GymSet from './gym-set' import {HomePageParams} from './home-page-params' import {format} from './time' import useDark from './use-dark' import {useSettings} from './use-settings' export default function SetItem({ item, onRemove, }: { item: GymSet onRemove: () => void }) { const [showMenu, setShowMenu] = useState(false) const [anchor, setAnchor] = useState({x: 0, y: 0}) const {settings} = useSettings() const dark = useDark() const navigation = useNavigation>() const remove = useCallback(async () => { if (typeof item.id === 'number') await setRepo.delete(item.id) setShowMenu(false) onRemove() }, [setShowMenu, onRemove, item.id]) const copy = useCallback(() => { const set: GymSet = {...item} delete set.id setShowMenu(false) navigation.navigate('EditSet', {set}) }, [navigation, item]) const longPress = useCallback( (e: GestureResponderEvent) => { setAnchor({x: e.nativeEvent.pageX, y: e.nativeEvent.pageY}) setShowMenu(true) }, [setShowMenu, setAnchor], ) return ( <> navigation.navigate('EditSet', {set: item})} title={item.name} description={`${item.reps} x ${item.weight}${item.unit || 'kg'}`} onLongPress={longPress} left={() => !!settings.images && item.image && ( ) } right={() => ( <> {!!settings.showDate && ( {format(item.created || '', settings.date)} )} setShowMenu(false)}> )} /> ) }