airbridge-react-native-sdk
Version:
Airbridge SDK for React Native
57 lines (44 loc) • 1.53 kB
text/typescript
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,
}
}