import { NavigationProp, useFocusEffect, useNavigation, } from '@react-navigation/native' import {useCallback, useState} from 'react' import {FlatList} from 'react-native' import {List} from 'react-native-paper' import {Like} from 'typeorm' import {getNow, setRepo, settingsRepo} from './db' import DrawerHeader from './DrawerHeader' import GymSet, {defaultSet} from './gym-set' import {HomePageParams} from './home-page-params' import ListMenu from './ListMenu' import Page from './Page' import SetItem from './SetItem' import Settings from './settings' const limit = 15 export default function SetList() { const [sets, setSets] = useState([]) const [offset, setOffset] = useState(0) const [term, setTerm] = useState('') const [end, setEnd] = useState(false) const [settings, setSettings] = useState() const [ids, setIds] = useState([]) const navigation = useNavigation>() const refresh = useCallback(async (value: string) => { const newSets = await setRepo.find({ where: {name: Like(`%${value}%`), hidden: 0 as any}, take: limit, skip: 0, order: {created: 'DESC'}, }) console.log(`${SetList.name}.refresh:`, {value, limit}) setSets(newSets) setOffset(0) setEnd(false) }, []) useFocusEffect( useCallback(() => { refresh(term) settingsRepo.findOne({where: {}}).then(setSettings) }, [refresh, term]), ) const renderItem = useCallback( ({item}: {item: GymSet}) => ( refresh(term)} ids={ids} setIds={setIds} /> ), [refresh, term, settings, ids], ) const next = useCallback(async () => { if (end) return const newOffset = offset + limit console.log(`${SetList.name}.next:`, {offset, newOffset, term}) const newSets = await setRepo.find({ where: {name: Like(`%${term}%`), hidden: 0 as any}, take: limit, skip: newOffset, order: {created: 'DESC'}, }) if (newSets.length === 0) return setEnd(true) if (!sets) return setSets([...sets, ...newSets]) if (newSets.length < limit) return setEnd(true) setOffset(newOffset) }, [term, end, offset, sets]) const onAdd = useCallback(async () => { const [{now}] = await getNow() let set = sets[0] if (!set) set = {...defaultSet} set.created = now delete set.id navigation.navigate('EditSet', {set}) }, [navigation, sets]) const search = useCallback( (value: string) => { setTerm(value) refresh(value) }, [refresh], ) const edit = useCallback(() => { navigation.navigate('EditSets', {ids}) setIds([]) }, [ids, navigation]) const copy = useCallback(async () => { const set = await setRepo.findOne({ where: {id: ids.pop()}, }) delete set.id delete set.created navigation.navigate('EditSet', {set}) setIds([]) }, [ids, navigation]) const clear = useCallback(() => { setIds([]) }, []) const remove = useCallback(async () => { setIds([]) await setRepo.delete(ids.length > 0 ? ids : {}) await refresh(term) }, [ids, refresh, term]) const select = useCallback(() => { setIds(sets.map(set => set.id)) }, [sets]) return ( <> 0 ? `${ids.length} selected` : 'Home'}> {sets?.length === 0 ? ( ) : ( settings && ( ) )} ) }