import { NavigationProp, useFocusEffect, useNavigation, } from "@react-navigation/native"; import { useCallback, useState } from "react"; import { FlatList, Image } from "react-native"; import { List } from "react-native-paper"; import { GraphsPageParams } from "./GraphsPage"; import { setRepo, settingsRepo } from "./db"; import DrawerHeader from "./DrawerHeader"; import GymSet from "./gym-set"; import Page from "./Page"; import Settings from "./settings"; export default function GraphsList() { const [bests, setBests] = useState(); const [term, setTerm] = useState(""); const navigation = useNavigation>(); const [settings, setSettings] = useState(); useFocusEffect( useCallback(() => { settingsRepo.findOne({ where: {} }).then(setSettings); }, []) ); const refresh = useCallback(async (value: string) => { const result = await setRepo .createQueryBuilder("gym_set") .select(["gym_set.name", "gym_set.reps", "gym_set.weight"]) .groupBy("gym_set.name") .innerJoin( (qb) => qb .select(["gym_set2.name", "MAX(gym_set2.weight) AS max_weight"]) .from(GymSet, "gym_set2") .where("gym_set2.name LIKE (:name)", { name: `%${value.trim()}%` }) .groupBy("gym_set2.name"), "subquery", "gym_set.name = subquery.gym_set2_name AND gym_set.weight = subquery.max_weight" ) .getMany(); setBests(result); }, []); useFocusEffect( useCallback(() => { refresh(term); }, [refresh, term]) ); const search = useCallback( (value: string) => { setTerm(value); refresh(value); }, [refresh] ); const renderItem = ({ item }: { item: GymSet }) => ( navigation.navigate("ViewGraph", { best: item })} left={() => (settings.images && item.image && ( )) || null } /> ); return ( <> {bests?.length === 0 ? ( ) : ( )} ); }