import { NavigationProp, useFocusEffect, useNavigation, } from '@react-navigation/native' import {useCallback, useState} from 'react' import {FlatList} from 'react-native' import {Divider, IconButton, List, Menu} from 'react-native-paper' import {Like} from 'typeorm' import ConfirmDialog from './ConfirmDialog' import {planRepo} from './db' import DrawerHeader from './DrawerHeader' import Page from './Page' import {Plan} from './plan' import {PlanPageParams} from './plan-page-params' import PlanItem from './PlanItem' import useDark from './use-dark' export default function PlanList() { const [term, setTerm] = useState('') const [plans, setPlans] = useState() const [ids, setIds] = useState([]) const [showMenu, setShowMenu] = useState(false) const [showRemove, setShowRemove] = useState(false) const dark = useDark() const navigation = useNavigation>() const refresh = useCallback(async (value: string) => { planRepo .find({ where: [{days: Like(`%${value}%`)}, {workouts: Like(`%${value}%`)}], }) .then(setPlans) }, []) useFocusEffect( useCallback(() => { refresh(term) }, [refresh, term]), ) const search = useCallback( (value: string) => { setTerm(value) refresh(value) }, [refresh], ) const renderItem = useCallback( ({item}: {item: Plan}) => ( ), [ids], ) const onAdd = () => navigation.navigate('EditPlan', {plan: {days: '', workouts: ''}}) const edit = useCallback(async () => { setShowMenu(false) const plan = await planRepo.findOne({where: {id: ids.pop()}}) navigation.navigate('EditPlan', {plan}) setIds([]) }, [ids, navigation]) const copy = useCallback(async () => { setShowMenu(false) const plan = await planRepo.findOne({ where: {id: ids.pop()}, }) delete plan.id navigation.navigate('EditPlan', {plan}) setIds([]) }, [ids, navigation]) const clear = useCallback(() => { setShowMenu(false) setIds([]) }, []) const remove = useCallback(async () => { setShowMenu(false) setShowRemove(false) await planRepo.delete(ids.length > 0 ? ids : {}) await refresh(term) setIds([]) }, [ids, refresh, term]) const menuItems = ( <> setShowRemove(true)} title="Delete" /> ) return ( <> setShowMenu(false)} anchor={ setShowMenu(true)} icon="more-vert" /> }> {menuItems} setShowMenu(false)}> {ids?.length === 0 ? ( <> This irreversibly deletes all plans from the app. Are you sure? ) : ( <>This will delete {ids?.length} plan(s). Are you sure? )} {plans?.length === 0 ? ( ) : ( set.id?.toString() || ''} /> )} ) }