-
Notifications
You must be signed in to change notification settings - Fork 32
Expand file tree
/
Copy pathExampleAppButton.tsx
More file actions
96 lines (91 loc) · 2.46 KB
/
ExampleAppButton.tsx
File metadata and controls
96 lines (91 loc) · 2.46 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
/**
* Copyright 2025 Google LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import React from 'react';
import { Pressable, Text, StyleSheet } from 'react-native';
import { Colors, BorderRadius, Typography, Spacing } from '../styles/theme';
type ExampleAppButtonProps = {
title: string;
onPress: () => void;
backgroundColor?: string;
pressedBackgroundColor?: string;
textColor?: string;
disabled?: boolean;
testID?: string;
};
export const ExampleAppButton = ({
title,
onPress,
backgroundColor,
pressedBackgroundColor: pressedColor,
textColor: textColor,
disabled = false,
testID,
}: ExampleAppButtonProps) => {
const resolvedBackground = disabled
? Colors.buttonDisabled
: (backgroundColor ?? Colors.button);
const resolvedPressed = disabled
? Colors.buttonDisabled
: (pressedColor ?? Colors.buttonPressed);
const resolvedTextColor = disabled
? Colors.textDisabled
: (textColor ?? Colors.buttonText);
return (
<Pressable
testID={testID}
onPress={disabled ? undefined : onPress}
disabled={disabled}
android_ripple={
disabled ? undefined : { color: 'rgba(0,0,0,0.15)', foreground: true }
}
style={({ pressed }) => [
styles.buttonBase,
{
backgroundColor:
pressed && !disabled ? resolvedPressed : resolvedBackground,
},
disabled && styles.buttonDisabled,
]}
>
<Text
style={[
styles.buttonText,
{
color: resolvedTextColor,
},
]}
>
{title}
</Text>
</Pressable>
);
};
const styles = StyleSheet.create({
buttonBase: {
paddingVertical: Spacing.md,
paddingHorizontal: Spacing.lg,
borderRadius: BorderRadius.lg,
alignItems: 'center',
marginVertical: Spacing.xs,
},
buttonText: {
fontWeight: Typography.fontWeight.semibold,
fontSize: Typography.fontSize.md,
},
buttonDisabled: {
opacity: 0.6,
},
});