import {NavigationProp, useNavigation} from '@react-navigation/native' import React, {useCallback, useState} from 'react' import {GestureResponderEvent, ListRenderItemInfo, View} from 'react-native' import {List, Menu, RadioButton, useTheme} from 'react-native-paper' import {Like} from 'typeorm' import CountMany from './count-many' import {getNow, setRepo} from './db' import {PlanPageParams} from './plan-page-params' import {toast} from './toast' interface Props extends ListRenderItemInfo { onSelect: (index: number) => void selected: number onUndo: () => void } export default function StartPlanItem(props: Props) { const {index, item, onSelect, selected, onUndo} = props const {colors} = useTheme() const [anchor, setAnchor] = useState({x: 0, y: 0}) const [showMenu, setShowMenu] = useState(false) const {navigate} = useNavigation>() const undo = useCallback(async () => { const now = await getNow() const created = now.split('T')[0] const first = await setRepo.findOne({ where: { name: item.name, hidden: 0 as any, created: Like(`${created}%`), }, order: {created: 'desc'}, }) setShowMenu(false) if (!first) return toast('Nothing to undo.') await setRepo.delete(first.id) onUndo() }, [setShowMenu, onUndo, item.name]) const longPress = useCallback( (e: GestureResponderEvent) => { setAnchor({x: e.nativeEvent.pageX, y: e.nativeEvent.pageY}) setShowMenu(true) }, [setShowMenu, setAnchor], ) const edit = async () => { const now = await getNow() const created = now.split('T')[0] const first = await setRepo.findOne({ where: { name: item.name, hidden: 0 as any, created: Like(`${created}%`), }, order: {created: 'desc'}, }) setShowMenu(false) if (!first) return toast('Nothing to edit.') navigate('EditSet', {set: first}) } return ( onSelect(index)} left={() => ( onSelect(index)} value={index.toString()} status={selected === index ? 'checked' : 'unchecked'} color={colors.primary} /> )} right={() => ( setShowMenu(false)}> )} /> ) }