/* @flow */
import * as React from 'react';
import PropTypes from 'prop-types';
import {
TouchableNativeFeedback,
TouchableOpacity,
Platform,
View,
} from 'react-native';
import type { ViewStyleProp } from 'react-native/Libraries/StyleSheet/StyleSheet';
const LOLLIPOP = 21;
type Props = {
onPress: () => mixed,
delayPressIn?: number,
borderless?: boolean,
pressColor?: string,
pressOpacity?: number,
children?: React.Node,
style?: ViewStyleProp,
};
export default class TouchableItem extends React.Component<Props> {
static propTypes = {
onPress: PropTypes.func.isRequired,
delayPressIn: PropTypes.number,
borderless: PropTypes.bool,
pressColor: PropTypes.string,
pressOpacity: PropTypes.number,
children: PropTypes.node.isRequired,
};
static defaultProps = {
pressColor: 'rgba(255, 255, 255, .4)',
};
render() {
const { style, pressOpacity, pressColor, borderless, ...rest } = this.props;
if (Platform.OS === 'android' && Platform.Version >= LOLLIPOP) {
return (
<TouchableNativeFeedback
{...rest}
background={TouchableNativeFeedback.Ripple(pressColor, borderless)}
>
<View style={style}>{React.Children.only(this.props.children)}</View>
</TouchableNativeFeedback>
);
} else {
return (
<TouchableOpacity
{...rest}
rejectResponderTermination
style={style}
activeOpacity={pressOpacity}
>
{this.props.children}
</TouchableOpacity>
);
}
}
}