Pipe through outer handlers to Button
This commit is contained in:
committed by
Samuel Newman
parent
5e2680206c
commit
730234ec76
+30
-16
@@ -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[] = []
|
||||||
|
|||||||
Reference in New Issue
Block a user