1
1
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' ;
3
10
import TVTouchableFeedback from './TVTouchableFeedback' ;
4
11
import Language from './languages/en' ;
5
12
@@ -35,11 +42,26 @@ const styles = StyleSheet.create({
35
42
interface InlineKeyboardProps {
36
43
value : string ;
37
44
onChange ( text : string ) : any ;
45
+ showInput ?: boolean ;
46
+ letterContainerStyles ?: StyleProp < ViewStyle > ;
47
+ letterButtonStyles ?: StyleProp < ViewStyle > ;
48
+ letterButtonFocusStyles ?: StyleProp < ViewStyle > ;
49
+ letterButtonTextStyles ?: StyleProp < TextStyle > ;
38
50
}
39
51
40
- const InlineKeyboard : React . FC < InlineKeyboardProps > = ( { onChange , value } ) => {
52
+ const InlineKeyboard : React . FC < InlineKeyboardProps > = props => {
41
53
const [ showSymbols , setShowSymbols ] = React . useState ( false ) ;
42
54
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
+
43
65
const toggleShowSymbols = ( ) => {
44
66
setShowSymbols ( ! showSymbols ) ;
45
67
} ;
@@ -58,74 +80,82 @@ const InlineKeyboard: React.FC<InlineKeyboardProps> = ({ onChange, value }) => {
58
80
59
81
return (
60
82
< 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
+ ) }
64
88
< View >
65
- < View style = { styles . letterContainer } >
89
+ < View style = { letterContainerStyles } >
66
90
< TVTouchableFeedback
67
- style = { styles . letterButton }
68
- focusStyles = { styles . letterButtonFocus }
91
+ style = { letterButtonStyles }
92
+ focusStyles = { letterButtonFocusStyles }
69
93
activeOpacity = { 1 }
70
94
onPress = { toggleShowSymbols }
71
95
testID = { 'symbols-button' }
72
96
>
73
- < Text style = { styles . letterText } > 123</ Text >
97
+ < Text style = { letterButtonTextStyles } > 123</ Text >
74
98
</ TVTouchableFeedback >
75
99
{ Language . letters . map ( letter => {
76
100
return (
77
101
< TVTouchableFeedback
78
102
testID = { `letter-${ letter } ` }
79
- style = { styles . letterButton }
80
- focusStyles = { styles . letterButtonFocus }
103
+ style = { letterButtonStyles }
104
+ focusStyles = { letterButtonFocusStyles }
81
105
activeOpacity = { 1 }
82
106
key = { letter }
83
107
onPress = { addLetter ( letter ) }
84
108
>
85
- < Text style = { styles . letterText } > { letter . toUpperCase ( ) } </ Text >
109
+ < Text style = { letterButtonTextStyles } >
110
+ { letter . toUpperCase ( ) }
111
+ </ Text >
86
112
</ TVTouchableFeedback >
87
113
) ;
88
114
} ) }
89
115
< TVTouchableFeedback
90
116
testID = { 'space-button' }
91
- style = { styles . letterButton }
92
- focusStyles = { styles . letterButtonFocus }
117
+ style = { letterButtonStyles }
118
+ focusStyles = { letterButtonFocusStyles }
93
119
activeOpacity = { 1 }
94
120
onPress = { addLetter ( ' ' ) }
95
121
>
96
- < Text style = { styles . letterText } > { 'space' . toUpperCase ( ) } </ Text >
122
+ < Text style = { letterButtonTextStyles } > { 'space' . toUpperCase ( ) } </ Text >
97
123
</ TVTouchableFeedback >
98
124
< TVTouchableFeedback
99
125
testID = { 'delete-button' }
100
- style = { styles . letterButton }
101
- focusStyles = { styles . letterButtonFocus }
126
+ style = { letterButtonStyles }
127
+ focusStyles = { letterButtonFocusStyles }
102
128
activeOpacity = { 1 }
103
129
onPress = { backspace }
104
130
>
105
- < Text style = { styles . letterText } > { 'backspace' . toUpperCase ( ) } </ Text >
131
+ < Text style = { letterButtonTextStyles } >
132
+ { 'backspace' . toUpperCase ( ) }
133
+ </ Text >
106
134
</ TVTouchableFeedback >
107
135
< TVTouchableFeedback
108
- style = { styles . letterButton }
109
- focusStyles = { styles . letterButtonFocus }
136
+ style = { letterButtonStyles }
137
+ focusStyles = { letterButtonFocusStyles }
110
138
activeOpacity = { 1 }
111
139
onPress = { clear }
112
140
>
113
- < Text style = { styles . letterText } > { 'clear' . toUpperCase ( ) } </ Text >
141
+ < Text style = { letterButtonTextStyles } > { 'clear' . toUpperCase ( ) } </ Text >
114
142
</ TVTouchableFeedback >
115
143
</ View >
116
144
{ showSymbols && (
117
- < View style = { styles . letterContainer } >
145
+ < View style = { letterContainerStyles } >
118
146
{ Language . symbols . map ( letter => {
119
147
return (
120
148
< TVTouchableFeedback
121
149
testID = { `symbol-${ letter } ` }
122
- style = { styles . letterButton }
123
- focusStyles = { styles . letterButtonFocus }
150
+ style = { letterButtonStyles }
151
+ focusStyles = { letterButtonFocusStyles }
124
152
activeOpacity = { 1 }
125
153
key = { letter }
126
154
onPress = { addLetter ( letter ) }
127
155
>
128
- < Text style = { styles . letterText } > { letter . toUpperCase ( ) } </ Text >
156
+ < Text style = { letterButtonTextStyles } >
157
+ { letter . toUpperCase ( ) }
158
+ </ Text >
129
159
</ TVTouchableFeedback >
130
160
) ;
131
161
} ) }
0 commit comments