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