diff --git a/.gitignore b/.gitignore index 485dee6..5b04c74 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ .idea +node_modules/ diff --git a/index.js b/index.js index 5d1ca37..b6068de 100644 --- a/index.js +++ b/index.js @@ -1,68 +1,12 @@ /** * Created by lvbingru on 1/5/16. + * Modified by flavordaave on 3/8/17 */ import {NativeModules, NativeAppEventEmitter} from 'react-native'; -import promisify from 'es6-promisify'; const {WeiboAPI} = NativeModules; -// Used only with promisify. Transform callback to promise result. -function translateError(err, result) { - if (!err) { - return this.resolve(result); - } - if (typeof err === 'object') { - if (err instanceof Error) { - return this.reject(ret); - } - return this.reject(Object.assign(new Error(err.message), { errCode: err.errCode })); - } else if (typeof err === 'string') { - return this.reject(new Error(err)); - } - this.reject(Object.assign(new Error(), { origin: err })); -} - -function wrapApi(nativeFunc) { - if (!nativeFunc) { - return undefined; - } - const promisified = promisify(nativeFunc, translateError); - return (...args) => { - return promisified(...args); - }; -} - -// Save callback and wait for future event. -let savedCallback = undefined; -function waitForResponse(type) { - return new Promise((resolve, reject) => { - if (savedCallback) { - savedCallback('User canceled.'); - } - savedCallback = result => { - if (result.type !== type) { - return; - } - savedCallback = undefined; - if (result.errCode !== 0) { - const err = new Error(result.errMsg); - err.errCode = result.errCode; - reject(err); - } else { - resolve(result); - } - }; - }); -} - -NativeAppEventEmitter.addListener('Weibo_Resp', resp => { - const callback = savedCallback; - savedCallback = undefined; - callback && callback(resp); -}); - - const defaultScope = "all" const defaultRedirectURI = "https://api.weibo.com/oauth2/default.html" @@ -75,16 +19,33 @@ function checkData(data) { } } -const nativeSendAuthRequest = wrapApi(WeiboAPI.login); -const nativeSendMessageRequest = wrapApi(WeiboAPI.shareToWeibo); +function promiseBody(type, resolve, reject) { + NativeAppEventEmitter.on('Weibo_Resp', result => { + if (result.type === type) { + if (result.errCode !== 0) { + const err = new Error(result.errMsg); + err.errCode = result.errCode; + reject(err); + } else { + resolve(result); + } + } + }) +} export function login(config={}) { - checkData(config) - return Promise.all([waitForResponse('WBAuthorizeResponse'), nativeSendAuthRequest(config)]).then(v=>v[0]); + checkData(config) + return new Promise((resolve, reject) => { + promiseBody('WBAuthorizeResponse', resolve, reject) + WeiboAPI.login(config, ()=>{}) + }) } export function share(data) { - checkData(data) - return Promise.all([waitForResponse('WBSendMessageToWeiboResponse'), nativeSendMessageRequest(data)]).then(v=>v[0]); -} + checkData(data) + return new Promise((resolve, reject) => { + promiseBody('WBSendMessageToWeiboResponse', resolve, reject) + WeiboAPI.login(config, null) + }) +} diff --git a/ios/RCTWeiboAPI/RCTWeiboAPI.h b/ios/RCTWeiboAPI/RCTWeiboAPI.h index 8db7a56..0f5308e 100644 --- a/ios/RCTWeiboAPI/RCTWeiboAPI.h +++ b/ios/RCTWeiboAPI/RCTWeiboAPI.h @@ -6,7 +6,7 @@ // Copyright © 2016 erica. All rights reserved. // -#import "RCTBridgeModule.h" +#import @interface RCTWeiboAPI : NSObject diff --git a/package.json b/package.json index 5bc592b..d94cc3d 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,5 @@ "url": "https://github.com/reactnativecn/react-native-weibo/issues" }, "homepage": "https://github.com/reactnativecn/react-native-weibo#readme", - "dependencies": { - "es6-promisify": "^3.0.0" - } + "dependencies": {} }