Skip to content

Commit 26c07d2

Browse files
authored
feat: add style props (#2)
1 parent 638dc8c commit 26c07d2

File tree

2 files changed

+67
-25
lines changed

2 files changed

+67
-25
lines changed

README.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,18 @@ import InlineKeyboard from "react-native-inline-keyboard";
2020
<InlineKeyboard value={value} onChange={(value) => console.log(value)} />
2121
```
2222

23+
### Props
24+
25+
| Prop | Type |
26+
|------|------|
27+
|value | `string` |
28+
|onChange | `function (value: string`)|
29+
|showInput | `boolean` |
30+
|letterContainerStyles | `StyleProp<ViewStyle>` |
31+
|letterButtonStyles | `StyleProp<ViewStyle>` |
32+
|letterButtonFocusStyles | `StyleProp<ViewStyle>` |
33+
|letterButtonTextStyles | `StyleProp<TextStyle>` |
34+
2335
## License
2436

2537
MIT

src/Keyboard.tsx

Lines changed: 55 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
11
import React from 'react';
2-
import { StyleSheet, Text, View } from 'react-native';
2+
import {
3+
StyleProp,
4+
StyleSheet,
5+
Text,
6+
TextStyle,
7+
View,
8+
ViewStyle,
9+
} from 'react-native';
310
import TVTouchableFeedback from './TVTouchableFeedback';
411
import Language from './languages/en';
512

@@ -35,11 +42,26 @@ const styles = StyleSheet.create({
3542
interface InlineKeyboardProps {
3643
value: string;
3744
onChange(text: string): any;
45+
showInput?: boolean;
46+
letterContainerStyles?: StyleProp<ViewStyle>;
47+
letterButtonStyles?: StyleProp<ViewStyle>;
48+
letterButtonFocusStyles?: StyleProp<ViewStyle>;
49+
letterButtonTextStyles?: StyleProp<TextStyle>;
3850
}
3951

40-
const InlineKeyboard: React.FC<InlineKeyboardProps> = ({ onChange, value }) => {
52+
const InlineKeyboard: React.FC<InlineKeyboardProps> = props => {
4153
const [showSymbols, setShowSymbols] = React.useState(false);
4254

55+
const {
56+
onChange,
57+
value,
58+
showInput = false,
59+
letterContainerStyles = styles.letterContainer,
60+
letterButtonStyles = styles.letterButton,
61+
letterButtonFocusStyles = styles.letterButtonFocus,
62+
letterButtonTextStyles = styles.letterText,
63+
} = props;
64+
4365
const toggleShowSymbols = () => {
4466
setShowSymbols(!showSymbols);
4567
};
@@ -58,74 +80,82 @@ const InlineKeyboard: React.FC<InlineKeyboardProps> = ({ onChange, value }) => {
5880

5981
return (
6082
<View>
61-
<View style={styles.input}>
62-
<Text style={styles.inputText}>{value || 'Type Something'}</Text>
63-
</View>
83+
{showInput && (
84+
<View style={styles.input}>
85+
<Text style={styles.inputText}>{value || 'Type Something'}</Text>
86+
</View>
87+
)}
6488
<View>
65-
<View style={styles.letterContainer}>
89+
<View style={letterContainerStyles}>
6690
<TVTouchableFeedback
67-
style={styles.letterButton}
68-
focusStyles={styles.letterButtonFocus}
91+
style={letterButtonStyles}
92+
focusStyles={letterButtonFocusStyles}
6993
activeOpacity={1}
7094
onPress={toggleShowSymbols}
7195
testID={'symbols-button'}
7296
>
73-
<Text style={styles.letterText}>123</Text>
97+
<Text style={letterButtonTextStyles}>123</Text>
7498
</TVTouchableFeedback>
7599
{Language.letters.map(letter => {
76100
return (
77101
<TVTouchableFeedback
78102
testID={`letter-${letter}`}
79-
style={styles.letterButton}
80-
focusStyles={styles.letterButtonFocus}
103+
style={letterButtonStyles}
104+
focusStyles={letterButtonFocusStyles}
81105
activeOpacity={1}
82106
key={letter}
83107
onPress={addLetter(letter)}
84108
>
85-
<Text style={styles.letterText}>{letter.toUpperCase()}</Text>
109+
<Text style={letterButtonTextStyles}>
110+
{letter.toUpperCase()}
111+
</Text>
86112
</TVTouchableFeedback>
87113
);
88114
})}
89115
<TVTouchableFeedback
90116
testID={'space-button'}
91-
style={styles.letterButton}
92-
focusStyles={styles.letterButtonFocus}
117+
style={letterButtonStyles}
118+
focusStyles={letterButtonFocusStyles}
93119
activeOpacity={1}
94120
onPress={addLetter(' ')}
95121
>
96-
<Text style={styles.letterText}>{'space'.toUpperCase()}</Text>
122+
<Text style={letterButtonTextStyles}>{'space'.toUpperCase()}</Text>
97123
</TVTouchableFeedback>
98124
<TVTouchableFeedback
99125
testID={'delete-button'}
100-
style={styles.letterButton}
101-
focusStyles={styles.letterButtonFocus}
126+
style={letterButtonStyles}
127+
focusStyles={letterButtonFocusStyles}
102128
activeOpacity={1}
103129
onPress={backspace}
104130
>
105-
<Text style={styles.letterText}>{'backspace'.toUpperCase()}</Text>
131+
<Text style={letterButtonTextStyles}>
132+
{'backspace'.toUpperCase()}
133+
</Text>
106134
</TVTouchableFeedback>
107135
<TVTouchableFeedback
108-
style={styles.letterButton}
109-
focusStyles={styles.letterButtonFocus}
136+
style={letterButtonStyles}
137+
focusStyles={letterButtonFocusStyles}
110138
activeOpacity={1}
111139
onPress={clear}
112140
>
113-
<Text style={styles.letterText}>{'clear'.toUpperCase()}</Text>
141+
<Text style={letterButtonTextStyles}>{'clear'.toUpperCase()}</Text>
114142
</TVTouchableFeedback>
115143
</View>
116144
{showSymbols && (
117-
<View style={styles.letterContainer}>
145+
<View style={letterContainerStyles}>
118146
{Language.symbols.map(letter => {
119147
return (
120148
<TVTouchableFeedback
121149
testID={`symbol-${letter}`}
122-
style={styles.letterButton}
123-
focusStyles={styles.letterButtonFocus}
150+
style={letterButtonStyles}
151+
focusStyles={letterButtonFocusStyles}
124152
activeOpacity={1}
125153
key={letter}
126154
onPress={addLetter(letter)}
127155
>
128-
<Text style={styles.letterText}>{letter.toUpperCase()}</Text>
156+
<Text style={letterButtonTextStyles}>
157+
{letter.toUpperCase()}
158+
</Text>
129159
</TVTouchableFeedback>
130160
);
131161
})}

0 commit comments

Comments
 (0)