1*26ad19fcSEvan Bacon/** 2*26ad19fcSEvan Bacon * Copyright (c) 650 Industries. 3*26ad19fcSEvan Bacon * Copyright (c) Meta Platforms, Inc. and affiliates. 4*26ad19fcSEvan Bacon * 5*26ad19fcSEvan Bacon * This source code is licensed under the MIT license found in the 6*26ad19fcSEvan Bacon * LICENSE file in the root directory of this source tree. 7*26ad19fcSEvan Bacon */ 8*26ad19fcSEvan Baconimport React, { useState } from 'react'; 9*26ad19fcSEvan Baconimport { GestureResponderEvent, Insets, Platform, Pressable, View, ViewStyle } from 'react-native'; 10*26ad19fcSEvan Bacon 11*26ad19fcSEvan Baconimport * as LogBoxStyle from './LogBoxStyle'; 12*26ad19fcSEvan Bacon 13*26ad19fcSEvan Bacontype Props = { 14*26ad19fcSEvan Bacon backgroundColor: { 15*26ad19fcSEvan Bacon default: string; 16*26ad19fcSEvan Bacon pressed: string; 17*26ad19fcSEvan Bacon }; 18*26ad19fcSEvan Bacon children?: any; 19*26ad19fcSEvan Bacon hitSlop?: Insets; 20*26ad19fcSEvan Bacon onPress?: ((event: GestureResponderEvent) => void) | null; 21*26ad19fcSEvan Bacon style?: ViewStyle; 22*26ad19fcSEvan Bacon}; 23*26ad19fcSEvan Bacon 24*26ad19fcSEvan Baconexport function LogBoxButton(props: Props) { 25*26ad19fcSEvan Bacon const [pressed, setPressed] = useState(false); 26*26ad19fcSEvan Bacon 27*26ad19fcSEvan Bacon let backgroundColor = props.backgroundColor; 28*26ad19fcSEvan Bacon if (!backgroundColor) { 29*26ad19fcSEvan Bacon backgroundColor = { 30*26ad19fcSEvan Bacon default: LogBoxStyle.getBackgroundColor(0.95), 31*26ad19fcSEvan Bacon pressed: LogBoxStyle.getBackgroundColor(0.6), 32*26ad19fcSEvan Bacon }; 33*26ad19fcSEvan Bacon } 34*26ad19fcSEvan Bacon 35*26ad19fcSEvan Bacon const content = ( 36*26ad19fcSEvan Bacon <View 37*26ad19fcSEvan Bacon style={[ 38*26ad19fcSEvan Bacon { 39*26ad19fcSEvan Bacon backgroundColor: pressed ? backgroundColor.pressed : backgroundColor.default, 40*26ad19fcSEvan Bacon ...Platform.select({ 41*26ad19fcSEvan Bacon web: { 42*26ad19fcSEvan Bacon cursor: 'pointer', 43*26ad19fcSEvan Bacon }, 44*26ad19fcSEvan Bacon }), 45*26ad19fcSEvan Bacon }, 46*26ad19fcSEvan Bacon props.style, 47*26ad19fcSEvan Bacon ]}> 48*26ad19fcSEvan Bacon {props.children} 49*26ad19fcSEvan Bacon </View> 50*26ad19fcSEvan Bacon ); 51*26ad19fcSEvan Bacon 52*26ad19fcSEvan Bacon return props.onPress == null ? ( 53*26ad19fcSEvan Bacon content 54*26ad19fcSEvan Bacon ) : ( 55*26ad19fcSEvan Bacon <Pressable 56*26ad19fcSEvan Bacon hitSlop={props.hitSlop} 57*26ad19fcSEvan Bacon onPress={props.onPress} 58*26ad19fcSEvan Bacon onPressIn={() => setPressed(true)} 59*26ad19fcSEvan Bacon onPressOut={() => setPressed(false)}> 60*26ad19fcSEvan Bacon {content} 61*26ad19fcSEvan Bacon </Pressable> 62*26ad19fcSEvan Bacon ); 63*26ad19fcSEvan Bacon} 64