import { NavigationProp, useNavigation } from "@react-navigation/native"; import { format } from "date-fns"; import { useCallback, useMemo } from "react"; import { Image } from "react-native"; import { List, Text } from "react-native-paper"; import { DARK_RIPPLE, LIGHT_RIPPLE } from "./constants"; import GymSet from "./gym-set"; import Settings from "./settings"; import useDark from "./use-dark"; import { StackParams } from "./AppStack"; export default function SetItem({ item, settings, ids, setIds, disablePress, customBg, }: { item: GymSet; settings: Settings; ids: number[]; setIds: (value: number[]) => void; disablePress?: boolean; customBg?: string; }) { const dark = useDark(); const navigation = useNavigation>(); const longPress = useCallback(() => { if (ids.length > 0) return; setIds([item.id]); }, [ids.length, item.id, setIds]); const press = useCallback(() => { if (disablePress) return; if (ids.length === 0) return navigation.navigate("EditSet", { set: item }); const removing = ids.find((id) => id === item.id); if (removing) setIds(ids.filter((id) => id !== item.id)); else setIds([...ids, item.id]); }, [ids, item, navigation, setIds, disablePress]); const backgroundColor = useMemo(() => { if (!ids.includes(item.id)) return; if (dark) return DARK_RIPPLE; return LIGHT_RIPPLE; }, [dark, ids, item.id]); const left = useCallback(() => { if (!settings.images || !item.image) return null; return ( ); }, [item.image, settings.images]); const right = useCallback(() => { if (!settings.showDate) return null; return ( {format(new Date(item.created), settings.date || "P")} ); }, [settings.showDate, item.created, settings.date, dark]); return ( ); }