import { TouchableOpacityProps as RNTouchableOpacityProps } from 'react-native'; import { createComponent, createElement, createHook } from 'bumbag/utils'; import { Box, BoxProps } from './Box'; import * as styles from './Box.styles'; import { throttle } from '../utils'; export type LocalBoxTouchableProps = { /** Sets a throttle for the press event (`onPress`) to be only invoked at most once every `x` milliseconds. */ throttle?: boolean | number; }; export type BoxTouchableProps = BoxProps & RNTouchableOpacityProps & LocalBoxTouchableProps; const useProps = createHook( (props) => { const boxProps = Box.useProps(props); return { ...boxProps, onPress: throttle(props.onPress, props.throttle) }; }, { themeKey: 'native.Box.Touchable' } ); export const BoxTouchable = createComponent( (props) => { const boxProps = useProps(props); return createElement({ children: props.children, component: styles.StyledBoxTouchable, htmlProps: boxProps, }); }, { attach: { useProps, displayName: 'native.Box.Touchable', }, themeKey: 'native.Box.Touchable', } );