package co.ab180.airbridge.reactnative.module import com.facebook.react.bridge.ReactApplicationContext import com.facebook.react.bridge.ReactContext import com.facebook.react.bridge.ReactContextBaseJavaModule import com.facebook.react.bridge.ReactMethod import com.facebook.react.bridge.ReadableMap import com.facebook.react.bridge.WritableNativeMap import com.facebook.react.modules.core.DeviceEventManagerModule import java.lang.ref.WeakReference internal class AttributionInteractor( reactContext: ReactApplicationContext? ) : ReactContextBaseJavaModule(reactContext) { companion object { private var initialAttribution: Map? = null internal var onAttributionReceived: (Map) -> Unit = { initialAttribution = it } } override fun getName(): String = "AttributionInteractor" @ReactMethod fun listen() { val weakThis = WeakReference(this) if (initialAttribution != null) { weakThis.get()?.reactApplicationContext ?.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter::class.java) ?.emit("airbridge.attribution", initialAttribution?.toReadableMap()) initialAttribution = null } onAttributionReceived = { attribution -> weakThis.get()?.reactApplicationContext ?.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter::class.java) ?.emit("airbridge.attribution", attribution.toReadableMap()) } } @ReactMethod fun addListener(eventName: String) {} @ReactMethod fun removeListeners(count: Int) {} } private fun Map.toReadableMap(): ReadableMap { val map = WritableNativeMap() for (entry in this.entries) { map.putString(entry.key, entry.value) } return map }