Skip to content

Commit 74f4cfc

Browse files
authored
Incubator.Dialog - another fix for hiding (#2300)
* Small refactor * Exit animation should end faster - switch to time
1 parent 30a7f5a commit 74f4cfc

File tree

1 file changed

+26
-16
lines changed

1 file changed

+26
-16
lines changed

src/incubator/Dialog/useAnimatedTransition.ts

Lines changed: 26 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,14 @@
11
/* eslint-disable react-hooks/exhaustive-deps */
22
import {useEffect, useCallback} from 'react';
3-
import {runOnJS, useSharedValue, withSpring, withTiming, withDelay} from 'react-native-reanimated';
3+
import {
4+
runOnJS,
5+
useSharedValue,
6+
withSpring,
7+
withTiming,
8+
withDelay,
9+
WithTimingConfig,
10+
WithSpringConfig
11+
} from 'react-native-reanimated';
412
import type {HiddenLocation} from '../hooks/useHiddenLocation';
513
import {PanningDirections, PanningDirectionsEnum, DEFAULT_ANIMATION_CONFIG} from '../panView';
614
import useAnimationEndNotifier, {
@@ -11,6 +19,9 @@ const TransitionViewDirectionEnum = PanningDirectionsEnum;
1119
type TransitionViewDirection = PanningDirections;
1220
export {TransitionViewAnimationType, TransitionViewDirectionEnum, TransitionViewDirection};
1321

22+
const ENTER_ANIMATION_CONFIG = DEFAULT_ANIMATION_CONFIG;
23+
const EXIT_ANIMATION_CONFIG = {duration: 300};
24+
1425
interface Delay {
1526
enter?: number;
1627
exit?: number;
@@ -60,40 +71,39 @@ export default function useAnimatedTransition(props: AnimatedTransitionProps) {
6071
};
6172
};
6273

63-
const initPosition = useCallback((to: {x: number; y: number},
64-
animationDirection: TransitionViewDirection,
65-
callback: (isFinished?: boolean) => void) => {
74+
const initPosition = useCallback(() => {
6675
'worklet';
76+
const to = getLocation(enterFrom);
6777
// @ts-expect-error
68-
if ([TransitionViewDirectionEnum.LEFT, TransitionViewDirectionEnum.RIGHT].includes(animationDirection)) {
69-
translationX.value = withTiming(to.x, {duration: 0}, callback);
78+
if ([TransitionViewDirectionEnum.LEFT, TransitionViewDirectionEnum.RIGHT].includes(enterFrom)) {
79+
translationX.value = withTiming(to.x, {duration: 0}, animateIn);
7080
// @ts-expect-error
71-
} else if ([TransitionViewDirectionEnum.UP, TransitionViewDirectionEnum.DOWN].includes(animationDirection)) {
72-
translationY.value = withTiming(to.y, {duration: 0}, callback);
81+
} else if ([TransitionViewDirectionEnum.UP, TransitionViewDirectionEnum.DOWN].includes(enterFrom)) {
82+
translationY.value = withTiming(to.y, {duration: 0}, animateIn);
7383
}
7484

7585
onInitPosition();
76-
},
77-
[onInitPosition]);
86+
}, [onInitPosition]);
7887

7988
useEffect(() => {
8089
if (hiddenLocation.wasMeasured && enterFrom) {
81-
const location = getLocation(enterFrom);
82-
initPosition(location, enterFrom, animateIn);
90+
initPosition();
8391
}
8492
}, [hiddenLocation]);
8593

8694
const translateTo = useCallback((to: {x: number; y: number},
95+
animation: typeof withTiming | typeof withSpring,
96+
animationConfig: WithTimingConfig | WithSpringConfig,
8797
animationDirection: TransitionViewDirection,
8898
callback: (isFinished?: boolean) => void,
8999
delay = 0) => {
90100
'worklet';
91101
// @ts-expect-error
92102
if ([TransitionViewDirectionEnum.LEFT, TransitionViewDirectionEnum.RIGHT].includes(animationDirection)) {
93-
translationX.value = withDelay(delay, withSpring(to.x, DEFAULT_ANIMATION_CONFIG, callback));
103+
translationX.value = withDelay(delay, animation(to.x, animationConfig, callback));
94104
// @ts-expect-error
95105
} else if ([TransitionViewDirectionEnum.UP, TransitionViewDirectionEnum.DOWN].includes(animationDirection)) {
96-
translationY.value = withDelay(delay, withSpring(to.y, DEFAULT_ANIMATION_CONFIG, callback));
106+
translationY.value = withDelay(delay, animation(to.y, animationConfig, callback));
97107
}
98108
},
99109
[]);
@@ -105,7 +115,7 @@ export default function useAnimatedTransition(props: AnimatedTransitionProps) {
105115
runOnJS(onAnimationStart)('enter');
106116
}
107117

108-
translateTo({x: 0, y: 0}, enterFrom, onEnterAnimationEnd, delay?.enter);
118+
translateTo({x: 0, y: 0}, withSpring, ENTER_ANIMATION_CONFIG, enterFrom, onEnterAnimationEnd, delay?.enter);
109119
}
110120
}, [onEnterAnimationEnd, delay?.enter]);
111121

@@ -116,7 +126,7 @@ export default function useAnimatedTransition(props: AnimatedTransitionProps) {
116126
runOnJS(onAnimationStart)('exit');
117127
}
118128

119-
translateTo(getLocation(exitTo), exitTo, onExitAnimationEnd, delay?.exit);
129+
translateTo(getLocation(exitTo), withTiming, EXIT_ANIMATION_CONFIG, exitTo, onExitAnimationEnd, delay?.exit);
120130
}
121131
}, [hiddenLocation, exitTo, onExitAnimationEnd, delay?.exit]);
122132

0 commit comments

Comments
 (0)