UNPKG

react-native-reanimated

Version:

More powerful alternative to Animated library for React Native.

156 lines (137 loc) 4.07 kB
import { NativeModules } from 'react-native'; import { ShareableRef, ShareableSyncDataHolderRef, Value3D, ValueRotation, } from '../commonTypes'; import { LayoutAnimationFunction, LayoutAnimationType, } from '../layoutReanimation'; import { checkVersion } from '../platform-specific/checkVersion'; export class NativeReanimated { native: boolean; private InnerNativeModule: any; constructor(native = true) { if (global.__reanimatedModuleProxy === undefined && native) { const { ReanimatedModule } = NativeModules; ReanimatedModule?.installTurboModule(); } this.InnerNativeModule = global.__reanimatedModuleProxy; this.native = native; if (native) { if (this.InnerNativeModule === undefined) { console.error( `[Reanimated] The native part of Reanimated doesn't seem to be initialized. This could be caused by\n\ - not rebuilding the app after installing or upgrading Reanimated\n\ - trying to run Reanimated on an unsupported platform\n\ - running in a brownfield app without manually initializing the native library` ); return; } checkVersion(); } } installCoreFunctions( callGuard: <T extends Array<any>, U>( fn: (...args: T) => U, ...args: T ) => void, valueUnpacker: <T>(value: T) => T ): void { return this.InnerNativeModule.installCoreFunctions( callGuard, valueUnpacker ); } makeShareableClone<T>( value: T, shouldPersistRemote: boolean ): ShareableRef<T> { return this.InnerNativeModule.makeShareableClone( value, shouldPersistRemote ); } makeSynchronizedDataHolder<T>( valueRef: ShareableRef<T> ): ShareableSyncDataHolderRef<T> { return this.InnerNativeModule.makeSynchronizedDataHolder(valueRef); } getDataSynchronously<T>(ref: ShareableSyncDataHolderRef<T>): T { return this.InnerNativeModule.getDataSynchronously(ref); } updateDataSynchronously<T>( ref: ShareableSyncDataHolderRef<T>, value: T ): void { this.InnerNativeModule.updateDataSynchronously(ref, value); } scheduleOnUI<T>(shareable: ShareableRef<T>) { return this.InnerNativeModule.scheduleOnUI(shareable); } registerSensor<T>( sensorType: number, interval: number, iosReferenceFrame: number, handler: ShareableRef<T> | ((data: Value3D | ValueRotation) => void) ) { return this.InnerNativeModule.registerSensor( sensorType, interval, iosReferenceFrame, handler ); } unregisterSensor(sensorId: number) { return this.InnerNativeModule.unregisterSensor(sensorId); } registerEventHandler<T>( eventHash: string, eventHandler: ShareableRef<T> ): string { return this.InnerNativeModule.registerEventHandler(eventHash, eventHandler); } unregisterEventHandler(id: string): void { return this.InnerNativeModule.unregisterEventHandler(id); } getViewProp<T>( viewTag: string, propName: string, callback?: (result: T) => void ): Promise<T> { return this.InnerNativeModule.getViewProp(viewTag, propName, callback); } configureLayoutAnimation( viewTag: number, type: LayoutAnimationType, sharedTransitionTag: string, config: ShareableRef<Keyframe | LayoutAnimationFunction> ) { this.InnerNativeModule.configureLayoutAnimation( viewTag, type, sharedTransitionTag, config ); } enableLayoutAnimations(flag: boolean): void { this.InnerNativeModule.enableLayoutAnimations(flag); } configureProps(uiProps: string[], nativeProps: string[]): void { this.InnerNativeModule.configureProps(uiProps, nativeProps); } subscribeForKeyboardEvents( handler: ShareableRef<number>, isStatusBarTranslucent: boolean ): number { return this.InnerNativeModule.subscribeForKeyboardEvents( handler, isStatusBarTranslucent ); } unsubscribeFromKeyboardEvents(listenerId: number): void { this.InnerNativeModule.unsubscribeFromKeyboardEvents(listenerId); } }