You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

43 lines
1.2 KiB

import React, { PropsWithChildren } from 'react';
import { View } from 'react-native';
import { ScreenProps, ScreenContext } from 'react-native-screens';
import ReanimatedNativeStackScreen from './ReanimatedNativeStackScreen';
import AnimatedScreen from './ReanimatedScreen';
class ReanimatedScreenWrapper extends React.Component<ScreenProps> {
private ref: React.ElementRef<typeof View> | null = null;
setNativeProps(props: ScreenProps): void {
this.ref?.setNativeProps(props);
}
setRef = (ref: React.ElementRef<typeof View> | null): void => {
this.ref = ref;
this.props.onComponentRef?.(ref);
};
render() {
const ReanimatedScreen = this.props.isNativeStack
? ReanimatedNativeStackScreen
: AnimatedScreen;
return (
<ReanimatedScreen
{...this.props}
// @ts-ignore some problems with ref
ref={this.setRef}
/>
);
}
}
export default function ReanimatedScreenProvider(
props: PropsWithChildren<unknown>
) {
return (
// eslint-disable-next-line @typescript-eslint/no-explicit-any
<ScreenContext.Provider value={ReanimatedScreenWrapper as any}>
{props.children}
</ScreenContext.Provider>
);
}