react-native-gesture-handler
Version:
Declarative API exposing native platform touch and gesture system to React Native
49 lines (40 loc) • 1.19 kB
text/typescript
import { Platform } from 'react-native';
import type { BaseGesture, GestureRef } from '../handlers/gestures/gesture';
type TVProps = {
focusable?: boolean | undefined;
isTVSelectable?: boolean | undefined;
};
/**
* Gesture Handler buttons render the native button component directly, bypassing RN's `<View>` —
* the only place the `focusable` prop is translated into `isTVSelectable`, which actually drives
* tvOS focusability.
*/
export function getTVProps(props: TVProps): TVProps {
if (!Platform.isTV) {
return {};
}
return {
isTVSelectable: props.focusable ?? props.isTVSelectable ?? true,
};
}
export type RelationPropName =
| 'simultaneousWithExternalGesture'
| 'requireExternalGestureToFail'
| 'blocksExternalGesture';
export type RelationPropType =
| Exclude<GestureRef, number>
| Exclude<GestureRef, number>[];
export function applyRelationProp(
gesture: BaseGesture<any>,
relationPropName: RelationPropName,
relationProp: RelationPropType
) {
if (!relationProp) {
return;
}
if (Array.isArray(relationProp)) {
gesture[relationPropName](...relationProp);
} else {
gesture[relationPropName](relationProp);
}
}