Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
.idea
node_modules/
89 changes: 25 additions & 64 deletions index.js
Original file line number Diff line number Diff line change
@@ -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"

Expand All @@ -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)
})
}
2 changes: 1 addition & 1 deletion ios/RCTWeiboAPI/RCTWeiboAPI.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
// Copyright © 2016 erica. All rights reserved.
//

#import "RCTBridgeModule.h"
#import <React/RCTBridgeModule.h>

@interface RCTWeiboAPI : NSObject<RCTBridgeModule>

Expand Down
4 changes: 1 addition & 3 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -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": {}
}