react-native-reanimated
Version:
More powerful alternative to Animated library for React Native.
156 lines (137 loc) • 4.07 kB
text/typescript
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);
}
}