UNPKG

react-native-inke

Version:
110 lines (95 loc) 2.88 kB
'use strict'; /* * @Author: Mr.Zhang * @Date: 2017-09-14 09:04:08 */ import { DeviceEventEmitter, NativeModules, Platform } from 'react-native'; import { EventEmitter } from 'events'; let isAppRegistered = false; const { Inke } = NativeModules; // Event emitter to dispatch request and response from Inke. const emitter = new EventEmitter(); DeviceEventEmitter.addListener('Inke Resp', resp => { emitter.emit(resp.type, resp); }); function wrapRegisterApp(nativeFunc) { if (!nativeFunc) { return undefined; } return (...args) => { if (isAppRegistered) { return Promise.resolve(true); } isAppRegistered = true; return new Promise((resolve, reject) => { nativeFunc.apply(null, [ ...args, (error, result) => { if (!error) { return resolve(result); } if (typeof error === 'string') { return reject(new Error(error)); } reject(error); }, ]); }); } } function wrapApi(nativeFunc) { if (!nativeFunc) { return undefined; } return (...args) => { if (!isAppRegistered) { return Promise.reject(new Error('registerApp required.')); } return new Promise((resolve, reject) => { nativeFunc.apply(null, [ ...args, (error, result) => { if (!error) { return resolve(result); } if (typeof error === 'string') { return reject(new Error(error)); } reject(error); }, ]); }); } } /** * `addListener` inherits from `events` module * @method addListener * @param {String} eventName - the event name * @param {Function} trigger - the function when event is fired */ export const addListener = emitter.addListener.bind(emitter); /** * `once` inherits from `events` module * @method once * @param {String} eventName - the event name * @param {Function} trigger - the function when event is fired */ export const once = emitter.once.bind(emitter); /** * `removeAllListeners` inherits from `events` module * @method removeAllListeners * @param {String} eventName - the event name */ export const removeAllListeners = emitter.removeAllListeners.bind(emitter); /** * @method registerApp * @param {String} appId - the app id * @return {Promise} */ export const registerApp = wrapRegisterApp(Inke.registerApp); /** * Return if the inke app is installed in the device. * @method isInkeAppInstalled * @return {Promise} */ export const isInkeAppInstalled = wrapApi(Inke.isInkeAppInstalled);