UNPKG

airbridge-react-native-sdk

Version:

Airbridge SDK for React Native

57 lines (44 loc) 1.53 kB
import { NativeModules, NativeEventEmitter } from 'react-native' import { createInteractor } from '../architecture/Interactor' import { check } from '../utility/check' import { log } from '../utility/log' export const createDependency = () => {} type AttributionInteractor = { listen(): void } createDependency.AttributionModule = () => ({ emitter: new NativeEventEmitter(NativeModules.AttributionInteractor), interactor: createInteractor<AttributionInteractor>(NativeModules.AttributionInteractor), }) export type AttributionModule = ReturnType<typeof createAttributionModule> export const createAttributionModule= () => { // create dependency const { emitter, interactor } = createDependency.AttributionModule() let cache: Record<string, string> | undefined let listener: (result: Record<string, string>) => void = (result) => { cache = result } // initialize emitter.addListener('airbridge.attribution', (result) => { listener(result) }) interactor.listen() // define method const setOnAttributionReceived = ( onReceived: (attribution: Record<string, string>) => void, ): void => { if (!check.function(onReceived)) { log.unmatchedType('onReceived', 'function') return } if (cache !== undefined) { onReceived(cache) cache = undefined } listener = onReceived } // create object return { setOnAttributionReceived, } }