Skip to content

Commit cd5ccea

Browse files
committed
refactor: create override for events
1 parent cb9ba27 commit cd5ccea

File tree

3 files changed

+38
-19
lines changed

3 files changed

+38
-19
lines changed

src/components/Screen.tsx

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,36 @@ import NativeScreen from '../fabric/ScreenNativeComponent';
1818
import ModalScreenNative from '../fabric/ModalScreenNativeComponent';
1919
import { usePrevious } from './helpers/usePrevious';
2020

21-
const AnimatedNativeScreen = Animated.createAnimatedComponent(NativeScreen);
22-
const AnimatedNativeModalScreen =
23-
Animated.createAnimatedComponent(ModalScreenNative);
21+
/**
22+
* This messy override is to conform NativeProps used by codegen and
23+
* out Public API. To see reasoning go to this PR:
24+
* https://github.com/software-mansion/react-native-screens/pull/2423#discussion_r1810616995
25+
*/
26+
type SharedOverride = {
27+
onAppear?: ScreenProps['onAppear'];
28+
onDisappear?: ScreenProps['onDisappear'];
29+
onWillAppear?: ScreenProps['onWillAppear'];
30+
onWillDisappear?: ScreenProps['onWillDisappear'];
31+
};
32+
33+
type NativeScreenOverrideProps = Omit<
34+
React.ComponentPropsWithRef<typeof NativeScreen>,
35+
'onAppear' | 'onDisappear' | 'onWillAppear' | 'onWillDisappear'
36+
> &
37+
SharedOverride;
38+
39+
type NativeModalScreenOverrideProps = Omit<
40+
React.ComponentPropsWithRef<typeof ModalScreenNative>,
41+
'onAppear' | 'onDisappear' | 'onWillAppear' | 'onWillDisappear'
42+
> &
43+
SharedOverride;
44+
45+
const AnimatedNativeScreen = Animated.createAnimatedComponent(
46+
NativeScreen as React.ComponentType<NativeScreenOverrideProps>,
47+
);
48+
const AnimatedNativeModalScreen = Animated.createAnimatedComponent(
49+
ModalScreenNative as React.ComponentType<NativeModalScreenOverrideProps>,
50+
);
2451

2552
// Incomplete type, all accessible properties available at:
2653
// react-native/Libraries/Components/View/ReactNativeViewViewConfig.js

src/fabric/ModalScreenNativeComponent.ts

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,6 @@ import type {
1313
// eslint-disable-next-line @typescript-eslint/ban-types
1414
type ScreenEvent = Readonly<{}>;
1515

16-
type ScreenTargetEvent = Readonly<{
17-
target: Int32;
18-
}>;
19-
2016
type ScreenDismissedEvent = Readonly<{
2117
dismissCount: Int32;
2218
}>;
@@ -70,12 +66,12 @@ type SwipeDirection = 'vertical' | 'horizontal';
7066
type ReplaceAnimation = 'pop' | 'push';
7167

7268
export interface NativeProps extends ViewProps {
73-
onAppear?: DirectEventHandler<ScreenTargetEvent>;
74-
onDisappear?: DirectEventHandler<ScreenTargetEvent>;
69+
onAppear?: DirectEventHandler<ScreenEvent>;
70+
onDisappear?: DirectEventHandler<ScreenEvent>;
7571
onDismissed?: DirectEventHandler<ScreenDismissedEvent>;
7672
onNativeDismissCancelled?: DirectEventHandler<ScreenDismissedEvent>;
77-
onWillAppear?: DirectEventHandler<ScreenTargetEvent>;
78-
onWillDisappear?: DirectEventHandler<ScreenTargetEvent>;
73+
onWillAppear?: DirectEventHandler<ScreenEvent>;
74+
onWillDisappear?: DirectEventHandler<ScreenEvent>;
7975
onHeaderHeightChange?: DirectEventHandler<HeaderHeightChangeEvent>;
8076
onTransitionProgress?: DirectEventHandler<TransitionProgressEvent>;
8177
onGestureCancel?: DirectEventHandler<ScreenEvent>;

src/fabric/ScreenNativeComponent.ts

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,6 @@ import type {
1313
// eslint-disable-next-line @typescript-eslint/ban-types
1414
type ScreenEvent = Readonly<{}>;
1515

16-
type ScreenTargetEvent = Readonly<{
17-
target: Int32;
18-
}>;
19-
2016
type ScreenDismissedEvent = Readonly<{
2117
dismissCount: Int32;
2218
}>;
@@ -70,12 +66,12 @@ type SwipeDirection = 'vertical' | 'horizontal';
7066
type ReplaceAnimation = 'pop' | 'push';
7167

7268
export interface NativeProps extends ViewProps {
73-
onAppear?: DirectEventHandler<ScreenTargetEvent>;
74-
onDisappear?: DirectEventHandler<ScreenTargetEvent>;
69+
onAppear?: DirectEventHandler<ScreenEvent>;
70+
onDisappear?: DirectEventHandler<ScreenEvent>;
7571
onDismissed?: DirectEventHandler<ScreenDismissedEvent>;
7672
onNativeDismissCancelled?: DirectEventHandler<ScreenDismissedEvent>;
77-
onWillAppear?: DirectEventHandler<ScreenTargetEvent>;
78-
onWillDisappear?: DirectEventHandler<ScreenTargetEvent>;
73+
onWillAppear?: DirectEventHandler<ScreenEvent>;
74+
onWillDisappear?: DirectEventHandler<ScreenEvent>;
7975
onHeaderHeightChange?: DirectEventHandler<HeaderHeightChangeEvent>;
8076
onTransitionProgress?: DirectEventHandler<TransitionProgressEvent>;
8177
onGestureCancel?: DirectEventHandler<ScreenEvent>;

0 commit comments

Comments
 (0)