airbridge-react-native-sdk
Version:
Airbridge SDK for React Native
60 lines (46 loc) • 1.56 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 DeeplinkInteractor = {
listen(): void
}
export type DeeplinkModuleDependency = ReturnType<typeof createDependency.DeeplinkModule>
createDependency.DeeplinkModule = () => ({
emitter: new NativeEventEmitter(NativeModules.DeeplinkInteractor),
interactor: createInteractor<DeeplinkInteractor>(NativeModules.DeeplinkInteractor),
})
export type DeeplinkModule = ReturnType<typeof createDeeplinkModule>
export const createDeeplinkModule = () => {
// create dependency
const { emitter, interactor } = createDependency.DeeplinkModule()
// define member
let cache: string | undefined
let listener: (deeplink: string) => void = (deeplink) => {
cache = deeplink
}
// initialize
emitter.addListener('airbridge.deeplink', (deeplink) => {
listener(deeplink)
})
interactor.listen()
// define method
const setOnDeeplinkReceived = (
onReceived: (deeplink: string) => void,
): void => {
if (!check.function(onReceived)) {
log.unmatchedType('onReceived', 'function')
return
}
if (cache !== undefined) {
onReceived(cache)
cache = undefined
}
listener = onReceived
}
// create object
return {
setOnDeeplinkReceived,
}
}