UNPKG

react-native-reanimated

Version:

More powerful alternative to Animated library for React Native.

51 lines (44 loc) 1.36 kB
// eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-nocheck import NativeModule from './NativeReanimated'; const jsListener = (eventName, handler) => (evt) => { handler({ ...evt.nativeEvent, eventName }); }; export default class WorkletEventHandler { constructor(worklet, eventNames = []) { this.worklet = worklet; this.eventNames = eventNames; this.reattachNeeded = false; if (!NativeModule.native) { this.listeners = eventNames.reduce((acc, eventName) => { acc[eventName] = jsListener(eventName, worklet); return acc; }, {}); } } updateWorklet(newWorklet) { this.worklet = newWorklet; this.reattachNeeded = true; } registerForEvents(viewTag, fallbackEventName = undefined) { this.viewTag = viewTag; this.registrations = this.eventNames.map((eventName) => NativeModule.registerEventHandler(viewTag + eventName, this.worklet) ); if (this.registrations.length === 0 && fallbackEventName) { this.registrations.push( NativeModule.registerEventHandler( viewTag + fallbackEventName, this.worklet ) ); } } unregisterFromEvents() { this.registrations && this.registrations.forEach((id) => NativeModule.unregisterEventHandler(id) ); this.registrations = undefined; } }