Skip to content

Commit

Permalink
feat(TouchableOpacity): add new event handler and change hook method
Browse files Browse the repository at this point in the history
It's better to prevent naming collision with React build in eslint of react-hooks

BREAKING CHANGE: change method name of `useTouchableOpacityPress` to `whenTouchableOpacityPress`
  • Loading branch information
nampdn committed Apr 25, 2019
1 parent 1e363cf commit 279c814
Show file tree
Hide file tree
Showing 4 changed files with 86 additions and 6 deletions.
31 changes: 30 additions & 1 deletion src/lib/exports/TouchableOpacity/TouchableOpacity.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -14,22 +14,51 @@ export const TouchableOpacity = React.forwardRef(
{
TouchableComponent,
onPress: _onPress,
onPressIn: _onPressIn,
onPressOut: _onPressOut,
onLongPress: _onLongPress,
name,
kind,
...props
}: TouchableOpacityProps,
ref: any,
) => {
const context = useBaraContext()
const onPress: typeof _onPress = e => {
context.components.touchableOpacity.onPress({ name, ...props })
context.components.touchableOpacity.onPress({ name, kind, ...props })
if (_onPress) {
_onPress(e)
}
}

const onPressIn: typeof _onPressIn = e => {
context.components.touchableOpacity.onPressIn({ name, kind, ...props })
if (_onPressIn) {
_onPressIn(e)
}
}

const onPressOut: typeof _onPressOut = e => {
context.components.touchableOpacity.onPressOut({ name, kind, ...props })
if (_onPressOut) {
_onPressOut(e)
}
}

const onLongPress: typeof _onLongPress = e => {
context.components.touchableOpacity.onLongPress({ name, kind, ...props })
if (_onLongPress) {
_onLongPress(e)
}
}

return (
<Touchable
ref={ref}
onPress={onPress}
onPressIn={onPressIn}
onPressOut={onPressOut}
onLongPress={onLongPress}
TouchableComponent={TouchableOpacityOriginal}
activeOpacity={0.5}
{...props}
Expand Down
2 changes: 1 addition & 1 deletion src/lib/exports/TouchableOpacity/condition.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@ import { kindOf, nameOf } from '../../functions/common'

export const nameOfTouchableOpacity = nameOf

export const kindOfTouchableOpacity = nameOf
export const kindOfTouchableOpacity = kindOf
6 changes: 3 additions & 3 deletions src/lib/exports/TouchableOpacity/event.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import { createEventType, useEvent } from 'bara'

export interface BaraReactTouchableOpacity {
import { BaraBaseComponentProps } from '../../models'

export interface BaraReactTouchableOpacity extends BaraBaseComponentProps {
name?: string
className?: string
ref?: any
id?: string
}

export const ON_TOUCHABLE_OPACITY_PRESS = createEventType(
Expand Down
53 changes: 52 additions & 1 deletion src/lib/exports/TouchableOpacity/hook.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,13 @@ import {
import {
BaraReactTouchableOpacity,
TouchableOpacityEventFilter,
useTouchableOpacityLongPressEvent,
useTouchableOpacityPressEvent,
useTouchableOpacityPressInEvent,
useTouchableOpacityPressOutEvent,
} from './event'

export const useTouchableOpacityPress = (
export const whenTouchableOpacityPress = (
...conditions: Array<ConditionPipe<BaraReactTouchableOpacity>>
) => (...actions: Array<ActionPipe<BaraReactTouchableOpacity>>) => {
const piper = (
Expand All @@ -30,3 +33,51 @@ export const useTouchableOpacityPress = (
return { event, action }
})
}

export const whenTouchableOpacityPressIn = (
...conditions: Array<ConditionPipe<BaraReactTouchableOpacity>>
) => (...actions: Array<ActionPipe<BaraReactTouchableOpacity>>) => {
const piper = (
data: BaraReactTouchableOpacity,
payload: BaraEventPayload<BaraReactTouchableOpacity>,
) => {
createPipe(data, payload)(...(conditions as any))(...actions)
}
useTrigger<BaraReactTouchableOpacity>(() => {
const event = useTouchableOpacityPressInEvent()
const action = useAction(piper)
return { event, action }
})
}

export const whenTouchableOpacityPressOut = (
...conditions: Array<ConditionPipe<BaraReactTouchableOpacity>>
) => (...actions: Array<ActionPipe<BaraReactTouchableOpacity>>) => {
const piper = (
data: BaraReactTouchableOpacity,
payload: BaraEventPayload<BaraReactTouchableOpacity>,
) => {
createPipe(data, payload)(...(conditions as any))(...actions)
}
useTrigger<BaraReactTouchableOpacity>(() => {
const event = useTouchableOpacityPressOutEvent()
const action = useAction(piper)
return { event, action }
})
}

export const whenTouchableOpacityLongPress = (
...conditions: Array<ConditionPipe<BaraReactTouchableOpacity>>
) => (...actions: Array<ActionPipe<BaraReactTouchableOpacity>>) => {
const piper = (
data: BaraReactTouchableOpacity,
payload: BaraEventPayload<BaraReactTouchableOpacity>,
) => {
createPipe(data, payload)(...(conditions as any))(...actions)
}
useTrigger<BaraReactTouchableOpacity>(() => {
const event = useTouchableOpacityLongPressEvent()
const action = useAction(piper)
return { event, action }
})
}

0 comments on commit 279c814

Please sign in to comment.