44 Text ,
55 StyleProp ,
66 ViewStyle ,
7+ TextStyle ,
78 TouchableWithoutFeedback ,
89} from "react-native" ;
910/**
@@ -13,14 +14,28 @@ import styles from "./ToggleButton.style";
1314import useStateWithCallback from "./helpers/useStateWithCallback" ;
1415
1516type CustomStyleProp = StyleProp < ViewStyle > | Array < StyleProp < ViewStyle > > ;
17+ type CustomTextStyleProp = StyleProp < TextStyle > | Array < StyleProp < TextStyle > > ;
1618
1719interface IToggleButtonProps {
1820 style ?: CustomStyleProp ;
21+ activeButtonStyle ?: CustomStyleProp ;
22+ activeTextStyle ?: CustomTextStyleProp ;
23+ inactiveButtonStyle ?: CustomStyleProp ;
24+ inactiveTextStyle ?: CustomTextStyleProp ;
1925 backgroundColor ?: string ;
26+ TouchableComponent ?: any ;
2027 onPress : ( isToggled : boolean ) => void ;
2128}
2229
23- const ToggleButton : React . FC < IToggleButtonProps > = ( { style, onPress } ) => {
30+ const ToggleButton : React . FC < IToggleButtonProps > = ( {
31+ style,
32+ activeButtonStyle,
33+ activeTextStyle,
34+ inactiveButtonStyle,
35+ inactiveTextStyle,
36+ TouchableComponent = TouchableWithoutFeedback ,
37+ onPress,
38+ } ) => {
2439 const [ isToggled , setToggled ] = useStateWithCallback < boolean > ( false ) ;
2540
2641 const handlePress = ( ) => {
@@ -29,38 +44,32 @@ const ToggleButton: React.FC<IToggleButtonProps> = ({ style, onPress }) => {
2944 } ) ;
3045 } ;
3146
47+ const onToggleButtonStyle = isToggled
48+ ? [ styles . activeButtonStyle , activeButtonStyle ]
49+ : [ styles . inactiveButtonStyle , inactiveButtonStyle ] ;
50+ const onToggleTextStyle = isToggled
51+ ? [ styles . activeTextStyle , activeTextStyle ]
52+ : [ styles . inactiveTextStyle , inactiveTextStyle ] ;
53+
54+ const offToggleButtonStyle = ! isToggled
55+ ? [ styles . activeButtonStyle , activeButtonStyle ]
56+ : [ styles . inactiveButtonStyle , inactiveButtonStyle ] ;
57+ const offToggleTextStyle = ! isToggled
58+ ? [ styles . activeTextStyle , activeTextStyle ]
59+ : [ styles . inactiveTextStyle , inactiveTextStyle ] ;
60+
3261 return (
3362 < View style = { [ styles . container , style ] } >
34- < TouchableWithoutFeedback style = { { } } onPress = { handlePress } >
63+ < TouchableComponent style = { { } } onPress = { handlePress } >
3564 < View style = { styles . containerGlue } >
36- < View
37- style = {
38- isToggled ? styles . activeButtonStyle : styles . inactiveButtonStyle
39- }
40- >
41- < Text
42- style = {
43- isToggled ? styles . activeTextStyle : styles . inactiveTextStyle
44- }
45- >
46- On
47- </ Text >
65+ < View style = { onToggleButtonStyle } >
66+ < Text style = { onToggleTextStyle } > On</ Text >
4867 </ View >
49- < View
50- style = {
51- ! isToggled ? styles . activeButtonStyle : styles . inactiveButtonStyle
52- }
53- >
54- < Text
55- style = {
56- ! isToggled ? styles . activeTextStyle : styles . inactiveTextStyle
57- }
58- >
59- Off
60- </ Text >
68+ < View style = { offToggleButtonStyle } >
69+ < Text style = { offToggleTextStyle } > Off</ Text >
6170 </ View >
6271 </ View >
63- </ TouchableWithoutFeedback >
72+ </ TouchableComponent >
6473 </ View >
6574 ) ;
6675} ;
0 commit comments