'use strict'; import type { NativeSyntheticEvent } from 'react-native'; import type { EventPayload, IWorkletEventHandler, ReanimatedEvent, } from './hook/commonTypes'; type JSEvent = NativeSyntheticEvent>; // In JS implementation (e.g. for web) we don't use Reanimated's // event emitter, therefore we have to handle here // the event that came from React Native and convert it. function jsListener( eventName: string, handler: (event: ReanimatedEvent) => void ) { return (evt: JSEvent) => { handler({ ...evt.nativeEvent, eventName } as ReanimatedEvent); }; } export class WorkletEventHandler< Event extends object, > implements IWorkletEventHandler { eventNames: string[]; listeners: | Record>) => void> | Record) => void>; worklet: (event: ReanimatedEvent) => void; constructor( worklet: (event: ReanimatedEvent) => void, eventNames: string[] = [] ) { this.worklet = worklet; this.eventNames = eventNames; this.listeners = {}; this.setupWebListeners(); } setupWebListeners() { this.listeners = {}; this.eventNames.forEach((eventName) => { this.listeners[eventName] = jsListener(eventName, this.worklet); }); } updateEventHandler( newWorklet: (event: ReanimatedEvent) => void, newEvents: string[] ): void { // Update worklet and event names this.worklet = newWorklet; this.eventNames = newEvents; this.setupWebListeners(); } registerForEvents(_viewTag: number, _fallbackEventName?: string): void { // noop } unregisterFromEvents(_viewTag: number): void { // noop } }