Pipe through outer handlers to Button

This commit is contained in:
Eric Bailey
2025-01-07 14:35:05 -06:00
committed by Samuel Newman
parent 5e2680206c
commit 730234ec76
+30 -16
View File
@@ -3,10 +3,12 @@ import {
AccessibilityProps, AccessibilityProps,
GestureResponderEvent, GestureResponderEvent,
MouseEvent, MouseEvent,
NativeSyntheticEvent,
Pressable, Pressable,
PressableProps, PressableProps,
StyleProp, StyleProp,
StyleSheet, StyleSheet,
TargetedEvent,
TextProps, TextProps,
TextStyle, TextStyle,
View, View,
@@ -76,6 +78,8 @@ export type ButtonProps = Pick<
| 'onHoverOut' | 'onHoverOut'
| 'onPressIn' | 'onPressIn'
| 'onPressOut' | 'onPressOut'
| 'onFocus'
| 'onBlur'
> & > &
AccessibilityProps & AccessibilityProps &
VariantProps & { VariantProps & {
@@ -116,6 +120,12 @@ export const Button = React.forwardRef<View, ButtonProps>(
style, style,
hoverStyle: hoverStyleProp, hoverStyle: hoverStyleProp,
PressableComponent = Pressable, PressableComponent = Pressable,
onPressIn: onPressInOuter,
onPressOut: onPressOutOuter,
onHoverIn: onHoverInOuter,
onHoverOut: onHoverOutOuter,
onFocus: onFocusOuter,
onBlur: onBlurOuter,
...rest ...rest
}, },
ref, ref,
@@ -127,7 +137,6 @@ export const Button = React.forwardRef<View, ButtonProps>(
focused: false, focused: false,
}) })
const onPressInOuter = rest.onPressIn
const onPressIn = React.useCallback( const onPressIn = React.useCallback(
(e: GestureResponderEvent) => { (e: GestureResponderEvent) => {
setState(s => ({ setState(s => ({
@@ -138,7 +147,6 @@ export const Button = React.forwardRef<View, ButtonProps>(
}, },
[setState, onPressInOuter], [setState, onPressInOuter],
) )
const onPressOutOuter = rest.onPressOut
const onPressOut = React.useCallback( const onPressOut = React.useCallback(
(e: GestureResponderEvent) => { (e: GestureResponderEvent) => {
setState(s => ({ setState(s => ({
@@ -149,7 +157,6 @@ export const Button = React.forwardRef<View, ButtonProps>(
}, },
[setState, onPressOutOuter], [setState, onPressOutOuter],
) )
const onHoverInOuter = rest.onHoverIn
const onHoverIn = React.useCallback( const onHoverIn = React.useCallback(
(e: MouseEvent) => { (e: MouseEvent) => {
setState(s => ({ setState(s => ({
@@ -160,7 +167,6 @@ export const Button = React.forwardRef<View, ButtonProps>(
}, },
[setState, onHoverInOuter], [setState, onHoverInOuter],
) )
const onHoverOutOuter = rest.onHoverOut
const onHoverOut = React.useCallback( const onHoverOut = React.useCallback(
(e: MouseEvent) => { (e: MouseEvent) => {
setState(s => ({ setState(s => ({
@@ -171,18 +177,26 @@ export const Button = React.forwardRef<View, ButtonProps>(
}, },
[setState, onHoverOutOuter], [setState, onHoverOutOuter],
) )
const onFocus = React.useCallback(() => { const onFocus = React.useCallback(
setState(s => ({ (e: NativeSyntheticEvent<TargetedEvent>) => {
...s, setState(s => ({
focused: true, ...s,
})) focused: true,
}, [setState]) }))
const onBlur = React.useCallback(() => { onFocusOuter?.(e)
setState(s => ({ },
...s, [setState, onFocusOuter],
focused: false, )
})) const onBlur = React.useCallback(
}, [setState]) (e: NativeSyntheticEvent<TargetedEvent>) => {
setState(s => ({
...s,
focused: false,
}))
onBlurOuter?.(e)
},
[setState, onBlurOuter],
)
const {baseStyles, hoverStyles} = React.useMemo(() => { const {baseStyles, hoverStyles} = React.useMemo(() => {
const baseStyles: ViewStyle[] = [] const baseStyles: ViewStyle[] = []