import React, { useEffect, useState } from 'react' import { GestureResponderEvent, LayoutRectangle, Pressable, ViewStyle } from 'react-native' import FastImage, { Source } from 'react-native-fast-image' const PressableImage: React.FC<{ source: Source | number onPress?: (event: GestureResponderEvent) => void style?: ViewStyle tintColor?: string disabled?: boolean hitSlop?: number padding?: number ripple?: boolean }> = ({ source, onPress, style, tintColor, disabled, hitSlop, padding, ripple }) => { const [opacity, setOpacity] = useState(1) const [dimensions, setDimensions] = useState(undefined) disabled = disabled === undefined ? false : disabled padding = padding || 0 ripple = ripple === undefined ? false : ripple style = { ...(style || {}), opacity, justifyContent: 'center', alignItems: 'center', } useEffect(() => { disabled ? setOpacity(0.3) : setOpacity(1) }, [disabled]) return ( { if (!disabled) { setOpacity(0.4) } }} onPressOut={() => { if (!disabled) { setOpacity(1) } }} onLayout={event => setDimensions(event.nativeEvent.layout)}> ) } export default PressableImage