UNPKG

airbridge-react-native-sdk

Version:

Airbridge SDK for React Native

60 lines (46 loc) 1.56 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 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, } }